Improved session handling and other changes

CSS simplifications, user-defined config, etc.
This commit is contained in:
Sascha Leib
2025-09-12 15:38:28 +02:00
parent 77e52020f2
commit b148c85e51
74 changed files with 622 additions and 1432 deletions

View File

@@ -23,6 +23,10 @@ class action_plugin_botmon extends DokuWiki_Action_Plugin {
$controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'insertHeader');
}
/* session information */
private $sessionId = 'unset';
private $sessionType = '';
/**
* Inserts tracking code to the page header
*
@@ -33,12 +37,15 @@ class action_plugin_botmon extends DokuWiki_Action_Plugin {
global $INFO;
// populate the session id and type:
$this->getSessionInfo();
// is there a user logged in?
$username = ( !empty($INFO['userinfo']) && !empty($INFO['userinfo']['name'])
? $INFO['userinfo']['name'] : '');
// build the tracker code:
$code = NL . DOKU_TAB . "document._botmon = {'t0': Date.now()};" . NL;
$code = NL . DOKU_TAB . "document._botmon = {'t0': Date.now(), 'session': '" . json_encode($this->sessionId) . "'};" . NL;
if ($username) {
$code .= DOKU_TAB . 'document._botmon.user = "' . $username . '";'. NL;
}
@@ -68,22 +75,11 @@ class action_plugin_botmon extends DokuWiki_Action_Plugin {
global $conf;
global $INFO;
// what is the session identifier?
$sessionId = $_COOKIE['DokuWiki'] ?? '';
$sessionType = 'dw';
if ($sessionId == '') {
$sessionId = $_SERVER['REMOTE_ADDR'] ?? '';
if ($sessionId == '127.0.0.1' || $sessionId == '::1') {
$sessionId = 'localhost';
}
$sessionType = 'ip';
}
// clean the page ID
$pageId = preg_replace('/[\x00-\x1F]/', "\u{FFFD}", $INFO['id'] ?? '');
// collect GeoIP information (if available):
$geoIp = 'XX'; /* User-defined code for unknown country */
$geoIp = ( $this->sessionId == 'localhost' ? 'local' : 'ZZ' ); /* User-defined code for unknown country */
try {
if (extension_loaded('geoip') && geoip_db_avail(GEOIP_COUNTRY_EDITION)) {
$geoIp = geoip_country_code_by_name($_SERVER['REMOTE_ADDR']);
@@ -98,8 +94,8 @@ class action_plugin_botmon extends DokuWiki_Action_Plugin {
$logArr = Array(
$_SERVER['REMOTE_ADDR'] ?? '', /* remote IP */
$pageId, /* page ID */
$sessionId, /* Session ID */
$sessionType, /* session ID type */
$this->sessionId, /* Session ID */
$this->sessionType, /* session ID type */
$username,
$_SERVER['HTTP_USER_AGENT'] ?? '', /* User agent */
$_SERVER['HTTP_REFERER'] ?? '', /* HTTP Referrer */
@@ -126,4 +122,31 @@ class action_plugin_botmon extends DokuWiki_Action_Plugin {
/* Done */
fclose($logfile);
}
private function getSessionInfo() {
// what is the session identifier?
if (isset($_SESSION)) {
$sesKeys = array_keys($_SESSION); /* DokuWiki Session ID preferred */
foreach ($sesKeys as $key) {
if (substr($key, 0, 2) == 'DW') {
$this->sessionId = $key;
$this->sessionType = 'dw';
return;
}
}
}
if ($this->sessionId == '') { /* no DokuWiki Session ID, try PHP session ID */
$this->sessionId = session_id();
$this->sessionType = 'php';
}
if ($this->sessionId == '') { /* no PHP session ID, try IP address */
$this->sessionId = $_SERVER['REMOTE_ADDR'] ?? '';
$this->sessionType = 'ip';
}
if ($this->sessionId == '') { /* if everything else fails, just us a random ID */
$this->sessionId = rand(1000000, 9999999);
$this->sessionType = 'rand';
}
}
}

View File

@@ -32,6 +32,9 @@ class admin_plugin_botmon extends AdminPlugin {
global $conf;
// spinner animation as SVG image:
$svg = '<svg width="12" height="12" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg" id="botmon__today__busy"><defs><linearGradient id="gradient" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" stop-color="#666"></stop><stop offset="100%" stop-color="#666"></stop></linearGradient></defs><circle cx="25" cy="25" r="20" fill="none" stroke="url(#gradient)" stroke-width="8" stroke-dasharray="31.4 31.4"><animateTransform attributeName="transform" type="rotate" from="0 25 25" to="360 25 25" dur="1s" repeatCount="indefinite"></animateTransform></circle></svg>';
$pluginPath = $conf['basedir'] . 'lib/plugins/' . $this->getPluginName();
/* Plugin Headline */
@@ -44,7 +47,7 @@ class admin_plugin_botmon extends AdminPlugin {
</nav>';
if ($this->hasOldLogFiles()) {
echo '<div class="info"><strong>Note:</strong> There are old log files that can be deleted. <a href="/' . $pluginPath . '/cleanup.php" target="_blank">Click here</a> to run a delete script, or use <em>cron</em> to automatically delete them.</div>';
echo '<div class="info"><strong>Note:</strong> There are old log files that can be deleted. <a href="' . $pluginPath . '/cleanup.php" target="_blank">Click here</a> to run a delete script, or use <em>cron</em> to automatically delete them.</div>';
}
echo '<article role="tabpanel" id="botmon__today"">
@@ -75,7 +78,7 @@ class admin_plugin_botmon extends AdminPlugin {
</details>
</div>
<footer aria-live="polite">
<img src="/' . $pluginPath . '/img/spinner.svg" id="botmon__today__busy" width="12" height="12" alt="busy indicator">
<span>' . $svg . '</span>
<span id="botmon__today__status">Initialising&nbsp;&hellip;</span>
</footer>
</article>

View File

@@ -24,8 +24,9 @@ botmon_client = {
const visit = {
'pg': JSINFO.id,
'u': document._botmon.user || null,
'lg': navigator.language,
'lg': navigator.language.substring(0,2),
'lt': ( document._botmon ? Date.now() - document._botmon.t0 : null),
'id': (document._botmon.session || 'null').replaceAll('\"', ''),
'r': document.referrer /*,
'tz': new Date().getTimezoneOffset(),
'url': window.location.href,
@@ -55,10 +56,15 @@ botmon_client = {
//console.info('botmon_client._onHeartbeat', url);
let uid = document._botmon.user || null;
let sessionId = (document._botmon.session || 'null').replaceAll('\"', '')
try {
const response = await fetch(url + '?p=' + encodeURIComponent(JSINFO.id) + '&t=' + Date.now() + ( uid ? '&u=' + encodeURIComponent(uid) : ''), {
method: 'HEAD'
const req = '?p=' + encodeURIComponent(JSINFO.id)
+ '&t=' + encodeURIComponent(Date.now())
+ ( sessionId ? '&id=' + encodeURIComponent(sessionId) : '')
+ ( uid ? '&u=' + encodeURIComponent(uid) : '');
const response = await fetch(url + req, {
/*method: 'HEAD'*/
});
if (!response.ok) {
throw new Error(response.status + ' ' + response.statusText + ' - ' + url);

View File

@@ -65,8 +65,8 @@
"id": "isFrom", "desc": "Location is in a known bot-spamming country.",
"bot": 50
},
{"func": "notFromCountry", "params": ["DE", "AT", "CH", "LI", "LU", "BE"],
"id": "notFromHere", "desc": "Location is not among the sites main target countries.",
{"func": "matchesCountry", "params": ["ZZ"],
"id": "zzCtry", "desc": "Location could not be determined",
"bot": 20
}
],

View File

@@ -1,17 +1,17 @@
[ {"id": "bingbot",
"n": "Bing Bot",
"n": "BingBot",
"r": ["bingbot"],
"rx": ["\\sbingbot\\/(\\d+\\.\\d+);"],
"url": "http://www.bing.com/bingbot.htm"
},
{"id": "googlebot",
"n": "Google Bot",
"n": "GoogleBot",
"r": ["Googlebot"],
"rx": ["Googlebot\\/(\\d+\\.\\d+)", "Googlebot-Image\\/(\\d+\\.\\d+)"],
"url": "http://www.google.com/bot.html"
},
{"id": "googleads",
"n": "Google Ads Bot",
"n": "Google Ads",
"r": ["AdsBot-Google", "AdsBot-Google-Mobile", "Mediapartners-Google"],
"rx": ["AdsBot-Google;","AdsBot-Google-Mobile;", "Mediapartners-Google\\/(\\d+\\.\\d+);"],
"url": "https://developers.google.com/search/docs/crawling-indexing/google-special-case-crawlers"
@@ -35,31 +35,31 @@
"url": "http://help.yahoo.com/help/us/ysearch/slurp"
},
{"id": "ddg",
"n": "DuckDuckGo Bots",
"n": "DuckDuckGo",
"r": ["DuckDuckBot","DuckAssistBot","DuckDuckGo-Favicons-Bot"],
"rx": ["DuckDuckBot\\/(\\d+\\.\\d+);", "DuckAssistBot\\/(\\d+\\.\\d+);", "DuckDuckGo-Favicons-Bot\\/(\\d+\\.\\d+);"],
"url": "https://duckduckgo.com/duckduckbot.html"
},
{"id": "openai",
"n": "OpenAI/ChatGPT Bots",
"n": "OpenAI/ChatGPT",
"r": ["OAI-SearchBot", "ChatGPT-User", "GPTBot"],
"rx": ["OAI-SearchBot\\/(\\d+\\.\\d+);", "ChatGPT-User\\/(\\d+\\.\\d+);", "GPTBot\\/(\\d+\\.\\d+);"],
"url": "https://platform.openai.com/docs/bots/"
},
{"id": "claude",
"n": "Anthropic Claude Bots",
"n": "Anthropic Claude",
"r": ["ClaudeBot", "Claude-User", "Claude-SearchBot"],
"rx": ["ClaudeBot\\/(\\d+\\.\\d+);"],
"url": "https://darkvisitors.com/agents/claudebot"
},
{"id": "perplexity",
"n": "Perplexity Crawlers",
"n": "Perplexity",
"r": ["PerplexityBot", "PerplexityUser"],
"rx": ["PerplexityBot\\/(\\d+\\.\\d+);", "PerplexityUser\\/(\\d+\\.\\d+);"],
"url": "https://perplexity.ai/perplexitybot"
},
{"id": "metabots",
"n": "Meta/Facebook Bots",
"n": "Meta/Facebook",
"r": ["facebookexternalhit", "facebookcatalog","meta-webindexer","meta-externalads","meta-externalagent","meta-externalfetcher"],
"rx": ["facebook\\w+\\/(\\d+\\.\\d+)", "meta-\\w+\\/(\\d+\\.\\d+)"],
"url": "https://developers.facebook.com/docs/sharing/webmasters/crawler"
@@ -71,43 +71,43 @@
"url": "https://help.qwant.com/bot/"
},
{"id": "yandex",
"n": "Yandex Bots",
"n": "Yandex", "geo": "CN",
"r": ["YandexBot", "YandexAdNet", "YandexBlogs", "YandexImages", "YandexImageResizer", "YandexMarket", "YandexMedia", "YandexOntoDB", "YandexSitelinks","YandexSpravBot", "YandexVertis", "YandexVerticals", "YandexVideo", "YandexWebmaster", "YandexComBot"],
"rx": ["Yandex\\w+\\/(\\d+\\.\\d+);"],
"url": "http://yandex.com/bots"
},
{"id": "seznambot",
"n": "SeznamBot (CZ)",
"n": "SeznamBot", "geo": "CZ",
"r": ["SeznamBot"],
"rx": ["SeznamBot\\/(\\d+\\.\\d+);"],
"url": "https://o-seznam.cz/napoveda/vyhledavani/en/seznambot-crawler/"
},
{"id": "ahrefs",
"n": "Ahrefs Bots (SEO/marketing)",
"n": "Ahrefs",
"r": ["AhrefsBot", "AhrefsSiteAudit"],
"rx": ["AhrefsBot\\/(\\d+\\.\\d+);", "AhrefsSiteAudit\\/(\\d+\\.\\d+);"],
"url": "https://ahrefs.com/robot/"
},
{"id": "ccbot",
"n": "Common Crawl Bot (AI-Scraper)",
"n": "CommonCrawl Bot",
"r": ["CCBot"],
"rx": ["CCBot\\/(\\d+\\.\\d+)[\\s\\.;]*"],
"url": "https://commoncrawl.org/bot.html"
},
{"id": "mjbot",
"n": "Majestic Crawler (UK)",
"n": "Majestic Crawler (UK)", "geo": "GB",
"r": ["MJ12bot"],
"rx": ["MJ12bot\\/v?(\\d+\\.\\d+)[\\s\\.;]"],
"url": "http://www.majestic12.co.uk/bot.php"
},
{"id": "petal",
"n": "PetalSearch Bot (CN)",
"n": "PetalSearch Bot (CN)", "geo": "CN",
"r": ["PetalBot", "AspiegelBot"],
"rx": ["[\\s;]PetalBot[\\s\\/;]", "AspiegelBot[\\)$]"],
"url": "https://webmaster.petalsearch.com/site/petalbot"
},
{"id": "barkrowler",
"n": "Barkrowler (Babbar Bot)",
"n": "Barkrowler (Babbar)",
"r": ["Barkrowler"],
"rx": ["[\\s;^]Barkrowler\\/(\\d+\\.\\d+)?"],
"url": "https://babbar.tech/crawler"
@@ -119,7 +119,7 @@
"url": "http://www.semrush.com/bot.html"
},
{"id": "bytespider",
"n": "Bytespider (ByteDance, TikTok)",
"n": "Bytespider (ByteDance, TikTok)", "geo": "CN",
"r": ["Bytespider"],
"rx": ["Bytespider[;$]"],
"url": "https://darkvisitors.com/agents/bytespider"
@@ -143,7 +143,7 @@
"url": "https://serpstatbot.com/"
},
{"id": "netestate",
"n": "netEstate NE Crawler (DE)",
"n": "netEstate NE Crawler", "geo": "DE",
"r": ["netEstate NE Crawler"],
"rx": ["netEstate NE Crawler\\s"],
"url": "http://www.website-datenbank.de/"
@@ -167,7 +167,7 @@
"url": "https://darkvisitors.com/agents/mauibot"
},
{"id": "plagaware",
"n": "PlagAwareBot (DE)",
"n": "PlagAwareBot (DE)", "geo": "DE",
"r": ["PlagAwareBot"],
"rx": ["PlagAwareBot\\/(\\d\\.\\d)"],
"url": "https://www.plagaware.com/bot"
@@ -213,5 +213,11 @@
"r": ["TerraCotta"],
"rx": ["TerraCotta"],
"url": "https://github.com/CeramicTeam/CeramicTerracotta"
},
{"id": "tiktok",
"n": "TikTok Spider", "geo": "CN",
"r": ["TikTokSpider"],
"rx": ["TikTokSpider"],
"url": "https://darkvisitors.com/agents/tiktokspider"
}
]

BIN
img/addr.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 806 B

View File

@@ -1 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><g><rect x="0" y="0" width="24" height="24" style="fill:#fff;fill-opacity:0;"/><path d="M5.513,6.543c-0.045,-2.801 2.785,-5.101 6.321,-5.136c3.536,-0.036 6.439,2.205 6.484,5.006c0.001,0.022 0.001,0.043 0.001,0.065l-12.806,0.065Z" style="fill:#78c557;"/><path d="M8.588,4.087c-0.001,-0.352 0.289,-0.637 0.646,-0.637c0.358,0 0.647,0.285 0.647,0.637c0,0.353 -0.289,0.638 -0.647,0.638c-0.357,0 -0.647,-0.285 -0.647,-0.638Z" style="fill:#fff;"/><path d="M13.987,4.087c0,-0.352 0.294,-0.637 0.657,-0.637c0.362,0 0.656,0.285 0.656,0.637c-0,0.353 -0.294,0.638 -0.656,0.638c-0.363,0 -0.657,-0.285 -0.657,-0.638Z" style="fill:#fff;"/><path d="M7.754,0.364c-0.062,-0.085 -0.043,-0.205 0.043,-0.267c0.085,-0.061 0.204,-0.042 0.266,0.043l1.344,1.857c0.062,0.085 0.043,0.205 -0.043,0.266c-0.085,0.062 -0.205,0.043 -0.266,-0.042l-1.344,-1.857Z" style="fill:#78c557;"/><path d="M16.105,0.364c0.061,-0.086 0.042,-0.205 -0.043,-0.267c-0.085,-0.061 -0.205,-0.042 -0.267,0.043l-1.343,1.857c-0.062,0.085 -0.043,0.205 0.042,0.266l0,0c0.086,0.062 0.205,0.043 0.267,-0.042l1.344,-1.857Z" style="fill:#78c557;"/><path d="M17.089,19.125l-10.347,0c-0.679,0 -1.229,-0.55 -1.229,-1.23l-0,-10.358l12.806,0.001l-0,10.357c-0,0.68 -0.551,1.23 -1.23,1.23Z" style="fill:#78c557;"/><path d="M7.988,17.991c-0.001,-0.751 0.608,-1.36 1.359,-1.36c0.751,0 1.359,0.609 1.359,1.36l0,4.65c0,0.75 -0.608,1.359 -1.359,1.359c-0.751,0 -1.36,-0.609 -1.36,-1.359l0,-4.65Z" style="fill:#78c557;"/><path d="M13.2,17.991c-0,-0.751 0.609,-1.36 1.359,-1.36c0.751,0 1.36,0.609 1.36,1.36l-0,4.65c-0,0.75 -0.609,1.359 -1.36,1.359c-0.75,0 -1.359,-0.609 -1.359,-1.359l-0,-4.65Z" style="fill:#78c557;"/><path d="M19.331,8.897c0,-0.751 0.609,-1.36 1.36,-1.36c0.75,0 1.359,0.609 1.359,1.36l0,6.056c0,0.751 -0.609,1.36 -1.359,1.36c-0.751,-0 -1.36,-0.609 -1.36,-1.36l0,-6.056Z" style="fill:#78c557;"/><path d="M1.875,8.934c0,-0.75 0.609,-1.359 1.359,-1.359c0.751,-0 1.36,0.609 1.36,1.359l-0,6.057c-0,0.75 -0.609,1.359 -1.36,1.359c-0.75,-0 -1.359,-0.609 -1.359,-1.359l0,-6.057Z" style="fill:#78c557;"/></g></svg>

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 860 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 960 B

View File

@@ -1 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><path d="M15.435,3.92c-0.839,1.027 -2.182,1.838 -3.526,1.721c-0.167,-1.388 0.491,-2.866 1.261,-3.776c0.838,-1.056 2.307,-1.808 3.497,-1.865c0.139,1.446 -0.406,2.864 -1.232,3.92m5.536,12.196c-1.041,-0.781 -1.708,-1.673 -1.708,-2.854c0,-1.18 0.577,-1.981 1.194,-2.581c0.577,-0.562 0.792,-1.382 0.343,-2.044c-1.409,-2.077 -3.551,-2.63 -4.594,-2.63c-1.161,0 -2.05,0.358 -2.764,0.647c-0.485,0.196 -0.868,0.259 -1.216,0.259c-0.424,-0 -0.987,-0.123 -1.532,-0.331c-0.718,-0.276 -1.461,-0.56 -2.283,-0.56c-2.122,0 -3.784,1.033 -4.932,3.056c-2.281,3.911 -0.408,9.299 1.301,11.771c0.755,1.1 2.16,3.149 4.486,3.149l0.003,0c0.841,-0.031 1.427,-0.27 1.9,-0.462c0.419,-0.171 0.698,-0.284 1.207,-0.284c0.488,0 0.77,0.113 1.197,0.282c0.521,0.208 1.168,0.466 2.116,0.466c2.128,-0 3.284,-1.693 4.245,-3.1c0.924,-1.341 1.393,-2.665 1.544,-3.161c0.188,-0.545 0.154,-1.065 -0.507,-1.623Z" style="fill:url(#_Linear1);fill-rule:nonzero;"/><defs><linearGradient id="_Linear1" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.88182e-15,30.7325,-30.7325,1.88182e-15,12.0021,-5.14511)"><stop offset="0" style="stop-color:#6d6d6d;stop-opacity:1"/><stop offset="0.44" style="stop-color:#626262;stop-opacity:1"/><stop offset="0.99" style="stop-color:#464646;stop-opacity:1"/><stop offset="1" style="stop-color:#454545;stop-opacity:1"/><stop offset="1" style="stop-color:#454545;stop-opacity:1"/></linearGradient></defs></svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 41 41" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><clipPath id="_clip1"><path d="M13.656,34.626l2.421,-1.454l-0,-24.964c-0,-1.629 -0.794,-3.155 -2.127,-4.088l-5.49,-3.847c-0.991,-0.694 -2.353,0.015 -2.353,1.227l-0,28.559c-0,0.22 0.02,0.554 0.033,0.77c0.335,3.588 4.336,5.707 7.516,3.797Z" clip-rule="nonzero"/></clipPath><g clip-path="url(#_clip1)"><use xlink:href="#_Image2" x="6.107" y="0" width="10px" height="36px"/></g><clipPath id="_clip3"><path d="M28.721,25.473l-12.644,7.58l-2.421,1.454c-3.181,1.911 -7.181,-0.209 -7.517,-3.796c0.339,5.757 5.097,10.325 10.935,10.325c1.957,0 3.876,-0.535 5.551,-1.548l6.814,-4.117c0.815,-0.492 1.518,-1.073 2.144,-1.703c2.347,-2.696 1.183,-7.432 -2.862,-8.195Z" clip-rule="nonzero"/></clipPath><g clip-path="url(#_clip3)"><use xlink:href="#_Image4" x="6.139" y="25.473" width="27px" height="16px"/></g><clipPath id="_clip5"><path d="M29.672,17.154l-7.584,-3.795c-1.23,-0.616 -2.568,0.617 -2.058,1.895l1.75,5.874c0.498,1.245 1.475,2.237 2.711,2.752l4.049,1.688c4.045,0.765 5.336,5.24 3.043,8.101c4.832,-4.867 4.522,-13.296 -1.911,-16.515Z" clip-rule="nonzero"/></clipPath><g clip-path="url(#_clip5)"><use xlink:href="#_Image6" x="19.919" y="13.196" width="15px" height="21px"/></g><defs><image id="_Image2" width="10px" height="36px" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAkCAYAAACwlKv7AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAr0lEQVQ4ja2TUQ6AIAxDZ7JjeXVvBqkfKDLXDUz0B0eadrDHth8FAmnfa8VQKwoXCa7fq1apdiNyVVQbEbkqqo/hwvIh+n1C5mqFiWvvcebqhYHYXXjk2ns0zc+iBc8pp9FRv94x6JMKTfxS9OzUzDWMbq7odQN32IhcFfeT+RezhPDbZAkzjM91mXA2DTvCQoRkdZPJwWVjc9HLmBF6OOEBPRyzDLGsRy78lXAROQFrqh4leNsexwAAAABJRU5ErkJggg=="/><image id="_Image4" width="27px" height="16px" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCAAQABsDAREAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAABQYEB//EAB4QAAEEAgMBAAAAAAAAAAAAAAEABBEhAgMFIiNB/8QAGAEBAQEBAQAAAAAAAAAAAAAABQQHAwb/xAAaEQACAwEBAAAAAAAAAAAAAAAAAwECIREE/9oADAMBAAIRAxEAPwB9xqkGlqtL8MPrYGftpBpIJaVrYTPKspBpMed3BNLSa2sPTLr9TFfRgjDsO254yFnESeLiTE50gg0qV34dqWBOQayDSSS0tUwB2MvQ9UlV2F8Nw//Z"/><image id="_Image6" width="15px" height="21px" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAVCAYAAACZm7S3AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAeklEQVQ4jZ3SOw7AMAgDUJt79ew9WXGHIIrUCW9JpKfwMa/7EQCICVEAs89i1l31lsA4hwtFIVwIJsKFohAu1PnZg122A3tgDjyrMqFm2VuIb8972NN2YPXsQc2ytxAzJFvY03bgyPYeCut4frB7duAinn9Yq/KgmHgBZ0cgiNuEtkwAAAAASUVORK5CYII="/></defs></svg>

Before

Width:  |  Height:  |  Size: 2.9 KiB

BIN
img/bots.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><g id="starting-collection"><g id="Build-Icons"><g id="build-icons-Stable" serif:id="build-icons/Stable"><g id="Logo"><path id="Head" d="M21.486,5.745l0.561,-1.378c0,-0 -0.714,-0.766 -1.581,-1.634c-0.867,-0.868 -2.703,-0.358 -2.703,-0.358l-2.091,-2.375l-7.344,0l-2.091,2.375c-0,0 -1.836,-0.51 -2.703,0.358c-0.867,0.868 -1.581,1.634 -1.581,1.634l0.561,1.378l-0.714,2.043c-0,-0 2.1,7.964 2.346,8.936c0.484,1.915 0.816,2.655 2.193,3.626c1.377,0.97 3.876,2.655 4.284,2.91c0.408,0.256 0.918,0.691 1.377,0.691c0.459,-0 0.969,-0.435 1.377,-0.691c0.408,-0.255 2.907,-1.94 4.284,-2.91c1.377,-0.971 1.709,-1.711 2.193,-3.626c0.246,-0.972 2.346,-8.936 2.346,-8.936l-0.714,-2.043Z" style="fill:url(#_Linear1);"/><path id="Face" d="M17.177,3.882c-0,-0 2.689,3.255 2.689,3.951c0,0.695 -0.338,0.879 -0.678,1.241c-0.341,0.361 -1.826,1.941 -2.017,2.144c-0.191,0.203 -0.588,0.51 -0.354,1.064c0.233,0.553 0.578,1.258 0.195,1.972c-0.384,0.715 -1.04,1.192 -1.461,1.113c-0.421,-0.079 -1.409,-0.596 -1.772,-0.832c-0.364,-0.236 -1.515,-1.187 -1.515,-1.551c-0,-0.364 1.19,-1.017 1.41,-1.166c0.22,-0.148 1.223,-0.723 1.244,-0.948c0.02,-0.226 0.012,-0.292 -0.284,-0.849c-0.296,-0.557 -0.829,-1.301 -0.74,-1.796c0.089,-0.494 0.948,-0.752 1.562,-0.984c0.614,-0.232 1.795,-0.67 1.943,-0.738c0.147,-0.068 0.109,-0.133 -0.338,-0.176c-0.447,-0.042 -1.716,-0.211 -2.288,-0.051c-0.572,0.16 -1.549,0.403 -1.628,0.531c-0.079,0.129 -0.149,0.133 -0.068,0.578c0.082,0.444 0.5,2.576 0.541,2.954c0.04,0.379 0.12,0.629 -0.288,0.723c-0.408,0.093 -1.094,0.255 -1.33,0.255c-0.236,0 -0.922,-0.162 -1.33,-0.255c-0.408,-0.094 -0.328,-0.344 -0.288,-0.723c0.041,-0.378 0.459,-2.51 0.541,-2.954c0.081,-0.445 0.011,-0.449 -0.068,-0.578c-0.079,-0.128 -1.056,-0.371 -1.628,-0.531c-0.572,-0.16 -1.841,0.009 -2.288,0.051c-0.447,0.043 -0.485,0.108 -0.338,0.176c0.148,0.068 1.329,0.506 1.943,0.738c0.613,0.232 1.473,0.49 1.562,0.984c0.089,0.495 -0.444,1.239 -0.74,1.796c-0.296,0.557 -0.304,0.623 -0.284,0.849c0.021,0.225 1.024,0.8 1.244,0.948c0.22,0.149 1.41,0.802 1.41,1.166c0,0.364 -1.151,1.315 -1.515,1.551c-0.363,0.236 -1.351,0.753 -1.772,0.832c-0.421,0.079 -1.077,-0.398 -1.461,-1.113c-0.383,-0.714 -0.038,-1.419 0.195,-1.972c0.234,-0.554 -0.163,-0.861 -0.354,-1.064c-0.191,-0.203 -1.676,-1.783 -2.017,-2.144c-0.34,-0.362 -0.678,-0.546 -0.678,-1.241c-0,-0.696 2.689,-3.951 2.689,-3.951c0,-0 2.27,0.434 2.576,0.434c0.306,-0 0.969,-0.256 1.581,-0.46c0.612,-0.204 1.02,-0.206 1.02,-0.206c0,0 0.408,0.002 1.02,0.206c0.612,0.204 1.275,0.46 1.581,0.46c0.306,-0 2.576,-0.434 2.576,-0.434Zm-2.017,12.452c0.167,0.104 0.065,0.301 -0.086,0.408c-0.152,0.108 -2.19,1.688 -2.388,1.862c-0.198,0.175 -0.488,0.464 -0.686,0.464c-0.198,-0 -0.488,-0.289 -0.686,-0.464c-0.198,-0.174 -2.236,-1.754 -2.388,-1.862c-0.151,-0.107 -0.253,-0.304 -0.086,-0.408c0.166,-0.104 0.687,-0.368 1.406,-0.74c0.718,-0.373 1.614,-0.689 1.754,-0.689c0.14,-0 1.035,0.316 1.754,0.689c0.719,0.372 1.24,0.636 1.406,0.74Z" style="fill:#fff;"/><path id="Top-Head" d="M17.763,2.375l-2.091,-2.375l-7.344,0l-2.091,2.375c-0,0 -1.836,-0.51 -2.703,0.358c-0,-0 2.448,-0.222 3.289,1.149c0,-0 2.27,0.434 2.576,0.434c0.306,-0 0.969,-0.256 1.581,-0.46c0.612,-0.204 1.02,-0.206 1.02,-0.206c0,0 0.408,0.002 1.02,0.206c0.612,0.204 1.275,0.46 1.581,0.46c0.306,-0 2.576,-0.434 2.576,-0.434c0.841,-1.371 3.289,-1.149 3.289,-1.149c-0.867,-0.868 -2.703,-0.358 -2.703,-0.358" style="fill:url(#_Linear2);"/></g></g></g></g><defs><linearGradient id="_Linear1" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(20.4,0,0,20.4,1.8,12.1443)"><stop offset="0" style="stop-color:#f50;stop-opacity:1"/><stop offset="0.41" style="stop-color:#f50;stop-opacity:1"/><stop offset="0.58" style="stop-color:#ff2000;stop-opacity:1"/><stop offset="1" style="stop-color:#ff2000;stop-opacity:1"/></linearGradient><linearGradient id="_Linear2" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(16.5682,0,0,16.5682,3.89777,2.18828)"><stop offset="0" style="stop-color:#ff452a;stop-opacity:1"/><stop offset="1" style="stop-color:#ff2000;stop-opacity:1"/></linearGradient></defs></svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

View File

@@ -1,65 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
version="1.1"
id="svg12"
sodipodi:docname="bytedance.svg"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs12" />
<sodipodi:namedview
id="namedview12"
pagecolor="#505050"
bordercolor="#ffffff"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
inkscape:deskcolor="#505050"
inkscape:zoom="10.671875"
inkscape:cx="47.180088"
inkscape:cy="13.961933"
inkscape:window-width="2880"
inkscape:window-height="1526"
inkscape:window-x="2869"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="g13" />
<g
id="g13"
transform="matrix(1.0242856,0,0,1.0242856,-0.61033913,-0.60713804)">
<circle
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.312569;stroke-linecap:round;stroke-linejoin:round"
id="path13"
cx="12.311351"
cy="12.308226"
r="11.715483" />
<path
d="m 5.4217749,19.688519 -3.6276479,0.9312 V 3.9967336 l 3.6276479,0.9381696 z"
fill="white"
id="path9"
style="fill:#325ab4;fill-opacity:1;stroke-width:0.48" />
<path
d="m 22.952095,20.661383 -3.63456,0.931248 V 3.0237832 l 3.63456,0.9381696 z"
fill="white"
id="path10"
style="fill:#78e6dc;fill-opacity:1;stroke-width:0.48" />
<path
d="m 11.177695,20.188871 -3.6276481,0.93816 v -9.791712 l 3.6276481,0.93816 z"
fill="white"
id="path11"
style="fill:#3c8cff;fill-opacity:1;stroke-width:0.48" />
<path
d="m 13.547791,9.8898472 3.634608,-0.938208 v 9.7917598 l -3.634608,-0.938208 z"
fill="white"
id="path12"
style="fill:#00c8d2;fill-opacity:1;stroke-width:0.48" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><g id="g12"><circle id="path27" cx="12" cy="12" r="12" style="fill:#fff;"/><path id="path11" d="M2.92,16.144l0,-8.246c0,-0.628 0.418,-1.34 1.004,-1.674l7.494,-4.647l-0,4.562l-4.354,2.637c-0.418,0.252 -0.67,0.712 -0.67,1.131l0,4.605c0,0.418 0.21,0.837 0.503,1.004l4.521,2.679l-0,4.228l-7.744,-4.771c-0.419,-0.293 -0.754,-0.922 -0.754,-1.508Z" style="fill-rule:nonzero;"/><path id="path12" d="M12.674,22.423l-0,-4.228l4.521,-2.679c0.293,-0.168 0.502,-0.586 0.502,-1.004l-0,-4.605c-0,-0.419 -0.252,-0.879 -0.67,-1.131l-4.353,-2.637l-0,-4.562l7.493,4.646c0.586,0.335 1.004,1.047 1.004,1.674l0,8.247c0,0.586 -0.334,1.214 -0.753,1.507l-7.744,4.772l-0,0Z" style="fill-rule:nonzero;"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;"><path d="M19.51,14.165c0,-4.105 -3.378,-7.483 -7.483,-7.483c-4.105,-0 -7.484,3.378 -7.484,7.483l2.139,-0c-0,-2.932 2.412,-5.345 5.345,-5.345c2.932,-0 5.345,2.413 5.345,5.345" style="fill-opacity:0.1;fill-rule:nonzero;"/><circle cx="11.973" cy="11.984" r="4.811" style="fill:url(#_Radial1);stroke:url(#_Radial2);stroke-width:0.96px;"/><path d="M22.717,6.682c-2.02,-4.065 -6.184,-6.645 -10.722,-6.645c-3.967,0 -7.684,1.971 -9.91,5.255l4.81,8.338c-0.163,-0.519 -0.246,-1.06 -0.246,-1.604c-0,-2.904 2.367,-5.304 5.271,-5.344" style="fill:url(#_Radial3);fill-rule:nonzero;"/><path d="M2.085,5.292c-1.322,1.972 -2.028,4.293 -2.028,6.667c-0,6.205 4.823,11.434 11.008,11.934l5.024,-8.552c-1.015,1.23 -2.528,1.943 -4.123,1.943c-2.295,0 -4.345,-1.477 -5.071,-3.654" style="fill:url(#_Radial4);fill-rule:nonzero;"/><path d="M11.065,23.893c0.3,0.023 0.601,0.034 0.902,0.034c6.569,0 11.973,-5.405 11.973,-11.973c0,-1.828 -0.418,-3.632 -1.223,-5.272l-10.797,-0c2.923,0.013 5.32,2.422 5.32,5.345c0,1.202 -0.405,2.37 -1.151,3.314" style="fill:url(#_Radial5);fill-rule:nonzero;"/><path d="M2.085,5.292l4.81,8.338c-0.356,-1.199 -0.28,-2.485 0.214,-3.634l-4.811,-5.025" style="fill-opacity:0.08;fill-rule:nonzero;"/><path d="M11.065,23.893l5.024,-8.552c-0.792,0.945 -1.888,1.587 -3.1,1.817l-2.138,6.735" style="fill-opacity:0.05;fill-rule:nonzero;"/><path d="M22.717,6.682l-10.797,-0c1.625,0.007 3.161,0.755 4.169,2.031l6.842,-1.711" style="fill-opacity:0.05;fill-rule:nonzero;"/><defs><radialGradient id="_Radial1" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(9.62138,0,0,9.62138,11.9733,7.17327)"><stop offset="0" style="stop-color:#7fb3df;stop-opacity:1"/><stop offset="0.1" style="stop-color:#7fb3df;stop-opacity:1"/><stop offset="0.9" style="stop-color:#0f5b94;stop-opacity:1"/><stop offset="1" style="stop-color:#0f5b94;stop-opacity:1"/></radialGradient><radialGradient id="_Radial2" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(9.62138,0,0,9.62138,11.9733,7.17327)"><stop offset="0" style="stop-color:#f6f0ee;stop-opacity:1"/><stop offset="1" style="stop-color:#ddd;stop-opacity:1"/></radialGradient><radialGradient id="_Radial3" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(20.6325,0,0,20.6325,12.4009,0.0372002)"><stop offset="0" style="stop-color:#f06b59;stop-opacity:1"/><stop offset="1" style="stop-color:#df2227;stop-opacity:1"/></radialGradient><radialGradient id="_Radial4" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(14.137,0,0,14.137,10.4778,10.8722)"><stop offset="0" style="stop-color:#4cb749;stop-opacity:1"/><stop offset="0.65" style="stop-color:#4cb749;stop-opacity:1"/><stop offset="1" style="stop-color:#388b41;stop-opacity:1"/></radialGradient><radialGradient id="_Radial5" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(13.7965,0,0,13.7965,15.6999,10.9929)"><stop offset="0" style="stop-color:#fcd209;stop-opacity:1"/><stop offset="0.6" style="stop-color:#fcd209;stop-opacity:1"/><stop offset="0.7" style="stop-color:#f7c616;stop-opacity:1"/><stop offset="1" style="stop-color:#bc821e;stop-opacity:1"/></radialGradient></defs></svg>

Before

Width:  |  Height:  |  Size: 3.5 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;"><path d="M19.51,14.165c0,-4.105 -3.378,-7.483 -7.483,-7.483c-4.105,-0 -7.484,3.378 -7.484,7.483l2.139,-0c-0,-2.932 2.412,-5.345 5.345,-5.345c2.932,0 5.345,2.413 5.345,5.345" style="fill-opacity:0.1;fill-rule:nonzero;"/><circle cx="11.973" cy="11.984" r="4.811" style="fill:#2e4b60;stroke:url(#_Radial1);stroke-width:0.96px;"/><path d="M22.717,6.682c-2.02,-4.065 -6.184,-6.645 -10.722,-6.645c-3.967,0 -7.684,1.971 -9.91,5.255l4.81,8.338c-0.163,-0.519 -0.246,-1.06 -0.246,-1.604c0,-2.904 2.367,-5.304 5.271,-5.344" style="fill:#74433c;fill-rule:nonzero;"/><path d="M2.085,5.292c-1.322,1.972 -2.028,4.293 -2.028,6.667c0,6.205 4.823,11.434 11.008,11.934l5.024,-8.552c-1.015,1.23 -2.528,1.943 -4.123,1.943c-2.295,0 -4.345,-1.477 -5.071,-3.654" style="fill:#356b34;fill-rule:nonzero;"/><path d="M11.065,23.893c0.3,0.023 0.601,0.034 0.902,0.034c6.569,0 11.973,-5.405 11.973,-11.973c0,-1.828 -0.418,-3.632 -1.223,-5.272l-10.797,0c2.923,0.013 5.32,2.422 5.32,5.345c0,1.202 -0.405,2.37 -1.151,3.314" style="fill:#877003;fill-rule:nonzero;"/><defs><radialGradient id="_Radial1" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(9.62138,0,0,9.62138,11.9733,7.17327)"><stop offset="0" style="stop-color:#f6f0ee;stop-opacity:1"/><stop offset="1" style="stop-color:#ddd;stop-opacity:1"/></radialGradient></defs></svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -1,144 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
version="1.1"
id="svg44"
width="23.999998"
height="23.999998"
viewBox="0 0 23.999998 23.999998"
sodipodi:docname="chromium.svg"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#505050"
bordercolor="#ffffff"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
inkscape:deskcolor="#505050"
showgrid="false"
inkscape:zoom="48.03877"
inkscape:cx="12.614811"
inkscape:cy="12.031948"
inkscape:window-width="2880"
inkscape:window-height="1526"
inkscape:window-x="2869"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="svg44" />
<defs
id="defs18">
<linearGradient
xlink:href="#linearGradient4975"
id="linearGradient4633"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(10.857777,0,0,10.857728,5.2084407,7.4999222)"
x2="0.5565635"
x1="0.46521288"
y1="-0.67390651"
y2="0.81129867" />
<linearGradient
id="linearGradient4975">
<stop
style="stop-color:#1972e7"
offset="0"
id="stop4971" />
<stop
style="stop-color:#1969d5"
offset="1"
id="stop4973" />
</linearGradient>
<linearGradient
xlink:href="#3"
id="linearGradient1331"
x1="101.74381"
y1="33.726189"
x2="101.59915"
y2="135.466"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.17716569,0,0,0.1771649,7.1043498e-5,1.7712943e-4)" />
<linearGradient
id="3"
x2="1"
gradientTransform="matrix(61.286,0,0,61.286,29.399,42.333)"
gradientUnits="userSpaceOnUse">
<stop
offset="0"
id="stop1397"
style="stop-color:#afccfb" />
<stop
offset="1"
id="stop1399"
style="stop-color:#8bb5f8" />
</linearGradient>
<linearGradient
xlink:href="#1"
id="linearGradient2962"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(4.4500478,7.7077364,-7.7077707,4.4500281,4.5730717,8.1382472)"
x2="1.7695541"
x1="0.018202547"
y1="-0.51170158"
y2="0.4994337" />
<linearGradient
id="1"
x2="1"
gradientTransform="matrix(25.118,43.506,-43.506,25.118,25.812,45.935)"
gradientUnits="userSpaceOnUse">
<stop
offset="0"
id="stop3122"
style="stop-color:#659cf6" />
<stop
offset="1"
id="stop3124"
style="stop-color:#4285f4" />
</linearGradient>
<linearGradient
xlink:href="#2"
id="linearGradient2688"
x1="67.452377"
y1="40.320694"
x2="67.733002"
y2="95.25"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.17716569,0,0,0.1771649,7.0334727e-5,1.7712943e-4)" />
<linearGradient
id="2">
<stop
style="stop-color:#3680f0"
offset="0"
id="stop2682" />
<stop
style="stop-color:#2678ec"
offset="1"
id="stop2684" />
</linearGradient>
</defs>
<path
d="m 12.000034,12.000087 5.19627,2.999935 -5.19627,8.999976 c 6.627415,0 11.999964,-5.372526 11.999964,-11.999911 0,-2.1863912 -0.587623,-4.2344179 -1.60932,-6.000043 H 11.99991 Z"
id="path34-4"
style="fill:url(#linearGradient1331);stroke-width:0.0468764" />
<path
d="M 11.99991,0 C 7.5583663,0 3.6833982,2.4147577 1.6084336,6.0014611 L 6.8036401,15.000021 11.99991,12.000087 V 6.000044 H 22.390678 C 20.315359,2.4142262 16.440923,0 11.99991,0 Z"
id="path36-1"
style="fill:url(#linearGradient4633);stroke-width:0.0468764" />
<path
d="m 7.0866305e-5,12.000087 c 0,6.627385 5.372372433695,11.999911 11.999964133695,11.999911 L 17.196304,15.000021 12.000035,12.000087 6.8037648,15.000021 1.6085582,6.0014611 C 0.58742826,7.7665907 0,9.813873 0,11.999911"
id="path38-7"
style="fill:url(#linearGradient2962);stroke-width:0.0468764" />
<path
d="m 18.000105,12.000087 c 0,3.313693 -2.686364,6.000044 -6.000071,6.000044 -3.3137072,0 -6.0000702,-2.686351 -6.0000702,-6.000044 0,-3.3136917 2.686363,-6.000043 6.0000702,-6.000043 3.313707,0 6.000071,2.6863513 6.000071,6.000043"
fill="#ffffff"
id="path40"
style="stroke-width:0.0468764" />
<path
d="m 16.875102,12.000087 c 0,2.692376 -2.182681,4.875047 -4.875068,4.875047 -2.692387,0 -4.8750685,-2.182671 -4.8750685,-4.875047 0,-2.6923744 2.1826815,-4.875046 4.8750685,-4.875046 2.692387,0 4.875068,2.1826716 4.875068,4.875046"
id="path42-5"
style="fill:url(#linearGradient2688);stroke-width:0.0468764" />
</svg>

Before

Width:  |  Height:  |  Size: 5.0 KiB

BIN
img/clients.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;"><circle cx="12" cy="12" r="12" style="fill:#d53;"/><circle cx="12" cy="12" r="10.667" style="fill:none;stroke:#fff;stroke-width:0.78px;"/><path d="M8.444,5.889c-3.333,0.778 -2.111,5.444 -2.111,5.444l2.111,10.334l0.778,0.333m-1.555,-18.111l-0.889,-0l1.222,0.444c-0,0 -1.222,0 -1.222,0.778c2.666,-0.111 3.889,0.556 3.889,0.556" style="fill:#ddd;fill-rule:nonzero;"/><path d="M14.778,22.556c-0,-0 -2.667,-4.223 -2.667,-7c0,-5.223 3.445,-0.778 3.445,-4.889c-0,-4.111 -3.445,-5.111 -3.445,-5.111c-1.667,-2.112 -4.889,-1.667 -4.889,-1.667l0.778,0.444c0,0 -0.778,0.223 -1,0.445c-0.222,0.222 2.111,-0.334 3.111,0.555c-4.111,0.334 -3.444,3.667 -3.444,3.667l2.333,13.333" style="fill:#fff;fill-rule:nonzero;"/><path d="M14.778,11.889l4.222,-1.111c3.778,0.555 -3.222,2.666 -3.667,2.555c-3.333,-0.555 -2.333,2.223 1.667,1.334c4,-0.889 1,2.222 -2.667,1c-5.222,-1.445 -2.444,-4 0.445,-3.778" style="fill:#fc0;fill-rule:nonzero;"/><path d="M13.667,20.667l0.222,-0.334c2.444,0.889 2.555,1.223 2.444,-1c-0.111,-2.222 0,-2.222 -2.555,-0.333c-0,-0.556 -1.445,-0.333 -1.667,-0c-2.333,-1 -2.555,-1.333 -2.444,0.222c0.222,3.222 0.111,2.667 2.333,1.556" style="fill:#6b5;fill-rule:nonzero;"/><path d="M11.889,19.444l-0,1.334c0.111,0.222 1.889,0.222 1.889,-0.222c-0,-0.445 -0.889,0.333 -1.445,0.111c-0.555,-0.223 -0.222,-1.445 -0.222,-1.445" style="fill:#4a4;fill-rule:nonzero;"/><path d="M9.444,8.444c-0.555,-0.666 -2,-0.111 -1.666,0.778c0.111,-0.444 0.889,-1.111 1.666,-0.778m3.556,0c0.111,-0.666 1.222,-0.777 1.556,-0.111c-0.445,-0.222 -1.112,-0.222 -1.556,0.111m-3.667,1.778c0.026,-0.098 0.114,-0.166 0.215,-0.166c0.122,-0 0.223,0.1 0.223,0.222c-0,0.122 -0.101,0.222 -0.223,0.222c-0.101,0 -0.189,-0.069 -0.215,-0.167m-0.889,0.334c0.029,0.404 0.37,0.722 0.776,0.722c0.427,-0 0.778,-0.351 0.778,-0.778c0,-0.427 -0.351,-0.778 -0.778,-0.778c-0.406,0 -0.747,0.318 -0.776,0.723m5.778,-0.667c0.025,-0.098 0.114,-0.167 0.215,-0.167c0.122,0 0.223,0.101 0.223,0.222c-0,0.122 -0.101,0.223 -0.223,0.223c-0.101,-0 -0.19,-0.069 -0.215,-0.167m-0.666,0.333c0.028,0.344 0.319,0.611 0.664,0.611c0.366,0 0.667,-0.3 0.667,-0.666c-0,-0.366 -0.301,-0.667 -0.667,-0.667c-0.345,0 -0.636,0.268 -0.664,0.611" style="fill:#148;fill-rule:nonzero;"/></svg>

Before

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><path id="path2" d="M11.998,0c-6.625,0 -11.998,5.364 -11.998,12.002c0,6.639 5.364,11.998 11.998,11.998c6.633,-0 12.002,-5.359 12.002,-11.998c-0,-6.638 -5.364,-12.002 -12.002,-12.002Zm-0,22.611c-5.854,-0 -10.576,-4.755 -10.576,-10.609c-0,-5.853 4.722,-10.608 10.576,-10.608c5.853,0 10.576,4.755 10.576,10.608c-0,5.854 -4.718,10.609 -10.576,10.609Z" style="fill:#dc7f58;fill-rule:nonzero;"/><path id="path3" d="M12.127,3.301c-4.884,-0 -8.799,3.979 -8.799,8.798c0,4.884 3.915,8.799 8.799,8.799c4.856,-0 8.766,-3.947 8.766,-8.799c0,-4.851 -3.914,-8.798 -8.766,-8.798Z" style="fill:#38acb8;fill-rule:nonzero;"/><path id="path4" d="M20.704,13.844c-0,0.065 -0,0.129 0.032,0.194c0.033,-0.097 0.033,-0.194 0.065,-0.323c-0.069,0.032 -0.069,0.097 -0.097,0.129Zm-6.052,1.621c-0.291,0.193 -0.485,0.387 -0.549,0.872c0.064,0.097 0.097,0.162 0.226,0.226c0.355,-0.129 0.743,-0.711 0.485,-1.071c-0.065,-0.032 -0.097,-0.032 -0.162,-0.032l0,0.005Zm-4.205,-11.163c-0.162,-0.064 -0.356,-0.097 -0.517,-0.161c-0.42,0.097 -0.938,-0 -1.422,-0.097c-0.356,0.161 -0.711,0.355 -1.034,0.549c0.069,0.074 0.124,0.157 0.161,0.254c-0.064,0.226 -0.291,0.452 -0.194,0.711c0.033,0.162 0.097,0.226 0.227,0.323c0.42,0.032 0.646,-0.226 0.969,-0.323l1.011,-0.162c0.388,-0.097 1.066,-0.646 0.808,-1.098l-0.009,0.004Zm-5.143,8.088l-0.485,-0.711c-0.42,-0.42 -0.84,-0.775 -1.389,-0.905c-0.065,0.42 -0.097,0.873 -0.097,1.325c-0,1.487 0.355,2.913 1.034,4.141c0.097,-0.097 0.194,-0.162 0.291,-0.254l0.42,-0.678c0.226,-0.227 0.582,-0.291 0.775,-0.55l0.227,-0.614c0.129,-0.254 0.452,-0.452 0.387,-0.808c-0.161,-0.517 -0.807,-0.581 -1.163,-0.937l0,-0.009Zm0.194,-5.433c0.291,-0.13 0.452,0.226 0.679,-0.033c0.29,-0.29 -0.097,-0.775 -0.097,-1.098c-0,-0.065 0.032,-0.162 0.064,-0.226c-0.581,0.517 -1.066,1.131 -1.491,1.777c0.129,-0.033 0.254,-0.033 0.356,-0.065c0.198,-0.097 0.327,-0.226 0.489,-0.355Zm12.972,-0.97c-0.194,0 -0.388,0 -0.582,0.033l-2.751,0.29c-0.873,0 -1.325,-0.71 -2.165,-0.517c-0.323,0.065 -0.937,0.421 -1.099,0.679c-0.226,0.355 0.065,0.582 -0.355,0.776c-0.291,-0.065 -0.388,-0.291 -0.647,-0.421c-0.184,0.014 -0.351,0.107 -0.452,0.259c-0.032,0.388 0.254,0.452 0.254,0.84c-0.162,0.226 -0.55,0.254 -0.646,0.517c-0.13,0.291 -0,0.614 -0.194,0.84l-0.841,0.808c-0.549,0.679 -0.29,1.777 0.13,2.198c0.388,0.387 0.969,0.064 1.491,0.29c0.388,0.162 0.452,0.905 0.549,1.261c0.194,0.581 -0.161,0.84 -0.161,1.389c-0,0.549 0.193,2.133 0.969,2.1c0.872,-0.032 1.071,-0.904 1.551,-1.486c0.162,-0.194 0.42,-0.291 0.549,-0.582l0.033,-0.904c0.194,-0.517 0.808,-0.679 1.131,-1.067c0.323,-0.355 0.032,-0.646 0.194,-0.937c-0,0 0.032,0 0.032,-0.032l0.808,-0.453l0.388,-0.452l0.29,-0.097c1.011,0.517 0.647,1.551 1.358,2.101c0.064,-0.033 0.096,-0.065 0.161,-0.097c0.097,-0.13 0.032,-0.254 0.097,-0.453c0.129,-0.388 0.582,-0.775 1.066,-0.678c0.227,0.29 0.614,0.678 0.679,1.098c0.065,0.388 -0.194,0.614 -0.194,0.937c0,0.227 0.129,0.517 0.323,0.808c0.129,-0.332 0.231,-0.683 0.291,-1.034c0,-0.064 0,-0.129 -0.032,-0.194c0.032,-0.032 0.032,-0.064 0.064,-0.129c0.102,-0.531 0.157,-1.076 0.162,-1.616c-0,-2.336 -0.937,-4.496 -2.461,-6.079l0.01,0.004Zm-4.82,4.035c-0.194,0.032 -0.387,-0.097 -0.517,-0.162c-0.226,-0.032 -0.484,-0.032 -0.711,-0.064c-0.032,-0 -1.163,-0.905 -1.195,-0.97c0.064,-0.161 0.129,-0.161 0.226,-0.226c0.42,0.097 0.517,0.356 0.808,0.485l0.452,0.097c0.162,0.129 0.323,0.226 0.485,0.355c0.194,0.097 0.452,0.097 0.614,0.129c-0,0.033 0.032,0.065 0.032,0.097l0,0.162c-0.097,0.032 -0.129,0.065 -0.194,0.097Zm-1.26,-0.226l-1.196,-0.97c0.06,0.065 1.164,0.97 1.196,0.97Z" style="fill:#d4db32;fill-rule:nonzero;"/></svg>

Before

Width:  |  Height:  |  Size: 3.9 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>View only</title><path d="M17,18C17.56,18 18,18.44 18,19C18,19.56 17.56,20 17,20C16.44,20 16,19.56 16,19C16,18.44 16.44,18 17,18M17,15C14.27,15 11.94,16.66 11,19C11.94,21.34 14.27,23 17,23C19.73,23 22.06,21.34 23,19C22.06,16.66 19.73,15 17,15M17,21.5A2.5,2.5 0 0,1 14.5,19A2.5,2.5 0 0,1 17,16.5A2.5,2.5 0 0,1 19.5,19A2.5,2.5 0 0,1 17,21.5M9.27,20H6V4H13V9H18V13.07C18.7,13.15 19.36,13.32 20,13.56V8L14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H10.5C10,21.41 9.59,20.73 9.27,20Z" style="fill:#999"/></svg>

Before

Width:  |  Height:  |  Size: 565 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><path d="M23.767,9.65l-0.967,-0l0,-0.05l-10.8,0l-0,4.8l6.782,0c-0.99,2.794 -3.648,4.8 -6.782,4.8c-3.976,0 -7.2,-3.224 -7.2,-7.2c-0,-3.976 3.224,-7.2 7.2,-7.2c1.835,-0 3.505,0.692 4.777,1.823l3.394,-3.394c-2.143,-1.997 -5.01,-3.229 -8.171,-3.229c-6.627,0 -12,5.373 -12,12c0,6.627 5.373,12 12,12c6.627,0 12,-5.373 12,-12c0,-0.805 -0.083,-1.59 -0.233,-2.35Z" style="fill:#ffc107;fill-rule:nonzero;"/><path d="M1.384,6.415l3.942,2.891c1.067,-2.641 3.651,-4.506 6.674,-4.506c1.835,-0 3.505,0.692 4.777,1.823l3.394,-3.394c-2.143,-1.997 -5.01,-3.229 -8.171,-3.229c-4.609,-0 -8.606,2.602 -10.616,6.415Z" style="fill:#ff3d00;fill-rule:nonzero;"/><path d="M12,24c3.1,0 5.916,-1.186 8.045,-3.115l-3.714,-3.143c-1.204,0.913 -2.702,1.458 -4.331,1.458c-3.121,0 -5.771,-1.99 -6.77,-4.768l-3.913,3.015c1.986,3.887 6.019,6.553 10.683,6.553Z" style="fill:#4caf50;fill-rule:nonzero;"/><path d="M23.767,9.65l-0.967,-0l0,-0.05l-10.8,0l-0,4.8l6.782,0c-0.475,1.342 -1.339,2.5 -2.452,3.343c0,-0.001 0.001,-0.001 0.001,-0.002l3.714,3.143c-0.262,0.239 3.955,-2.884 3.955,-8.884c0,-0.805 -0.083,-1.59 -0.233,-2.35Z" style="fill:#1976d2;fill-rule:nonzero;"/></svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -1,105 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="32"
height="32"
fill="none"
version="1.1"
id="svg9"
sodipodi:docname="hive.svg"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview9"
pagecolor="#505050"
bordercolor="#ffffff"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
inkscape:deskcolor="#505050"
showgrid="false"
inkscape:zoom="23.285714"
inkscape:cx="25.294479"
inkscape:cy="12.067485"
inkscape:window-width="2880"
inkscape:window-height="1526"
inkscape:window-x="2869"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="svg9" />
<circle
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.667;stroke-linecap:round;stroke-linejoin:round"
id="path9"
cx="16"
cy="16"
r="16" />
<path
fill="url(#id-1ayeugjj6)"
d="m 14.219,1.313 c 0.754,0 1.478,0.311 2.011,0.864 0.533,0.553 0.833,1.303 0.833,2.085 v 19.915 c 0,0.782 -0.3,1.532 -0.833,2.085 -0.533,0.553 -1.257,0.864 -2.011,0.864 -0.754,0 -1.478,-0.311 -2.011,-0.864 -0.533,-0.553 -0.833,-1.303 -0.833,-2.085 V 4.261 c 0,-0.782 0.3,-1.532 0.833,-2.085 0.533,-0.553 1.257,-0.864 2.011,-0.864 z"
id="path1"
style="fill:url(#id-1ayeugjj6)"
transform="matrix(1.2008987,0,0,1.2008987,-1.0749782,-1.0755786)" />
<path
fill="url(#id-l7p4zffxf)"
d="m 5.906,6.125 c 0.754,0 1.478,0.317 2.011,0.881 C 8.45,7.57 8.75,8.335 8.75,9.132 v 10.174 c 0,0.798 -0.3,1.562 -0.833,2.126 -0.533,0.564 -1.257,0.881 -2.011,0.881 -0.754,0 -1.478,-0.317 -2.011,-0.881 C 3.362,20.868 3.062,20.103 3.062,19.306 V 9.132 C 3.062,8.334 3.362,7.57 3.895,7.006 4.428,6.442 5.152,6.125 5.906,6.125"
id="path2"
style="fill:url(#id-l7p4zffxf)"
transform="matrix(1.2008987,0,0,1.2008987,-1.0749782,-1.0755786)" />
<path
fill="url(#id-p85vlqe8q)"
d="m 22.531,6.125 c 0.754,0 1.478,0.317 2.011,0.881 0.533,0.564 0.833,1.329 0.833,2.126 v 10.174 c 0,0.798 -0.3,1.562 -0.833,2.126 -0.533,0.564 -1.257,0.881 -2.011,0.881 -0.754,0 -1.477,-0.317 -2.011,-0.881 -0.534,-0.564 -0.833,-1.329 -0.833,-2.126 V 9.132 c 0,-0.798 0.3,-1.562 0.833,-2.126 0.533,-0.564 1.257,-0.881 2.011,-0.881"
id="path3"
style="fill:url(#id-p85vlqe8q)"
transform="matrix(1.2008987,0,0,1.2008987,-1.0749782,-1.0755786)" />
<defs
id="defs9">
<linearGradient
id="id-1ayeugjj6"
x1="14.219"
x2="14.219"
y1="1.313"
y2="27.125"
gradientUnits="userSpaceOnUse">
<stop
stop-color="#175cff"
id="stop4" />
<stop
offset="1"
stop-color="#3693f9"
id="stop5" />
</linearGradient>
<linearGradient
id="id-l7p4zffxf"
x1="5.9060001"
x2="5.9060001"
y1="6.125"
y2="22.313"
gradientUnits="userSpaceOnUse">
<stop
stop-color="#175cff"
id="stop6" />
<stop
offset="1"
stop-color="#3693f9"
id="stop7" />
</linearGradient>
<linearGradient
id="id-p85vlqe8q"
x1="22.531"
x2="22.531"
y1="6.125"
y2="22.313"
gradientUnits="userSpaceOnUse">
<stop
stop-color="#175cff"
id="stop8" />
<stop
offset="1"
stop-color="#3693f9"
id="stop9" />
</linearGradient>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 3.6 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 69 69" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><rect id="rect2360" x="0" y="0" width="68.031" height="68.031"/><path id="path2318" d="M45.423,52.867c-0.693,0 -1.355,-0.092 -1.988,-0.277c-0.632,-0.185 -1.212,-0.463 -1.738,-0.834c-0.527,-0.37 -0.987,-0.819 -1.378,-1.346c-0.392,-0.541 -0.7,-1.168 -0.926,-1.88l2.868,-1.068c0.211,0.769 0.58,1.41 1.107,1.923c0.527,0.498 1.219,0.748 2.077,0.748c0.317,-0 0.618,-0.036 0.904,-0.107c0.301,-0.086 0.564,-0.2 0.79,-0.342c0.241,-0.157 0.429,-0.349 0.565,-0.577c0.135,-0.228 0.203,-0.491 0.203,-0.79c0,-0.285 -0.053,-0.542 -0.158,-0.77c-0.105,-0.227 -0.286,-0.441 -0.542,-0.641c-0.241,-0.199 -0.565,-0.391 -0.971,-0.576c-0.392,-0.186 -0.881,-0.378 -1.468,-0.577l-0.994,-0.342c-0.436,-0.143 -0.881,-0.335 -1.332,-0.577c-0.437,-0.242 -0.836,-0.534 -1.197,-0.876c-0.362,-0.342 -0.663,-0.741 -0.904,-1.196c-0.225,-0.47 -0.338,-0.997 -0.338,-1.581c-0,-0.599 0.12,-1.154 0.361,-1.667c0.256,-0.527 0.61,-0.983 1.062,-1.367c0.466,-0.399 1.016,-0.705 1.648,-0.919c0.648,-0.228 1.363,-0.342 2.146,-0.342c0.813,0 1.513,0.107 2.1,0.321c0.602,0.199 1.106,0.462 1.513,0.79c0.422,0.313 0.76,0.662 1.016,1.047c0.256,0.385 0.444,0.748 0.565,1.09l-2.688,1.068c-0.15,-0.427 -0.429,-0.812 -0.835,-1.154c-0.392,-0.342 -0.934,-0.513 -1.626,-0.513c-0.663,0 -1.212,0.15 -1.649,0.449c-0.436,0.285 -0.655,0.662 -0.655,1.132c0,0.456 0.211,0.848 0.633,1.176c0.421,0.313 1.091,0.619 2.01,0.918l1.016,0.321c0.647,0.213 1.234,0.463 1.761,0.748c0.542,0.27 1.002,0.598 1.378,0.982c0.391,0.385 0.685,0.826 0.881,1.325c0.21,0.484 0.316,1.047 0.316,1.688c-0,0.798 -0.173,1.488 -0.52,2.072c-0.331,0.57 -0.76,1.04 -1.287,1.41c-0.527,0.371 -1.122,0.649 -1.784,0.834c-0.662,0.185 -1.31,0.277 -1.942,0.277l-0,0Z" style="fill:#fff;fill-rule:nonzero;"/><rect id="rect2332" x="17.311" y="54.315" width="11.191" height="2.604" style="fill:#5b8aee;"/><path id="path2314" d="M22.988,52.867c-1.112,0 -2.146,-0.206 -3.105,-0.619c-0.944,-0.413 -1.764,-0.976 -2.458,-1.688c-0.695,-0.726 -1.243,-1.574 -1.646,-2.543c-0.389,-0.982 -0.583,-2.029 -0.583,-3.14c-0,-1.111 0.194,-2.151 0.583,-3.12c0.403,-0.982 0.951,-1.83 1.646,-2.542c0.694,-0.727 1.514,-1.296 2.458,-1.709c0.959,-0.413 1.993,-0.62 3.105,-0.62c1.111,0 2.138,0.207 3.083,0.62c0.958,0.413 1.785,0.982 2.479,1.709c0.695,0.712 1.236,1.56 1.625,2.542c0.403,0.969 0.604,2.009 0.604,3.12c0,1.111 -0.201,2.158 -0.604,3.14c-0.389,0.969 -0.93,1.817 -1.625,2.543c-0.694,0.712 -1.521,1.275 -2.479,1.688c-0.945,0.413 -1.972,0.619 -3.083,0.619Zm-0,-2.734c0.694,-0 1.34,-0.129 1.937,-0.385c0.611,-0.256 1.139,-0.612 1.583,-1.068c0.459,-0.456 0.813,-1.004 1.063,-1.645c0.264,-0.656 0.396,-1.375 0.396,-2.158c-0,-0.784 -0.132,-1.496 -0.396,-2.137c-0.25,-0.655 -0.604,-1.211 -1.063,-1.666c-0.444,-0.456 -0.972,-0.812 -1.583,-1.069c-0.597,-0.256 -1.243,-0.384 -1.937,-0.384c-0.695,-0 -1.348,0.128 -1.959,0.384c-0.597,0.257 -1.125,0.613 -1.583,1.069c-0.445,0.455 -0.799,1.011 -1.063,1.666c-0.25,0.641 -0.375,1.353 -0.375,2.137c0,0.783 0.125,1.502 0.375,2.158c0.264,0.641 0.618,1.189 1.063,1.645c0.458,0.456 0.986,0.812 1.583,1.068c0.611,0.256 1.264,0.385 1.959,0.385Z" style="fill:#fff;fill-rule:nonzero;"/><path id="path2312" d="M37.326,15.589l2.938,-0l4.838,8.097l0.177,0l4.837,-8.097l2.96,-0l0,15.297l-2.96,0l0,-7.542l0.177,-2.564l-0.177,0l-4.02,6.859l-1.789,-0l-4.043,-6.859l-0.176,0l0.176,2.564l0,7.542l-2.938,0l0,-15.297Z" style="fill:#fff;fill-rule:nonzero;"/><path id="path2308" d="M16.673,15.589l2.982,-0l-0,6.11l6.649,0l-0,-6.11l2.982,-0l-0,15.297l-2.982,0l-0,-6.452l-6.649,-0l-0,6.452l-2.982,0l-0,-15.297Z" style="fill:#fff;fill-rule:nonzero;"/></svg>

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 952 B

BIN
img/idtyp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><path d="M0.758,5.964c-0.416,0 -0.758,0.342 -0.758,0.758c0,0.414 0.342,0.757 0.758,0.757c0.416,0 0.757,-0.343 0.757,-0.757c0,-0.416 -0.341,-0.758 -0.757,-0.758Z" style="fill:#ffc107;fill-rule:nonzero;"/><path d="M3.938,9.777l1.435,-0.607c0.677,-1.212 1.825,-1.914 3.314,-1.914c0.337,-0 0.654,0.041 0.956,0.111l1.364,-0.575c-0.672,-0.331 -1.443,-0.524 -2.32,-0.524c-2.377,0 -4.071,1.307 -4.749,3.509Zm-2.669,1.128l0,-1.56l-1.018,-0l-0,1.991l1.018,-0.431Z" style="fill:#ff5722;fill-rule:nonzero;"/><path d="M1.269,13.677l0,-2.772l-1.018,0.431l-0,2.77l1.018,-0.429Zm3.424,-1.575c0,-1.163 0.245,-2.15 0.68,-2.932l-1.435,0.607c-0.213,0.692 -0.331,1.468 -0.331,2.325c0,0.2 0.027,0.379 0.039,0.57l1.056,-0.446c0,-0.043 -0.009,-0.081 -0.009,-0.124Zm13.601,-5.616c-0.278,0.087 -0.534,0.194 -0.77,0.325l0.77,-0.325Zm-7.287,0.306l-1.364,0.575c1.021,0.236 1.817,0.858 2.336,1.785l1.016,-0.429c-0.465,-0.867 -1.144,-1.515 -1.988,-1.931Z" style="fill:#f44336;fill-rule:nonzero;"/><path d="M1.269,16.449l0,-2.772l-1.018,0.429l-0,2.773l1.018,-0.43Zm17.025,-9.963l-0.77,0.325c-0.978,0.544 -1.569,1.456 -1.569,2.565c0,0.301 0.046,0.568 0.117,0.82l1.026,-0.432c-0.033,-0.131 -0.056,-0.269 -0.056,-0.418c0,-1.22 1.111,-2.105 2.719,-2.105c0.79,-0 1.458,0.211 1.946,0.575l1.042,-0.44c-0.69,-0.68 -1.725,-1.106 -2.957,-1.106c-0.544,-0.002 -1.047,0.077 -1.498,0.216Zm-13.592,5.741l-1.056,0.446c0.058,0.953 0.258,1.8 0.594,2.522l0.997,-0.422c-0.332,-0.71 -0.52,-1.566 -0.535,-2.546Zm8.293,-3.503l-1.016,0.43c0.379,0.678 0.6,1.523 0.654,2.495l1.055,-0.445c-0.093,-0.942 -0.32,-1.783 -0.693,-2.48Z" style="fill:#e91e63;fill-rule:nonzero;"/><path d="M13.51,14.05c0.144,-0.598 0.24,-1.239 0.24,-1.948c-0,-0.314 -0.033,-0.605 -0.063,-0.899l-1.054,0.446c0.009,0.152 0.029,0.294 0.029,0.453c0,0.962 -0.176,1.799 -0.478,2.509l1.326,-0.561Zm-8.271,0.722l-0.999,0.422c0.405,0.873 1.002,1.558 1.767,2.026l1.251,-0.528c-0.896,-0.337 -1.585,-0.996 -2.019,-1.92Zm-3.97,1.677l-1.018,0.43l-0,0.83l1.018,0l0,-1.26Zm15.83,-6.687l-1.026,0.434c0.243,0.861 0.91,1.462 2.116,1.878l1.591,-0.673l-0.335,-0.083c-1.45,-0.363 -2.161,-0.828 -2.346,-1.556Zm5.467,-0.519l1.072,0c-0.05,-0.726 -0.377,-1.364 -0.889,-1.868l-1.04,0.441c0.468,0.349 0.774,0.841 0.857,1.427Z" style="fill:#9c27b0;fill-rule:nonzero;"/><path d="M13.51,14.05l-1.326,0.561c-0.625,1.467 -1.839,2.345 -3.499,2.345c-0.525,0 -0.994,-0.103 -1.428,-0.265l-1.252,0.528c0.749,0.456 1.639,0.723 2.68,0.723c2.528,0 4.237,-1.473 4.825,-3.892Zm3.2,0.747l-1.072,-0c0.025,0.365 0.126,0.701 0.262,1.015l0.983,-0.416c-0.084,-0.187 -0.149,-0.386 -0.173,-0.599Zm3.844,-3.199l-0.775,-0.195l-1.59,0.672c0.233,0.081 0.483,0.155 0.758,0.223l1.281,0.326c0.71,0.175 1.249,0.397 1.649,0.665l1.198,-0.507c-0.525,-0.511 -1.346,-0.893 -2.521,-1.184Z" style="fill:#3f51b5;fill-rule:nonzero;"/><path d="M16.883,15.398l-0.983,0.414c0.374,0.865 1.132,1.523 2.153,1.863l1.683,-0.71c-1.371,-0.033 -2.443,-0.64 -2.853,-1.567Zm6.872,-0.13c0.034,-0.192 0.062,-0.388 0.062,-0.595c0,-0.778 -0.232,-1.396 -0.741,-1.891l-1.197,0.507c0.575,0.388 0.85,0.877 0.85,1.5c-0,0.391 -0.13,0.746 -0.346,1.058l1.372,-0.579Z" style="fill:#03a9f4;fill-rule:nonzero;"/><path d="M23.755,15.268l-1.372,0.58c-0.469,0.677 -1.386,1.125 -2.536,1.125c-0.038,-0 -0.073,-0.006 -0.11,-0.006l-1.682,0.71c0.51,0.17 1.08,0.267 1.7,0.267c2.194,-0.002 3.701,-1.055 4,-2.676Z" style="fill:#009688;fill-rule:nonzero;"/></svg>

Before

Width:  |  Height:  |  Size: 3.7 KiB

View File

@@ -1 +0,0 @@
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><path d="M15.6,20.4l8.4,-0l0,2.4l-8.4,-0c0,0.659 -0.541,1.2 -1.2,1.2l-4.8,0c-0.659,0 -1.2,-0.541 -1.2,-1.2l-8.4,-0l-0,-2.4l8.4,-0c-0,-0.659 0.541,-1.2 1.2,-1.2l1.2,0l-0,-2.4l-7.2,-0c-1.316,-0 -2.4,-1.084 -2.4,-2.4l-0,-12c-0,-1.316 1.084,-2.4 2.4,-2.4l16.8,-0c1.316,-0 2.4,1.084 2.4,2.4l0,12c0,1.316 -1.084,2.4 -2.4,2.4l-7.2,-0l-0,2.4l1.2,0c0.659,0 1.2,0.541 1.2,1.2Zm-12,-6l16.8,-0l0,-12l-16.8,-0l-0,12Zm1.926,-1.19l-0,-9.449l1.56,-0l-0,9.449l-1.56,-0Zm2.636,0.01l0,-9.448l2.514,-0c0.938,-0 1.55,0.044 1.838,0.135c0.459,0.145 0.838,0.457 1.137,0.934c0.299,0.477 0.448,1.092 0.448,1.843c-0,0.684 -0.129,1.256 -0.387,1.718c-0.258,0.462 -0.579,0.786 -0.967,0.974c-0.386,0.187 -1.052,0.28 -1.998,0.28l-1.025,0l0,3.564l-1.56,0Zm1.56,-7.85l0,2.681l0.864,-0c0.58,-0 0.975,-0.041 1.184,-0.123c0.207,-0.081 0.379,-0.229 0.512,-0.441c0.133,-0.213 0.199,-0.474 0.199,-0.783c0,-0.314 -0.068,-0.578 -0.206,-0.793c-0.137,-0.215 -0.307,-0.359 -0.509,-0.432c-0.202,-0.073 -0.63,-0.109 -1.283,-0.109l-0.761,0Zm7.462,7.84l-0,-1.902l-3.17,-0l-0,-1.586l3.357,-6l1.251,0l-0,5.994l0.96,0l-0,1.592l-0.96,-0l-0,1.902l-1.438,-0Zm-0,-3.494l-0,-3.229l-1.778,3.229l1.778,0Z" style="fill:#00796B"/></svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -1 +0,0 @@
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><path d="M24,20.4l0,2.4l-8.4,-0c0,0.659 -0.541,1.2 -1.2,1.2l-4.8,0c-0.659,0 -1.2,-0.541 -1.2,-1.2l-8.4,-0l-0,-2.4l8.4,-0c-0,-0.659 0.541,-1.2 1.2,-1.2l1.2,0l-0,-2.4l-8.4,-0c-1.316,-0 -2.4,-1.084 -2.4,-2.4l-0,-12c-0,-1.316 1.084,-2.4 2.4,-2.4l19.2,-0c1.316,-0 2.4,1.084 2.4,2.4l0,12c0,1.316 -1.084,2.4 -2.4,2.4l-8.4,-0l-0,2.4l1.2,0c0.659,0 1.2,0.541 1.2,1.2l8.4,-0Zm-1.781,-15.08c-0.137,-1.007 -0.456,-1.757 -0.956,-2.253c-0.501,-0.494 -1.114,-0.741 -1.841,-0.741c-1.056,-0 -1.92,0.483 -2.592,1.452c-0.673,0.967 -1.009,2.553 -1.009,4.756c-0,2.172 0.324,3.726 0.972,4.665c0.648,0.937 1.464,1.406 2.448,1.406c0.897,0 1.649,-0.361 2.256,-1.082c0.607,-0.723 0.911,-1.717 0.911,-2.987c-0,-1.192 -0.287,-2.147 -0.862,-2.867c-0.574,-0.719 -1.247,-1.079 -2.017,-1.079c-0.351,0 -0.671,0.086 -0.96,0.255c-0.291,0.17 -0.553,0.423 -0.789,0.763c0.072,-1.362 0.243,-2.267 0.514,-2.716c0.27,-0.447 0.611,-0.672 1.021,-0.672c0.629,0 0.987,0.448 1.074,1.346l1.83,-0.246Zm-4.274,5.028c-0,-0.683 0.126,-1.198 0.378,-1.542c0.251,-0.345 0.557,-0.518 0.918,-0.518c0.372,0 0.684,0.182 0.936,0.543c0.251,0.36 0.377,0.935 0.377,1.722c-0,0.761 -0.117,1.307 -0.35,1.64c-0.231,0.334 -0.523,0.501 -0.873,0.501c-0.36,-0 -0.682,-0.201 -0.964,-0.603c-0.281,-0.402 -0.422,-0.983 -0.422,-1.743Zm-10.745,4.052l2.4,-0l-0,-4.8l2.4,-0c1.316,-0 2.4,-1.084 2.4,-2.4l-0,-2.4c-0,-1.316 -1.084,-2.4 -2.4,-2.4l-4.8,-0l-0,12Zm4.8,-7.2l-2.4,-0l-0,-2.4l2.4,0l-0,2.4Zm-7.2,-4.8l-2.4,-0l-0,12l2.4,-0l-0,-12Z" style="fill:#558B2F"/></svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><circle cx="12" cy="12" r="12"/><g><circle cx="7.875" cy="9" r="3.75" style="fill:#fff;"/><circle cx="16.125" cy="9" r="3.75" style="fill:#fff;"/></g><circle cx="9.75" cy="9" r="1.2"/><circle cx="14.25" cy="9" r="1.2"/><path d="M7.5,13.5l9,0l-4.5,7.5l-4.5,-7.5Z" style="fill:#f90;fill-rule:nonzero;"/></svg>

Before

Width:  |  Height:  |  Size: 747 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>localhost</title><path d="M6,2C4.89,2 4,2.89 4,4V12C4,13.11 4.89,14 6,14H18C19.11,14 20,13.11 20,12V4C20,2.89 19.11,2 18,2H6M6,4H18V12H6V4M4,15C2.89,15 2,15.89 2,17V20C2,21.11 2.89,22 4,22H20C21.11,22 22,21.11 22,20V17C22,15.89 21.11,15 20,15H4M8,17H20V20H8V17M9,17.75V19.25H13V17.75H9M15,17.75V19.25H19V17.75H15Z" style="fill:#01579B"/></svg>

Before

Width:  |  Height:  |  Size: 410 B

View File

@@ -1 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><path d="M12,0c6.623,0 12,5.377 12,12c0,6.623 -5.377,12 -12,12c-6.623,0 -12,-5.377 -12,-12c0,-6.623 5.377,-12 12,-12Zm7.967,15.655c-0.925,-0.693 -1.517,-1.486 -1.517,-2.534c-0,-1.048 0.512,-1.759 1.06,-2.292c0.512,-0.499 0.703,-1.228 0.305,-1.815c-1.252,-1.845 -3.154,-2.336 -4.08,-2.336c-1.031,0 -1.82,0.318 -2.454,0.575c-0.431,0.174 -0.771,0.23 -1.08,0.23c-0.377,-0 -0.877,-0.11 -1.361,-0.294c-0.637,-0.245 -1.297,-0.498 -2.027,-0.498c-1.884,0 -3.36,0.918 -4.38,2.714c-2.025,3.473 -0.362,8.258 1.156,10.453c0.67,0.977 1.918,2.796 3.983,2.796l0.003,0c0.747,-0.027 1.267,-0.239 1.687,-0.41c0.372,-0.152 0.62,-0.252 1.072,-0.252c0.433,0 0.684,0.1 1.063,0.25c0.463,0.185 1.037,0.414 1.879,0.414c1.89,0 2.916,-1.503 3.77,-2.753c0.82,-1.19 1.237,-2.366 1.371,-2.807c0.167,-0.484 0.137,-0.945 -0.45,-1.441Zm-4.917,-10.83c0.734,-0.938 1.218,-2.197 1.094,-3.481c-1.056,0.05 -2.361,0.718 -3.105,1.656c-0.684,0.808 -1.268,2.121 -1.12,3.353c1.194,0.104 2.386,-0.616 3.131,-1.528Z" style="fill:#777;"/></svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 191 191" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><path id="Logo0" d="M20.631,115.731c-0,7.294 1.6,12.893 3.692,16.28c2.743,4.437 6.835,6.317 11.006,6.317c5.38,0 10.302,-1.334 19.787,-14.453c7.599,-10.515 16.553,-25.273 22.577,-34.525l10.201,-15.676c7.088,-10.886 15.291,-22.988 24.696,-31.191c7.678,-6.695 15.961,-10.414 24.296,-10.414c13.995,-0 27.326,8.11 37.529,23.32c11.165,16.658 16.585,37.64 16.585,59.294c0,12.872 -2.537,22.33 -6.855,29.802c-4.171,7.227 -12.301,14.446 -25.977,14.446l0,-20.603c11.71,0 14.632,-10.759 14.632,-23.074c0,-17.549 -4.091,-37.024 -13.104,-50.939c-6.396,-9.869 -14.686,-15.9 -23.805,-15.9c-9.864,-0 -17.802,7.438 -26.721,20.702c-4.743,7.047 -9.612,15.636 -15.078,25.327l-6.017,10.66c-12.09,21.435 -15.151,26.317 -21.196,34.374c-10.594,14.107 -19.64,19.453 -31.55,19.453c-14.128,0 -23.061,-6.117 -28.594,-15.336c-4.516,-7.512 -6.735,-17.369 -6.735,-28.6l20.631,0.736Z" style="fill:#0081fb;fill-rule:nonzero;"/><path id="Logo1" d="M16.267,56.843c9.458,-14.58 23.108,-24.774 38.762,-24.774c9.067,-0 18.081,2.683 27.493,10.368c10.295,8.402 21.267,22.238 34.957,45.039l4.908,8.183c11.849,19.741 18.591,29.897 22.536,34.686c5.076,6.15 8.629,7.983 13.245,7.983c11.71,0 14.632,-10.759 14.632,-23.074l18.2,-0.571c0,12.872 -2.537,22.33 -6.855,29.802c-4.171,7.227 -12.301,14.446 -25.977,14.446c-8.502,0 -16.034,-1.845 -24.363,-9.703c-6.403,-6.031 -13.889,-16.745 -19.647,-26.375l-17.131,-28.615c-8.594,-14.36 -16.479,-25.068 -21.042,-29.916c-4.908,-5.214 -11.218,-11.511 -21.287,-11.511c-8.15,-0 -15.071,5.719 -20.863,14.467l-17.568,-10.435Z" style="fill:url(#_Linear1);fill-rule:nonzero;"/><path id="Logo2" d="M54.698,52.811c-8.15,-0 -15.071,5.719 -20.863,14.467c-8.19,12.36 -13.204,30.772 -13.204,48.453c-0,7.294 1.6,12.893 3.692,16.28l-17.588,11.584c-4.516,-7.512 -6.735,-17.369 -6.735,-28.6c-0,-20.425 5.606,-41.713 16.267,-58.152c9.458,-14.58 23.108,-24.774 38.762,-24.774l-0.331,20.742Z" style="fill:url(#_Linear2);fill-rule:nonzero;"/><defs><linearGradient id="_Linear1" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(131.514,6.64209,-6.64209,131.514,40.5168,109.781)"><stop offset="0" style="stop-color:#0064e1;stop-opacity:1"/><stop offset="0.4" style="stop-color:#0064e1;stop-opacity:1"/><stop offset="0.83" style="stop-color:#0073ee;stop-opacity:1"/><stop offset="1" style="stop-color:#0082fb;stop-opacity:1"/></linearGradient><linearGradient id="_Linear2" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(2.96899e-15,-48.4872,48.4872,2.96899e-15,29.8895,124.393)"><stop offset="0" style="stop-color:#0082fb;stop-opacity:1"/><stop offset="1" style="stop-color:#0064e0;stop-opacity:1"/></linearGradient></defs></svg>

Before

Width:  |  Height:  |  Size: 3.0 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.7 KiB

View File

@@ -1,16 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg id="svg3769" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="218.79" width="222.64" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
<metadata id="metadata3774">
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<g id="layer1" transform="translate(-314.39 -274.4)">
<path id="svg" fill="#1ebbee" d="m533.03 388.73c0-16.968-4.387-32.909-12.08-46.761 32.791-74.213-35.136-63.343-38.918-62.603-14.391 2.816-27.705 7.337-39.986 13.068-1.811-0.102-3.633-0.158-5.469-0.158-45.833 0-84.198 31.968-94.017 74.823 24.157-27.101 41.063-38.036 51.187-42.412-1.616 1.444-3.198 2.904-4.754 4.375-0.518 0.489-1.017 0.985-1.528 1.477-1.026 0.987-2.05 1.975-3.05 2.972-0.595 0.593-1.174 1.191-1.76 1.788-0.887 0.903-1.772 1.805-2.638 2.713-0.615 0.645-1.215 1.292-1.819 1.938-0.809 0.866-1.613 1.733-2.402 2.603-0.613 0.676-1.216 1.352-1.818 2.03-0.748 0.842-1.489 1.684-2.22 2.528-0.606 0.7-1.207 1.4-1.801 2.101-0.693 0.818-1.377 1.636-2.054 2.454-0.599 0.724-1.196 1.447-1.782 2.17-0.634 0.782-1.254 1.563-1.873 2.343-0.6 0.756-1.2 1.511-1.786 2.266-0.558 0.719-1.1 1.435-1.646 2.152-0.616 0.81-1.237 1.62-1.837 2.426-0.429 0.577-0.841 1.148-1.262 1.723-3.811 5.2-7.293 10.3-10.438 15.199-0.008 0.012-0.016 0.024-0.023 0.036-0.828 1.29-1.627 2.561-2.41 3.821-0.042 0.068-0.086 0.137-0.128 0.206-0.784 1.265-1.541 2.508-2.279 3.738-0.026 0.043-0.053 0.087-0.079 0.13-1.984 3.311-3.824 6.503-5.481 9.506-8.687 15.743-12.916 26.742-13.099 27.395-27.432 98.072 58.184 56.657 70.131 50.475 12.864 6.355 27.346 9.932 42.666 9.932 41.94 0 77.623-26.771 90.905-64.156h-50.68c-7.499 12.669-21.936 21.25-38.522 21.25-24.301 0-44-18.412-44-41.125h137.96c0.523-4.068 0.794-8.214 0.794-12.423zm-18.018-94.916c8.306 5.606 14.968 14.41 3.527 44.059-10.973-17.647-27.482-31.49-47.104-39.099 8.926-4.311 31.031-13.429 43.577-4.96zm-176.52 181.24c-6.765-6.938-7.961-23.836 6.967-54.628 7.534 21.661 22.568 39.811 42 51.33-9.664 5.319-35.32 17.295-48.967 3.298zm55.571-100.28c0.771-22.075 19.983-39.75 43.588-39.75 23.604 0 42.817 17.675 43.588 39.75h-87.176z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><ellipse cx="12" cy="12" rx="12" ry="12" style="fill:#fffafa;"/><path d="M21.549,10.005c0.506,-1.498 0.332,-3.14 -0.477,-4.502c-1.216,-2.09 -3.662,-3.165 -6.051,-2.659c-1.062,-1.182 -2.589,-1.853 -4.189,-1.844c-2.442,-0.005 -4.608,1.546 -5.359,3.838c-1.568,0.317 -2.922,1.286 -3.714,2.659c-1.226,2.084 -0.946,4.712 0.691,6.499c-0.506,1.499 -0.332,3.14 0.477,4.502c1.217,2.09 3.662,3.165 6.051,2.659c1.061,1.182 2.589,1.854 4.189,1.843c2.443,0.006 4.61,-1.546 5.361,-3.84c1.569,-0.317 2.922,-1.286 3.715,-2.659c1.224,-2.084 0.944,-4.71 -0.693,-6.498l-0.001,0.002Zm-8.38,11.557c-0.978,0.002 -1.925,-0.336 -2.675,-0.954c0.034,-0.017 0.093,-0.05 0.132,-0.073l4.439,-2.53c0.228,-0.128 0.367,-0.366 0.365,-0.624l0,-6.176l1.876,1.07c0.021,0.009 0.034,0.028 0.037,0.05l0,5.114c-0.003,2.275 -1.87,4.119 -4.174,4.123Zm-8.977,-3.783c-0.49,-0.835 -0.667,-1.813 -0.498,-2.763c0.032,0.02 0.09,0.055 0.131,0.078l4.439,2.53c0.226,0.131 0.505,0.131 0.73,0l5.42,-3.088l0,2.139c0.002,0.022 -0.009,0.043 -0.026,0.057l-4.488,2.556c-1.999,1.136 -4.552,0.461 -5.708,-1.509l-0,0Zm-1.169,-9.563c0.487,-0.836 1.257,-1.475 2.175,-1.807c0,0.038 -0.003,0.104 -0.003,0.151l0,5.061c-0.001,0.258 0.139,0.496 0.365,0.623l5.42,3.088l-1.876,1.069c-0.019,0.012 -0.043,0.014 -0.064,0.005l-4.488,-2.558c-1.995,-1.141 -2.68,-3.659 -1.529,-5.631l-0,-0.001Zm15.416,3.541l-5.42,-3.089l1.877,-1.069c0.019,-0.012 0.043,-0.013 0.063,-0.005l4.489,2.557c1.998,1.139 2.683,3.662 1.529,5.634c-0.489,0.835 -1.258,1.474 -2.175,1.806l0,-5.212c0.002,-0.257 -0.136,-0.495 -0.362,-0.622l-0.001,-0Zm1.868,-2.774c-0.033,-0.02 -0.091,-0.054 -0.132,-0.077l-4.44,-2.53c-0.224,-0.131 -0.503,-0.131 -0.729,-0l-5.42,3.088l0,-2.139c-0.002,-0.022 0.009,-0.043 0.027,-0.057l4.487,-2.554c1.999,-1.138 4.555,-0.461 5.707,1.512c0.487,0.833 0.664,1.809 0.499,2.757l0.001,-0Zm-11.741,3.811l-1.877,-1.069c-0.021,-0.01 -0.033,-0.029 -0.036,-0.051l-0,-5.114c0.001,-2.277 1.874,-4.123 4.181,-4.122c0.976,0 1.921,0.339 2.671,0.955c-0.034,0.018 -0.093,0.05 -0.132,0.073l-4.439,2.53c-0.228,0.128 -0.367,0.366 -0.365,0.623l-0.003,6.173l-0,0.002Zm1.019,-2.169l2.415,-1.376l2.413,1.375l0,2.751l-2.413,1.376l-2.415,-1.376l0,-2.75Z" style="fill-rule:nonzero;"/></svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><g><path d="M11.999,0.002c-6.627,-0 -11.999,5.372 -11.999,11.999c0,6.435 5.066,11.688 11.428,11.986c0.19,0.009 0.38,0.014 0.572,0.014c3.072,-0 5.874,-1.156 7.997,-3.054c-1.407,0.933 -3.051,1.469 -4.809,1.469c-2.858,0 -5.417,-1.417 -7.138,-3.653c-1.327,-1.566 -2.186,-3.881 -2.245,-6.479l0,-0.566c0.059,-2.598 0.918,-4.913 2.245,-6.479c1.721,-2.236 4.28,-3.653 7.138,-3.653c1.758,-0 3.402,0.536 4.809,1.47c-2.112,-1.89 -4.897,-3.043 -7.952,-3.054c-0.016,-0 -0.031,-0.001 -0.046,-0.001l0,0.001Z" style="fill:url(#_Linear1);fill-rule:nonzero;"/><path d="M8.05,5.239c1.101,-1.3 2.523,-2.083 4.077,-2.083c3.493,-0 6.325,3.96 6.325,8.846c-0,4.885 -2.832,8.846 -6.325,8.846c-1.554,-0 -2.976,-0.784 -4.077,-2.084c1.721,2.236 4.28,3.653 7.138,3.653c1.758,0 3.402,-0.536 4.809,-1.469c2.456,-2.197 4.002,-5.391 4.002,-8.946c0,-3.555 -1.546,-6.748 -4.001,-8.945c-1.407,-0.934 -3.052,-1.471 -4.81,-1.471c-2.857,0 -5.417,1.418 -7.138,3.654" style="fill:url(#_Linear2);fill-rule:nonzero;"/></g><defs><linearGradient id="_Linear1" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.4242e-15,23.2589,23.2589,-1.4242e-15,-541.374,0.392845)"><stop offset="0" style="stop-color:#ff1b2d;stop-opacity:1"/><stop offset="0.61" style="stop-color:#ff1b2d;stop-opacity:1"/><stop offset="1" style="stop-color:#a70014;stop-opacity:1"/></linearGradient><linearGradient id="_Linear2" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.25963e-15,20.5712,20.5712,-1.25963e-15,-548.574,1.76398)"><stop offset="0" style="stop-color:#9c0000;stop-opacity:1"/><stop offset="0.7" style="stop-color:#ff4b4b;stop-opacity:1"/><stop offset="1" style="stop-color:#ff4b4b;stop-opacity:1"/></linearGradient></defs></svg>

Before

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -1,49 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
version="1.1"
id="svg2"
sodipodi:docname="perplexity.svg"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs2" />
<sodipodi:namedview
id="namedview2"
pagecolor="#505050"
bordercolor="#ffffff"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
inkscape:deskcolor="#505050"
showgrid="false"
inkscape:zoom="1.4370277"
inkscape:cx="241.47064"
inkscape:cy="157.26906"
inkscape:window-width="2880"
inkscape:window-height="1526"
inkscape:window-x="2869"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" />
<circle
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.0457371;stroke-linecap:round;stroke-linejoin:round"
id="path2"
cx="12"
cy="12"
r="12" />
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="m 5.6010131,1.7866503 5.8165679,5.3590994 v -0.00123 -5.3455054 h 1.13226 V 7.1697326 L 18.392458,1.786651 v 6.1101691 h 2.39878 v 8.8133449 h -2.391411 v 5.440806 l -5.849986,-5.139642 v 5.19866 h -1.13226 V 17.096074 L 5.6076065,22.213351 V 16.710165 H 3.2087621 V 7.8968194 h 2.392251 z M 10.56399,9.0152455 H 4.3410154 V 15.591738 H 5.6061843 V 13.517264 Z M 6.7398016,14.013516 v 5.704156 L 11.417581,15.597621 V 9.7647634 Z M 12.58242,15.543128 V 9.7592681 l 4.679136,4.2490129 v 2.701883 h 0.006 v 2.949267 z m 5.817407,0.04861 h 1.259151 V 9.0152455 h -6.17662 l 4.917469,4.4554125 z M 17.260198,7.8968194 V 4.3592703 l -3.839573,3.5375491 z m -6.687416,0 H 6.7332728 V 4.3592703 Z"
fill="#000000"
id="path1"
style="stroke-width:0.0646414" />
</svg>

Before

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -1,110 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="24"
height="23.999998"
viewBox="0 0 6.3499999 6.3499992"
version="1.1"
id="svg5"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
sodipodi:docname="petal.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<title
id="title7982">Petal Search logo</title>
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#111111"
borderopacity="1"
inkscape:pageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
inkscape:document-units="px"
showgrid="false"
objecttolerance="1"
gridtolerance="1"
guidetolerance="1"
units="px"
inkscape:zoom="9.8434981"
inkscape:cx="45.664661"
inkscape:cy="15.238485"
inkscape:window-width="2880"
inkscape:window-height="1526"
inkscape:window-x="2869"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="svg5"
inkscape:showpageshadow="0"
inkscape:deskcolor="#505050" />
<defs
id="defs2">
<linearGradient
inkscape:collect="always"
id="linearGradient95">
<stop
style="stop-color:#1794fa;stop-opacity:1;"
offset="0"
id="stop91" />
<stop
style="stop-color:#13bfc6;stop-opacity:1"
offset="1"
id="stop93" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient95"
id="linearGradient293"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.08815381,0,0,0.0881538,11.309701,1.5887868)"
x1="-117.92336"
y1="-11.113196"
x2="-65.095886"
y2="41.619678" />
</defs>
<path
id="path37-4-6-8"
style="fill:url(#linearGradient293);fill-opacity:1;stroke-width:0"
d="M 3.1702654,8.5090788e-7 A 3.1750206,3.1750201 0 0 0 0,3.1749136 3.1750206,3.1750201 0 0 0 3.1749144,6.3499995 3.1750206,3.1750201 0 0 0 5.0929493,5.7050313 L 4.2301789,4.8067917 A 1.9434973,1.9434971 0 0 1 3.1749144,5.1184294 1.9434973,1.9434971 0 0 1 1.2313979,3.1749136 1.9434973,1.9434971 0 0 1 3.1749144,1.2313976 1.9434973,1.9434971 0 0 1 5.1184286,3.1749136 1.9434973,1.9434971 0 0 1 4.7124407,4.3636127 L 5.5712515,5.2577193 A 3.1750206,3.1750201 0 0 0 6.35,3.1749136 3.1750206,3.1750201 0 0 0 3.1749144,8.5090788e-7 a 3.1750206,3.1750201 0 0 0 -0.00465,0 z" />
<metadata
id="metadata7980">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:title>Petal Search logo</dc:title>
<dc:date>16 agt 2021</dc:date>
<cc:license
rdf:resource="http://scripts.sil.org/OFL" />
<dc:language>es</dc:language>
</cc:Work>
<cc:License
rdf:about="http://scripts.sil.org/OFL">
<cc:permits
rdf:resource="http://scripts.sil.org/pub/OFL/Reproduction" />
<cc:permits
rdf:resource="http://scripts.sil.org/pub/OFL/Distribution" />
<cc:permits
rdf:resource="http://scripts.sil.org/pub/OFL/Embedding" />
<cc:permits
rdf:resource="http://scripts.sil.org/pub/OFL/DerivativeWorks" />
<cc:requires
rdf:resource="http://scripts.sil.org/pub/OFL/Notice" />
<cc:requires
rdf:resource="http://scripts.sil.org/pub/OFL/Attribution" />
<cc:requires
rdf:resource="http://scripts.sil.org/pub/OFL/ShareAlike" />
<cc:requires
rdf:resource="http://scripts.sil.org/pub/OFL/DerivativeRenaming" />
<cc:requires
rdf:resource="http://scripts.sil.org/pub/OFL/BundlingWhenSelling" />
</cc:License>
</rdf:RDF>
</metadata>
</svg>

Before

Width:  |  Height:  |  Size: 4.0 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>placeholder</title><path d="M12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z" style="fill:#777"/></svg>

Before

Width:  |  Height:  |  Size: 266 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

BIN
img/platforms.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><circle cx="12" cy="12" r="12" style="fill:#fff;"/><path id="path1" d="M18.785,0.945l-0.663,2.571l-2.543,0.656l-0,0.262l2.543,0.656l0.663,2.571l0.248,-0l0.663,-2.571l2.599,-0.67l-0,-0.234l-2.599,-0.67l-0.663,-2.571l-0.248,0Z" style="fill-rule:nonzero;"/><path id="path2" d="M17.223,13.003c0,-4.744 -3.281,-7.186 -7.328,-7.186c-4.047,-0 -7.328,2.441 -7.328,7.186c0,4.406 2.783,6.792 6.383,7.142c1.862,3.047 4.532,4.006 7.473,3.14l0.214,-0.269l0.581,-2.899l-0.518,-0.282c-1.657,1.408 -4.32,1.406 -6.085,0.329c3.709,-0.272 6.608,-2.671 6.608,-7.161Zm-3.478,0c-0,3.264 -1.249,5.91 -3.849,5.91c-2.735,0 -3.849,-2.646 -3.849,-5.91c-0,-3.264 1.159,-5.91 3.849,-5.91c2.766,-0 3.849,2.646 3.849,5.91l-0,0Z"/></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>robot</title><path d="M12,2A2,2 0 0,1 14,4C14,4.74 13.6,5.39 13,5.73V7H14A7,7 0 0,1 21,14H22A1,1 0 0,1 23,15V18A1,1 0 0,1 22,19H21V20A2,2 0 0,1 19,22H5A2,2 0 0,1 3,20V19H2A1,1 0 0,1 1,18V15A1,1 0 0,1 2,14H3A7,7 0 0,1 10,7H11V5.73C10.4,5.39 10,4.74 10,4A2,2 0 0,1 12,2M7.5,13A2.5,2.5 0 0,0 5,15.5A2.5,2.5 0 0,0 7.5,18A2.5,2.5 0 0,0 10,15.5A2.5,2.5 0 0,0 7.5,13M16.5,13A2.5,2.5 0 0,0 14,15.5A2.5,2.5 0 0,0 16.5,18A2.5,2.5 0 0,0 19,15.5A2.5,2.5 0 0,0 16.5,13Z" style="fill:#F50057"/></svg>

Before

Width:  |  Height:  |  Size: 553 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 56 56" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><circle cx="27.8" cy="27.9" r="16.4" style="fill:#fff;"/><path id="path-2" d="M49.2,6.2l0.1,0c4,4.1 6.5,10.8 6.5,21.7c-0,10.9 -2.4,17.6 -6.5,21.7c-5.2,5.2 -12.8,6.2 -21.4,6.2c-8.6,0 -16.3,-1 -21.4,-6.2c-4,-4.1 -6.5,-10.8 -6.5,-21.7c0,-10.9 2.4,-17.6 6.4,-21.7c5.2,-5.2 12.8,-6.2 21.4,-6.2c8.6,0 16.3,1 21.4,6.2Zm-21.4,5.3c-9.051,0 -16.4,7.349 -16.4,16.4c0,9.051 7.349,16.4 16.4,16.4c9.051,0 16.4,-7.349 16.4,-16.4c0,-9.051 -7.349,-16.4 -16.4,-16.4Z" style="fill:url(#_Linear1);"/><path id="path-61" d="M42.877,21.44c-0.299,-0.644 -0.555,-1.151 -0.882,-1.756c0.702,-1.613 0.844,-2.811 0.305,-3.384c-1.6,-1.7 -8.9,2.8 -16.1,10c-7.2,7.2 -11.6,14.4 -10,16.1c0.575,0.611 1.893,0.536 3.673,-0.143c0.661,0.362 0.996,0.515 1.492,0.73c-5.077,3.057 -9.273,4.105 -11.065,2.313c-3.1,-3.1 2.3,-13.3 11.9,-23c9.6,-9.7 19.9,-15 23,-11.9c1.793,1.793 0.738,5.969 -2.323,11.04Z" style="fill:url(#_Linear2);fill-rule:nonzero;"/><defs><linearGradient id="_Linear1" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.52698e-15,57.6,-57.6,3.52698e-15,31.8,-7.2)"><stop offset="0" style="stop-color:#7043ef;stop-opacity:1"/><stop offset="1" style="stop-color:#3e14d8;stop-opacity:1"/></linearGradient><linearGradient id="_Linear2" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(36.0059,-36.0059,36.0059,36.0059,14.7317,35.3226)"><stop offset="0" style="stop-color:#8e99ff;stop-opacity:1"/><stop offset="1" style="stop-color:#40efef;stop-opacity:1"/></linearGradient></defs></svg>

Before

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><title>script-text-play</title><path d="M13.8 22H5C3.3 22 2 20.7 2 19V18H13.1C13 18.3 13 18.7 13 19C13 20.1 13.3 21.1 13.8 22M13.8 16H5V5C5 3.3 6.3 2 8 2H19C20.7 2 22 3.3 22 5V6H20V5C20 4.4 19.6 4 19 4S18 4.4 18 5V13.1C16.2 13.4 14.7 14.5 13.8 16M8 8H15V6H8V8M8 12H14V10H8V12M17 16V22L22 19L17 16Z" style="fill:#BF360C"/></svg>

Before

Width:  |  Height:  |  Size: 387 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 745 B

View File

@@ -1,56 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="50"
height="50"
viewBox="0 0 50 50"
fill="none"
version="1.1"
id="svg10"
sodipodi:docname="serpstat.svg"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs10" />
<sodipodi:namedview
id="namedview10"
pagecolor="#505050"
bordercolor="#ffffff"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
inkscape:deskcolor="#505050"
showgrid="false"
inkscape:zoom="12.76917"
inkscape:cx="22.201913"
inkscape:cy="36.024268"
inkscape:window-width="2880"
inkscape:window-height="1526"
inkscape:window-x="2869"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="svg10" />
<circle
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.667;stroke-linecap:round;stroke-linejoin:round"
id="path11"
cx="25"
cy="25"
r="25" />
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M 45.702134,8.3195919 H 17.013253 l 0.0014,0.00698 c -0.489237,0.019502 -0.882289,0.4220257 -0.882289,0.9206576 0,0.2646403 0.111311,0.5000213 0.287168,0.6685583 l -0.0042,0.0042 6.210894,6.2356742 c 0.361415,0.363527 0.361415,0.955483 0.0014,1.319011 l -10.21856,10.269285 c -0.262504,0.266037 -0.199286,0.714514 0.127823,0.892796 L 13.8082,29.33314 c 0.233591,0.128169 0.599277,0.101725 0.827326,-0.03614 0.316152,-0.190867 0.683107,-0.302294 1.077545,-0.302294 0.270772,0 0.526417,0.05577 0.76278,0.15184 0.133366,0.05427 0.284513,0.03764 0.391667,-0.05993 l 2.425861,-2.221484 c -0.0028,-0.04596 -0.01374,-0.09053 -0.01374,-0.137868 0,-1.184007 0.946951,-2.143659 2.115137,-2.143659 0.984133,0 1.80326,0.68253 2.039623,1.60454 l 2.351616,1.011267 c 0.07275,0.0306 0.152533,0.01813 0.218464,-0.02645 0.339476,-0.239595 0.74904,-0.383121 1.193013,-0.383121 0.210267,0 0.413606,0.03487 0.606091,0.0948 0.07147,0.02368 0.148375,0.007 0.203337,-0.04596 l 4.061355,-4.008587 c 0.05912,-0.05716 0.08937,-0.142141 0.08799,-0.224239 -0.03579,-2.106015 1.499463,-2.349768 2.102783,-2.370667 0.915313,-0.03475 1.68502,0.604589 1.969533,1.441615 0.02887,0.07944 0.08787,0.144911 0.167659,0.174125 l 2.572852,0.891411 c 0.09757,0.03475 0.200683,0.007 0.277585,-0.06132 0.373884,-0.342592 0.867278,-0.552974 1.410091,-0.552974 0.192485,0 0.527804,0.122627 0.722944,-0.09192 l 5.104482,-5.271851 c 0.08937,-0.09053 0.138792,-0.213096 0.138792,-0.342628 V 9.2527843 c 7e-6,-0.515345 -0.412328,-0.9331924 -0.920849,-0.9331924 z"
fill="#0c63f6"
id="path9"
style="stroke-width:1.15468" />
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="m 46.609134,20.648544 c 0,-0.277007 -0.332432,-0.415453 -0.523877,-0.21604 l -3.24984,3.351912 c -0.07113,0.07205 -0.09849,0.175973 -0.0821,0.277123 0.08348,0.551243 -0.02737,1.16761 -0.750886,1.846329 -0.381621,0.358759 -0.867164,0.605282 -1.388269,0.592811 -0.849381,-0.02356 -1.564704,-0.559556 -1.876582,-1.311713 -0.03279,-0.07898 -0.09434,-0.143988 -0.176435,-0.173086 l -2.684971,-0.932172 c -0.09295,-0.03186 -0.192831,-0.0083 -0.270772,0.05531 -0.361067,0.296406 -0.819243,0.476536 -1.319911,0.476536 -0.22701,0 -0.441779,-0.04572 -0.646967,-0.113621 0,0 -3.063704,3.001585 -4.15245,4.086058 -0.132672,0.134404 -0.134058,0.144103 -0.104033,0.414182 0,1.177309 -0.940947,2.13165 -2.104976,2.13165 -0.983439,0 -1.804069,-0.684146 -2.035235,-1.606618 -0.02459,-0.09422 -0.08476,-0.174588 -0.173663,-0.213384 l -1.994244,-0.855963 c -0.101145,-0.04572 -0.21477,-0.02356 -0.303679,0.04434 -0.35287,0.27285 -0.790493,0.439008 -1.266451,0.439008 -0.227125,0 -0.445936,-0.03741 -0.651122,-0.106576 -0.121703,-0.04018 -0.254375,-0.0194 -0.350099,0.06639 l -2.426438,2.221831 c -0.0821,0.07471 -0.12586,0.178628 -0.1381,0.289476 -0.106694,1.074774 -0.998565,1.914225 -2.089966,1.914225 -0.845339,0 -1.566089,-0.507019 -1.899906,-1.23562 -0.08753,-0.191099 -0.248833,-0.335088 -0.429424,-0.436237 l -2.731437,-1.493111 c -0.214735,-0.117778 -0.478717,-0.0776 -0.651053,0.09549 l -8.0821233,8.090478 -0.00274,0.0028 -0.010946,0.01109 0.00274,0.0014 c -0.1586565,0.16614 -0.2585034,0.39061 -0.2585034,0.639904 0,0.511061 0.4075942,0.925243 0.9136674,0.925243 H 29.209763 c 0.507365,0 1.217261,-0.29502 1.578329,-0.65655 l 0.519835,-0.522144 0.01502,-0.01524 6.221979,-6.242762 c 0.359682,-0.360144 0.946489,-0.360144 1.306171,0 l 6.204196,6.228906 c 0.166852,0.173087 0.396632,0.28255 0.655164,0.28255 0.503325,0 0.913697,-0.412797 0.913697,-0.922471 z"
fill="#0c63f6"
id="path10"
style="stroke-width:1.15468" />
</svg>

Before

Width:  |  Height:  |  Size: 4.8 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><circle cx="16" cy="16" r="16" style="fill:#ebebeb;"/><path d="M16.276,4.766c-0.759,0.126 -1.512,0.271 -2.267,0.44c-0.498,0.111 -0.993,0.213 -1.485,0.341c-0.452,0.122 -0.915,0.223 -1.36,0.374c-0.43,0.137 -0.851,0.284 -1.27,0.452c-0.826,0.332 -1.59,0.798 -2.263,1.381c-0.42,0.355 -0.796,0.758 -1.121,1.202c-0.223,0.319 -0.424,0.653 -0.599,1.001c-0.181,0.344 -0.28,0.726 -0.29,1.115c-0.004,1.128 0.68,2.071 1.473,2.773c0.264,0.225 0.538,0.438 0.819,0.639c0.846,0.598 1.738,1.128 2.668,1.585c0.948,0.469 1.912,0.921 2.879,1.351c0.919,0.407 1.852,0.75 2.8,1.078c0.274,0.089 0.549,0.181 0.82,0.277c0.862,0.299 1.734,0.569 2.583,0.886c0.534,0.202 1.094,0.386 1.627,0.636c0.565,0.239 1.104,0.538 1.606,0.891c0.329,0.243 0.606,0.551 0.812,0.905c0.208,0.354 0.325,0.754 0.34,1.164c0.012,0.391 -0.091,0.777 -0.298,1.109c-0.534,0.866 -1.462,1.453 -2.355,1.849c-1.331,0.584 -2.696,1.089 -4.086,1.512c-0.798,0.243 -1.589,0.481 -2.39,0.695c-0.801,0.224 -1.619,0.445 -2.426,0.657c-0.808,0.21 -1.616,0.402 -2.427,0.585c-0.461,0.106 -0.931,0.206 -1.392,0.303c-0.277,0.063 -0.549,0.12 -0.827,0.184c-0.581,0.127 -1.159,0.259 -1.746,0.388c-0.66,0.15 -1.322,0.3 -1.988,0.449c-0.188,0.043 -0.386,0.097 -0.574,0.144c-0.172,0.039 -0.814,0.191 -0.336,0.163c0.662,-0.037 2.431,-0.196 6.209,-0.721c1.374,-0.236 2.749,-0.439 4.117,-0.67c1.713,-0.29 3.409,-0.631 5.097,-1.048c0.481,-0.117 0.957,-0.243 1.441,-0.379c0.316,-0.093 0.628,-0.188 0.935,-0.289c1.328,-0.424 3.456,-1.174 3.956,-1.404c1.926,-0.875 3.122,-1.534 3.744,-3.097c0.221,-0.565 0.307,-1.174 0.253,-1.778c-0.066,-0.553 -0.242,-1.088 -0.519,-1.572c-0.275,-0.446 -0.613,-0.85 -1.005,-1.198c-0.697,-0.652 -1.478,-1.208 -2.322,-1.653c-0.237,-0.131 -0.478,-0.252 -0.723,-0.367c-0.307,-0.147 -0.614,-0.282 -0.918,-0.419c-0.435,-0.186 -0.874,-0.35 -1.319,-0.507c-1.155,-0.408 -2.322,-0.772 -3.487,-1.167c-0.655,-0.225 -1.303,-0.465 -1.935,-0.743c-0.272,-0.113 -0.538,-0.24 -0.796,-0.372c-0.308,-0.155 -0.609,-0.324 -0.904,-0.505c-0.363,-0.228 -0.957,-0.622 -0.793,-1.156c0.117,-0.378 0.515,-0.525 0.842,-0.662c0.305,-0.121 0.616,-0.222 0.934,-0.303c0.959,-0.252 1.939,-0.428 2.901,-0.64c0.284,-0.066 0.573,-0.128 0.857,-0.195c0.764,-0.148 1.516,-0.354 2.249,-0.617c0.619,-0.25 1.412,-0.658 1.639,-1.36c0.332,-1.022 -0.039,-2.129 -0.582,-2.994c-0.197,-0.309 -0.398,-0.614 -0.605,-0.919c-0.281,-0.412 -0.597,-0.8 -0.906,-1.194c-0.051,-0.067 -0.123,-0.115 -0.204,-0.136c-0.081,-0.021 -0.167,-0.013 -0.244,0.021c-0.189,0.069 -0.705,0.693 -4.839,1.515Z" style="fill:#c00;"/></svg>

Before

Width:  |  Height:  |  Size: 2.9 KiB

View File

@@ -1,168 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 240"><style>.pl1123__ring {animation: ringA 2s linear infinite;}
.pl1123__ring--a {stroke: currentColor;}
.pl1123__ring--b {animation-name: ringB;stroke: currentColor;}
.pl1123__ring--c {animation-name: ringC;stroke: currentColor;}
.pl1123__ring--d {animation-name: ringD;stroke: currentColor;}
@keyframes ringA {
from,4% {
stroke-dasharray: 0 660;
stroke-width: 20;
stroke-dashoffset: -330;
}
12% {
stroke-dasharray: 60 600;
stroke-width: 30;
stroke-dashoffset: -335;
}
32% {
stroke-dasharray: 60 600;
stroke-width: 30;
stroke-dashoffset: -595;
}
40%,54% {
stroke-dasharray: 0 660;
stroke-width: 20;
stroke-dashoffset: -660;
}
62% {
stroke-dasharray: 60 600;
stroke-width: 30;
stroke-dashoffset: -665;
}
82% {
stroke-dasharray: 60 600;
stroke-width: 30;
stroke-dashoffset: -925;
}
90%,
to {
stroke-dasharray: 0 660;
stroke-width: 20;
stroke-dashoffset: -990;
}
}
@keyframes ringB {
from,
12% {
stroke-dasharray: 0 220;
stroke-width: 20;
stroke-dashoffset: -110;
}
20% {
stroke-dasharray: 20 200;
stroke-width: 30;
stroke-dashoffset: -115;
}
40% {
stroke-dasharray: 20 200;
stroke-width: 30;
stroke-dashoffset: -195;
}
48%,
62% {
stroke-dasharray: 0 220;
stroke-width: 20;
stroke-dashoffset: -220;
}
70% {
stroke-dasharray: 20 200;
stroke-width: 30;
stroke-dashoffset: -225;
}
90% {
stroke-dasharray: 20 200;
stroke-width: 30;
stroke-dashoffset: -305;
}
98%,
to {
stroke-dasharray: 0 220;
stroke-width: 20;
stroke-dashoffset: -330;
}
}
@keyframes ringC {
from {
stroke-dasharray: 0 440;
stroke-width: 20;
stroke-dashoffset: 0;
}
8% {
stroke-dasharray: 40 400;
stroke-width: 30;
stroke-dashoffset: -5;
}
28% {
stroke-dasharray: 40 400;
stroke-width: 30;
stroke-dashoffset: -175;
}
36%,
58% {
stroke-dasharray: 0 440;
stroke-width: 20;
stroke-dashoffset: -220;
}
66% {
stroke-dasharray: 40 400;
stroke-width: 30;
stroke-dashoffset: -225;
}
86% {
stroke-dasharray: 40 400;
stroke-width: 30;
stroke-dashoffset: -395;
}
94%,
to {
stroke-dasharray: 0 440;
stroke-width: 20;
stroke-dashoffset: -440;
}
}
@keyframes ringD {
from,
8% {
stroke-dasharray: 0 440;
stroke-width: 20;
stroke-dashoffset: 0;
}
16% {
stroke-dasharray: 40 400;
stroke-width: 30;
stroke-dashoffset: -5;
}
36% {
stroke-dasharray: 40 400;
stroke-width: 30;
stroke-dashoffset: -175;
}
44%,
50% {
stroke-dasharray: 0 440;
stroke-width: 20;
stroke-dashoffset: -220;
}
58% {
stroke-dasharray: 40 400;
stroke-width: 30;
stroke-dashoffset: -225;
}
78% {
stroke-dasharray: 40 400;
stroke-width: 30;
stroke-dashoffset: -395;
}
86%,
to {
stroke-dasharray: 0 440;
stroke-width: 20;
stroke-dashoffset: -440;
}
}</style><circle class="pl1123__ring pl1123__ring--a" cx="120" cy="120" r="105" fill="none" stroke="#000" stroke-width="20" stroke-dasharray="0 660" stroke-dashoffset="-330" stroke-linecap="round"/><circle class="pl1123__ring pl1123__ring--b" cx="120" cy="120" r="35" fill="none" stroke="#000" stroke-width="20" stroke-dasharray="0 220" stroke-dashoffset="-110" stroke-linecap="round"/><circle class="pl1123__ring pl1123__ring--c" cx="85" cy="120" r="70" fill="none" stroke="#000" stroke-width="20" stroke-dasharray="0 440" stroke-linecap="round"/><circle class="pl1123__ring pl1123__ring--d" cx="155" cy="120" r="70" fill="none" stroke="#000" stroke-width="20" stroke-dasharray="0 440" stroke-linecap="round"/></svg>

Before

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -1,92 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
enable-background="new 0 0 365 365"
height="24"
viewBox="0 0 27.701553 27.701553"
width="24"
version="1.1"
id="svg11"
sodipodi:docname="uc.svg"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs11" />
<sodipodi:namedview
id="namedview11"
pagecolor="#505050"
bordercolor="#ffffff"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
inkscape:deskcolor="#505050"
inkscape:zoom="30.968831"
inkscape:cx="13.755766"
inkscape:cy="14.175543"
inkscape:window-width="2880"
inkscape:window-height="1526"
inkscape:window-x="2869"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="svg11" />
<linearGradient
id="a"
gradientTransform="matrix(0,-300,-300,0,144278,-70954.547)"
gradientUnits="userSpaceOnUse"
x1="-237.7318"
x2="-236.5152"
y1="480.3183"
y2="480.3183">
<stop
offset="0"
stop-color="#ff780b"
id="stop1" />
<stop
offset="1"
stop-color="#ffa322"
id="stop2" />
</linearGradient>
<g
id="g12"
transform="scale(0.07589467)">
<path
d="M 284.9,365 H 80.1 C 35.9,365 0,329.1 0,284.9 V 80.1 C 0,35.9 35.9,0 80.1,0 H 284.9 C 329.1,0 365,35.9 365,80.1 v 204.8 c 0,44.2 -35.9,80.1 -80.1,80.1 z"
fill="url(#a)"
id="path2"
style="fill:url(#a)" />
<g
fill="#ffffff"
id="g11">
<path
d="m 141.3,318.1 c -0.4,-0.1 -0.9,-0.3 -1.3,-0.4 -37.7,-10.6 -55.4,-52.5 -45.2,-86.5 5.4,-17.9 17,-31.1 32.1,-41.4 10.2,-6.9 20.7,-13.3 30.9,-20.2 14.5,-9.9 25.5,-22.8 31,-39.8 C 195.5,109 193.3,89.5 178.4,72.9 162.8,55.4 142.6,48.6 119.5,51.6 89.9,55.4 67.7,71 51.6,95.8 c -0.7,1 -1.1,2.1 -1.7,3.2 6.7,-4.3 13.6,-7.1 21.3,-8 15.6,-1.9 30.6,8.4 33.5,23.4 2.3,11.5 -0.7,22.1 -7.6,31.2 -7.3,9.7 -15.4,18.9 -23.3,28.2 -18.3,21.3 -27.8,45.5 -23.8,73.9 3.3,23.9 15.5,42.5 35.3,55.9 16.8,11.3 36,14.6 56,14.5"
id="path3" />
<path
d="m 191.4,164.5 c 10.8,-0.1 21.4,2 31.8,5 14.9,4.3 28.8,10.7 41.9,18.8 12.4,7.7 25.7,9.9 39.9,7.5 2.8,-0.5 5.5,-1.4 8.1,-2.4 0.9,-0.4 2,-1.8 2,-2.8 0.2,-3.4 0.2,-6.9 -0.1,-10.3 -1,-11.6 -4.7,-22.3 -11.3,-31.9 -8,-11.7 -19.2,-19 -32.4,-23.5 -2.2,-0.8 -3.1,-1.9 -3.5,-4 -0.6,-3 -1.5,-5.9 -2.5,-8.8 -2,-5.4 -4.7,-10.5 -9.3,-14.7 -0.8,1 -1.6,1.8 -2.2,2.7 -6.3,9 -8.8,19.3 -8.8,30.1 0,3.1 -0.9,5.4 -3.4,7 -6.9,4.5 -13.5,9.5 -20.8,13.4 -9.4,5.2 -19.5,9.4 -29.4,13.9"
id="path4" />
<path
d="m 229,295.7 c 3.3,-9.6 4.9,-18.8 4.8,-28.3 -0.1,-12.5 -2.3,-24.6 -8.6,-35.4 -14.3,-24.4 -35.7,-37.1 -64.2,-36.9 -14.1,0.1 -26.6,4.9 -36.9,14.9 -5,4.9 -8.9,10.6 -11.8,17.8 26.8,-28.3 70.3,-19.8 86.9,5.7 10.1,15.5 12.6,32.1 6.6,49.6 -6,17.6 -19,28.5 -36.1,35.2 31.9,-0.1 63.6,-0.5 96.1,-3.5 C 258,299 243.9,296.8 229,295.7"
id="path5" />
<path
d="m 316.4,229.3 c -0.3,-5.8 -3.2,-9.7 -7.5,-12.6 -5.3,-3.5 -11.5,-4.5 -17.7,-5 -11.3,-1 -22.1,-3.7 -32.1,-9.2 -8.5,-4.7 -16.7,-10.1 -25.4,-14.4 -13.8,-6.7 -28.5,-10 -43.7,-11.4 -10.4,-1 -20.6,-0.1 -30.6,3.1 -1.2,0.4 -2.3,1 -3.4,1.5 1.3,0.5 2.4,0.5 3.5,0.5 11.7,-0.3 23.2,1.4 34.2,5.5 22.8,8.7 39.4,24.5 51.1,45.5 1.1,2 2.5,3.5 4.6,3.7 5.3,0.5 10.7,1.2 16.1,0.9 6.9,-0.4 13,-3.5 19.2,-6.4 7.3,-3.4 14.9,-5.1 23,-3.8 2.6,0.6 5.4,1.3 8.7,2.1"
id="path6" />
<path
d="m 141.3,318.1 c -20,0.1 -39.2,-3.2 -56,-14.5 -19.8,-13.4 -32,-32 -35.3,-55.9 -3.9,-28.4 5.5,-52.6 23.9,-73.9 8,-9.2 16,-18.4 23.3,-28.2 6.9,-9.1 9.9,-19.7 7.6,-31.2 C 101.9,99.4 86.9,89.1 71.3,91 63.6,91.9 56.7,94.7 50,99 c 0.6,-1.1 1.1,-2.2 1.7,-3.2 16,-24.8 38.2,-40.5 67.8,-44.3 23.1,-3 43.2,3.8 58.9,21.3 14.9,16.6 17.1,36.1 10.4,56.9 -5.5,17 -16.5,29.9 -31,39.8 -10.2,6.9 -20.7,13.3 -30.9,20.2 -15.1,10.3 -26.7,23.6 -32.1,41.4 -10.3,34 7.5,75.9 45.2,86.5 0.4,0.2 0.8,0.3 1.3,0.5"
id="path7" />
<path
d="m 191.4,164.5 c 9.9,-4.6 19.9,-8.8 29.5,-13.9 7.3,-3.9 13.9,-8.9 20.8,-13.4 2.5,-1.6 3.4,-3.9 3.4,-7 0,-10.8 2.5,-21 8.8,-30.1 0.6,-0.9 1.3,-1.6 2.2,-2.7 4.5,4.2 7.2,9.3 9.3,14.7 1,2.9 1.9,5.8 2.5,8.8 0.5,2.1 1.3,3.3 3.5,4 13.2,4.4 24.4,11.8 32.4,23.5 6.6,9.6 10.3,20.3 11.3,31.9 0.3,3.4 0.3,6.9 0.1,10.3 -0.1,1 -1.1,2.4 -2,2.8 -2.6,1.1 -5.4,2 -8.1,2.4 -14.2,2.4 -27.5,0.2 -39.9,-7.5 -13.1,-8.1 -27,-14.6 -41.9,-18.8 -10.5,-3 -21.1,-5.1 -31.9,-5"
id="path8" />
<path
d="m 229,295.7 c 14.9,1.1 29,3.4 36.9,19 -32.5,2.9 -64.2,3.4 -96.1,3.5 17.1,-6.7 30.1,-17.6 36.1,-35.2 6,-17.5 3.4,-34.1 -6.6,-49.6 -16.6,-25.5 -60.1,-34 -86.9,-5.7 2.9,-7.2 6.7,-12.9 11.8,-17.8 10.2,-10 22.8,-14.8 36.9,-14.9 28.5,-0.2 49.9,12.6 64.2,36.9 6.3,10.8 8.5,22.9 8.6,35.4 0,9.6 -1.6,18.8 -4.9,28.4"
id="path9" />
<path
d="m 316.4,229.3 c -3.3,-0.7 -6.1,-1.5 -8.9,-2 -8,-1.3 -15.7,0.4 -23,3.8 -6.2,2.9 -12.3,6 -19.2,6.4 -5.3,0.3 -10.7,-0.4 -16.1,-0.9 -2.1,-0.2 -3.5,-1.7 -4.6,-3.7 -11.8,-21.1 -28.3,-36.9 -51.1,-45.5 -11,-4.2 -22.4,-5.8 -34.2,-5.5 -1.1,0 -2.1,0 -3.5,-0.5 1.1,-0.5 2.2,-1.1 3.4,-1.5 10,-3.2 20.1,-4.1 30.6,-3.1 15.2,1.4 30,4.7 43.7,11.4 8.7,4.3 16.9,9.7 25.4,14.4 10,5.5 20.8,8.2 32.1,9.2 6.2,0.6 12.4,1.5 17.7,5 4.5,2.8 7.4,6.7 7.7,12.5"
id="path10" />
<path
d="m 152.9,226.4 c -21.5,0 -39,17.4 -39,38.8 -0.1,21.6 17.4,39 39.1,38.9 21.6,0 38.8,-17.3 38.8,-38.9 -0.1,-21.5 -17.4,-38.8 -38.9,-38.8 z m -0.3,56.8 c -9.8,0 -17.8,-8.1 -17.9,-17.9 0,-9.8 8.2,-18 18.1,-18 9.9,0 18,8.2 17.9,18.1 -0.1,10.1 -7.9,17.8 -18.1,17.8 z"
id="path11" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.8 KiB

View File

@@ -1,59 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="23.999901"
height="23.999901"
viewBox="0 0 23.999901 23.999901"
fill="none"
version="1.1"
id="svg11"
sodipodi:docname="vivaldi.svg"
inkscape:version="1.4 (86a8ad7, 2024-10-11)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview11"
pagecolor="#505050"
bordercolor="#ffffff"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
inkscape:deskcolor="#505050"
inkscape:zoom="19.239437"
inkscape:cx="41.399341"
inkscape:cy="10.759151"
inkscape:window-width="2880"
inkscape:window-height="1526"
inkscape:window-x="2869"
inkscape:window-y="-11"
inkscape:window-maximized="1"
inkscape:current-layer="svg11" />
<path
d="m 11.9999,23.9999 c 5.2586,0 8.1808,0 10.0904,-1.9096 1.9096,-1.9096 1.9096,-4.8318 1.9096,-10.0904 0,-5.25852 0,-8.18075 -1.9096,-10.09033 C 20.1807,0 17.2585,0 11.9999,0 6.74138,0 3.81554,0 1.90958,1.90957 0.00361653,3.81915 0,6.74138 0,11.9999 c 0,5.2586 -1.72454e-7,8.1808 1.90958,10.0904 1.90957,1.9096 4.8318,1.9096 10.09032,1.9096 z"
fill="#ef3939"
id="path8" />
<path
d="M 18.357,5.63297 C 17.0983,4.37517 15.495,3.51886 13.7499,3.17229 12.0047,2.82572 10.196,3.00445 8.55243,3.68589 6.90881,4.36733 5.50407,5.52088 4.51577,7.00073 3.52747,8.48058 2.99999,10.2203 2.99999,11.9999 c 0,1.7797 0.52748,3.5194 1.51578,4.9993 0.9883,1.4798 2.39304,2.6334 4.03666,3.3148 1.64357,0.6814 3.45227,0.8602 5.19747,0.5136 1.7451,-0.3466 3.3484,-1.2029 4.6071,-2.4607 0.8377,-0.8351 1.5024,-1.8274 1.9559,-2.92 0.4535,-1.0926 0.687,-2.2639 0.687,-3.447 0,-1.183 -0.2335,-2.35436 -0.687,-3.44694 C 19.8594,7.46037 19.1947,6.46808 18.357,5.63297 Z m -0.5395,4.14324 c -1.4846,2.58349 -2.9679,5.16579 -4.45,7.74689 -0.1169,0.2288 -0.2911,0.4235 -0.5056,0.565 -0.2144,0.1415 -0.4619,0.2251 -0.7182,0.2426 -0.283,0.0316 -0.5689,-0.023 -0.8203,-0.1568 C 11.0721,18.0401 10.867,17.8334 10.7352,17.581 9.7974,15.9657 8.86685,14.3396 7.9363,12.717 7.36663,11.7319 6.79937,10.7444 6.23452,9.75448 6.10043,9.53221 6.02649,9.27885 6.01996,9.01933 6.01343,8.75981 6.07454,8.50305 6.19728,8.27431 6.32002,8.04557 6.50017,7.85273 6.72001,7.71473 6.93985,7.57674 7.19181,7.49836 7.45111,7.48729 7.73024,7.47017 8.00836,7.53424 8.25187,7.67178 8.49539,7.80931 8.69389,8.01442 8.8234,8.26234 c 0.42001,0.72434 0.83278,1.44868 1.2456,2.17306 0.3005,0.5215 0.5901,1.043 0.8979,1.5573 0.1957,0.3554 0.4798,0.6542 0.8249,0.8675 0.3452,0.2132 0.7395,0.3335 1.1448,0.3494 0.6156,0.0381 1.2222,-0.1621 1.6941,-0.5593 0.4719,-0.3972 0.7728,-0.9607 0.8405,-1.5739 0,-0.0978 0,-0.1956 0.0217,-0.2463 0.0022,-0.3875 -0.0846,-0.7703 -0.2534,-1.11908 -0.1036,-0.1921 -0.1638,-0.40453 -0.1766,-0.6224 -0.0128,-0.21786 0.0223,-0.43588 0.1027,-0.63875 0.0804,-0.20288 0.2043,-0.38569 0.3628,-0.53562 0.1586,-0.14993 0.348,-0.26333 0.555,-0.33227 0.207,-0.06893 0.4266,-0.09172 0.6434,-0.06676 0.2167,0.02496 0.4254,0.09706 0.6113,0.21124 0.186,0.11418 0.3447,0.26768 0.465,0.44972 0.1203,0.18204 0.1994,0.38822 0.2316,0.60406 0.0408,0.34694 -0.0357,0.69755 -0.2172,0.99597 z"
fill="#ffffff"
id="path10" />
<defs
id="defs11">
<linearGradient
id="paint0_linear"
x1="7.4818001"
y1="4.2225299"
x2="18.940599"
y2="24.0763"
gradientUnits="userSpaceOnUse">
<stop
stop-opacity="0.2"
id="stop10" />
<stop
offset="0.79"
stop-opacity="0.05"
id="stop11" />
</linearGradient>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 3.7 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><path d="M0,3.382l9.733,-1.325l0.004,9.388l-9.728,0.055l-0.009,-8.118Zm9.728,9.145l0.008,9.396l-9.728,-1.338l-0.001,-8.121l9.721,0.063Zm1.18,-10.644l12.905,-1.883l-0,11.326l-12.905,0.102l-0,-9.545Zm12.908,10.732l-0.003,11.275l-12.905,-1.822l-0.018,-9.474l12.926,0.021Z" style="fill:#0078d6;fill-rule:nonzero;"/></svg>

Before

Width:  |  Height:  |  Size: 757 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><path d="M12,0c6.628,0 12,5.373 12,12c-0,6.628 -5.372,12 -12,12c-6.628,-0 -12,-5.372 -12,-12c0,-6.627 5.372,-12 12,-12Z" style="fill:#720e9e;fill-rule:nonzero;"/><path d="M17.494,9.473l0.013,-0.003l0.398,-0.442l-0.02,-0.002l0.042,-0.066l-5.569,0l0.215,0.762l1.52,0l-2.558,2.367c-0.522,-0.762 -1.745,-2.511 -2.599,-3.824l1.586,0l0,-0.54l0.022,-0.155l-0.022,-0.003l0,-0.063l-6.021,-0l-0,0.761l1.883,0c0.731,0.604 3.901,4.453 4.017,4.82c0.046,0.345 0.113,2.376 -0.024,2.529c-0.164,0.237 -1.88,0.109 -2.182,0.132l-0.011,0.746c0.552,0.016 2.208,-0.001 2.767,-0.001c1.101,0 3.029,-0.028 3.3,-0.007l0.034,-0.706l-2.216,-0.033c-0.046,-0.321 -0.097,-2.342 -0.051,-2.562c0.209,-0.64 3.61,-3.288 3.959,-3.387l0.33,-0.074l1.027,-0c-0,-0.001 0.16,-0.249 0.16,-0.249Zm-0.831,5.28l0.963,0.074l1.123,-4.118c-0.187,-0.007 -1.891,-0.159 -2.112,-0.2l0.026,4.244Zm-0.166,0.66l0.005,1.006l0.488,0.041l0.526,0.036l0.155,-0.984l-0.555,-0.025c-0,-0 -0.619,-0.074 -0.619,-0.074Z" style="fill:#fff;fill-rule:nonzero;"/></svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><path d="M0,12c0,-6.628 5.371,-12 12,-12c6.626,0 12,5.372 12,12c0,6.628 -5.374,12 -12,12c-6.629,0 -12,-5.372 -12,-12Z" style="fill:#fc3f1d;fill-rule:nonzero;"/><path d="M13.536,6.799l-1.109,0c-2.033,0 -3.102,1.03 -3.102,2.548c0,1.716 0.739,2.52 2.257,3.551l1.254,0.844l-3.603,5.385l-2.693,-0l3.234,-4.817c-1.86,-1.333 -2.904,-2.628 -2.904,-4.818c0,-2.746 1.914,-4.62 5.544,-4.62l3.604,0l-0,14.242l-2.482,-0l0,-12.315Z" style="fill:#fff;fill-rule:nonzero;"/></svg>

Before

Width:  |  Height:  |  Size: 903 B

View File

@@ -1,7 +1,7 @@
base botmon
author Sascha Leib
email ad@hominem.com
date 2025-09-11
date 2025-09-12
name Bot Monitoring
desc Live monitoring of bot traffic on your DokuWiki instance (under development)
url https://www.dokuwiki.org/plugin:botmon

View File

@@ -7,27 +7,16 @@ if (!$json) {
die("Invalid JSON Data.");
}
// select the session identifier?
$sessionId = $_COOKIE['DokuWiki'] ?? '';
$sessionType = 'dw';
if ($sessionId == '') {
$sessionId = $_SERVER['REMOTE_ADDR'] ?? '';
if ($sessionId == '127.0.0.1' || $sessionId == '::1') {
$sessionId = 'localhost';
}
$sessionType = 'ip';
}
// check if valid session id string:
if (strlen($sessionId) < 46 && !preg_match('/^[\w\d\.:]+$/', $sessionId)) {
$sessionId = 'invalid-session-id';
}
// what is the session identifier?
$sessionId = preg_replace('/[\x00-\x1F{};\"\']/', "\u{FFFD}", $json['id']) /* clean json parameter */
?? session_id()
?? $_SERVER['REMOTE_ADDR'];
// clean the page ID
$pageId = preg_replace('/[\x00-\x1F{};]/', "\u{FFFD}", $json['pg'] ?? '');
$pageId = preg_replace('/[\x00-\x1F{};\"\']/', "\u{FFFD}", $json['pg'] ?? '');
// clean the user-name
$userName = preg_replace('/[\x00-\x1F]/', "\u{FFFD}", $json['u'] ?? '');
$userName = preg_replace('/[\x00-\x1F\"]/', "\u{FFFD}", $json['u'] ?? '');
// check load time
$loadTime = $json['lt'] ?? '';

294
script.js
View File

@@ -1,6 +1,6 @@
"use strict";
/* DokuWiki BotMon Plugin Script file */
/* 06.09.2025 - 0.2.0 - beta */
/* 12.09.2025 - 0.3.0 - beta */
/* Author: Sascha Leib <ad@hominem.info> */
// enumeration of user types:
@@ -21,6 +21,7 @@ const BotMon = {
// find the plugin basedir:
this._baseDir = document.currentScript.src.substring(0, document.currentScript.src.indexOf('/exe/'))
+ '/plugins/botmon/';
this._DWBaseDir = document.currentScript.src.substring(0, document.currentScript.src.indexOf('/lib/')) + '/';
// read the page language from the DOM:
this._lang = document.getRootNode().documentElement.lang || this._lang;
@@ -33,6 +34,7 @@ const BotMon = {
},
_baseDir: null,
_DWBaseDir: null,
_lang: 'en',
_today: (new Date()).toISOString().slice(0, 10),
_timeDiff: '',
@@ -242,20 +244,20 @@ BotMon.live = {
// shortcut to make code more readable:
const model = BotMon.live.data.model;
const timeout = 60 * 60 * 1000; /* session timeout: One hour */
const timeout = 60 * 60 * 1000; // session timeout: One hour
// loop over all visitors already registered:
for (let i=0; i<model._visitors.length; i++) {
const v = model._visitors[i];
if (visitor._type == BM_USERTYPE.KNOWN_BOT) { /* known bots */
if (visitor._type == BM_USERTYPE.KNOWN_BOT) { // known bots
// bots match when their ID matches:
if (v._bot && v._bot.id == visitor._bot.id) {
return v;
}
} else if (visitor._type == BM_USERTYPE.KNOWN_USER) { /* registered users */
} else { /*if (visitor._type == BM_USERTYPE.KNOWN_USER) { // registered users
// visitors match when their names match:
if ( v.usr == visitor.usr
@@ -263,19 +265,13 @@ BotMon.live = {
&& v.agent == visitor.agent) {
return v;
}
} else { /* any other visitor */
} else { // any other visitor
if (Math.abs(v._lastSeen - visitor.ts) < timeout) { /* ignore timed out visits */
if ( v.id == visitor.id) { /* match the pre-defined IDs */
return v;
} else if (v.ip == visitor.ip && v.agent == visitor.agent) {
if (v.typ !== 'ip') {
console.warn(`Visitor ID “${v.id}” not found, using matchin IP + User-Agent instead.`);
}
if (Math.abs(v._lastSeen - visitor.ts) < timeout) { // ignore timed out visits */
if ( v.id == visitor.id) { // match the DW/PHP IDs
return v;
}
}
/*}*/
}
}
return null; // nothing found
@@ -308,17 +304,23 @@ BotMon.live = {
// enrich new visitor with relevant data:
if (!nv._bot) nv._bot = bot ?? null; // bot info
nv._type = ( bot ? BM_USERTYPE.KNOWN_BOT : ( nv.usr && nv.usr !== '' ? BM_USERTYPE.KNOWN_USER : BM_USERTYPE.UNKNOWN ) );
if (!nv._firstSeen) nv._firstSeen = nv.ts;
nv._lastSeen = nv.ts;
if (!nv.geo ||nv.geo === '') nv.geo = 'ZZ';
nv._type = ( bot ? BM_USERTYPE.KNOWN_BOT : ( nv.usr && nv.usr !== '' ? BM_USERTYPE.KNOWN_USER : BM_USERTYPE.UNKNOWN ) ); // user type
if (bot && bot.geo) {
if (!nv.geo || nv.geo == '' || nv.geo == 'ZZ') nv.geo = bot.geo;
} else if (!nv.geo ||nv.geo == '') {
nv.geo = 'ZZ';
}
// update first and last seen:
if (!nv._firstSeen) nv._firstSeen = nv.ts; // first-seen
nv._lastSeen = nv.ts; // last-seen
// country name:
try {
nv._country = "Undefined";
if (nv.geo && nv.geo !== '') {
nv._country = ( nv.geo == 'local' ? "localhost" : "Unknown" );
if (nv.geo && nv.geo !== '' && nv.geo !== 'ZZ' && nv.geo !== 'local') {
const countryName = new Intl.DisplayNames(['en', BotMon._lang], {type: 'region'});
nv._country = countryName.of(nv.geo) ?? "Unknown";
nv._country = countryName.of(nv.geo) ?? nv.geo;
}
} catch (err) {
console.error(err);
@@ -883,7 +885,7 @@ BotMon.live = {
// Load the list of known bots:
BotMon.live.gui.status.showBusy("Loading known bots …");
const url = BotMon._baseDir + 'config/known-bots.json';
const url = BotMon._baseDir + 'conf/known-bots.json';
try {
const response = await fetch(url);
if (!response.ok) {
@@ -921,6 +923,7 @@ BotMon.live = {
botInfo = {
n : bot.n,
id: bot.id,
geo: (bot.geo ? bot.geo : null),
url: bot.url,
v: (rxr.length > 1 ? rxr[1] : -1)
};
@@ -958,7 +961,7 @@ BotMon.live = {
// Load the list of known bots:
BotMon.live.gui.status.showBusy("Loading known clients");
const url = BotMon._baseDir + 'config/known-clients.json';
const url = BotMon._baseDir + 'conf/known-clients.json';
try {
const response = await fetch(url);
if (!response.ok) {
@@ -1024,7 +1027,7 @@ BotMon.live = {
// Load the list of known bots:
BotMon.live.gui.status.showBusy("Loading known platforms");
const url = BotMon._baseDir + 'config/known-platforms.json';
const url = BotMon._baseDir + 'conf/known-platforms.json';
try {
const response = await fetch(url);
if (!response.ok) {
@@ -1090,7 +1093,26 @@ BotMon.live = {
// Load the list of known bots:
BotMon.live.gui.status.showBusy("Loading list of rules …");
const url = BotMon._baseDir + 'config/botmon-config.json';
// relative file path to the rules file:
const filePath = 'conf/botmon-config.json';
// check if the user has a configuration file in their DokuWiki installation,
// then load the appropriate file:
this._checkForUserConfig( filePath, (hasUserConfig) => {
this._loadrulesFile(( hasUserConfig ? BotMon._DWBaseDir : BotMon._baseDir ) + filePath);
});
},
/**
* Loads the list of rules and settings from a JSON file.
* @param {String} url - the URL from which to load the rules file.
*/
_loadrulesFile: async function(url) {
//console.info('BotMon.live.data.rules._loadrulesFile(',url,')');}
const me = BotMon.live.data.rules;
try {
const response = await fetch(url);
if (!response.ok) {
@@ -1100,12 +1122,11 @@ BotMon.live = {
const json = await response.json();
if (json.rules) {
this._rulesList = json.rules;
me._rulesList = json.rules;
}
if (json.threshold) {
this._threshold = json.threshold;
}
// override the threshold?
if (json.threshold) me._threshold = json.threshold;
if (json.ipRanges) {
// clean up the IPs first:
@@ -1119,10 +1140,10 @@ BotMon.live = {
list.push(item);
});
this._botIPs = list;
me._botIPs = list;
}
this._ready = true;
me._ready = true;
} catch (error) {
BotMon.live.gui.status.setError("Error while loading the rules file: " + error.message);
@@ -1132,6 +1153,28 @@ BotMon.live = {
}
},
/**
* Checks if the user has a configuration file in their DokuWiki installation.
* @param {function} whenDone - an optional callback function to call when the check is finished.
*/
_checkForUserConfig: async function(filePath, whenDone = undefined) {
//console.info('BotMon.live.data.rules._checkForUserConfig()');
let hasUserConfig = false;
try {
const response = await fetch(BotMon._DWBaseDir + '/' + filePath, {
method: 'HEAD'
});
hasUserConfig = response.ok;
} catch (err) {
console.info("An error occured while trying to check for a user configuration file:", err);
} finally {
if (whenDone) {
whenDone(hasUserConfig);
}
}
},
_rulesList: [], // list of rules to find out if a visitor is a bot
_threshold: 100, // above this, it is considered a bot.
@@ -1306,7 +1349,7 @@ BotMon.live = {
matchesCountry: function(visitor, ...countries) {
// ingore if geoloc is not set or unknown:
if (visitor.geo && visitor.geo !== 'ZZ') {
if (visitor.geo) {
return (countries.indexOf(visitor.geo) >= 0);
}
return false;
@@ -1349,11 +1392,11 @@ BotMon.live = {
},
/**
* Loads a log file (server, page load, or ticker) and parses it.
* @param {String} type - the type of the log file to load (srv, log, or tck)
* @param {Function} [onLoaded] - an optional callback function to call after loading is finished.
*/
/**
* Loads a log file (server, page load, or ticker) and parses it.
* @param {String} type - the type of the log file to load (srv, log, or tck)
* @param {Function} [onLoaded] - an optional callback function to call after loading is finished.
*/
loadLogFile: async function(type, onLoaded = undefined) {
//console.info('BotMon.live.data.loadLogFile(',type,')');
@@ -1389,50 +1432,56 @@ BotMon.live = {
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`${response.status} ${response.statusText}`);
}
const logtxt = await response.text();
logtxt.split('\n').forEach((line) => {
if (line.trim() === '') return; // skip empty lines
const cols = line.split('\t');
// assign the columns to an object:
const data = {};
cols.forEach( (colVal,i) => {
colName = columns[i] || `col${i}`;
const colValue = (colName == 'ts' ? new Date(colVal) : colVal.trim());
data[colName] = colValue;
});
// register the visit in the model:
switch(type) {
case 'srv':
BotMon.live.data.model.registerVisit(data, type);
break;
case 'log':
data.typ = 'js';
BotMon.live.data.model.updateVisit(data);
break;
case 'tck':
data.typ = 'js';
BotMon.live.data.model.updateTicks(data);
break;
default:
console.warn(`Unknown log type ${type}.`);
return;
} else {
// parse the data:
const logtxt = await response.text();
if (logtxt.length <= 0) {
throw new Error(`Empty log file ${url}.`);
}
});
if (onLoaded) {
onLoaded(); // callback after loading is finished.
logtxt.split('\n').forEach((line) => {
if (line.trim() === '') return; // skip empty lines
const cols = line.split('\t');
// assign the columns to an object:
const data = {};
cols.forEach( (colVal,i) => {
colName = columns[i] || `col${i}`;
const colValue = (colName == 'ts' ? new Date(colVal) : colVal.trim());
data[colName] = colValue;
});
// register the visit in the model:
switch(type) {
case 'srv':
BotMon.live.data.model.registerVisit(data, type);
break;
case 'log':
data.typ = 'js';
BotMon.live.data.model.updateVisit(data);
break;
case 'tck':
data.typ = 'js';
BotMon.live.data.model.updateTicks(data);
break;
default:
console.warn(`Unknown log type ${type}.`);
return;
}
});
}
} catch (error) {
BotMon.live.gui.status.setError(`Error while loading the ${typeName} log file: ${error.message}.`);
} finally {
BotMon.live.gui.status.hideBusy("Status: Done.");
if (onLoaded) {
onLoaded(); // callback after loading is finished.
}
}
}
},
@@ -1443,7 +1492,14 @@ BotMon.live = {
this.lists.init();
},
/* The Overview / web metrics section of the live tab */
overview: {
/**
* Populates the overview part of the today tab with the analytics data.
*
* @method make
* @memberof BotMon.live.gui.overview
*/
make: function() {
const data = BotMon.live.data.analytics.data;
@@ -1486,29 +1542,29 @@ BotMon.live = {
}
// update known bots list:
const botlist = document.getElementById('botmon__botslist');
botlist.innerHTML = "<dt>Known bots (top 4)</dt>";
const botlist = document.getElementById('botmon__botslist'); /* Known bots */
botlist.innerHTML = "<dt>Known bots (top 5)</dt>";
let bots = BotMon.live.data.analytics.groups.knownBots.toSorted( (a, b) => {
return b._pageViews.length - a._pageViews.length;
});
for (let i=0; i < Math.min(bots.length, 4); i++) {
for (let i=0; i < Math.min(bots.length, 5); i++) {
const dd = makeElement('dd');
dd.appendChild(makeElement('span', {'class': 'bot bot_' + bots[i]._bot.id }, bots[i]._bot.n));
dd.appendChild(makeElement('strong', undefined, bots[i]._pageViews.length));
dd.appendChild(makeElement('span', {'class': 'has_icon bot bot_' + bots[i]._bot.id }, bots[i]._bot.n));
dd.appendChild(makeElement('span', undefined, bots[i]._pageViews.length));
botlist.appendChild(dd);
}
// update the suspected bot IP ranges list:
const botIps = document.getElementById('botmon__today__botips');
if (botIps) {
botIps.appendChild(makeElement('dt', {}, "Bot IP ranges (top 4)"));
botIps.appendChild(makeElement('dt', {}, "Bot IP ranges (top 5)"));
const ipList = BotMon.live.data.analytics.getTopBotIPRanges(4);
const ipList = BotMon.live.data.analytics.getTopBotIPRanges(5);
ipList.forEach( (ipInfo) => {
const li = makeElement('dd');
li.appendChild(makeElement('span', {'class': 'ip ip' + ipInfo.typ }, ipInfo.ip));
li.appendChild(makeElement('span', {'class': 'has_icon ipaddr ip' + ipInfo.typ }, ipInfo.ip));
li.appendChild(makeElement('span', {'class': 'count' }, ipInfo.num));
botIps.append(li)
});
@@ -1517,11 +1573,11 @@ BotMon.live = {
// update the top bot countries list:
const botCountries = document.getElementById('botmon__today__countries');
if (botCountries) {
botCountries.appendChild(makeElement('dt', {}, "Bot Countries (top 4)"));
const countryList = BotMon.live.data.analytics.getCountryList('likely_bot', 4);
botCountries.appendChild(makeElement('dt', {}, "Bot Countries (top 5)"));
const countryList = BotMon.live.data.analytics.getCountryList('likely_bot', 5);
countryList.forEach( (cInfo) => {
const cLi = makeElement('dd');
cLi.appendChild(makeElement('span', {'class': 'country ctry_' + cInfo.iso }, cInfo.name));
cLi.appendChild(makeElement('span', {'class': 'has_icon country ctry_' + cInfo.iso.toLowerCase() }, cInfo.name));
cLi.appendChild(makeElement('span', {'class': 'count' }, cInfo.count));
botCountries.appendChild(cLi);
});
@@ -1569,7 +1625,7 @@ BotMon.live = {
if (clientList) {
clientList.forEach( (cInfo) => {
const cDd = makeElement('dd');
cDd.appendChild(makeElement('span', {'class': 'has_icon client_' + cInfo.id }, ( cInfo.name ? cInfo.name : cInfo.id)));
cDd.appendChild(makeElement('span', {'class': 'has_icon client cl_' + cInfo.id }, ( cInfo.name ? cInfo.name : cInfo.id)));
cDd.appendChild(makeElement('span', {
'class': 'count',
'title': cInfo.count + " page views"
@@ -1589,7 +1645,7 @@ BotMon.live = {
if (pfList) {
pfList.forEach( (pInfo) => {
const pDd = makeElement('dd');
pDd.appendChild(makeElement('span', {'class': 'has_icon client_' + pInfo.id }, ( pInfo.name ? pInfo.name : pInfo.id)));
pDd.appendChild(makeElement('span', {'class': 'has_icon platform pf_' + pInfo.id }, ( pInfo.name ? pInfo.name : pInfo.id)));
pDd.appendChild(makeElement('span', {
'class': 'count',
'title': pInfo.count + " page views"
@@ -1622,7 +1678,7 @@ BotMon.live = {
BotMon.live.gui.status._errorCount += 1;
const el = document.getElementById('botmon__today__status');
if (el) {
el.innerText = "An error occured. See the browser log for details!";
el.innerText = "An error occurred. Data may be incomplete! See browser console for details";
el.classList.add('error');
}
},
@@ -1688,8 +1744,8 @@ BotMon.live = {
'data-loaded': false
});
const title = details.appendChild(makeElement('summary'));
title.appendChild(makeElement('span', {'class':'title'}, listTitle));
title.appendChild(makeElement('span', {'class':'counter'}, ''));
title.appendChild(makeElement('span', {'class': 'title'}, listTitle));
title.appendChild(makeElement('span', {'class': 'counter'}));
details.addEventListener("toggle", this._onDetailsToggle);
parent.appendChild(details);
@@ -1731,6 +1787,8 @@ BotMon.live = {
const make = BotMon.t._makeElement;
let ipType = ( data.ip.indexOf(':') >= 0 ? '6' : '4' );
if (data.ip == '127.0.0.1' || data.ip == '::1' ) ipType = '0';
const platformName = (data._platform ? data._platform.n : 'Unknown');
const clientName = (data._client ? data._client.n: 'Unknown');
@@ -1742,12 +1800,22 @@ BotMon.live = {
const span1 = make('span'); /* left-hand group */
// country flag:
if (data.geo && data.geo !=='') {
span1.appendChild(make('span', {
'class': 'icon country ctry_' + data.geo.toLowerCase(),
'data-ctry': data.geo,
'title': "Country: " + data._country
}, data._country));
span1.appendChild(make('span', {
'class': 'icon_only country ctry_' + data.geo.toLowerCase(),
'data-ctry': (data.geo | 'ZZ'),
'title': "Country: " + ( data._country || "Unknown")
}, ( data._country || "Unknown") ));
if (data._type !== BM_USERTYPE.KNOWN_BOT) { /* No platform/client for bots */
span1.appendChild(make('span', { /* Platform */
'class': 'icon_only platform pf_' + (data._platform ? data._platform.id : 'unknown'),
'title': "Platform: " + platformName
}, platformName));
span1.appendChild(make('span', { /* Client */
'class': 'icon_only client client cl_' + (data._client ? data._client.id : 'unknown'),
'title': "Client: " + clientName
}, clientName));
}
// identifier:
@@ -1755,36 +1823,29 @@ BotMon.live = {
const botName = ( data._bot && data._bot.n ? data._bot.n : "Unknown");
span1.appendChild(make('span', { /* Bot */
'class': 'bot bot_' + (data._bot ? data._bot.id : 'unknown'),
'class': 'has_icon bot bot_' + (data._bot ? data._bot.id : 'unknown'),
'title': "Bot: " + botName
}, botName));
} else if (data._type == BM_USERTYPE.KNOWN_USER) { /* User only */
span1.appendChild(make('span', { /* User */
'class': 'user_known',
'class': 'has_icon user_known',
'title': "User: " + data.usr
}, data.usr));
} else { /* others */
if (data.ip == '127.0.0.1' || data.ip == '::1' ) ipType = '0';
span1.appendChild(make('span', { /* IP-Address */
'class': 'ipaddr ip' + ipType,
/*span1.appendChild(make('span', { // IP-Address
'class': 'has_icon ipaddr ip' + ipType,
'title': "IP-Address: " + data.ip
}, data.ip));
}
}, data.ip));*/
if (data._type !== BM_USERTYPE.KNOWN_BOT) { /* Not for bots */
span1.appendChild(make('span', { /* Platform */
'class': 'icon platform platform_' + (data._platform ? data._platform.id : 'unknown'),
'title': "Platform: " + platformName
}, platformName));
span1.appendChild(make('span', { /* Client */
'class': 'icon client client_' + (data._client ? data._client.id : 'unknown'),
'title': "Client: " + clientName
}, clientName));
span1.appendChild(make('span', { /* Internal ID */
'class': 'has_icon session typ_' + data.typ,
'title': "ID: " + data.id
}, data.id));
}
summary.appendChild(span1);
@@ -1818,7 +1879,7 @@ BotMon.live = {
if (data._type == BM_USERTYPE.KNOWN_BOT) {
dl.appendChild(make('dt', {}, "Bot name:")); /* bot info */
dl.appendChild(make('dd', {'class': 'has_icon bot bot_' + (data._bot ? data._bot.id : 'unknown')},
dl.appendChild(make('dd', {'class': 'icon_only bot bot_' + (data._bot ? data._bot.id : 'unknown')},
(data._bot ? data._bot.n : 'Unknown')));
if (data._bot && data._bot.url) {
@@ -1834,15 +1895,15 @@ BotMon.live = {
} else { /* not for bots */
dl.appendChild(make('dt', {}, "Client:")); /* client */
dl.appendChild(make('dd', {'class': 'has_icon client_' + (data._client ? data._client.id : 'unknown')},
dl.appendChild(make('dd', {'class': 'has_icon client cl_' + (data._client ? data._client.id : 'unknown')},
clientName + ( data._client.v > 0 ? ' (' + data._client.v + ')' : '' ) ));
dl.appendChild(make('dt', {}, "Platform:")); /* platform */
dl.appendChild(make('dd', {'class': 'has_icon platform_' + (data._platform ? data._platform.id : 'unknown')},
dl.appendChild(make('dd', {'class': 'has_icon platform pf_' + (data._platform ? data._platform.id : 'unknown')},
platformName + ( data._platform.v > 0 ? ' (' + data._platform.v + ')' : '' ) ));
dl.appendChild(make('dt', {}, "IP-Address:"));
dl.appendChild(make('dd', {'class': 'has_icon ip' + ipType}, data.ip));
dl.appendChild(make('dd', {'class': 'has_icon ipaddr ip' + ipType}, data.ip));
/*dl.appendChild(make('dt', {}, "ID:"));
dl.appendChild(make('dd', {'class': 'has_icon ip' + data.typ}, data.id));*/
@@ -1867,7 +1928,7 @@ BotMon.live = {
if (data.geo && data.geo !=='') {
dl.appendChild(make('dt', {}, "Location:"));
dl.appendChild(make('dd', {
'class': 'country ctry_' + data.geo.toLowerCase(),
'class': 'has_icon country ctry_' + data.geo.toLowerCase(),
'data-ctry': data.geo,
'title': "Country: " + data._country
}, data._country + ' (' + data.geo + ')'));
@@ -1876,6 +1937,9 @@ BotMon.live = {
/*dl.appendChild(make('dt', {}, "Visitor Type:"));
dl.appendChild(make('dd', undefined, data._type ));*/
dl.appendChild(make('dt', {}, "Session ID:"));
dl.appendChild(make('dd', {'class': 'has_icon session typ_' + data.typ}, data.id));
dl.appendChild(make('dt', {}, "Seen by:"));
dl.appendChild(make('dd', undefined, data._seenBy.join(', ') ));

View File

@@ -4,11 +4,346 @@
margin: .25rem 0;
}
/* icon items */
.has_icon {
display: inline-flex;
}
.icon_only {
display: inline-grid;
grid-template-columns: 20px max-content;
overflow: hidden;
width: 20px;
}
.has_icon, .icon_only {
& {
align-items: center;
column-gap: .25em;
}
&::before {
content: '';
display: inline-block;
width: 20px; height: 20px;
background: transparent none center no-repeat;
background-position: 0 0;
background-size: 20px;
}
/* user info Icon */
&.user_known::before { background-image: url('img/user.svg') }
/* IP Address types */
&.ipaddr::before { background-image: url('img/addr.png') }
&.ip4::before { background-position-y: -20px }
&.ip6::before { background-position-y: -40px }
/* Bot icons */
&.bot::before { background-image: url('img/bots.png') }
&.bot_googlebot::before, &.bot_googleads::before, &.bot_googleapi::before { background-position-y: -20px }
&.bot_bingbot::before { background-position-y: -40px }
&.bot_applebot::before { background-position-y: -60px }
&.bot_openai::before { background-position-y: -80px }
&.bot_metabots::before { background-position-y: -100px }
&.bot_ahrefs::before { background-position-y: -120px }
&.bot_seznambot::before { background-position-y: -140px }
/* platform icons */
&.platform::before { background-image: url('img/platforms.png') }
&.pf_win10::before { background-position-y: -20px }
&.pf_winold::before, dd.platform_winold::before,
&.pf_winsrvr:before { background-position-y: -40px }
&.pf_macos::before { background-position-y: -60px }
&.pf_macosold::before { background-position-y: -80px }
&.pf_ios::before { background-position-y: -100px }
&.pf_android::before { background-position-y: -120px }
&.pf_linux::before { background-position-y: -160px }
&.pf_bsd::before { background-position-y: -180px }
&.pf_chromium::before { background-position-y: -200px }
&.pf_hmos::before { background-position-y: -220px }
&.pf_tizen::before { background-position-y: -240px }
/* browser icons */
&.client::before { background-image: url('img/clients.png') }
&.cl_firefox::before { background-position-y: -20px }
&.cl_safari::before { background-position-y: -40px }
&.cl_chrome::before { background-position-y: -60px }
&.cl_chromeold::before { background-position-y: -60px; opacity: 75%; filter: ~"saturate(25%)"; }
&.cl_msedge::before { background-position-y: -80px }
&.cl_msie::before { background-position-y: -100px }
&.cl_opera::before { background-position-y: -120px }
&.cl_brave::before { background-position-y: -140px }
&.cl_ddg::before { background-position-y: -160px }
&.cl_samsung::before { background-position-y: -180px }
&.cl_huawei::before { background-position-y: -200px }
&.cl_vivaldi::before { background-position-y: -220px }
&.cl_aol::before { background-position-y: -240px }
&.cl_ya::before { background-position-y: -260px }
/* Country flags */
/* Note: flag images and CSS adapted from: https://github.com/lafeber/world-flags-sprite/ */
&.country::before {
content: '';
height: 20px; width: 20px;
background:url(img/flags.png) no-repeat 0 0;
background-size: 20px auto;
}
&.ctry_ad::before { background-position-y: -441px }
&.ctry_ae::before { background-position-y: -461px }
&.ctry_af::before { background-position-y: -481px }
&.ctry_ag::before { background-position-y: -501px }
&.ctry_ai::before { background-position-y: -521px }
&.ctry_al::before { background-position-y: -541px }
&.ctry_am::before { background-position-y: -561px }
&.ctry_ao::before { background-position-y: -581px }
&.ctry_aq::before { background-position-y: -601px }
&.ctry_ar::before { background-position-y: -621px }
&.ctry_as::before { background-position-y: -641px }
&.ctry_at::before { background-position-y: -661px }
&.ctry_au::before { background-position-y: -681px }
&.ctry_aw::before { background-position-y: -701px }
&.ctry_ax::before { background-position-y: -721px }
&.ctry_az::before { background-position-y: -741px }
&.ctry_ba::before { background-position-y: -761px }
&.ctry_bb::before { background-position-y: -781px }
&.ctry_bd::before { background-position-y: -801px }
&.ctry_be::before { background-position-y: -821px }
&.ctry_bf::before { background-position-y: -841px }
&.ctry_bg::before { background-position-y: -861px }
&.ctry_bh::before { background-position-y: -881px }
&.ctry_bi::before { background-position-y: -901px }
&.ctry_bj::before { background-position-y: -921px }
&.ctry_bm::before { background-position-y: -941px }
&.ctry_bn::before { background-position-y: -961px }
&.ctry_bo::before { background-position-y: -981px }
&.ctry_br::before { background-position-y: -1001px }
&.ctry_bs::before { background-position-y: -1021px }
&.ctry_bt::before { background-position-y: -1041px }
&.ctry_bw::before { background-position-y: -1061px }
&.ctry_by::before { background-position-y: -1081px }
&.ctry_bz::before { background-position-y: -1101px }
&.ctry_ca::before { background-position-y: -1121px }
&.ctry_cd::before { background-position-y: -1141px }
&.ctry_cf::before { background-position-y: -1161px }
&.ctry_cg::before { background-position-y: -1181px }
&.ctry_ch::before { background-position-y: -1201px }
&.ctry_ci::before { background-position-y: -1221px }
&.ctry_ck::before { background-position-y: -1241px }
&.ctry_cl::before { background-position-y: -1261px }
&.ctry_cm::before { background-position-y: -1281px }
&.ctry_cn::before { background-position-y: -1301px }
&.ctry_co::before { background-position-y: -1321px }
&.ctry_cr::before { background-position-y: -1341px }
&.ctry_cu::before { background-position-y: -1361px }
&.ctry_cv::before { background-position-y: -1381px }
&.ctry_cy::before { background-position-y: -1401px }
&.ctry_cz::before { background-position-y: -1421px }
&.ctry_de::before { background-position-y: -1441px }
&.ctry_dj::before { background-position-y: -1461px }
&.ctry_dk::before { background-position-y: -1481px }
&.ctry_dm::before { background-position-y: -1501px }
&.ctry_do::before { background-position-y: -1521px }
&.ctry_dz::before { background-position-y: -1541px }
&.ctry_ec::before { background-position-y: -1561px }
&.ctry_ee::before { background-position-y: -1581px }
&.ctry_eg::before { background-position-y: -1601px }
&.ctry_eh::before { background-position-y: -1621px }
&.ctry_er::before { background-position-y: -1641px }
&.ctry_es::before { background-position-y: -1661px }
&.ctry_et::before { background-position-y: -1681px }
&.ctry_fi::before { background-position-y: -1701px }
&.ctry_fj::before { background-position-y: -1721px }
&.ctry_fm::before { background-position-y: -1741px }
&.ctry_fo::before { background-position-y: -1761px }
&.ctry_fr::before, &.ctry_bl::before, &.ctry_cp::before, &.ctry_mf::before,
&.ctry_yt::before { background-position-y: -1781px }
&.ctry_ga::before { background-position-y: -1801px }
&.ctry_bg::before, &.ctry_uk::before,
&.ctry_sh::before { background-position-y: -1821px }
&.ctry_gd::before { background-position-y: -1841px }
&.ctry_ge::before { background-position-y: -1861px }
&.ctry_gg::before { background-position-y: -1881px }
&.ctry_gh::before { background-position-y: -1901px }
&.ctry_gi::before { background-position-y: -1921px }
&.ctry_gl::before { background-position-y: -1941px }
&.ctry_gm::before { background-position-y: -1961px }
&.ctry_gn::before { background-position-y: -1981px }
&.ctry_gp::before { background-position-y: -2001px }
&.ctry_gq::before { background-position-y: -2021px }
&.ctry_gr::before { background-position-y: -2041px }
&.ctry_gt::before { background-position-y: -2061px }
&.ctry_gu::before { background-position-y: -2081px }
&.ctry_gw::before { background-position-y: -2101px }
&.ctry_gy::before { background-position-y: -2121px }
&.ctry_hk::before { background-position-y: -2141px }
&.ctry_hn::before { background-position-y: -2161px }
&.ctry_hr::before { background-position-y: -2181px }
&.ctry_ht::before { background-position-y: -2201px }
&.ctry_hu::before { background-position-y: -2221px }
&.ctry_mc::before { background-position-y: -2241px }
&.ctry_ie::before { background-position-y: -2261px }
&.ctry_il::before { background-position-y: -2281px }
&.ctry_im::before { background-position-y: -2301px }
&.ctry_in::before { background-position-y: -2321px }
&.ctry_iq::before { background-position-y: -2341px }
&.ctry_ir::before { background-position-y: -2361px }
&.ctry_is::before { background-position-y: -2381px }
&.ctry_it::before { background-position-y: -2401px }
&.ctry_je::before { background-position-y: -2421px }
&.ctry_jm::before { background-position-y: -2441px }
&.ctry_jo::before { background-position-y: -2461px }
&.ctry_jp::before { background-position-y: -2481px }
&.ctry_ke::before { background-position-y: -2501px }
&.ctry_kg::before { background-position-y: -2521px }
&.ctry_kh::before { background-position-y: -2541px }
&.ctry_ki::before { background-position-y: -2561px }
&.ctry_km::before { background-position-y: -2581px }
&.ctry_kn::before { background-position-y: -2601px }
&.ctry_kp::before { background-position-y: -2621px }
&.ctry_kr::before { background-position-y: -2641px }
&.ctry_kw::before { background-position-y: -2661px }
&.ctry_ky::before { background-position-y: -2681px }
&.ctry_kz::before { background-position-y: -2701px }
&.ctry_la::before { background-position-y: -2721px }
&.ctry_lb::before { background-position-y: -2741px }
&.ctry_lc::before { background-position-y: -2761px }
&.ctry_li::before { background-position-y: -2781px }
&.ctry_lk::before { background-position-y: -2801px }
&.ctry_lr::before { background-position-y: -2821px }
&.ctry_ls::before { background-position-y: -2841px }
&.ctry_lt::before { background-position-y: -2861px }
&.ctry_lu::before { background-position-y: -2881px }
&.ctry_lv::before { background-position-y: -2901px }
&.ctry_ly::before { background-position-y: -2921px }
&.ctry_ma::before { background-position-y: -2941px }
&.ctry_md::before { background-position-y: -2961px }
&.ctry_me::before { background-position-y: -2981px }
&.ctry_mg::before { background-position-y: -3001px }
&.ctry_mh::before { background-position-y: -3021px }
&.ctry_mk::before { background-position-y: -3041px }
&.ctry_ml::before { background-position-y: -3061px }
&.ctry_mm::before { background-position-y: -3081px }
&.ctry_mn::before { background-position-y: -3101px }
&.ctry_mo::before { background-position-y: -3121px }
&.ctry_mq::before { background-position-y: -3141px }
&.ctry_mr::before { background-position-y: -3161px }
&.ctry_ms::before { background-position-y: -3181px }
&.ctry_mt::before { background-position-y: -3201px }
&.ctry_mu::before { background-position-y: -3221px }
&.ctry_mv::before { background-position-y: -3241px }
&.ctry_mw::before { background-position-y: -3261px }
&.ctry_mx::before { background-position-y: -3281px }
&.ctry_my::before { background-position-y: -3301px }
&.ctry_mz::before { background-position-y: -3321px }
&.ctry_na::before { background-position-y: -3341px }
&.ctry_nc::before { background-position-y: -3361px }
&.ctry_ne::before { background-position-y: -3381px }
&.ctry_ng::before { background-position-y: -3401px }
&.ctry_ni::before { background-position-y: -3421px }
&.ctry_nl::before,
&.ctry_bq::before { background-position-y: -3441px }
&.ctry_no::before, &.ctry_bv::before , &.ctry_nq::before,
&.ctry_sj::before { background-position-y: -3461px }
&.ctry_np::before { background-position-y: -3481px }
&.ctry_nr::before { background-position-y: -3501px }
&.ctry_nz::before { background-position-y: -3521px }
&.ctry_om::before { background-position-y: -3541px }
&.ctry_pa::before { background-position-y: -3561px }
&.ctry_pe::before { background-position-y: -3581px }
&.ctry_pf::before { background-position-y: -3601px }
&.ctry_pg::before { background-position-y: -3621px }
&.ctry_ph::before { background-position-y: -3641px }
&.ctry_pk::before { background-position-y: -3661px }
&.ctry_pl::before { background-position-y: -3681px }
&.ctry_pr::before { background-position-y: -3701px }
&.ctry_ps::before { background-position-y: -3721px }
&.ctry_pt::before { background-position-y: -3741px }
&.ctry_pw::before { background-position-y: -3761px }
&.ctry_py::before { background-position-y: -3781px }
&.ctry_qa::before { background-position-y: -3801px }
&.ctry_re::before { background-position-y: -3821px }
&.ctry_ro::before { background-position-y: -3841px }
&.ctry_rs::before { background-position-y: -3861px }
&.ctry_ru::before { background-position-y: -3881px }
&.ctry_rw::before { background-position-y: -3901px }
&.ctry_sa::before { background-position-y: -3921px }
&.ctry_sb::before { background-position-y: -3941px }
&.ctry_sc::before { background-position-y: -3961px }
&.ctry_sd::before { background-position-y: -3981px }
&.ctry_se::before { background-position-y: -4001px }
&.ctry_sg::before { background-position-y: -4021px }
&.ctry_si::before { background-position-y: -4041px }
&.ctry_sk::before { background-position-y: -4061px }
&.ctry_sl::before { background-position-y: -4081px }
&.ctry_sm::before { background-position-y: -4101px }
&.ctry_sn::before { background-position-y: -4121px }
&.ctry_so::before { background-position-y: -4141px }
&.ctry_sr::before { background-position-y: -4161px }
&.ctry_st::before { background-position-y: -4181px }
&.ctry_sv::before { background-position-y: -4201px }
&.ctry_sy::before { background-position-y: -4221px }
&.ctry_sz::before { background-position-y: -4241px }
&.ctry_tc::before { background-position-y: -4261px }
&.ctry_td::before { background-position-y: -4281px }
&.ctry_tg::before { background-position-y: -4301px }
&.ctry_th::before { background-position-y: -4321px }
&.ctry_tj::before { background-position-y: -4341px }
&.ctry_tl::before { background-position-y: -4361px }
&.ctry_tm::before { background-position-y: -4381px }
&.ctry_tn::before { background-position-y: -4401px }
&.ctry_to::before { background-position-y: -4421px }
&.ctry_tr::before { background-position-y: -4441px }
&.ctry_tt::before { background-position-y: -4461px }
&.ctry_tv::before { background-position-y: -4481px }
&.ctry_tw::before { background-position-y: -4501px }
&.ctry_tz::before { background-position-y: -4521px }
&.ctry_ua::before { background-position-y: -4541px }
&.ctry_ug::before { background-position-y: -4561px }
&.ctry_us::before { background-position-y: -4581px }
&.ctry_uy::before { background-position-y: -4601px }
&.ctry_uz::before { background-position-y: -4621px }
&.ctry_va::before { background-position-y: -4641px }
&.ctry_vc::before { background-position-y: -4661px }
&.ctry_ve::before { background-position-y: -4681px }
&.ctry_vg::before { background-position-y: -4701px }
&.ctry_vi::before { background-position-y: -4721px }
&.ctry_vn::before { background-position-y: -4741px }
&.ctry_vu::before { background-position-y: -4761px }
&.ctry_ws::before { background-position-y: -4781px }
&.ctry_ye::before { background-position-y: -4801px }
&.ctry_za::before { background-position-y: -4821px }
&.ctry_zm::before { background-position-y: -4841px }
&.ctry_zw::before { background-position-y: -4861px }
&.ctry_sx::before { background-position-y: -4881px }
&.ctry_cw::before { background-position-y: -4901px }
&.ctry_ss::before { background-position-y: -4921px }
&.ctry_nu::before { background-position-y: -4941px }
&.ctry_local::before { background-image: url('img/addr.png') } /* localhost */
/* Session icons */
&.session::before { background-image: url('img/idtyp.png') }
&.typ_dw::before { background-position-y: -20px }
&.typ_php::before { background-position-y: -40px }
&.typ_ip::before { background-position-y: -60px }
&.typ_usr::before { background-position-y: -80px }
}
/* grid layout for the overview: */
.botmon_overview_grid {
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
grid-gap: 0 .33em;
& {
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
grid-gap: 0 .33em;
}
dl {
dd {
display: flex;
justify-content: space-between;
align-items: baseline;
}
}
}
/* the "today" tab: */
@@ -43,9 +378,11 @@
margin-bottom: .2em;
}
dd {
padding: 0; margin: 0;
}
dd.spaced {
display: flex;
justify-content: space-between;
padding: 0; margin: 0;
}
dd:nth-child(even) {
background-color: #EEE;
@@ -151,26 +488,6 @@
details ul > li > details > summary > span:first-child {
flex-grow: 1;
}
details ul > li > details > summary > span > span {
display: flex;
align-items: center;
column-gap: .25em;
height: 1.5em;
overflow: hidden;
margin-right: .2rem;
}
details ul > li > details > summary > span > span::before {
content: '';
display: inline-block;
min-width: 1.25em; height: 1em;
text-align: center;
background: transparent url('img/placeholder.svg') center no-repeat;
background-size: 1em;
}
details ul > li > details > summary > span > span.icon {
width: 1.25em;
overflow: hidden;
}
details ul > li > details > summary > span > span[title] {
cursor: help;
}
@@ -186,14 +503,8 @@
white-space: nowrap;
}
dd {
& {
grid-column: 2;
display: inline-block;
background-color: transparent;
}
/*&.bot-rating {
text-align: right;
}*/
grid-column: 2;
background-color: transparent;
}
dd.pages {
& {
@@ -225,13 +536,6 @@
}
}
}
dd.has_icon::before {
content: '';
display: inline-block;
width: 1.25em; height: 1.25em;
background: transparent url('img/placeholder.svg') center no-repeat;
background-size: 1em;
}
ul.eval {
li {
@@ -248,316 +552,10 @@
}
}
/* bot icons */
span.bot::before, dd.bot::before { background-image: url('img/robot.svg') }
span.bot_bingbot::before, dd.bot_bingbot::before { background-image: url('img/bing.svg') }
span.bot_googlebot::before, dd.bot_googlebot::before,
span.bot_googleads::before, dd.bot_googleads::before,
span.bot_googleapi::before, dd.bot_googleapi::before { background-image: url('img/google.svg') }
span.bot_applebot::before, dd.bot_applebot::before { background-image: url('img/apple.svg') }
span.bot_slurp::before, dd.bot_slurp::before { background-image: url('img/yahoo.svg') }
span.bot_ddg::before, dd.bot_ddg::before { background-image: url('img/ddg.svg') }
span.bot_openai::before, dd.bot_openai::before { background-image: url('img/openai.svg') }
span.bot_claude::before, dd.bot_claude::before { background-image: url('img/anthropic.png') }
span.bot_perplexity::before, dd.bot_perplexity::before { background-image: url('img/perplexity.svg') }
span.bot_metabots::before, dd.bot_metabots::before { background-image: url('img/meta.svg') }
span.bot_qwant::before, dd.bot_qwant::before { background-image: url('img/qwant.svg') }
span.bot_yandex::before, dd.bot_yandex::before { background-image: url('img/yandex.svg') }
span.bot_seznambot::before, dd.bot_seznambot::before { background-image: url('img/seznam.svg') }
span.bot_ahrefs::before, dd.bot_ahrefs::before { background-image: url('img/ahrefs.png') }
span.bot_ccbot::before, dd.bot_ccbot::before { background-image: url('img/ccbot.png') }
span.bot_mjbot::before, dd.bot_mjbot::before { background-image: url('img/majestic.png') }
span.bot_petal::before, dd.bot_petal::before { background-image: url('img/petal.svg') }
span.bot_barkrowler::before, dd.bot_barkrowler::before { background-image: url('img/babbar.png') }
span.bot_semrush::before, dd.bot_semrush::before { background-image: url('img/semrush.png') }
span.bot_bytespider::before, dd.bot_bytespider::before { background-image: url('img/bytedance.svg') }
span.bot_dfseo::before, dd.bot_dfseo::before { background-image: url('img/dataforseo.png') }
span.bot_hunter::before, dd.bot_hunter::before { background-image: url('img/hunter.png') }
span.bot_serpstat::before, dd.bot_serpstat::before { background-image: url('img/serpstat.svg') }
span.bot_netestate::before, dd.bot_netestate::before { background-image: url('img/netestate.png') }
span.bot_imagesift::before, dd.bot_imagesift::before { background-image: url('img/hive.svg') }
/*span.bot_mozcom::before, dd.bot_mozcom::before { background-image: url('img/moz.svg') }*/
/*span.bot_maui::before, dd.bot_maui::before { background-image: url('img/maui.svg') }*/
span.bot_plagaware::before, dd.bot_plagaware::before { background-image: url('img/plagaware.png') }
/* user info */
span.user_known::before { background-image: url('img/user.svg') }
/* platform icons */
span.platform_win10::before, dd.platform_win10::before { background-image: url('img/win11.svg') }
span.platform_macos::before, dd.platform_macos::before { background-image: url('img/apple.svg') }
span.platform_linux::before, dd.platform_linux::before { background-image: url('img/linux.svg') }
span.platform_ios::before, dd.platform_ios::before { background-image: url('img/ios.svg') }
span.platform_android::before, dd.platform_android::before { background-image: url('img/android.svg') }
span.platform_winold::before, dd.platform_winold::before,
span.platform_winsrvr:before, dd.platform_winsrvr::before { background-image: url('img/winold.png') }
span.platform_macosold::before, dd.platform_macosold::before { background-image: url('img/macos.svg') }
span.platform_tizen::before, dd.platform_tizen::before { background-image: url('img/tizen.png') }
span.platform_hmos::before, dd.platform_hmos::before { background-image: url('img/hmos.svg') }
span.platform_chromium::before, dd.platform_chromium::before { background-image: url('img/chromium.svg') }
span.platform_bsd::before, dd.platform_bsd::before { background-image: url('img/freebsd.png') }
/* browser icons */
span.client_opera::before, dd.client_opera::before { background-image: url('img/opera.svg') }
span.client_msie::before, dd.client_msie::before { background-image: url('img/msie.svg') }
span.client_brave::before, dd.client_brave::before { background-image: url('img/brave.svg') }
span.client_msedge::before, dd.client_msedge::before { background-image: url('img/msedge.svg') }
span.client_chrome::before, dd.client_chrome::before { background-image: url('img/chrome.svg') }
span.client_chromeold::before, dd.client_chromeold::before { background-image: url('img/chromeold.svg') }
span.client_safari::before, dd.client_safari::before { background-image: url('img/safari.png') }
span.client_ddg::before, dd.client_ddg::before { background-image: url('img/ddg.svg') }
span.client_firefox::before, dd.client_firefox::before { background-image: url('img/firefox.png') }
span.client_samsung::before, dd.client_samsung::before { background-image: url('img/samsung.svg') }
span.client_uc::before, dd.client_uc::before { background-image: url('img/uc.svg') }
span.client_huawei::before, dd.client_huawei::before { background-image: url('img/huawei.png') }
span.client_vivaldi::before, dd.client_vivaldi::before { background-image: url('img/vivaldi.svg') }
span.client_aol::before, dd.client_aol::before { background-image: url('img/aol.png') }
span.client_ya::before, dd.client_ya::before { background-image: url('img/yandex.svg') }
/* ip address type */
span.ip6::before, dd.ip6::before { background-image: url('img/ip6.svg') }
span.ip4::before, dd.ip4::before { background-image: url('img/ip4.svg') }
span.ip0::before, dd.ip0::before { background-image: url('img/localhost.svg') }
/* Country flags */
/* Note: flag images and CSS adapted from: https://github.com/lafeber/world-flags-sprite/ */
span.country::before, dd.country::before {
content: '';
display: inline-block;
height: 16px; width: 16px;
background:url(img/flags.png) no-repeat center;
background-position: 0 0;
}
span.ctry_ad::before, dd.ctry_ad::before { background-position-y: -353px }
span.ctry_ae::before, dd.ctry_ae::before { background-position-y: -369px }
span.ctry_af::before, dd.ctry_af::before { background-position-y: -385px }
span.ctry_ag::before, dd.ctry_ag::before { background-position-y: -401px }
span.ctry_ai::before, dd.ctry_ai::before { background-position-y: -417px }
span.ctry_al::before, dd.ctry_al::before { background-position-y: -433px }
span.ctry_am::before, dd.ctry_am::before { background-position-y: -449px }
span.ctry_ao::before, dd.ctry_ao::before { background-position-y: -465px }
span.ctry_aq::before, dd.ctry_aq::before { background-position-y: -481px }
span.ctry_ar::before, dd.ctry_ar::before { background-position-y: -497px }
span.ctry_as::before, dd.ctry_as::before { background-position-y: -513px }
span.ctry_at::before, dd.ctry_at::before { background-position-y: -529px }
span.ctry_au::before, dd.ctry_au::before { background-position-y: -545px }
span.ctry_aw::before, dd.ctry_aw::before { background-position-y: -561px }
span.ctry_ax::before, dd.ctry_ax::before { background-position-y: -577px }
span.ctry_az::before, dd.ctry_az::before { background-position-y: -593px }
span.ctry_ba::before, dd.ctry_ba::before { background-position-y: -609px }
span.ctry_bb::before, dd.ctry_bb::before { background-position-y: -625px }
span.ctry_bd::before, dd.ctry_bd::before { background-position-y: -641px }
span.ctry_be::before, dd.ctry_be::before { background-position-y: -657px }
span.ctry_bf::before, dd.ctry_bf::before { background-position-y: -673px }
span.ctry_bg::before, dd.ctry_bg::before { background-position-y: -689px }
span.ctry_bh::before, dd.ctry_bh::before { background-position-y: -705px }
span.ctry_bi::before, dd.ctry_bi::before { background-position-y: -721px }
span.ctry_bj::before, dd.ctry_bj::before { background-position-y: -737px }
span.ctry_bm::before, dd.ctry_bm::before { background-position-y: -753px }
span.ctry_bn::before, dd.ctry_bn::before { background-position-y: -769px }
span.ctry_bo::before, dd.ctry_bo::before { background-position-y: -785px }
span.ctry_br::before, dd.ctry_br::before { background-position-y: -801px }
span.ctry_bs::before, dd.ctry_bs::before { background-position-y: -817px }
span.ctry_bt::before, dd.ctry_bt::before { background-position-y: -833px }
span.ctry_bw::before, dd.ctry_bw::before { background-position-y: -849px }
span.ctry_by::before, dd.ctry_by::before { background-position-y: -865px }
span.ctry_bz::before, dd.ctry_bz::before { background-position-y: -881px }
span.ctry_ca::before, dd.ctry_ca::before { background-position-y: -897px }
span.ctry_cd::before, dd.ctry_cd::before { background-position-y: -913px }
span.ctry_cf::before, dd.ctry_cf::before { background-position-y: -929px }
span.ctry_cg::before, dd.ctry_cg::before { background-position-y: -945px }
span.ctry_ch::before, dd.ctry_ch::before { background-position-y: -961px }
span.ctry_ci::before, dd.ctry_ci::before { background-position-y: -977px }
span.ctry_ck::before, dd.ctry_ck::before { background-position-y: -993px }
span.ctry_cl::before, dd.ctry_cl::before { background-position-y: -1009px }
span.ctry_cm::before, dd.ctry_cm::before { background-position-y: -1025px }
span.ctry_cn::before, dd.ctry_cn::before { background-position-y: -1041px }
span.ctry_co::before, dd.ctry_co::before { background-position-y: -1057px }
span.ctry_cr::before, dd.ctry_cr::before { background-position-y: -1073px }
span.ctry_cu::before, dd.ctry_cu::before { background-position-y: -1089px }
span.ctry_cv::before, dd.ctry_cv::before { background-position-y: -1105px }
span.ctry_cy::before, dd.ctry_cy::before { background-position-y: -1121px }
span.ctry_cz::before, dd.ctry_cz::before { background-position-y: -1137px }
span.ctry_de::before, dd.ctry_de::before { background-position-y: -1153px }
span.ctry_dj::before, dd.ctry_dj::before { background-position-y: -1169px }
span.ctry_dk::before, dd.ctry_dk::before { background-position-y: -1185px }
span.ctry_dm::before, dd.ctry_dm::before { background-position-y: -1201px }
span.ctry_do::before, dd.ctry_do::before { background-position-y: -1217px }
span.ctry_dz::before, dd.ctry_dz::before { background-position-y: -1233px }
span.ctry_ec::before, dd.ctry_ec::before { background-position-y: -1249px }
span.ctry_ee::before, dd.ctry_ee::before { background-position-y: -1265px }
span.ctry_eg::before, dd.ctry_eg::before { background-position-y: -1281px }
span.ctry_eh::before, dd.ctry_eh::before { background-position-y: -1297px }
span.ctry_er::before, dd.ctry_er::before { background-position-y: -1313px }
span.ctry_es::before, dd.ctry_es::before { background-position-y: -1329px }
span.ctry_et::before, dd.ctry_et::before { background-position-y: -1345px }
span.ctry_fi::before, dd.ctry_fi::before { background-position-y: -1361px }
span.ctry_fj::before, dd.ctry_fj::before { background-position-y: -1377px }
span.ctry_fm::before, dd.ctry_fm::before { background-position-y: -1393px }
span.ctry_fo::before, dd.ctry_fo::before { background-position-y: -1409px }
span.ctry_yt::before, dd.ctry_yt::before { background-position-y: -1425px }
span.ctry_ga::before, dd.ctry_ga::before { background-position-y: -1441px }
span.ctry_sh::before, dd.ctry_sh::before { background-position-y: -1457px }
span.ctry_gd::before, dd.ctry_gd::before { background-position-y: -1473px }
span.ctry_ge::before, dd.ctry_ge::before { background-position-y: -1489px }
span.ctry_gg::before, dd.ctry_gg::before { background-position-y: -1505px }
span.ctry_gh::before, dd.ctry_gh::before { background-position-y: -1521px }
span.ctry_gi::before, dd.ctry_gi::before { background-position-y: -1537px }
span.ctry_gl::before, dd.ctry_gl::before { background-position-y: -1553px }
span.ctry_gm::before, dd.ctry_gm::before { background-position-y: -1569px }
span.ctry_gn::before, dd.ctry_gn::before { background-position-y: -1585px }
span.ctry_gp::before, dd.ctry_gp::before { background-position-y: -1601px }
span.ctry_gq::before, dd.ctry_gq::before { background-position-y: -1617px }
span.ctry_gr::before, dd.ctry_gr::before { background-position-y: -1633px }
span.ctry_gt::before, dd.ctry_gt::before { background-position-y: -1649px }
span.ctry_gu::before, dd.ctry_gu::before { background-position-y: -1665px }
span.ctry_gw::before, dd.ctry_gw::before { background-position-y: -1681px }
span.ctry_gy::before, dd.ctry_gy::before { background-position-y: -1697px }
span.ctry_hk::before, dd.ctry_hk::before { background-position-y: -1713px }
span.ctry_hn::before, dd.ctry_hn::before { background-position-y: -1729px }
span.ctry_hr::before, dd.ctry_hr::before { background-position-y: -1745px }
span.ctry_ht::before, dd.ctry_ht::before { background-position-y: -1761px }
span.ctry_hu::before, dd.ctry_hu::before { background-position-y: -1777px }
span.ctry_mc::before, dd.ctry_mc::before { background-position-y: -1793px }
span.ctry_ie::before, dd.ctry_ie::before { background-position-y: -1809px }
span.ctry_il::before, dd.ctry_il::before { background-position-y: -1825px }
span.ctry_im::before, dd.ctry_im::before { background-position-y: -1841px }
span.ctry_in::before, dd.ctry_in::before { background-position-y: -1857px }
span.ctry_iq::before, dd.ctry_iq::before { background-position-y: -1873px }
span.ctry_ir::before, dd.ctry_ir::before { background-position-y: -1889px }
span.ctry_is::before, dd.ctry_is::before { background-position-y: -1905px }
span.ctry_it::before, dd.ctry_it::before { background-position-y: -1921px }
span.ctry_je::before, dd.ctry_je::before { background-position-y: -1937px }
span.ctry_jm::before, dd.ctry_jm::before { background-position-y: -1953px }
span.ctry_jo::before, dd.ctry_jo::before { background-position-y: -1969px }
span.ctry_jp::before, dd.ctry_jp::before { background-position-y: -1985px }
span.ctry_ke::before, dd.ctry_ke::before { background-position-y: -2001px }
span.ctry_kg::before, dd.ctry_kg::before { background-position-y: -2017px }
span.ctry_kh::before, dd.ctry_kh::before { background-position-y: -2033px }
span.ctry_ki::before, dd.ctry_ki::before { background-position-y: -2049px }
span.ctry_km::before, dd.ctry_km::before { background-position-y: -2065px }
span.ctry_kn::before, dd.ctry_kn::before { background-position-y: -2081px }
span.ctry_kp::before, dd.ctry_kp::before { background-position-y: -2097px }
span.ctry_kr::before, dd.ctry_kr::before { background-position-y: -2113px }
span.ctry_kw::before, dd.ctry_kw::before { background-position-y: -2129px }
span.ctry_ky::before, dd.ctry_ky::before { background-position-y: -2145px }
span.ctry_kz::before, dd.ctry_kz::before { background-position-y: -2161px }
span.ctry_la::before, dd.ctry_la::before { background-position-y: -2177px }
span.ctry_lb::before, dd.ctry_lb::before { background-position-y: -2193px }
span.ctry_lc::before, dd.ctry_lc::before { background-position-y: -2209px }
span.ctry_li::before, dd.ctry_li::before { background-position-y: -2225px }
span.ctry_lk::before, dd.ctry_lk::before { background-position-y: -2241px }
span.ctry_lr::before, dd.ctry_lr::before { background-position-y: -2257px }
span.ctry_ls::before, dd.ctry_ls::before { background-position-y: -2273px }
span.ctry_lt::before, dd.ctry_lt::before { background-position-y: -2289px }
span.ctry_lu::before, dd.ctry_lu::before { background-position-y: -2305px }
span.ctry_lv::before, dd.ctry_lv::before { background-position-y: -2321px }
span.ctry_ly::before, dd.ctry_ly::before { background-position-y: -2337px }
span.ctry_ma::before, dd.ctry_ma::before { background-position-y: -2353px }
span.ctry_md::before, dd.ctry_md::before { background-position-y: -2369px }
span.ctry_me::before, dd.ctry_me::before { background-position-y: -2385px }
span.ctry_mg::before, dd.ctry_mg::before { background-position-y: -2401px }
span.ctry_mh::before, dd.ctry_mh::before { background-position-y: -2417px }
span.ctry_mk::before, dd.ctry_mk::before { background-position-y: -2433px }
span.ctry_ml::before, dd.ctry_ml::before { background-position-y: -2449px }
span.ctry_mm::before, dd.ctry_mm::before { background-position-y: -2465px }
span.ctry_mn::before, dd.ctry_mn::before { background-position-y: -2481px }
span.ctry_mo::before, dd.ctry_mo::before { background-position-y: -2497px }
span.ctry_mq::before, dd.ctry_mq::before { background-position-y: -2513px }
span.ctry_mr::before, dd.ctry_mr::before { background-position-y: -2529px }
span.ctry_ms::before, dd.ctry_ms::before { background-position-y: -2545px }
span.ctry_mt::before, dd.ctry_mt::before { background-position-y: -2561px }
span.ctry_mu::before, dd.ctry_mu::before { background-position-y: -2577px }
span.ctry_mv::before, dd.ctry_mv::before { background-position-y: -2593px }
span.ctry_mw::before, dd.ctry_mw::before { background-position-y: -2609px }
span.ctry_mx::before, dd.ctry_mx::before { background-position-y: -2625px }
span.ctry_my::before, dd.ctry_my::before { background-position-y: -2641px }
span.ctry_mz::before, dd.ctry_mz::before { background-position-y: -2657px }
span.ctry_na::before, dd.ctry_na::before { background-position-y: -2673px }
span.ctry_nc::before, dd.ctry_nc::before { background-position-y: -2689px }
span.ctry_ne::before, dd.ctry_ne::before { background-position-y: -2705px }
span.ctry_ng::before, dd.ctry_ng::before { background-position-y: -2721px }
span.ctry_ni::before, dd.ctry_ni::before { background-position-y: -2737px }
span.ctry_bq::before, dd.ctry_bq::before { background-position-y: -2753px }
span.ctry_bv::before, dd.ctry_bv::before { background-position-y: -2769px }
span.ctry_np::before, dd.ctry_np::before { background-position-y: -2785px }
span.ctry_nr::before, dd.ctry_nr::before { background-position-y: -2801px }
span.ctry_nz::before, dd.ctry_nz::before { background-position-y: -2817px }
span.ctry_om::before, dd.ctry_om::before { background-position-y: -2833px }
span.ctry_pa::before, dd.ctry_pa::before { background-position-y: -2849px }
span.ctry_pe::before, dd.ctry_pe::before { background-position-y: -2865px }
span.ctry_pf::before, dd.ctry_pf::before { background-position-y: -2881px }
span.ctry_pg::before, dd.ctry_pg::before { background-position-y: -2897px }
span.ctry_ph::before, dd.ctry_ph::before { background-position-y: -2913px }
span.ctry_pk::before, dd.ctry_pk::before { background-position-y: -2929px }
span.ctry_pl::before, dd.ctry_pl::before { background-position-y: -2945px }
span.ctry_pr::before, dd.ctry_pr::before { background-position-y: -2961px }
span.ctry_ps::before, dd.ctry_ps::before { background-position-y: -2977px }
span.ctry_pt::before, dd.ctry_pt::before { background-position-y: -2993px }
span.ctry_pw::before, dd.ctry_pw::before { background-position-y: -3009px }
span.ctry_py::before, dd.ctry_py::before { background-position-y: -3025px }
span.ctry_qa::before, dd.ctry_qa::before { background-position-y: -3041px }
span.ctry_re::before, dd.ctry_re::before { background-position-y: -3057px }
span.ctry_ro::before, dd.ctry_ro::before { background-position-y: -3073px }
span.ctry_rs::before, dd.ctry_rs::before { background-position-y: -3089px }
span.ctry_ru::before, dd.ctry_ru::before { background-position-y: -3105px }
span.ctry_rw::before, dd.ctry_rw::before { background-position-y: -3121px }
span.ctry_sa::before, dd.ctry_sa::before { background-position-y: -3137px }
span.ctry_sb::before, dd.ctry_sb::before { background-position-y: -3153px }
span.ctry_sc::before, dd.ctry_sc::before { background-position-y: -3169px }
span.ctry_sd::before, dd.ctry_sd::before { background-position-y: -3185px }
span.ctry_se::before, dd.ctry_se::before { background-position-y: -3201px }
span.ctry_sg::before, dd.ctry_sg::before { background-position-y: -3217px }
span.ctry_si::before, dd.ctry_si::before { background-position-y: -3233px }
span.ctry_sk::before, dd.ctry_sk::before { background-position-y: -3249px }
span.ctry_sl::before, dd.ctry_sl::before { background-position-y: -3265px }
span.ctry_sm::before, dd.ctry_sm::before { background-position-y: -3281px }
span.ctry_sn::before, dd.ctry_sn::before { background-position-y: -3297px }
span.ctry_so::before, dd.ctry_so::before { background-position-y: -3313px }
span.ctry_sr::before, dd.ctry_sr::before { background-position-y: -3329px }
span.ctry_st::before, dd.ctry_st::before { background-position-y: -3345px }
span.ctry_sv::before, dd.ctry_sv::before { background-position-y: -3361px }
span.ctry_sy::before, dd.ctry_sy::before { background-position-y: -3377px }
span.ctry_sz::before, dd.ctry_sz::before { background-position-y: -3393px }
span.ctry_tc::before, dd.ctry_tc::before { background-position-y: -3409px }
span.ctry_td::before, dd.ctry_td::before { background-position-y: -3425px }
span.ctry_tg::before, dd.ctry_tg::before { background-position-y: -3441px }
span.ctry_th::before, dd.ctry_th::before { background-position-y: -3457px }
span.ctry_tj::before, dd.ctry_tj::before { background-position-y: -3473px }
span.ctry_tl::before, dd.ctry_tl::before { background-position-y: -3489px }
span.ctry_tm::before, dd.ctry_tm::before { background-position-y: -3505px }
span.ctry_tn::before, dd.ctry_tn::before { background-position-y: -3521px }
span.ctry_to::before, dd.ctry_to::before { background-position-y: -3537px }
span.ctry_tr::before, dd.ctry_tr::before { background-position-y: -3553px }
span.ctry_tt::before, dd.ctry_tt::before { background-position-y: -3569px }
span.ctry_tv::before, dd.ctry_tv::before { background-position-y: -3585px }
span.ctry_tw::before, dd.ctry_tw::before { background-position-y: -3601px }
span.ctry_tz::before, dd.ctry_tz::before { background-position-y: -3617px }
span.ctry_ua::before, dd.ctry_ua::before { background-position-y: -3633px }
span.ctry_ug::before, dd.ctry_ug::before { background-position-y: -3649px }
span.ctry_us::before, dd.ctry_us::before { background-position-y: -3665px }
span.ctry_uy::before, dd.ctry_uy::before { background-position-y: -3681px }
span.ctry_uz::before, dd.ctry_uz::before { background-position-y: -3697px }
span.ctry_va::before, dd.ctry_va::before { background-position-y: -3713px }
span.ctry_vc::before, dd.ctry_vc::before { background-position-y: -3729px }
span.ctry_ve::before, dd.ctry_ve::before { background-position-y: -3745px }
span.ctry_vg::before, dd.ctry_vg::before { background-position-y: -3761px }
span.ctry_vi::before, dd.ctry_vi::before { background-position-y: -3777px }
span.ctry_vn::before, dd.ctry_vn::before { background-position-y: -3793px }
span.ctry_vu::before, dd.ctry_vu::before { background-position-y: -3809px }
span.ctry_ws::before, dd.ctry_ws::before { background-position-y: -3825px }
span.ctry_ye::before, dd.ctry_ye::before { background-position-y: -3841px }
span.ctry_za::before, dd.ctry_za::before { background-position-y: -3857px }
span.ctry_zm::before, dd.ctry_zm::before { background-position-y: -3873px }
span.ctry_zw::before, dd.ctry_zw::before { background-position-y: -3889px }
span.ctry_sx::before, dd.ctry_sx::before { background-position-y: -3905px }
span.ctry_cw::before, dd.ctry_cw::before { background-position-y: -3921px }
span.ctry_ss::before, dd.ctry_ss::before { background-position-y: -3937px }
span.ctry_nu::before, dd.ctry_nu::before { background-position-y: -3953px }
/* user agent */
span.agent::before { background-image: url('img/info.svg') }
span.agent::before {
background-image: url('img/info.svg')
}
/* pageviews */
span.pageviews {
@@ -566,7 +564,13 @@
font-size: smaller;
border-radius: .25em;
}
span.pageviews::before { background-image: url('img/page.svg') }
span.pageviews::before {
content : '';
display: inline-block;
width: 1.25em; height: 1.25em;
background: transparent url('img/page.svg') center no-repeat;
background-size: 1.25em;
}
}

View File

@@ -1,22 +1,12 @@
<?php /* BOTMON PLUGIN HEARTBEAT TICKER SCRIPT */
// Note: this script is called in HEAD mode, therefore it can not return any payload.
// Note: this script is normally called in HEAD mode, therefore it can not return any payload.
// select the session identifier?
$sessionId = $_COOKIE['DokuWiki'] ?? '';
$sessionType = 'dw';
if ($sessionId == '') {
$sessionId = $_SERVER['REMOTE_ADDR'] ?? '';
if ($sessionId == '127.0.0.1' || $sessionId == '::1') {
$sessionId = 'localhost';
}
$sessionType = 'ip';
}
// what is the session identifier?
$sessionId = preg_replace('/[\x00-\x1F{};\"\']/', "\u{FFFD}", $_GET['id']) /* clean json parameter */
?? session_id()
?? $_SERVER['REMOTE_ADDR'];
// check if valid session id string:
if (strlen($sessionId) < 46 && !preg_match('/^[\w\d\.:]+$/', $sessionId)) {
$sessionId = 'invalid-session-id';
}
// clean the page ID
$pageId = preg_replace('/[\x00-\x1F]/', "\u{FFFD}", $_GET['p'] ?? '');