CSS : Modify the design of download page;

Python: Add instructions for operating systems and for featured clients;
SVG   : Add new icons and optimize existing icons;
TOML  : Add a file for operating systems;
XHTML : Add a page for operating systems.
This commit is contained in:
Schimon Jehudah, Adv. 2024-10-26 20:14:45 +03:00
parent 6625035969
commit 8675f295e6
24 changed files with 608 additions and 1159 deletions

View file

@ -1,27 +1,3 @@
#[atalk]
#title = "aTalk"
#about = """
#XMPP/Jabber client with encrypted instant messaging and video calls.
##
#An encrypted instant messaging with video call and GPS features for Divest OS.
#"""
#android = "https://f-droid.org/packages/org.atalk.android/"
#features = ["chat", "fdroid", "graphical", "mobile", "omemo", "otr", "zrtp"]
#resources = [
# { url = "https://atalk.sytes.net/atalk/", txt = "Homepage" },
#]
[aparte]
title = "Aparté"
about = """
Simple XMPP console client written in Rust and inspired by Profanity.
"""
posix = "https://github.com/paulfariello/aparte/releases"
features = ["chat", "console", "desktop"]
resources = [
{ url = "https://github.com/paulfariello/aparte", txt = "Homepage" },
]
#[adium] #[adium]
#title = "Adium" #title = "Adium"
#about = """ #about = """
@ -30,9 +6,34 @@ resources = [
#chatting with friends on XMPP and sitting in an IRC channel at the same time. #chatting with friends on XMPP and sitting in an IRC channel at the same time.
#""" #"""
#apple = "https://adium.im" #apple = "https://adium.im"
#features = ["chat", "desktop", "openpgp", "otr"] #properties = ["chat", "desktop", "openpgp", "otr"]
#resources = [ #resources = [
# { url = "https://adium.im", txt = "Homepage" }, # { url = "https://adium.im", txt = "Project homepage" },
#]
[aparte]
title = "Aparté"
about = """
Simple XMPP console client written in Rust and inspired by Profanity.
"""
posix = "https://github.com/paulfariello/aparte/releases"
properties = ["chat", "console", "desktop", "featured"]
resources = [
{ url = "https://github.com/paulfariello/aparte", txt = "Project repository" },
]
#[atalk]
#title = "aTalk"
#about = """
#XMPP/Jabber client with encrypted instant messaging and video calls.
##
#An encrypted instant messaging with video call and GPS features for Divest OS.
#"""
#android = "https://f-droid.org/packages/org.atalk.android/"
#properties = ["chat", "fdroid", "graphical", "mobile", "omemo", "otr", "zrtp"]
#resources = [
# { url = "https://f-droid.org/en/packages/org.atalk.android", txt = "F-Droid package" },
# { url = "https://atalk.sytes.net/atalk/", txt = "Project homepage" },
#] #]
#[beagle] #[beagle]
@ -47,9 +48,9 @@ resources = [
#and a few enhancements. #and a few enhancements.
#""" #"""
#apple = "https://beagle.im/#about" #apple = "https://beagle.im/#about"
#features = ["chat", "desktop", "graphical", "omemo"] #properties = ["chat", "desktop", "graphical", "omemo"]
#resources = [ #resources = [
# { url = "https://beagle.im", txt = "Homepage" }, # { url = "https://beagle.im", txt = "Project homepage" },
#] #]
[blabber] [blabber]
@ -59,9 +60,12 @@ blabber.im is a fork of Conversations. The changes aim to improve usability \
and ease transition from pre-installed and other widespread messengers. and ease transition from pre-installed and other widespread messengers.
""" """
android = "https://blabber.im" android = "https://blabber.im"
features = ["adhoc", "chat", "graphical", "mobile", "omemo", "openpgp"] properties = ["adhoc", "chat", "graphical", "mobile", "omemo", "openpgp"]
resources = [ resources = [
{ url = "https://blabber.im", txt = "Homepage" }, { url = "https://www.kanoa.de/@blabber/108289026302640506", txt = "Warum gibt es die App nicht mehr im Play Store?" },
{ url = "https://codeberg.org/kriztan/blabber.im", txt = "Project repository" },
{ url = "xmpp:support@room.pix-art.de?join", txt = "Support group chat" },
{ url = "https://blabber.im", txt = "Project homepage" },
] ]
#[bruno] #[bruno]
@ -73,9 +77,9 @@ resources = [
#You can use Bruno if the other IM apps are just not stylish enough. #You can use Bruno if the other IM apps are just not stylish enough.
#""" #"""
#android = "https://yaxim.org/download/" #android = "https://yaxim.org/download/"
#features = ["chat", "graphical", "mobile"] #properties = ["chat", "graphical", "mobile"]
#resources = [ #resources = [
# { url = "https://yaxim.org/bruno/", txt = "Homepage" }, # { url = "https://yaxim.org/bruno/", txt = "Project homepage" },
#] #]
#[candy] #[candy]
@ -91,9 +95,9 @@ resources = [
#Candy is different. It is built for your community. #Candy is different. It is built for your community.
#""" #"""
#browser = "http://candy-chat.github.io/candy/" #browser = "http://candy-chat.github.io/candy/"
#features = ["chat", "desktop", "graphical", "mobile"] #properties = ["chat", "desktop", "graphical", "mobile"]
#resources = [ #resources = [
# { url = "http://candy-chat.github.io/candy/", txt = "Homepage" }, # { url = "http://candy-chat.github.io/candy/", txt = "Project homepage" },
#] #]
#[chat-o-matic] #[chat-o-matic]
@ -104,9 +108,9 @@ resources = [
#Protocols natively supported include IRC and XMPP. #Protocols natively supported include IRC and XMPP.
#""" #"""
#haiku = "https://github.com/JadedCtrl/Chat-O-Matic/releases" #haiku = "https://github.com/JadedCtrl/Chat-O-Matic/releases"
#features = ["chat", "desktop", "graphical"] #properties = ["chat", "desktop", "graphical"]
#resources = [ #resources = [
# { url = "https://github.com/JadedCtrl/Chat-O-Matic", txt = "Homepage" }, # { url = "https://github.com/JadedCtrl/Chat-O-Matic", txt = "Project homepage" },
#] #]
[chatsecure] [chatsecure]
@ -119,9 +123,10 @@ Unlike other apps that keep you stuck in their walled garden, ChatSecure is \
fully interoperable with other clients that support OMEMO or OTR and XMPP. fully interoperable with other clients that support OMEMO or OTR and XMPP.
""" """
apple = "https://chatsecure.org" apple = "https://chatsecure.org"
features = ["chat", "fdroid", "graphical", "mobile", "omemo", "otr"] properties = ["chat", "fdroid", "graphical", "mobile", "omemo", "otr"]
resources = [ resources = [
{ url = "https://chatsecure.org", txt = "Homepage" }, { url = "https://itunes.apple.com/us/app/chatsecure/id464200063", txt = "iOS package" },
{ url = "https://chatsecure.org", txt = "Project homepage" },
] ]
[cheogram] [cheogram]
@ -133,38 +138,34 @@ It especially focuses on features useful to people who want to contact those \
on other networks as well, such as SMS-enabled phone numbers. on other networks as well, such as SMS-enabled phone numbers.
""" """
android = "https://f-droid.org/packages/com.cheogram.android" android = "https://f-droid.org/packages/com.cheogram.android"
features = ["adhoc", "chat", "fdroid", "graphical", "mobile", "omemo", "openpgp"] properties = ["adhoc", "chat", "fdroid", "featured", "graphical", "mobile", "omemo", "openpgp"]
resources = [ resources = [
{ url = "https://cheogram.com", txt = "Homepage" }, { url = "https://lemmy.ml/post/20435540", txt = "Cheogram temporarily removed from Play Store" },
{ url = "https://cheogram.en.aptoide.com/app?app_id=68849981", txt = "Aptoide package" },
{ url = "https://f-droid.org/en/packages/com.cheogram.android", txt = "F-Droid package" },
{ url = "https://git.singpolyma.net/cheogram", txt = "Project repository" },
{ url = "xmpp:discuss@conference.soprani.ca?join", txt = "Support group chat" },
{ url = "https://cheogram.com", txt = "Project homepage" },
] ]
[conversations] [conversations]
title = "Conversations" title = "Conversations"
about = """ about = """
Conversations is an encrypted, easy-to-use XMPP instant messenger for your \ The very last word in instant messaging. Conversations is an encrypted, easy-\
mobile device. to use XMPP instant messenger for your mobile device.
It is easy to use, reliable, battery friendly. With built-in support for \ It is compatible with Android 5.0+ smartphones and has been optimized to \
images, group chats and e2e encryption. provide a unique mobile experience. It is easy to use, reliable, battery \
friendly, with built-in support for images, group chats and e2e encryption.
""" """
android = "https://f-droid.org/packages/eu.siacs.conversations" android = "https://f-droid.org/packages/eu.siacs.conversations"
features = ["chat", "fdroid", "graphical", "mobile", "omemo", "openpgp"] properties = ["chat", "fdroid", "featured", "graphical", "mobile", "omemo", "openpgp"]
resources = [ resources = [
{ url = "https://conversations.im", txt = "Homepage" }, { url = "https://f-droid.org/en/packages/eu.siacs.conversations", txt = "F-Droid package" },
] { url = "https://play.google.com/store/apps/details?id=eu.siacs.conversations", txt = "Play package" },
{ url = "https://codeberg.org/iNPUTmice/Conversations", txt = "Project repository" },
[conversations-classic] { url = "xmpp:conversations@conference.siacs.eu?join", txt = "Support group chat" },
title = "Conversations Classic" { url = "https://conversations.im", txt = "Project homepage" },
about = """
The very last word in instant messaging.
Conversations is a Jabber/XMPP client for Android 5.0+ smartphones that has \
been optimized to provide a unique mobile experience.
"""
android = "https://f-droid.org/packages/eu.siacs.conversations.classic"
features = ["chat", "fdroid", "graphical", "mobile", "omemo", "openpgp"]
resources = [
{ url = "https://conversations.im", txt = "Homepage" },
] ]
[conversejs] [conversejs]
@ -182,11 +183,15 @@ is a modern XMPP server.
browser = "https://conversejs.org" browser = "https://conversejs.org"
apple = "https://github.com/conversejs/converse-desktop/releases" apple = "https://github.com/conversejs/converse-desktop/releases"
linux = "https://github.com/conversejs/converse-desktop/releases" linux = "https://github.com/conversejs/converse-desktop/releases"
ubports = "https://open-store.io/app/conversejs.luigi311" # openstore://conversejs.luigi311 ubports = "openstore://conversejs.luigi311"
windows = "https://github.com/conversejs/converse-desktop/releases" windows = "https://github.com/conversejs/converse-desktop/releases"
features = ["adhoc", "chat", "desktop", "graphical", "mobile", "omemo", "pwa"] properties = ["adhoc", "chat", "desktop", "featured", "graphical", "mobile", "omemo", "pwa"]
resources = [ resources = [
{ url = "https://conversejs.org", txt = "Homepage" }, { url = "https://open-store.io/app/conversejs.luigi311", txt = "OpenStore package" },
{ url = "https://github.com/luigi311/ConverseJS-ubports", txt = "ConverseJS-ubports project repository" },
{ url = "https://github.com/conversejs/converse.js", txt = "ConverseJS project repository" },
{ url = "xmpp:discuss@conference.conversejs.org?join", txt = "Support group chat" },
{ url = "https://conversejs.org", txt = "Project homepage" },
] ]
#[coyim] #[coyim]
@ -211,9 +216,10 @@ resources = [
#apple = "https://coy.im/#download-section" #apple = "https://coy.im/#download-section"
#linux = "https://coy.im/#download-section" #linux = "https://coy.im/#download-section"
#windows = "https://coy.im/#download-section" #windows = "https://coy.im/#download-section"
#features = ["chat", "desktop", "graphical", "otr"] #properties = ["chat", "desktop", "graphical", "otr"]
#resources = [ #resources = [
# { url = "https://coy.im", txt = "Homepage" }, # { url = "https://github.com/coyim/coyim", txt = "Project repository" },
# { url = "https://coy.im", txt = "Project homepage" },
#] #]
[dino] [dino]
@ -231,9 +237,11 @@ Dino fetches history from the server and synchronizes messages with other \
services. services.
""" """
linux = "https://dino.im/#download" linux = "https://dino.im/#download"
features = ["chat", "desktop", "graphical", "mobile", "omemo", "openpgp"] properties = ["chat", "desktop", "featured", "graphical", "mobile", "omemo", "openpgp"]
resources = [ resources = [
{ url = "https://dino.im", txt = "Homepage" }, { url = "https://flathub.org/apps/im.dino.Dino", txt = "Flathub package" },
{ url = "xmpp:chat@dino.im?join", txt = "Support group chat" },
{ url = "https://dino.im", txt = "Project homepage" },
] ]
[gajim] [gajim]
@ -250,9 +258,29 @@ on your mobile device.
apple = "https://gajim.org/download/#macos" apple = "https://gajim.org/download/#macos"
linux = "https://gajim.org/download/#linux" linux = "https://gajim.org/download/#linux"
windows = "https://gajim.org/download/#windows" windows = "https://gajim.org/download/#windows"
features = ["adhoc", "admin", "chat", "desktop", "graphical", "omemo", "openpgp"] properties = ["adhoc", "admin", "chat", "desktop", "featured", "graphical", "omemo", "openpgp"]
resources = [ resources = [
{ url = "https://gajim.org", txt = "Homepage" }, { url = "https://flathub.org/apps/org.gajim.Gajim", txt = "Flathub package" },
{ url = "https://apps.microsoft.com/detail/9pggf6hd43f9?hl=en-us&gl=US", txt = "Windows package" },
{ url = "xmpp:gajim@conference.gajim.org?join", txt = "Support group chat" },
{ url = "https://gajim.org", txt = "Project homepage" },
]
[freetalk]
title = "GNU Freetalk"
about = """
GNU Freetalk is a console based chat client for Jabber and other XMPP servers.
It has context sensitive auto-completion for buddy names, commands, and even \
ordinary English words. Similar to GNU Emacs,
You can customize and extend GNU Freetalk with Scheme language.
"""
posix = "https://www.gnu.org/software/freetalk/"
properties = ["chat", "console", "desktop"]
resources = [
{ url = "https://lists.gnu.org/mailman/listinfo/freetalk-dev", txt = "Mailing list" },
{ url = "https://www.gnu.org/software/freetalk/", txt = "Project homepage" },
] ]
[irssi] [irssi]
@ -264,9 +292,9 @@ irssi-xmpp is an Irssi plugin to connect to the XMPP network (jabber).
""" """
haiku = "https://depot.haiku-os.org/irssi" haiku = "https://depot.haiku-os.org/irssi"
posix = "https://cybione.org/~irssi-xmpp/" posix = "https://cybione.org/~irssi-xmpp/"
features = ["chat", "console", "desktop", "haikudepot"] properties = ["chat", "console", "desktop", "haikudepot"]
resources = [ resources = [
{ url = "https://cybione.org/~irssi-xmpp/", txt = "irssi-xmpp homepage" }, { url = "https://cybione.org/~irssi-xmpp/", txt = "irssi-xmpp project repository" },
{ url = "https://irssi.org", txt = "Irssi homepage" }, { url = "https://irssi.org", txt = "Irssi homepage" },
] ]
@ -278,13 +306,10 @@ An XMPP client for Emacs
jabber.el is an XMPP client for Emacs. XMPP (also known as 'Jabber') is an \ jabber.el is an XMPP client for Emacs. XMPP (also known as 'Jabber') is an \
IETF-standard federated instant messaging protocol. IETF-standard federated instant messaging protocol.
""" """
apple = "https://codeberg.org/emacs-jabber/emacs-jabber#how-to-install"
android = "https://codeberg.org/emacs-jabber/emacs-jabber#how-to-install"
posix = "https://codeberg.org/emacs-jabber/emacs-jabber#how-to-install" posix = "https://codeberg.org/emacs-jabber/emacs-jabber#how-to-install"
windows = "https://codeberg.org/emacs-jabber/emacs-jabber#how-to-install" properties = ["admin", "chat", "console", "desktop"]
features = ["admin", "chat", "console", "desktop"]
resources = [ resources = [
{ url = "https://codeberg.org/emacs-jabber/emacs-jabber", txt = "Homepage" }, { url = "https://codeberg.org/emacs-jabber/emacs-jabber", txt = "Project repository" },
] ]
[jsxc] [jsxc]
@ -295,10 +320,13 @@ JavaScript XMPP Client.
Real-time XMPP chat application with video calls, file transfer and encrypted \ Real-time XMPP chat application with video calls, file transfer and encrypted \
communication. communication.
""" """
browser = "https://github.com/narutogo/jsxc-na" browser = "https://jsxc.org/installation.html#downloads"
features = ["chat", "desktop", "graphical", "mobile", "omemo"] properties = ["chat", "desktop", "graphical", "mobile", "omemo"]
resources = [ resources = [
{ url = "https://jsxc.org", txt = "Homepage" }, { url = "https://apps.nextcloud.com/apps/ojsxc", txt = "Nextcloud package" },
{ url = "https://github.com/narutogo/jsxc-na", txt = "jsxc-na project repository" },
{ url = "https://github.com/jsxc/jsxc", txt = "jsxc project repository" },
{ url = "https://jsxc.org", txt = "Project homepage" },
] ]
[kaidan] [kaidan]
@ -313,10 +341,54 @@ provider, and your privacy is gauranteed more than ever before.
""" """
android = "https://kaidan.im/download/#android-experimental" android = "https://kaidan.im/download/#android-experimental"
linux = "https://kaidan.im/download/#linux" linux = "https://kaidan.im/download/#linux"
ubports = "https://open-store.io/app/im.kaidan.kaidan" # openstore://im.kaidan.kaidan properties = ["chat", "desktop", "graphical", "mobile", "omemo"]
features = ["chat", "desktop", "graphical", "mobile", "omemo"]
resources = [ resources = [
{ url = "https://kaidan.im", txt = "Homepage" }, { url = "appstream://im.kaidan.kaidan", txt = "Discover package" },
{ url = "https://flathub.org/apps/im.kaidan.kaidan", txt = "Flathub package" },
{ url = "https://invent.kde.org/network/kaidan", txt = "Project repository" },
{ url = "xmpp:kaidan@muc.kaidan.im?join", txt = "Support group chat" },
{ url = "https://kaidan.im", txt = "Project homepage" },
]
[kaidan-qml]
title = "Kaidan"
about = """
Kaidan is a user-friendly and modern chat app for every device.
It uses the open communication protocol XMPP (Jabber).
Unlike other chat apps, you are not dependent on one specific service \
provider, and your privacy is gauranteed more than ever before.
"""
ubports = "openstore://im.kaidan.kaidan"
properties = ["chat", "desktop", "featured", "graphical", "mobile", "omemo"]
resources = [
{ url = "https://open-store.io/app/im.kaidan.kaidan", txt = "OpenStore package" },
{ url = "https://invent.kde.org/network/kaidan", txt = "Project repository" },
{ url = "xmpp:kaidan@muc.kaidan.im?join", txt = "Support group chat" },
{ url = "https://kaidan.im", txt = "Project homepage" },
]
[kopete]
title = "Kopete"
about = """
Kopete is an instant messenger supporting IRC, Jabber, Gadu-Gadu, Novell \
GroupWise Messenger, and more. It is designed to be a flexible and extensible \
multi-protocol system suitable for personal and enterprise use.
The goal of Kopete is to provide users with a single easy-to-use way to access \
all of their instant messaging systems. The interface puts people first, and \
is integrated with the system address book to let you access your contacts \
from other KDE applications.
"""
linux = "https://apps.kde.org/kopete/"
properties = ["chat", "desktop", "graphical", "otr"]
resources = [
{ url = "appstream://org.kde.kopete", txt = "Discover package" },
{ url = "https://flathub.org/apps/details/org.kde.kopete", txt = "Flathub package" },
{ url = "https://invent.kde.org/network/kopete", txt = "Project repository" },
{ url = "irc://irc.libera.chat/kopete", txt = "Support group chat" },
{ url = "https://userbase.kde.org/Kopete", txt = "Project homepage" },
] ]
#[mcabber] #[mcabber]
@ -329,9 +401,10 @@ resources = [
#Record Messaging) support, dynamic modules and external action triggers. #Record Messaging) support, dynamic modules and external action triggers.
#""" #"""
#posix = "https://mcabber.com" #posix = "https://mcabber.com"
#features = ["admin", "chat", "console", "desktop", "openpgp", "otr"] #properties = ["admin", "chat", "console", "desktop", "openpgp", "otr"]
#resources = [ #resources = [
# { url = "https://mcabber.com", txt = "Homepage" }, # { url = "https://mcabber.com/hg/", txt = "Project repository" },
# { url = "https://mcabber.com", txt = "Project homepage" },
#] #]
[miranda] [miranda]
@ -345,9 +418,10 @@ client Miranda IM.
It is very light on system resources and extremely fast. It is very light on system resources and extremely fast.
""" """
windows = "https://miranda-ng.org/downloads/" windows = "https://miranda-ng.org/downloads/"
features = ["adhoc", "chat", "desktop", "graphical", "omemo", "openpgp", "otr"] properties = ["adhoc", "chat", "desktop", "featured", "graphical", "omemo", "openpgp", "otr"]
resources = [ resources = [
{ url = "https://miranda-ng.org", txt = "Homepage" }, { url = "https://github.com/miranda-ng/miranda-ng", txt = "Project repository" },
{ url = "https://miranda-ng.org", txt = "Project homepage" },
] ]
[monal] [monal]
@ -360,9 +434,13 @@ be the go-to client for these platforms just like the app Conversations is for \
Divest OS. Divest OS.
""" """
apple = "https://monal-im.org" apple = "https://monal-im.org"
features = ["chat", "desktop", "graphical", "mobile", "omemo"] properties = ["chat", "desktop", "featured", "graphical", "mobile", "omemo"]
resources = [ resources = [
{ url = "https://monal-im.org", txt = "Homepage" }, { url = "https://apps.apple.com/app/id317711500", txt = "iOS package" },
{ url = "https://apps.apple.com/app/id1637078500", txt = "macOS package" },
{ url = "https://github.com/monal-im/Monal", txt = "Project repository" },
{ url = "xmpp:monal@chat.yax.im?join", txt = "Support group chat" },
{ url = "https://monal-im.org", txt = "Project homepage" },
] ]
[monocles] [monocles]
@ -374,9 +452,13 @@ It is based on blabber.im and Conversations, yet has a lot of changes and \
offers additional features to improve usability and security. offers additional features to improve usability and security.
""" """
android = "https://f-droid.org/packages/de.monocles.chat" android = "https://f-droid.org/packages/de.monocles.chat"
features = ["adhoc", "chat", "fdroid", "graphical", "mobile", "omemo", "openpgp", "otr"] properties = ["adhoc", "chat", "fdroid", "featured", "graphical", "mobile", "omemo", "openpgp", "otr"]
resources = [ resources = [
{ url = "https://monocles.de/more/", txt = "Homepage" }, { url = "https://f-droid.org/en/packages/de.monocles.chat", txt = "F-Droid package" },
{ url = "https://play.google.com/store/apps/details?id=eu.monocles.chat", txt = "Play package" },
{ url = "https://codeberg.org/monocles/monocles_chat", txt = "Project repository" },
{ url = "xmpp:support@conference.monocles.de?join", txt = "Support group chat" },
{ url = "https://monocles.de/more/", txt = "Project homepage" },
] ]
[movim] [movim]
@ -397,10 +479,14 @@ desktop computer.
apple = "https://join.movim.eu" apple = "https://join.movim.eu"
browser = "https://join.movim.eu" browser = "https://join.movim.eu"
android = "https://join.movim.eu" android = "https://join.movim.eu"
ubports = "https://open-store.io/app/eu.movim.ut.movim" # openstore://eu.movim.ut.movim ubports = "openstore://eu.movim.ut.movim"
features = ["adhoc", "chat", "desktop", "graphical", "mobile", "omemo", "pubsub", "pwa"] properties = ["adhoc", "chat", "desktop", "featured", "graphical", "mobile", "omemo", "pubsub", "pwa"]
resources = [ resources = [
{ url = "https://movim.eu", txt = "Homepage" }, { url = "https://open-store.io/app/eu.movim.ut.movim", txt = "OpenStore package" },
{ url = "https://gitlab.com/ChristianPauly/ubuntu-movim", txt = "ubuntu-movim project repository" },
{ url = "https://github.com/movim/movim", txt = "Movim project repository" },
{ url = "xmpp:movim@conference.movim.eu?join", txt = "Support group chat" },
{ url = "https://movim.eu", txt = "Project homepage" },
] ]
[moxxy] [moxxy]
@ -412,9 +498,11 @@ It is currently alpha software. This means that there will be issues with some \
functionalities. Please do not use Moxxy for anything important at this moment. functionalities. Please do not use Moxxy for anything important at this moment.
""" """
android = "https://apt.izzysoft.de/fdroid/index/apk/org.moxxy.moxxyv2" android = "https://apt.izzysoft.de/fdroid/index/apk/org.moxxy.moxxyv2"
features = ["chat", "graphical", "izzyondroid", "mobile", "omemo"] properties = ["chat", "graphical", "izzyondroid", "mobile", "omemo"]
resources = [ resources = [
{ url = "https://moxxy.org", txt = "Homepage" }, { url = "https://codeberg.org/moxxy/moxxy", txt = "Project repository" },
{ url = "xmpp:moxxy@muc.moxxy.org?join", txt = "Support group chat" },
{ url = "https://moxxy.org", txt = "Project homepage" },
] ]
[pade] [pade]
@ -427,9 +515,9 @@ client optimized for business and organizations implemented as a cross-\
platform browser extension. platform browser extension.
""" """
browser = "https://igniterealtime.org/projects/pade/" browser = "https://igniterealtime.org/projects/pade/"
features = ["chat", "desktop", "extension", "graphical", "mobile", "omemo"] properties = ["chat", "desktop", "extension", "graphical", "mobile", "omemo"]
resources = [ resources = [
{ url = "https://igniterealtime.org/projects/pade/", txt = "Homepage" }, { url = "https://igniterealtime.org/projects/pade/", txt = "Project homepage" },
] ]
[pidgin] [pidgin]
@ -445,14 +533,14 @@ Sametime, SILC, SIMPLE, and Zephyr. It can support many more with plugins.
Pidgin supports many features of these chat networks, such as file transfers, \ Pidgin supports many features of these chat networks, such as file transfers, \
away messages, buddy icons, custom smileys, and typing notifications. Numerous \ away messages, buddy icons, custom smileys, and typing notifications. Numerous \
plugins also extend Pidgins functionality above and beyond the standard \ plugins also extend functionality above and beyond the standard features.
features.
""" """
linux = "https://pidgin.im/install/" linux = "https://pidgin.im/install/"
windows = "https://pidgin.im/install/" windows = "https://pidgin.im/install/"
features = ["chat", "desktop", "openpgp", "otr"] properties = ["chat", "desktop", "openpgp", "otr"]
resources = [ resources = [
{ url = "https://pidgin.im", txt = "Homepage" }, { url = "https://flathub.org/apps/im.pidgin.Pidgin", txt = "Flathub package" },
{ url = "https://pidgin.im", txt = "Project homepage" },
] ]
[poezio] [poezio]
@ -472,22 +560,36 @@ anonymous spirit of IRC while using a powerful, standard and open protocol.
""" """
haiku = "https://depot.haiku-os.org/poezio" haiku = "https://depot.haiku-os.org/poezio"
posix = "https://poez.io/en/#download" posix = "https://poez.io/en/#download"
features = ["adhoc", "chat", "console", "desktop", "haikudepot", "omemo", "openpgp", "otr"] properties = ["adhoc", "chat", "console", "desktop", "featured", "haikudepot", "omemo", "openpgp", "otr"]
resources = [ resources = [
{ url = "https://poez.io", txt = "Homepage" }, { url = "https://flathub.org/apps/io.poez.Poezio", txt = "Flathub package" },
{ url = "https://codeberg.org/poezio/poezio", txt = "Project repository" },
{ url = "https://codeberg.org/poezio/poezio/src/branch/main/plugins", txt = "Plugins list" },
{ url = "xmpp:poezio@muc.poez.io?join", txt = "Support group chat" },
{ url = "https://poez.io", txt = "Project homepage" },
] ]
#[profanity] [profanity]
#title = "Profanity" title = "Profanity"
#about = """ about = """
#Profanity is a console based XMPP client written in C using ncurses and \ A console based XMPP client.
#libstrophe, inspired by Irssi.
#""" Profanity is a console based XMPP client written in C using ncurses and \
#posix = "https://profanity-im.github.io" libstrophe, inspired by Irssi.
#features = ["chat", "console", "desktop", "omemo", "openpgp", "otr"]
#resources = [ It supports XMPP chat services, MUC chat room, OTR, PGP and OMEMO encryption, \
# { url = "https://profanity-im.github.io", txt = "Homepage" }, roster management, including flexible resource and priority settings, desktop \
#] notifications, and it has a plugins system in Python and C.
"""
posix = "https://profanity-im.github.io"
properties = ["adhoc", "chat", "console", "desktop", "featured", "omemo", "openpgp", "otr"]
resources = [
{ url = "https://github.com/profanity-im/profanity", txt = "Project repository" },
{ url = "https://profanity-im.github.io/plugins.html", txt = "Plugins list" },
{ url = "https://lists.posteo.de/listinfo/profanity", txt = "Mailing list" },
{ url = "xmpp:profanity@rooms.dismail.de?join", txt = "Support group chat" },
{ url = "https://profanity-im.github.io", txt = "Project homepage" },
]
[prose] [prose]
title = "Prose" title = "Prose"
@ -499,9 +601,9 @@ Decentralized Team Messaging in an Era of Centralized SaaS.
""" """
apple = "https://prose.org/downloads/" apple = "https://prose.org/downloads/"
browser = "https://prose.org/downloads/" browser = "https://prose.org/downloads/"
features = ["chat", "desktop", "graphical", "mobile"] properties = ["chat", "desktop", "graphical", "mobile"]
resources = [ resources = [
{ url = "https://prose.org", txt = "Homepage" }, { url = "https://prose.org", txt = "Project homepage" },
] ]
[psi] [psi]
@ -515,9 +617,11 @@ supported operating system.
apple = "https://psi-im.org" apple = "https://psi-im.org"
linux = "https://psi-im.org" linux = "https://psi-im.org"
windows = "https://psi-im.org" windows = "https://psi-im.org"
features = ["adhoc", "admin", "chat", "desktop", "graphical", "omemo", "openpgp", "otr"] properties = ["adhoc", "admin", "chat", "desktop", "graphical", "omemo", "openpgp", "otr"]
resources = [ resources = [
{ url = "https://psi-im.org", txt = "Homepage" }, { url = "https://github.com/psi-im/psi", txt = "Project repository" },
{ url = "xmpp:psi-dev@conference.jabber.ru?join", txt = "Support group chat" },
{ url = "https://psi-im.org", txt = "Project homepage" },
] ]
[psi-plus] [psi-plus]
@ -533,9 +637,11 @@ apple = "https://psi-plus.com/wiki/en:downloads#macos"
haiku = "https://depot.haiku-os.org/psi_plus" haiku = "https://depot.haiku-os.org/psi_plus"
linux = "https://psi-plus.com/wiki/en:downloads#linux" linux = "https://psi-plus.com/wiki/en:downloads#linux"
windows = "https://psi-plus.com/wiki/en:downloads#ms_windows" windows = "https://psi-plus.com/wiki/en:downloads#ms_windows"
features = ["adhoc", "admin", "chat", "desktop", "graphical", "haikudepot", "omemo", "openpgp", "otr"] properties = ["adhoc", "admin", "chat", "desktop", "featured", "graphical", "haikudepot", "omemo", "openpgp", "otr"]
resources = [ resources = [
{ url = "https://psi-im.org", txt = "Homepage" }, { url = "https://github.com/psi-plus/main", txt = "Project repository" },
{ url = "xmpp:psi-dev@conference.jabber.ru?join", txt = "Support group chat" },
{ url = "https://psi-plus.com", txt = "Project homepage" },
] ]
[reeder] [reeder]
@ -547,9 +653,9 @@ Reeder fetches, does not come from typical HTTP feed sources but rather from \
XMPP PubSub services. XMPP PubSub services.
""" """
browser = "https://github.com/SeveFP/Reeder" browser = "https://github.com/SeveFP/Reeder"
features = ["desktop", "graphical", "pubsub"] properties = ["desktop", "graphical", "pubsub"]
resources = [ resources = [
{ url = "https://github.com/SeveFP/Reeder", txt = "Homepage" }, { url = "https://github.com/SeveFP/Reeder", txt = "Project repository" },
] ]
[renga] [renga]
@ -561,9 +667,10 @@ Renga supports personal one-to-one chat, group chat, transports, etc. and it \
provides a clean and easy to use interface. provides a clean and easy to use interface.
""" """
haiku = "https://depot.haiku-os.org/renga" haiku = "https://depot.haiku-os.org/renga"
features = ["chat", "desktop", "graphical", "haikudepot"] properties = ["chat", "desktop", "featured", "graphical", "haikudepot"]
resources = [ resources = [
{ url = "https://pulkomandy.tk/projects/renga", txt = "Homepage" }, { url = "xmpp:renga@chat.jabberfr.org?join", txt = "Support group chat" },
{ url = "https://pulkomandy.tk/projects/renga", txt = "Project homepage" },
] ]
#[siskin] #[siskin]
@ -573,9 +680,10 @@ resources = [
#and iPad. It provides an easy way to talk and share moments with your friends. #and iPad. It provides an easy way to talk and share moments with your friends.
#""" #"""
#apple = "https://siskin.im/#about" #apple = "https://siskin.im/#about"
#features = ["chat", "graphical", "mobile", "omemo"] #properties = ["chat", "graphical", "mobile", "omemo"]
#resources = [ #resources = [
# { url = "https://siskin.im", txt = "Homepage" }, # { url = "https://itunes.apple.com/us/app/tigase-messenger/id1153516838", txt = "iOS package" },
# { url = "https://siskin.im", txt = "Project homepage" },
#] #]
#[spark] #[spark]
@ -593,9 +701,9 @@ resources = [
#apple = "https://igniterealtime.org/projects/spark/" #apple = "https://igniterealtime.org/projects/spark/"
#linux = "https://igniterealtime.org/projects/spark/" #linux = "https://igniterealtime.org/projects/spark/"
#windows = "https://igniterealtime.org/projects/spark/" #windows = "https://igniterealtime.org/projects/spark/"
#features = ["chat", "desktop", "graphical", "omemo"] #properties = ["chat", "desktop", "graphical", "omemo"]
#resources = [ #resources = [
# { url = "https://igniterealtime.org/projects/spark/", txt = "Homepage" }, # { url = "https://igniterealtime.org/projects/spark/", txt = "Project homepage" },
#] #]
#[speeqe] #[speeqe]
@ -616,9 +724,9 @@ resources = [
#based servers. To tie it all together there is a small amount of django. #based servers. To tie it all together there is a small amount of django.
#""" #"""
#browser = "https://github.com/thepug/Speeqe" #browser = "https://github.com/thepug/Speeqe"
#features = ["chat", "desktop", "graphical"] #properties = ["chat", "desktop", "graphical"]
#resources = [ #resources = [
# { url = "https://github.com/thepug/Speeqe", txt = "Homepage" }, # { url = "https://github.com/thepug/Speeqe", txt = "Project repository" },
#] #]
[squawk] [squawk]
@ -627,15 +735,17 @@ about = """
Squawk is a lightweight XMPP desktop messenger. Squawk is a lightweight XMPP desktop messenger.
The primary objective of this project is to offer you a fast and user-friendly \ The primary objective of this project is to offer you a fast and user-friendly \
messaging experience that closely aligns with your systems style, while also \ messaging experience that closely aligns with your system style, while also \
minimizing resource consumption. minimizing resource consumption.
Squawk is still at a very early stage and might not suit everyone but you are welcome to try it out. Squawk is still at a very early stage and might not suit everyone but you are welcome to try it out.
""" """
linux = "https://macaw.me/projects/squawk/" linux = "https://macaw.me/projects/squawk/"
features = ["chat", "desktop", "graphical"] properties = ["chat", "desktop", "graphical"]
resources = [ resources = [
{ url = "https://macaw.me/projects/squawk/", txt = "Homepage" }, { url = "xmpp:squawk@conference.macaw.me?join", txt = "Support group chat" },
{ url = "https://git.macaw.me/blue/squawk", txt = "Project repository" },
{ url = "https://macaw.me/projects/squawk/", txt = "Project homepage" },
] ]
[stork] [stork]
@ -646,9 +756,9 @@ Stork IM by Tigase, Inc. is a lightweight and powerful XMPP client for Android.
It provides an easy way to talk and share moments with your friends. It provides an easy way to talk and share moments with your friends.
""" """
android = "https://stork.im/#about" android = "https://stork.im/#about"
features = ["chat", "graphical", "mobile", "omemo"] properties = ["chat", "graphical", "mobile", "omemo"]
resources = [ resources = [
{ url = "https://stork.im", txt = "Homepage" }, { url = "https://stork.im", txt = "Project homepage" },
] ]
[swift] [swift]
@ -665,9 +775,10 @@ from Isode.
apple = "https://swift.im/downloads.html" apple = "https://swift.im/downloads.html"
linux = "https://swift.im/downloads.html" linux = "https://swift.im/downloads.html"
windows = "https://swift.im/downloads.html" windows = "https://swift.im/downloads.html"
features = ["chat", "desktop", "graphical"] properties = ["chat", "desktop", "graphical"]
resources = [ resources = [
{ url = "https://swift.im", txt = "Homepage" }, { url = "xmpp:swift@rooms.swift.im?join", txt = "Support group chat" },
{ url = "https://swift.im", txt = "Project homepage" },
] ]
[uwpx] [uwpx]
@ -683,10 +794,12 @@ There is support for a wide range of features link bookmarks, user avatars, \
chat markers and experimental OMEMO support. chat markers and experimental OMEMO support.
""" """
windows = "https://uwpx.org" windows = "https://uwpx.org"
features = ["chat", "desktop", "graphical", "mobile", "omemo"] properties = ["chat", "desktop", "featured", "graphical", "mobile", "omemo"]
resources = [ resources = [
{ url = "https://github.com/UWPX/UWPX-Client?tab=readme-ov-file#features", txt = "A complete list of features" }, { url = "https://github.com/UWPX/UWPX-Client?tab=readme-ov-file#features", txt = "A complete list of features" },
{ url = "https://uwpx.org", txt = "Homepage" }, { url = "https://apps.microsoft.com/detail/9n2s5v8hmvlm?hl=en-us&gl=US", txt = "Windows package" },
{ url = "https://github.com/UWPX/UWPX-Client", txt = "Project repository" },
{ url = "https://uwpx.org", txt = "Project homepage" },
] ]
[weechat] [weechat]
@ -698,12 +811,11 @@ XMPP for power users and digital masochists.
weechat-xmpp is a WeeChat plugin that extends WeeChat to support XMPP, and it \ weechat-xmpp is a WeeChat plugin that extends WeeChat to support XMPP, and it \
currently has a minimal but ideally maximal set of XEPs. currently has a minimal but ideally maximal set of XEPs.
""" """
android = "https://github.com/bqv/weechat-xmpp"
haiku = "https://depot.haiku-os.org/weechat" haiku = "https://depot.haiku-os.org/weechat"
posix = "https://github.com/bqv/weechat-xmpp" posix = "https://github.com/bqv/weechat-xmpp"
features = ["chat", "console", "desktop", "omemo", "openpgp"] properties = ["chat", "console", "desktop", "omemo", "openpgp"]
resources = [ resources = [
{ url = "https://github.com/bqv/weechat-xmpp", txt = "weechat-xmpp homepage" }, { url = "https://github.com/bqv/weechat-xmpp", txt = "weechat-xmpp project repository" },
{ url = "https://weechat.org", txt = "WeeChat homepage" }, { url = "https://weechat.org", txt = "WeeChat homepage" },
] ]
@ -719,9 +831,12 @@ interoperable open standards.
""" """
browser = "https://xabber.com" browser = "https://xabber.com"
android = "https://xabber.com" android = "https://xabber.com"
features = ["chat", "desktop", "graphical", "omemo", "mobile"] properties = ["chat", "desktop", "featured", "graphical", "omemo", "mobile"]
resources = [ resources = [
{ url = "https://xabber.com", txt = "Homepage" }, { url = "https://f-droid.org/packages/com.xabber.android", txt = "F-Droid package" },
{ url = "https://play.google.com/store/apps/details?id=com.xabber.android", txt = "Play package" },
{ url = "https://web.xabber.com", txt = "Xabber Web" },
{ url = "https://xabber.com", txt = "Project homepage" },
] ]
#[xmpp-web] #[xmpp-web]
@ -730,9 +845,9 @@ resources = [
#Lightweight HTML chat client for XMPP servers. #Lightweight HTML chat client for XMPP servers.
#""" #"""
#browser = "https://github.com/nioc/xmpp-web/releases" #browser = "https://github.com/nioc/xmpp-web/releases"
#features = ["chat", "desktop", "graphical", "mobile", "pwa"] #properties = ["chat", "desktop", "graphical", "mobile", "pwa"]
#resources = [ #resources = [
# { url = "https://github.com/nioc/xmpp-web", txt = "Homepage" }, # { url = "https://github.com/nioc/xmpp-web", txt = "Project homepage" },
#] #]
[yaxim] [yaxim]
@ -745,7 +860,9 @@ It aims at usability, low overhead and security, and works on low-end Android \
devices starting with Android 4.0. devices starting with Android 4.0.
""" """
android = "https://yaxim.org/download/" android = "https://yaxim.org/download/"
features = ["chat", "graphical", "mobile"] properties = ["chat", "graphical", "mobile"]
resources = [ resources = [
{ url = "https://yaxim.org", txt = "Homepage" }, { url = "https://play.google.com/store/apps/details?id=org.yaxim.androidclient", txt = "Play package" },
{ url = "xmpp:yaxim@chat.yax.im?join", txt = "Support group chat" },
{ url = "https://yaxim.org", txt = "Project homepage" },
] ]

View file

@ -33,6 +33,7 @@ body {
rgba(130, 130, 130, 0.5) rgba(130, 130, 130, 0.5)
), ),
url(/img/background.svg); url(/img/background.svg);
background-attachment: fixed;
background-repeat: repeat; background-repeat: repeat;
/* height: 100vh; */ /* height: 100vh; */
/* /*
@ -295,11 +296,37 @@ h1 {
} }
#selection { #selection {
margin-left: 10%;
margin-right: 10%;
padding-left: 1em; padding-left: 1em;
padding-right: 2em; padding-right: 2em;
padding-top: 2em; padding-top: 2em;
} }
#container-of-selection {
border-radius: 30px;
margin-top: 2.5em;
margin-bottom: 2.5em;
margin-left: auto;
margin-right: auto;
filter: drop-shadow(2px 4px 6px grey);
max-width: 55em;
/* FIXME
Elements of element #profile overflow upon decreasing height, once property
min-width has been added.
*/
min-width: 35em;
/* NOTE
The problem is not with elements within element #profile.
Issue has been fixed, once property max-height was commented.
If you would, add @media (max-height: 300px) for lower height.
*/
/* max-height: 75vh; */
padding-top: 1em;
padding-bottom: 2em;
width: 80%;
}
#selection > dt { #selection > dt {
margin-bottom: 1.5em; margin-bottom: 1.5em;
margin-left: 0.5em; margin-left: 0.5em;
@ -363,6 +390,7 @@ h1 {
#selection .features { #selection .features {
font-size: 80%; font-size: 80%;
line-height: 40px;
margin: 1em; margin: 1em;
} }
@ -393,6 +421,65 @@ h1 {
display: block; /* Show details upon checked checkbox */ display: block; /* Show details upon checked checkbox */
} }
.plain-note {
display: block;
justify-content: center;
margin-bottom: 2em;
margin-top: 1.5em;
text-align: center;
}
#software,
#software-menu {
display: flex;
flex-wrap: wrap;
justify-content: center;
}
#software-menu .system {
/* background: #e9e9e9; */
border-radius: 10px;
color: #5c5c5c;
/* display: table; */
margin: 1em;
overflow-wrap: break-word;
padding: 1em;
text-align: center;
text-decoration: none;
width: 12.2%;
}
#software-menu img {
border-radius: 10px;
height: 5em;
width: 5em;
}
#software > .system:hover,
#software-menu .system:hover {
background: #e5e5e5;
/* text-decoration: overline; */
}
#software > .system {
/* background: #e9e9e9; */
border-radius: 10px;
color: #5c5c5c;
height: 15%;
margin: 1em;
padding: 1.5em;
text-decoration: none;
width: 20%;
}
/*
#software > .system:hover {
outline-style: solid;
}
*/
#software > .system img {
width: 5em;
}
#security-notices { #security-notices {
display: flex; display: flex;
justify-content: center; justify-content: center;
@ -403,7 +490,7 @@ h1 {
background: #ebebbe; background: #ebebbe;
border-radius: 10px; border-radius: 10px;
display: flex; display: flex;
font-size: 1.2em; /* font-size: 1.2em; */
margin: 1em; margin: 1em;
/* /*
margin-right: 20%; margin-right: 20%;
@ -414,18 +501,25 @@ h1 {
} }
#security-notices img { #security-notices img {
height: 80px; height: 60px;
margin-left: 0.5em; margin-left: 0.5em;
margin-right: 1em; margin-right: 1em;
width: 80px; width: 60px;
} }
/*
#security-notices span {
align-self: center;
place-self: center;
}
*/
#titles { #titles {
padding-left: 0.5em; padding-left: 0.5em;
padding-right: 0.5em; padding-right: 0.5em;
} }
#container-of-profile { #overlay {
/* margin: auto; */ /* margin: auto; */
padding-bottom: 0.5em; padding-bottom: 0.5em;
} }
@ -463,11 +557,6 @@ h1 {
filter: drop-shadow(2px 4px 6px grey); filter: drop-shadow(2px 4px 6px grey);
} }
#container-of-content {
/* margin-left: 8em; */
/* overflow: auto; */
}
#profile { #profile {
border-radius: 30px; border-radius: 30px;
filter: drop-shadow(2px 4px 6px grey); filter: drop-shadow(2px 4px 6px grey);
@ -654,22 +743,6 @@ h1 {
} }
*/ */
@media (max-width: 820px) {
#action-bar > #windows {
display: none;
}
#selection img.wide {
display: none;
}
#selection img.narrow {
display: unset;
}
}
@media (max-width: 950px) { @media (max-width: 950px) {
#action-bar > #view, #action-bar > #view,
@ -683,6 +756,14 @@ h1 {
justify-content: center; justify-content: center;
} }
#selection img.narrow {
display: unset;
}
#selection img.wide {
display: none;
}
} }
@media (max-width: 885px) { @media (max-width: 885px) {
@ -743,8 +824,7 @@ h1 {
} }
#action > #add, #action > #add,
#action-bar > #add, #action-bar > #add {
#action-bar > #haiku {
display: none; display: none;
} }
@ -766,7 +846,7 @@ h1 {
display: unset; display: unset;
} }
#container-of-profile { #overlay {
padding-bottom: unset; padding-bottom: unset;
} }
@ -822,14 +902,6 @@ h1 {
} }
@media (max-width: 670px) {
#action-bar > #linux {
display: none;
}
}
@media (max-width: 572px) { @media (max-width: 572px) {
#action > a, #action > a,

51
fasi.py
View file

@ -667,13 +667,44 @@ class HttpInstance:
response.headers['Content-Type'] = 'application/xhtml+xml' response.headers['Content-Type'] = 'application/xhtml+xml'
return response return response
@self.app.get('/download') @self.app.get('/selection')
@self.app.get('/download/{software}') async def selection_get(request: Request):
@self.app.get('/download/{software}/{kind}') filename = 'systems.toml'
async def download_get(request: Request, software=None, kind=None): software = Data.open_file_toml(filename)['systems']
template_file = 'software.xhtml'
template_dict = {
'brand_name' : brand_name,
'brand_site' : brand_site,
'chat_client' : chat_client,
'request' : request,
'software' : software,
'url' : request.url._url}
response = templates.TemplateResponse(template_file, template_dict)
response.headers['Content-Type'] = 'application/xhtml+xml'
return response
# TODO admin, advanced, console, desktop, graphical, mobile #@self.app.get('/download/select')
if not kind: kind = 'graphical' #async def download_select_get(request, software=None):
@self.app.get('/download/{software}')
async def download_software_get(request: Request, software):
response = await download_get(request, featured=True, software=software)
return response
@self.app.get('/download/{software}/all')
async def download_software_all_get(request: Request, software):
response = await download_get(request, featured=False, software=software)
return response
@self.app.get('/download')
async def download_get(request: Request, featured=True, software=None):
# TODO
# Fearured clients '/download/{software}'
# All clients '/download/{software}/all'
# Select software '/download/select'
skipped = False
if not software: if not software:
user_agent = request.headers.get("user-agent") user_agent = request.headers.get("user-agent")
@ -699,12 +730,15 @@ class HttpInstance:
client_selection = [] client_selection = []
for client in clients: for client in clients:
if software in clients[client]: if software in clients[client]:
if featured and 'featured' not in clients[client]['properties']:
skipped = True
continue
client_selected = { client_selected = {
'name' : clients[client]['title'], 'name' : clients[client]['title'],
'about' : clients[client]['about'], 'about' : clients[client]['about'],
'features' : clients[client]['features'],
'iden' : client,
'href' : clients[client][software], 'href' : clients[client][software],
'iden' : client,
'properties' : clients[client]['properties'],
'resources' : clients[client]['resources'] if 'resources' in clients[client] else ''} 'resources' : clients[client]['resources'] if 'resources' in clients[client] else ''}
client_selection.append(client_selected) client_selection.append(client_selected)
@ -714,6 +748,7 @@ class HttpInstance:
'brand_site' : brand_site, 'brand_site' : brand_site,
'chat_client' : chat_client, 'chat_client' : chat_client,
'client_selection' : client_selection, 'client_selection' : client_selection,
'skipped' : skipped,
'request' : request, 'request' : request,
'software' : software, 'software' : software,
'title' : name, 'title' : name,

1
img/android.svg Normal file
View file

@ -0,0 +1 @@
<svg viewBox="-147 -70 345 345" width="345" height="345" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"><g fill="#77c159" transform="translate(25.5)"><use stroke-width="14.4" xlink:href="#a" stroke="#fff"/><use xlink:href="#b" transform="scale(-1 1)"/><g id="b" stroke="#fff" stroke-width="7.2"><rect rx="6.5" transform="rotate(29)" height="86" width="13" y="-86" x="14"/><rect id="c" rx="24" height="133" width="48" y="41" x="-143"/><use y="97" x="85" xlink:href="#c"/></g><g id="a"><ellipse cy="41" rx="91" ry="84"/><rect rx="22" height="182" width="182" y="20" x="-91"/></g></g><g stroke="#fff" stroke-width="7.2" fill="#fff" transform="translate(25.5)"><path d="M-95 44.5H95"/><circle cx="-42" r="4"/><circle cx="42" r="4"/></g></svg>

After

Width:  |  Height:  |  Size: 769 B

1
img/apple.svg Normal file
View file

@ -0,0 +1 @@
<svg xml:space="preserve" width="1000" height="1000" xmlns="http://www.w3.org/2000/svg"><path d="M881 341c-6 4-108 62-108 190 0 149 130 201 134 203-1 3-21 72-69 142-42 61-87 123-155 123s-86-40-164-40c-77 0-104 41-166 41s-106-57-156-127A612 612 0 0 1 93 542c0-195 126-298 251-298 66 0 121 44 162 44 40 0 102-46 177-46 28 0 131 2 198 99zM647 159c31-36 53-88 53-139 0-7 0-14-2-20a225 225 0 0 0-202 211l2 18 14 2c45 0 102-31 135-72z"/></svg>

After

Width:  |  Height:  |  Size: 437 B

8
img/browser.svg Normal file
View file

@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<title>HTML5 Logo</title>
<path d="M108.4 0h23v22.8h21.2V0h23v69h-23V46h-21v23h-23.2M206 23h-20.3V0h63.7v23H229v46h-23M259.5 0h24.1l14.8 24.3L313.2 0h24.1v69h-23V34.8l-16.1 24.8l-16.1-24.8v34.2h-22.6M348.7 0h23v46.2h32.6V69h-55.6"/>
<path fill="#e44d26" d="M107.6 471l-33-370.4h362.8l-33 370.2L255.7 512"/>
<path fill="#f16529" d="M256 480.5V131H404.3L376 447"/>
<path fill="#ebebeb" d="M142 176.3h114v45.4h-64.2l4.2 46.5h60v45.3H154.4M156.4 336.3H202l3.2 36.3 50.8 13.6v47.4l-93.2-26"/>
<path fill="#fff" d="M369.6 176.3H255.8v45.4h109.6M361.3 268.2H255.8v45.4h56l-5.3 59-50.7 13.6v47.2l93-25.8"/>
</svg>

After

Width:  |  Height:  |  Size: 674 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 9.9 KiB

1
img/freetalk.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 82 KiB

1
img/kaidan-qml.svg Normal file
View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="256" width="256" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="a"><stop stop-color="#c1ede5" offset="0"/><stop stop-color="#d1f1e1" offset="1"/></linearGradient><linearGradient id="e" y2="259.38" gradientUnits="userSpaceOnUse" x2="262.51" gradientTransform="translate(-14.3 782.07) scale(.55584)" y1="105.18" x1="115.07"><stop stop-color="#fff" stop-opacity=".18" offset="0"/><stop stop-color="#fff" stop-opacity="0" offset="1"/></linearGradient><linearGradient id="d" y2="802.77" xlink:href="#a" gradientUnits="userSpaceOnUse" x2="295.23" y1="802.77" x1="133.62"/><radialGradient id="c" gradientUnits="userSpaceOnUse" cy="256" cx="256" gradientTransform="matrix(2.2585 .02063 -.02134 2.336 -316.73 -347.29)" r="249.14"><stop stop-color="#36a45d" offset="0"/><stop stop-color="#3bb566" offset="1"/></radialGradient><filter id="b" style="color-interpolation-filters:sRGB"><feFlood result="flood" flood-opacity=".34" flood-color="#000"/><feComposite operator="in" result="composite1" in2="SourceGraphic" in="flood"/><feGaussianBlur stdDeviation="5" result="blur" in="composite1"/><feOffset result="offset" dy="7"/><feComposite result="composite2" in2="offset" in="SourceGraphic"/></filter></defs><g transform="translate(-1.4 -806.5) scale(1.011)"><path d="M463.61 256c0 114.66-92.95 207.61-207.61 207.61-57.33 0-116.05-16.43-153.62-54-37.57-37.56-54-96.28-54-153.6 0-114.67 92.96-207.62 207.62-207.62 114.66 0 207.6 92.95 207.6 207.61z" transform="translate(-14.3 782.07) scale(.55584)" filter="url(#b)" fill="url(#c)"/><circle cy="924.36" cx="128" r="93.97" fill="#51c77b"/><g transform="translate(-86.42 122)" fill="url(#d)"><rect rx="13.24" ry="13.24" height="26.48" width="127.26" y="744.15" x="150.87"/><rect rx="13.24" ry="13.24" height="26.48" width="161.61" y="789.12" x="133.62"/><rect rx="13.24" ry="13.24" height="26.48" width="91.83" y="834.92" x="186.23"/><rect rx="13.24" ry="13.24" height="26.48" width="26.48" y="834.92" x="150.8"/></g><path d="M243.4 924.36c0 63.73-51.67 115.4-115.4 115.4-31.87 0-64.5-9.13-85.39-30.01s-30.01-53.52-30.01-85.4c0-63.73 51.67-115.4 115.4-115.4 63.73 0 115.4 51.68 115.4 115.4z" fill="url(#e)"/></g></svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

1
img/kaios.svg Normal file
View file

@ -0,0 +1 @@
<svg height="700" width="700" xmlns="http://www.w3.org/2000/svg"><path d="M636.92 328.28h-24.2c-7.72 0-14-6.3-14-14.02 0-8.43 7.81-13.46 15.53-14.06 9.5-.76 35.54-.22 44.77.05a19.4 19.4 0 0 0 1.13-38.78c-3.6-.1-35.64-.98-48.94.05-29.24 2.3-51.28 24.97-51.28 52.74a52.86 52.86 0 0 0 52.8 52.8h24.19c8.66 0 15.97 7.48 15.97 16.33 0 10.16-8.76 15.37-17.44 16.03-11.15.85-44.59.26-56.53-.05a19.4 19.4 0 0 0-.97 38.78c2.93.08 20.61.5 36.94.5 9.24 0 18.04-.13 23.5-.55 30.88-2.34 53.3-25.35 53.3-54.7 0-30.4-24.57-55.12-54.77-55.12m-178.68 72.25a50.38 50.38 0 0 1-50.32-50.33 50.38 50.38 0 0 1 50.32-50.32 50.38 50.38 0 0 1 50.32 50.32 50.38 50.38 0 0 1-50.32 50.33zm0-139.1a88.77 88.77 0 1 0 0 177.54 88.77 88.77 0 0 0 0-177.54m-229.6 141.83a25.86 25.86 0 0 1-25.83-25.83 25.86 25.86 0 0 1 25.83-25.84 25.86 25.86 0 0 1 25.84 25.84 25.86 25.86 0 0 1-25.84 25.83zm0-87.38a61.55 61.55 0 1 0 29.27 115.7 17.8 17.8 0 0 0 32.22-10.4v-41a61.55 61.55 0 0 0-61.48-64.3m-105.15-.04a27.2 27.2 0 1 0 0-54.4 27.2 27.2 0 0 0 0 54.4m-26.36 8.76a20.2 20.2 0 0 0-33.1 23.18l57.82 82.58a20.2 20.2 0 0 0 33.1-23.18L97.14 324.6m-68.22-63.17a20.6 20.6 0 0 0-20.6 20.6v136.34a20.6 20.6 0 1 0 41.2 0V282.04a20.6 20.6 0 0 0-20.6-20.6m300.67 54.44a20.5 20.5 0 0 0-20.5 20.5v82.1a20.5 20.5 0 1 0 41 0v-82.1a20.5 20.5 0 0 0-20.5-20.5" fill="#6f02b5" style="stroke-width:1.11319"/></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

23
img/kopete.svg Normal file
View file

@ -0,0 +1,23 @@
<svg width="48" xmlns="http://www.w3.org/2000/svg" height="48">
<defs>
<linearGradient id="a" y1="20.985" x1="23.719" y2="30.733" x2="33.466" gradientUnits="userSpaceOnUse" gradientTransform="matrix(.99522.0977-.0977.99522 385.61 496.52)">
<stop/>
<stop offset="1" stop-opacity="0"/>
</linearGradient>
<linearGradient id="b" y1="44" y2="4" gradientUnits="userSpaceOnUse" x2="0" gradientTransform="matrix(-1 0 0 1 432.57 499.8)">
<stop stop-color="#2f74c8"/>
<stop offset="1" stop-color="#4699d7"/>
</linearGradient>
<linearGradient id="c" y1="522.8" y2="492.8" x2="0" gradientUnits="userSpaceOnUse" gradientTransform="translate(31 10)">
<stop stop-color="#7cbaf8"/>
<stop offset="1" stop-color="#f4fcff"/>
</linearGradient>
</defs>
<g transform="translate(-384.57-499.8)">
<path fill="url(#b)" fill-rule="evenodd" d="m428.57 503.8v30h-20l-11 10v-10h-9v-30z"/>
<g stroke-linejoin="round" stroke-width="2">
<path opacity=".2" fill="url(#a)" d="m413.6 508.31l-1.093.898c0 0 3.067 4.093 3.066 9.09 0 1.043-.142 2.028-.337 2.958l-3.662-4.459h-4.07l-4.929-6h-2.999l-.002 3 16.429 20.01h12.565l.008-8.01-13.218-15.737c-.433-.522-1.757-1.748-1.757-1.748m-11.03 14.486h-3v2.999h.897v.459c-.249.532-.897.542-.897.542l-.002.999 7.05 7.373 1.944-1.369 3.041.002z"/>
<path fill="url(#c)" d="m413.6 508.32l-1.093.897c0 0 3.066 4.094 3.062 9.09-.004 5-2.838 9.02-2.838 9.02l.897 1.093c0 0 4.934-3.107 4.939-10.11.005-7-4.967-9.993-4.967-9.993m-11.03 2.481h-2.999l-.003 3h3zm8.997 6.01l-6-.005v3l5.999.005zm-9 5.993h-3v2.999h.999c-.001 1-.999 1-.999 1l-.002.999 1 .002c2 .001 2-1.999 2-1.999z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

1
img/linux.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 36 KiB

1
img/profanity.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.2 KiB

View file

@ -1,438 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" viewBox="0 0 216 256" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Tux</title>
<defs id="tux_fx">
<linearGradient id="gradient_belly_shadow">
<stop offset="0" stop-color="#000000"/>
<stop offset="1" stop-color="#000000" stop-opacity="0.25"/>
</linearGradient>
<linearGradient id="gradient_wing_tip_right_shadow">
<stop offset="0" stop-color="#110800"/>
<stop offset="0.59" stop-color="#a65a00" stop-opacity="0.8"/>
<stop offset="1" stop-color="#ff921e" stop-opacity="0"/>
</linearGradient>
<linearGradient id="gradient_wing_tip_right_glare_1">
<stop offset="0" stop-color="#7c7c7c"/>
<stop offset="1" stop-color="#7c7c7c" stop-opacity="0.33"/>
</linearGradient>
<linearGradient id="gradient_wing_tip_right_glare_2">
<stop offset="0" stop-color="#7c7c7c"/>
<stop offset="1" stop-color="#7c7c7c" stop-opacity="0.33"/>
</linearGradient>
<linearGradient id="gradient_foot_left_layer_1">
<stop offset="0" stop-color="#b98309"/>
<stop offset="1" stop-color="#382605"/>
</linearGradient>
<linearGradient id="gradient_foot_left_glare">
<stop offset="0" stop-color="#ebc40c"/>
<stop offset="1" stop-color="#ebc40c" stop-opacity="0"/>
</linearGradient>
<linearGradient id="gradient_foot_right_shadow">
<stop offset="0" stop-color="#000000"/>
<stop offset="1" stop-color="#000000" stop-opacity="0"/>
</linearGradient>
<linearGradient id="gradient_foot_right_layer_1">
<stop offset="0" stop-color="#3e2a06"/>
<stop offset="1" stop-color="#ad780a"/>
</linearGradient>
<linearGradient id="gradient_foot_right_glare">
<stop offset="0" stop-color="#f3cd0c"/>
<stop offset="1" stop-color="#f3cd0c" stop-opacity="0"/>
</linearGradient>
<linearGradient id="gradient_eyeball">
<stop offset="0" stop-color="#fefefc"/>
<stop offset="0.75" stop-color="#fefefc"/>
<stop offset="1" stop-color="#d4d4d4"/>
</linearGradient>
<linearGradient id="gradient_pupil_left_glare">
<stop offset="0" stop-color="#757574" stop-opacity="0"/>
<stop offset="0.25" stop-color="#757574"/>
<stop offset="0.5" stop-color="#757574"/>
<stop offset="1" stop-color="#757574" stop-opacity="0"/>
</linearGradient>
<linearGradient id="gradient_pupil_right_glare_2">
<stop offset="0" stop-color="#949494" stop-opacity="0.39"/>
<stop offset="0.5" stop-color="#949494"/>
<stop offset="1" stop-color="#949494" stop-opacity="0.39"/>
</linearGradient>
<linearGradient id="gradient_eyelid_left">
<stop offset="0" stop-color="#c8c8c8"/>
<stop offset="1" stop-color="#797978"/>
</linearGradient>
<linearGradient id="gradient_eyelid_right">
<stop offset="0" stop-color="#747474"/>
<stop offset="0.13" stop-color="#8c8c8c"/>
<stop offset="0.25" stop-color="#a4a4a4"/>
<stop offset="0.5" stop-color="#d4d4d4"/>
<stop offset="0.62" stop-color="#d4d4d4"/>
<stop offset="1" stop-color="#7c7c7c"/>
</linearGradient>
<linearGradient id="gradient_eyebrow">
<stop offset="0" stop-color="#646464" stop-opacity="0"/>
<stop offset="0.31" stop-color="#646464" stop-opacity="0.58"/>
<stop offset="0.47" stop-color="#646464"/>
<stop offset="0.73" stop-color="#646464" stop-opacity="0.26"/>
<stop offset="1" stop-color="#646464" stop-opacity="0"/>
</linearGradient>
<linearGradient id="gradient_beak_base">
<stop offset="0" stop-color="#020204"/>
<stop offset="0.73" stop-color="#020204"/>
<stop offset="1" stop-color="#5c5c5c"/>
</linearGradient>
<linearGradient id="gradient_mandible_lower">
<stop offset="0" stop-color="#d2940a"/>
<stop offset="0.75" stop-color="#d89c08"/>
<stop offset="0.87" stop-color="#b67e07"/>
<stop offset="1" stop-color="#946106"/>
</linearGradient>
<linearGradient id="gradient_mandible_upper">
<stop offset="0" stop-color="#ad780a"/>
<stop offset="0.12" stop-color="#d89e08"/>
<stop offset="0.25" stop-color="#edb80b"/>
<stop offset="0.39" stop-color="#ebc80d"/>
<stop offset="0.53" stop-color="#f5d838"/>
<stop offset="0.77" stop-color="#f6d811"/>
<stop offset="1" stop-color="#f5cd31"/>
</linearGradient>
<linearGradient id="gradient_nares">
<stop offset="0" stop-color="#3a2903"/>
<stop offset="0.55" stop-color="#735208"/>
<stop offset="1" stop-color="#ac8c04"/>
</linearGradient>
<linearGradient id="gradient_beak_corner">
<stop offset="0" stop-color="#f5ce2d"/>
<stop offset="1" stop-color="#d79b08"/>
</linearGradient>
<radialGradient id="fill_belly_shadow_left" href="#gradient_belly_shadow" xlink:href="#gradient_belly_shadow"
gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(61.18,121.19) scale(19,18)"/>
<radialGradient id="fill_belly_shadow_right" href="#gradient_belly_shadow" xlink:href="#gradient_belly_shadow"
gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(125.74,131.6) scale(23.6,18)"/>
<radialGradient id="fill_belly_shadow_middle" href="#gradient_belly_shadow" xlink:href="#gradient_belly_shadow"
gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(94.21,127.47) scale(9.35,10)"/>
<linearGradient id="fill_foot_left_base" href="#gradient_foot_left_layer_1" xlink:href="#gradient_foot_left_layer_1"
gradientUnits="userSpaceOnUse" x1="23.18" y1="193.01" x2="64.31" y2="262.02"/>
<linearGradient id="fill_foot_left_glare" href="#gradient_foot_left_glare" xlink:href="#gradient_foot_left_glare"
gradientUnits="userSpaceOnUse" x1="64.47" y1="210.83" x2="77.41" y2="235.21"/>
<linearGradient id="fill_foot_right_shadow" href="#gradient_foot_right_shadow" xlink:href="#gradient_foot_right_shadow"
gradientUnits="userSpaceOnUse" x1="146.93" y1="211.96" x2="150.2" y2="235.73"/>
<linearGradient id="fill_foot_right_base" href="#gradient_foot_right_layer_1" xlink:href="#gradient_foot_right_layer_1"
gradientUnits="userSpaceOnUse" x1="151.5" y1="253.02" x2="192.94" y2="185.84"/>
<linearGradient id="fill_foot_right_glare" href="#gradient_foot_right_glare" xlink:href="#gradient_foot_right_glare"
gradientUnits="userSpaceOnUse" x1="162.81" y1="180.67" x2="161.59" y2="191.64"/>
<radialGradient id="fill_wing_tip_right_shadow_lower" href="#gradient_wing_tip_right_shadow" xlink:href="#gradient_wing_tip_right_shadow"
gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(169.71,194.53) rotate(15) scale(19.66,20.64)"/>
<radialGradient id="fill_wing_tip_right_shadow_upper" href="#gradient_wing_tip_right_shadow" xlink:href="#gradient_wing_tip_right_shadow"
gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(169.71,189.89) rotate(-2.42) scale(19.74,14.86)"/>
<radialGradient id="fill_wing_tip_right_glare_1" href="#gradient_wing_tip_right_glare_1" xlink:href="#gradient_wing_tip_right_glare_1"
gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(184.65,176.62) rotate(23.5) scale(6.95,3.21)"/>
<linearGradient id="fill_wing_tip_right_glare_2" href="#gradient_wing_tip_right_glare_2" xlink:href="#gradient_wing_tip_right_glare_2"
gradientUnits="userSpaceOnUse" x1="165.69" y1="173.58" x2="168.27" y2="173.47"/>
<radialGradient id="fill_eyeball_left" href="#gradient_eyeball" xlink:href="#gradient_eyeball"
gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(86.49,51.41) rotate(-0.6) scale(10.24,15.68)"/>
<linearGradient id="fill_pupil_left_glare" href="#gradient_pupil_left_glare" xlink:href="#gradient_pupil_left_glare"
gradientUnits="userSpaceOnUse" x1="84.29" y1="46.64" x2="89.32" y2="55.63"/>
<radialGradient id="fill_eyelid_left" href="#gradient_eyelid_left" xlink:href="#gradient_eyelid_left"
gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(84.89,43.74) rotate(-9.35) scale(6.25,5.77)"/>
<linearGradient id="fill_eyebrow_left" href="#gradient_eyebrow" xlink:href="#gradient_eyebrow"
gradientUnits="userSpaceOnUse" x1="83.59" y1="32.51" x2="94.48" y2="43.63"/>
<radialGradient id="fill_eyeball_right" href="#gradient_eyeball" xlink:href="#gradient_eyeball"
gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(118.06,51.41) rotate(-1.8) scale(13.64,15.68)"/>
<linearGradient id="fill_pupil_right_glare" href="#gradient_pupil_right_glare_2" xlink:href="#gradient_pupil_right_glare_2"
gradientUnits="userSpaceOnUse" x1="117.87" y1="47.25" x2="123.66" y2="54.11"/>
<linearGradient id="fill_eyelid_right" href="#gradient_eyelid_right" xlink:href="#gradient_eyelid_right"
gradientUnits="userSpaceOnUse" x1="112.9" y1="36.23" x2="131.32" y2="47.01"/>
<linearGradient id="fill_eyebrow_right" href="#gradient_eyebrow" xlink:href="#gradient_eyebrow"
gradientUnits="userSpaceOnUse" x1="119.16" y1="31.56" x2="131.42" y2="43.14"/>
<radialGradient id="fill_beak_base" href="#gradient_beak_base" xlink:href="#gradient_beak_base"
gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(97.64,60.12) rotate(-36) scale(11.44,10.38)"/>
<radialGradient id="fill_mandible_lower_base" href="#gradient_mandible_lower" xlink:href="#gradient_mandible_lower"
gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(109.77,70.61) rotate(-22.4) scale(27.15,19.07)"/>
<linearGradient id="fill_mandible_upper_base" href="#gradient_mandible_upper" xlink:href="#gradient_mandible_upper"
gradientUnits="userSpaceOnUse" x1="78.09" y1="69.26" x2="126.77" y2="68.88"/>
<radialGradient id="fill_naris_left" href="#gradient_nares" xlink:href="#gradient_nares"
gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(92.11,59.88) scale(1.32,1.42)"/>
<radialGradient id="fill_naris_right" href="#gradient_nares" xlink:href="#gradient_nares"
gradientUnits="userSpaceOnUse" cx="0" cy="0" r="1" gradientTransform="translate(104.65,59.7) scale(2.78,1.62)"/>
<linearGradient id="fill_beak_corner" href="#gradient_beak_corner" xlink:href="#gradient_beak_corner"
gradientUnits="userSpaceOnUse" x1="126.74" y1="67.49" x2="126.74" y2="71.09"/>
<filter id="blur_belly_shadow_left">
<feGaussianBlur stdDeviation="0.64 0.55"/>
</filter>
<filter id="blur_belly_shadow_right">
<feGaussianBlur stdDeviation="0.98"/>
</filter>
<filter id="blur_belly_shadow_middle">
<feGaussianBlur stdDeviation="0.68"/>
</filter>
<filter id="blur_belly_shadow_lower" x="-0.8" width="2.6" y="-0.2" height="1.4">
<feGaussianBlur stdDeviation="1.25"/>
</filter>
<filter id="blur_belly_glare" x="-0.8" width="2.6" y="-0.5" height="2">
<feGaussianBlur stdDeviation="1.78 2.19"/>
</filter>
<filter id="blur_head_glare" x="-0.3" width="1.6" y="-0.3" height="1.6">
<feGaussianBlur stdDeviation="1.73"/>
</filter>
<filter id="blur_neck_glare" x="-0.2" width="1.4" y="-0.2" height="1.4">
<feGaussianBlur stdDeviation="0.78"/>
</filter>
<filter id="blur_wing_left_glare" x="-0.2" width="1.4" y="-0.2" height="1.4">
<feGaussianBlur stdDeviation="0.98"/>
</filter>
<filter id="blur_wing_right_glare" x="-0.2" width="1.4" y="-0.2" height="1.4">
<feGaussianBlur stdDeviation="1.19 1.17"/>
</filter>
<filter id="blur_foot_left_layer_1" x="-0.2" width="1.4" y="-0.2" height="1.4">
<feGaussianBlur stdDeviation="3.38"/>
</filter>
<filter id="blur_foot_left_layer_2">
<feGaussianBlur stdDeviation="2.1 2.06"/>
</filter>
<filter id="blur_foot_left_glare">
<feGaussianBlur stdDeviation="0.32"/>
</filter>
<filter id="blur_foot_right_shadow">
<feGaussianBlur stdDeviation="1.95 1.9"/>
</filter>
<filter id="blur_foot_right_layer_1" x="-0.2" width="1.4" y="-0.2" height="1.4">
<feGaussianBlur stdDeviation="4.12"/>
</filter>
<filter id="blur_foot_right_layer_2" x="-0.2" width="1.4" y="-0.2" height="1.4">
<feGaussianBlur stdDeviation="3.12 3.37"/>
</filter>
<filter id="blur_foot_right_glare" x="-0.2" width="1.4" y="-0.2" height="1.4">
<feGaussianBlur stdDeviation="0.41"/>
</filter>
<filter id="blur_wing_tip_right_shadow_lower" x="-0.3" width="1.6" y="-0.3" height="1.6">
<feGaussianBlur stdDeviation="2.45"/>
</filter>
<filter id="blur_wing_tip_right_shadow_upper" x="-0.2" width="1.4" y="-0.2" height="1.4">
<feGaussianBlur stdDeviation="1.12 0.81"/>
</filter>
<filter id="blur_wing_tip_right_glare" x="-0.2" width="1.4" y="-0.2" height="1.4">
<feGaussianBlur stdDeviation="0.88"/>
</filter>
<filter id="blur_pupil_left_glare" x="-0.3" width="1.6" y="-0.3" height="1.6">
<feGaussianBlur stdDeviation="0.44"/>
</filter>
<filter id="blur_eyebrow_left">
<feGaussianBlur stdDeviation="0.12"/>
</filter>
<filter id="blur_pupil_right_glare" x="-0.2" width="1.4" y="-0.2" height="1.4">
<feGaussianBlur stdDeviation="0.45"/>
</filter>
<filter id="blur_eyebrow_right">
<feGaussianBlur stdDeviation="0.13"/>
</filter>
<filter id="blur_beak_shadow_lower" x="-0.2" width="1.4" y="-0.2" height="1.4">
<feGaussianBlur stdDeviation="1.75"/>
</filter>
<filter id="blur_beak_shadow_upper">
<feGaussianBlur stdDeviation="0.8 0.74"/>
</filter>
<filter id="blur_mandible_lower_glare" x="-0.2" width="1.4" y="-0.2" height="1.4">
<feGaussianBlur stdDeviation="0.77"/>
</filter>
<filter id="blur_mandible_upper_shadow">
<feGaussianBlur stdDeviation="0.65"/>
</filter>
<filter id="blur_mandible_upper_glare" x="-0.2" width="1.4" y="-0.2" height="1.4">
<feGaussianBlur stdDeviation="0.73"/>
</filter>
<filter id="blur_naris_left" x="-0.2" width="1.4" y="-0.2" height="1.4">
<feGaussianBlur stdDeviation="0.1"/>
</filter>
<filter id="blur_naris_right">
<feGaussianBlur stdDeviation="0.1"/>
</filter>
<filter id="blur_beak_corner" x="-0.2" width="1.4" y="-0.2" height="1.4">
<feGaussianBlur stdDeviation="0.23"/>
</filter>
<clipPath id="clip_body">
<use href="#body_base" xlink:href="#body_base"/>
</clipPath>
<clipPath id="clip_wing_left">
<use href="#wing_left_base" xlink:href="#wing_left_base"/>
</clipPath>
<clipPath id="clip_wing_right">
<use href="#wing_right_base" xlink:href="#wing_right_base"/>
</clipPath>
<clipPath id="clip_foot_left">
<use href="#foot_left_base" xlink:href="#foot_left_base"/>
</clipPath>
<clipPath id="clip_foot_right">
<use href="#foot_right_base" xlink:href="#foot_right_base"/>
</clipPath>
<clipPath id="clip_wing_tip_right">
<use href="#wing_tip_right_base" xlink:href="#wing_tip_right_base"/>
</clipPath>
<clipPath id="clip_eye_left">
<use href="#eyeball_left" xlink:href="#eyeball_left"/>
</clipPath>
<clipPath id="clip_pupil_left">
<use href="#pupil_left_base" xlink:href="#pupil_left_base"/>
</clipPath>
<clipPath id="clip_eye_right">
<use href="#eyeball_right" xlink:href="#eyeball_right"/>
</clipPath>
<clipPath id="clip_pupil_right">
<use href="#pupil_right_base" xlink:href="#pupil_right_base"/>
</clipPath>
<clipPath id="clip_mandible_lower">
<use href="#mandible_lower_base" xlink:href="#mandible_lower_base"/>
</clipPath>
<clipPath id="clip_mandible_upper">
<use href="#mandible_upper_base" xlink:href="#mandible_upper_base"/>
</clipPath>
<clipPath id="clip_beak">
<use href="#mandible_lower_base" xlink:href="#mandible_lower_base"/>
<use href="#mandible_upper_base" xlink:href="#mandible_upper_base"/>
</clipPath>
</defs>
<g id="tux">
<g id="body">
<path id="body_base" fill="#020204"
d="m 106.95,0 c -6,0 -12.02,1.18 -17.46,4.12 -5.78,3.11 -10.52,8.09 -13.43,13.97 -2.92,5.88 -4.06,12.16 -4.24,19.08 -0.33,13.14 0.3,26.92 1.29,39.41 0.26,3.8 0.74,6.02 0.25,9.93 -1.62,8.3 -8.88,13.88 -12.76,21.17 -4.27,8.04 -6.07,17.13 -9.29,25.65 -2.95,7.79 -7.09,15.1 -9.88,22.95 -3.91,10.97 -5.08,23.03 -2.5,34.39 1.97,8.66 6.08,16.78 11.62,23.73 -0.8,1.44 -1.58,2.91 -2.4,4.34 -2.57,4.43 -5.71,8.64 -7.17,13.55 -0.73,2.45 -1.02,5.07 -0.55,7.59 0.47,2.52 1.75,4.93 3.75,6.53 1.31,1.04 2.9,1.72 4.53,2.1 1.63,0.37 3.32,0.46 5,0.43 6.37,-0.14 12.55,-2.07 18.71,-3.69 3.66,-0.96 7.34,-1.81 11.03,-2.58 13.14,-2.69 27.8,-1.61 39.99,0.15 4.13,0.63 8.23,1.44 12.29,2.43 6.36,1.54 12.69,3.5 19.23,3.69 1.72,0.05 3.46,-0.03 5.14,-0.4 1.68,-0.38 3.31,-1.06 4.65,-2.13 2.01,-1.6 3.29,-4.02 3.76,-6.54 0.47,-2.52 0.18,-5.15 -0.56,-7.61 -1.48,-4.92 -4.65,-9.11 -7.27,-13.52 -1.04,-1.75 -2,-3.53 -3.03,-5.28 7.9,-8.87 14.26,-19.13 17.94,-30.4 4.01,-12.3 4.75,-25.55 3.06,-38.38 -1.69,-12.83 -5.76,-25.27 -11.11,-37.05 -6.72,-14.76 -12.37,-20.1 -16.47,-33.07 -4.42,-14.02 -0.77,-30.61 -4.06,-43.32 -1.17,-4.32 -3.04,-8.45 -5.45,-12.23 -2.82,-4.43 -6.4,-8.39 -10.65,-11.47 -6.78,-4.92 -15.3,-7.54 -23.96,-7.54 z"/>
<path id="belly" fill="#fdfdfb"
d="m 83.13,74 c -0.9,1.13 -1.48,2.49 -1.84,3.89 -0.35,1.4 -0.48,2.85 -0.54,4.3 -0.11,2.89 0.07,5.83 -0.7,8.62 -0.82,2.98 -2.65,5.57 -4.44,8.08 -3.11,4.36 -6.25,8.84 -7.78,13.97 -0.93,3.1 -1.24,6.39 -0.91,9.62 -3.47,5.1 -6.48,10.53 -8.98,16.18 -3.78,8.57 -6.37,17.69 -7.28,27.01 -1.12,11.41 0.34,23.15 4.85,33.69 3.25,7.63 8.11,14.6 14.38,20.04 3.18,2.76 6.72,5.11 10.5,6.97 13.11,6.45 29.31,6.46 42.2,-0.41 6.74,-3.59 12.43,-8.84 17.91,-14.15 3.3,-3.2 6.59,-6.48 9.11,-10.32 4.85,-7.41 6.54,-16.41 7.59,-25.2 1.83,-15.36 1.89,-31.6 -4.85,-45.53 -2.32,-4.8 -5.41,-9.22 -9.12,-13.05 -0.98,-6.7 -2.93,-13.27 -5.76,-19.42 -2.05,-4.45 -4.54,-8.68 -6.44,-13.18 -0.78,-1.85 -1.46,-3.75 -2.32,-5.56 -0.87,-1.81 -1.93,-3.55 -3.39,-4.94 -1.48,-1.42 -3.33,-2.43 -5.28,-3.07 -1.95,-0.65 -4.01,-0.94 -6.06,-1.04 -4.11,-0.21 -8.22,0.33 -12.33,0.16 -3.27,-0.13 -6.53,-0.7 -9.8,-0.51 -1.63,0.1 -3.26,0.39 -4.78,1.01 -1.52,0.61 -2.92,1.56 -3.94,2.84 z"/>
<g id="body_self_shadows">
<path id="belly_shadow_left" opacity="0.25" fill="url(#fill_belly_shadow_left)" filter="url(#blur_belly_shadow_left)" clip-path="url(#clip_body)"
d="m 68.67,115.18 c 0.87,1.31 -0.55,5.84 19.86,2.94 0,0 -3.59,0.39 -7.12,1.21 -5.49,1.84 -10.27,3.89 -13.97,6.61 -3.65,2.7 -6.33,6.21 -9.68,9.22 0,0 5.43,-9.92 6.78,-12.91 1.36,-2.99 -0.22,-2.85 0.85,-7.25 1.07,-4.4 3.69,-8.63 3.69,-8.63 0,0 -2.14,6.22 -0.41,8.81 z"/>
<path id="belly_shadow_right" opacity="0.42" fill="url(#fill_belly_shadow_right)" filter="url(#blur_belly_shadow_right)" clip-path="url(#clip_body)"
d="m 134.28,113.99 c -4.16,2.9 -6.6,2.56 -11.64,3.12 -5.05,0.57 -18.7,0.36 -18.7,0.36 0,0 1.97,-0.03 6.36,0.78 4.38,0.82 13.31,1.6 18.34,3.51 5.04,1.92 6.87,2.47 9.93,4.4 4.35,2.75 7.55,7.06 11.71,10.08 0,0 0.2,-4 -1.48,-6.99 -1.68,-2.99 -6.2,-7.7 -7.53,-12.1 -1.32,-4.4 -1.96,-13.04 -1.96,-13.04 0,0 -0.88,6.99 -5.03,9.88 z"/>
<path id="belly_shadow_middle" opacity="0.2" fill="url(#fill_belly_shadow_middle)" filter="url(#blur_belly_shadow_middle)" clip-path="url(#clip_body)"
d="m 95.17,107.81 c -0.16,1.25 -0.36,2.5 -0.6,3.74 -0.12,0.61 -0.26,1.22 -0.48,1.8 -0.23,0.58 -0.56,1.14 -1.02,1.55 -0.41,0.37 -0.9,0.62 -1.4,0.85 -1.94,0.88 -4.01,1.47 -6.12,1.74 0.84,0.06 1.68,0.14 2.53,0.23 0.53,0.06 1.06,0.12 1.57,0.25 0.52,0.14 1.03,0.34 1.46,0.65 0.47,0.35 0.84,0.82 1.12,1.34 0.55,1.02 0.73,2.2 0.83,3.37 0.13,1.48 0.14,2.98 0.03,4.46 0.1,-0.99 0.31,-1.98 0.62,-2.92 0.57,-1.72 1.47,-3.32 2.69,-4.65 0.49,-0.52 1.02,-1.01 1.6,-1.42 1.79,-1.26 4.07,-1.81 6.24,-1.51 -2.21,0.09 -4.44,-0.6 -6.2,-1.93 -0.9,-0.68 -1.68,-1.52 -2.22,-2.5 -0.84,-1.52 -1.08,-3.37 -0.65,-5.05 z"/>
<path id="belly_shadow_lower" opacity="0.11" fill="#000000" filter="url(#blur_belly_shadow_lower)" clip-path="url(#clip_body)"
d="m 89.85,137.14 c -1.06,4.03 -1.79,8.15 -2.17,12.31 -0.55,5.87 -0.42,11.78 -0.74,17.67 -0.26,4.99 -0.85,10.04 0.02,14.97 0.41,2.35 1.15,4.64 2.2,6.78 0.16,-0.82 0.29,-1.64 0.36,-2.47 0.37,-4 -0.3,-8.01 -0.53,-12.01 -0.4,-7.02 0.57,-14.04 0.97,-21.06 0.3,-5.39 0.27,-10.8 -0.11,-16.19 z"/>
</g>
<g id="body_glare">
<path id="belly_glare" opacity="0.75" fill="#7c7c7c" filter="url(#blur_belly_glare)" clip-path="url(#clip_body)"
d="m 160.08,131.23 c 1.03,-0.16 7.34,5.21 6.48,7.21 -0.86,1.99 -2.49,0.79 -3.65,0.8 -1.16,0.02 -4.33,1.46 -4.86,0.55 -0.54,-0.91 1.4,-3.03 2.41,-4.81 0.82,-1.43 -1.4,-3.59 -0.38,-3.75 z"/>
<path id="head_glare" fill="#7c7c7c" filter="url(#blur_head_glare)" clip-path="url(#clip_body)"
d="m 121.52,11.12 c -2.21,1.56 -1.25,3.51 -0.3,5.46 0.95,1.96 -2.09,7.59 -2.12,7.83 -0.03,0.24 5.98,-2.85 7.62,-4.87 1.94,-2.37 6.83,3.22 6.56,2.37 0.01,-1.52 -9.55,-12.34 -11.76,-10.79 z"/>
<path id="neck_glare" fill="#838384" filter="url(#blur_neck_glare)" clip-path="url(#clip_body)"
d="m 138.27,76.63 c -1.86,1.7 0.88,4.25 2.17,7.24 0.81,1.86 3.04,4.49 5.2,4.07 1.63,-0.32 2.63,-2.66 2.48,-4.3 -0.3,-3.18 -2.98,-3.93 -4.93,-5.02 -1.54,-0.86 -3.61,-3.18 -4.92,-1.99 z"/>
</g>
</g>
<g id="wings">
<g id="wing_left">
<path id="wing_left_base" fill="#020204"
d="m 63.98,100.91 c -6.1,6.92 -12.37,13.63 -15.81,21.12 -1.71,3.8 -2.51,7.93 -3.68,11.93 -1.32,4.54 -3.12,8.94 -5.14,13.22 -1.87,3.95 -3.93,7.81 -5.98,11.66 -1.5,2.81 -3.02,5.67 -3.54,8.81 -0.41,2.48 -0.18,5.04 0.46,7.47 0.63,2.43 1.64,4.75 2.79,6.98 4.88,9.55 12.21,17.77 20.89,24.07 3.94,2.85 8.15,5.32 12.58,7.35 2.4,1.09 4.92,2.07 7.56,2.11 1.32,0.03 2.65,-0.19 3.86,-0.72 1.2,-0.53 2.28,-1.38 3,-2.49 0.88,-1.36 1.18,-3.05 1,-4.66 -0.18,-1.61 -0.81,-3.15 -1.65,-4.53 -2.06,-3.38 -5.31,-5.83 -8.44,-8.25 -6.76,-5.23 -13.29,-10.76 -19.55,-16.58 -1.76,-1.65 -3.53,-3.34 -4.76,-5.42 -1.2,-2.02 -1.85,-4.32 -2.29,-6.63 -1.21,-6.33 -0.9,-12.99 1.25,-19.07 0.85,-2.38 1.96,-4.65 3.04,-6.93 1.86,-3.95 3.62,-7.98 6.07,-11.6 3.05,-4.51 7.13,-8.33 9.61,-13.17 2.1,-4.09 2.95,-8.68 3.76,-13.2 0.64,-3.54 1.85,-7 2.47,-10.54 -1.21,2.3 -5.11,6.07 -7.5,9.07 z"/>
<path id="wing_left_glare" opacity="0.95" fill="#7c7c7c" filter="url(#blur_wing_left_glare)" clip-path="url(#clip_wing_left)"
d="m 56.96,126.1 c -2,1.84 -3.73,3.97 -5.13,6.31 -2.3,3.84 -3.65,8.16 -5.33,12.31 -1.24,3.09 -2.69,6.2 -2.86,9.53 -0.09,1.71 0.16,3.42 0.22,5.13 0.06,1.71 -0.1,3.49 -0.94,4.98 -0.7,1.25 -1.87,2.23 -3.22,2.71 1.83,0.61 3.45,1.79 4.6,3.33 0.96,1.3 1.58,2.81 2.41,4.18 0.68,1.12 1.51,2.16 2.54,2.97 1.02,0.82 2.25,1.4 3.54,1.56 1.79,0.23 3.65,-0.36 4.97,-1.58 -1.66,-15.55 -0.14,-31.42 4.44,-46.37 0.29,-0.94 0.59,-1.89 0.67,-2.87 0.07,-0.99 -0.12,-2.03 -0.72,-2.81 -0.31,-0.42 -0.74,-0.75 -1.23,-0.96 -0.48,-0.2 -1.02,-0.28 -1.54,-0.21 -0.52,0.06 -1.03,0.26 -1.45,0.57 -0.42,0.32 -0.76,0.74 -0.97,1.22 z"/>
</g>
<g id="wing_right">
<path id="wing_right_base" fill="#020204"
d="m 162.76,127.12 c 5.24,4.22 8.57,10.59 9.6,17.24 0.8,5.18 0.28,10.51 -0.89,15.62 -1.17,5.12 -2.97,10.06 -4.77,15 -0.71,1.96 -1.43,3.95 -1.71,6.02 -0.29,2.08 -0.11,4.27 0.89,6.11 1.15,2.11 3.29,3.56 5.59,4.24 2.27,0.68 4.72,0.66 7.02,0.09 2.3,-0.57 6.17,-1.31 8.04,-2.77 4.75,-3.69 5.88,-10.1 7.01,-15.72 1.17,-5.87 0.6,-12.02 -0.43,-17.95 -1.41,-8.09 -3.78,-15.99 -6.79,-23.62 -2.22,-5.62 -5.06,-10.98 -8.44,-15.96 -3.32,-4.89 -8.02,-8.7 -11.5,-13.48 -1.21,-1.66 -2.66,-3.38 -3.84,-5.06 -2.56,-3.62 -1.98,-2.94 -3.57,-5.29 -1.15,-1.7 -2.97,-2.28 -4.88,-3.02 -1.92,-0.74 -4.06,-0.96 -6.04,-0.41 -2.6,0.73 -4.73,2.79 -5.86,5.24 -1.13,2.46 -1.33,5.28 -0.89,7.95 0.57,3.44 2.14,6.64 3.92,9.64 2,3.39 4.32,6.66 7.35,9.18 3.16,2.63 6.98,4.37 10.19,6.95 z"/>
<path id="wing_right_glare" fill="#838384" filter="url(#blur_wing_right_glare)" clip-path="url(#clip_wing_right)"
d="m 150.42,118.99 c 0.42,0.4 0.86,0.81 1.31,1.19 3.22,2.63 4.93,5.58 8.2,8.16 5.34,4.22 10.75,11.5 11.8,18.15 0.82,5.19 -0.26,8.01 -1.58,14.12 -1.32,6.12 -5.06,14.78 -7.09,20.68 -0.8,2.35 1.64,1.38 1.32,3.86 -0.16,1.22 -0.18,2.45 -0.03,3.67 0.02,-0.23 0.03,-0.48 0.06,-0.71 0.39,-3.38 1.42,-6.63 2.55,-9.82 2.17,-6.13 4.66,-12.15 6.38,-18.45 1.72,-6.29 1.53,-10.82 0.63,-16.23 -1.13,-6.81 -5.09,-13.09 -10.69,-17.24 -3.97,-2.93 -8.64,-4.81 -12.86,-7.38 z"/>
</g>
</g>
<g id="feet">
<g id="foot_left">
<path id="foot_left_base" fill="url(#fill_foot_left_base)"
d="m 34.98,175.33 c 1.38,-0.57 2.93,-0.68 4.39,-0.41 1.47,0.27 2.86,0.91 4.09,1.74 2.47,1.68 4.3,4.12 6.05,6.54 4.03,5.54 7.9,11.2 11.42,17.08 2.85,4.78 5.46,9.71 8.76,14.18 2.15,2.93 4.57,5.64 6.73,8.55 2.16,2.92 4.07,6.08 5.03,9.58 1.25,4.55 0.76,9.56 -1.4,13.75 -1.52,2.95 -3.86,5.48 -6.7,7.19 -2.84,1.71 -5.83,2.47 -9.15,2.47 -5.27,0 -10.42,-2.83 -15.32,-4.78 -9.98,-3.98 -20.82,-5.22 -31.11,-8.32 -3.16,-0.95 -6.27,-2.08 -9.45,-2.95 -1.42,-0.39 -2.85,-0.73 -4.19,-1.34 -1.34,-0.6 -2.59,-1.51 -3.33,-2.77 -0.57,-0.98 -0.8,-2.13 -0.8,-3.26 0,-1.14 0.28,-2.26 0.67,-3.32 0.77,-2.13 2.02,-4.06 2.86,-6.17 1.37,-3.44 1.62,-7.23 1.43,-10.93 -0.18,-3.69 -0.78,-7.36 -1.03,-11.05 -0.12,-1.65 -0.16,-3.32 0.16,-4.95 0.31,-1.62 1.01,-3.21 2.2,-4.35 1.1,-1.06 2.55,-1.69 4.05,-2 1.49,-0.31 3.03,-0.32 4.55,-0.29 1.52,0.03 3.05,0.12 4.57,-0.01 1.52,-0.12 3.05,-0.46 4.37,-1.22 1.26,-0.72 2.29,-1.79 3.14,-2.96 0.85,-1.17 1.54,-2.45 2.25,-3.72 0.7,-1.26 1.43,-2.52 2.36,-3.64 0.92,-1.12 2.06,-2.09 3.4,-2.64 z"/>
<path id="foot_left_layer_1" fill="#d99a03" filter="url(#blur_foot_left_layer_1)" clip-path="url(#clip_foot_left)"
d="m 37.16,177.7 c 1.25,-0.5 2.67,-0.56 3.98,-0.26 1.32,0.3 2.55,0.94 3.61,1.77 2.14,1.65 3.62,3.97 5.05,6.26 3.42,5.54 6.76,11.15 9.92,16.86 2.4,4.31 4.68,8.7 7.62,12.65 1.95,2.62 4.18,5.03 6.17,7.62 1.99,2.59 3.76,5.41 4.64,8.56 1.14,4.05 0.68,8.54 -1.28,12.26 -1.42,2.68 -3.58,4.96 -6.2,6.48 -2.61,1.52 -5.67,2.28 -8.69,2.14 -4.82,-0.22 -9.23,-2.63 -13.77,-4.26 -8.71,-3.16 -18.14,-3.59 -27.08,-6.05 -3.2,-0.87 -6.32,-2.03 -9.53,-2.84 -1.43,-0.36 -2.88,-0.66 -4.23,-1.23 -1.35,-0.57 -2.62,-1.45 -3.36,-2.72 -0.54,-0.95 -0.76,-2.06 -0.73,-3.15 0.04,-1.09 0.31,-2.17 0.7,-3.19 0.78,-2.04 2,-3.88 2.78,-5.92 1.19,-3.08 1.34,-6.47 1.12,-9.76 -0.22,-3.29 -0.8,-6.56 -1,-9.85 -0.08,-1.48 -0.1,-2.97 0.2,-4.41 0.3,-1.45 0.93,-2.85 1.98,-3.89 1.14,-1.13 2.7,-1.74 4.29,-1.99 1.58,-0.24 3.19,-0.13 4.78,0.01 1.6,0.14 3.2,0.32 4.8,0.23 1.6,-0.1 3.22,-0.49 4.54,-1.39 1.2,-0.81 2.1,-2 2.79,-3.27 0.69,-1.27 1.18,-2.64 1.71,-3.98 0.52,-1.35 1.09,-2.69 1.91,-3.89 0.82,-1.19 1.93,-2.24 3.28,-2.79 z"/>
<path id="foot_left_layer_2" fill="#f5bd0c" filter="url(#blur_foot_left_layer_2)" clip-path="url(#clip_foot_left)"
d="m 35.99,174.57 c 1.22,-0.6 2.65,-0.72 3.98,-0.45 1.33,0.27 2.57,0.92 3.62,1.77 2.09,1.7 3.43,4.13 4.67,6.51 2.84,5.46 5.5,11.04 8.9,16.19 2.48,3.73 5.33,7.2 7.83,10.92 3.39,5.03 6.15,10.57 7.29,16.5 0.76,4 0.74,8.31 -1.18,11.9 -1.27,2.37 -3.32,4.31 -5.75,5.52 -2.42,1.22 -5.21,1.71 -7.92,1.47 -4.27,-0.37 -8.14,-2.47 -12.16,-3.94 -7.13,-2.59 -14.84,-3.22 -22.18,-5.18 -3.09,-0.82 -6.13,-1.89 -9.26,-2.54 -1.39,-0.29 -2.8,-0.5 -4.12,-1 -1.32,-0.5 -2.57,-1.33 -3.25,-2.55 -0.47,-0.86 -0.63,-1.86 -0.56,-2.84 0.07,-0.97 0.36,-1.92 0.74,-2.83 0.77,-1.8 1.9,-3.46 2.49,-5.32 0.88,-2.75 0.52,-5.72 -0.14,-8.53 -0.65,-2.8 -1.6,-5.55 -1.89,-8.41 -0.13,-1.27 -0.13,-2.57 0.17,-3.82 0.29,-1.25 0.88,-2.45 1.81,-3.34 1.2,-1.15 2.88,-1.73 4.56,-1.89 1.67,-0.16 3.35,0.06 5.01,0.3 1.66,0.24 3.34,0.5 5.01,0.42 1.68,-0.07 3.39,-0.51 4.7,-1.54 1.3,-1.02 2.12,-2.53 2.59,-4.09 0.47,-1.57 0.62,-3.2 0.81,-4.82 0.19,-1.62 0.43,-3.26 1.06,-4.77 0.63,-1.51 1.69,-2.9 3.17,-3.64 z"/>
<path id="foot_left_glare" fill="url(#fill_foot_left_glare)" filter="url(#blur_foot_left_glare)" clip-path="url(#clip_foot_left)"
d="m 51.2,188.21 c 2.25,4.06 3.62,8.72 5.85,12.82 2.05,3.77 4.38,7.65 6.46,11.12 0.93,1.55 3.09,3.93 5.27,7.62 1.98,3.34 3.98,8.01 5.1,9.58 -0.64,-1.84 -1.96,-6.77 -3.54,-10.28 -1.47,-3.28 -3.19,-5.15 -4.24,-6.92 -2.08,-3.47 -4.33,-6.6 -6.47,-9.91 -2.95,-4.57 -5.2,-9.68 -8.43,-14.03 z"/>
</g>
<g id="foot_right">
<path id="foot_right_shadow" opacity="0.2" fill="url(#fill_foot_right_shadow)" filter="url(#blur_foot_right_shadow)" clip-path="url(#clip_body)"
d="m 198.7,215.61 c -0.4,1.33 -1.02,2.62 -1.81,3.8 -1.75,2.59 -4.3,4.55 -6.84,6.35 -4.33,3.07 -8.85,5.89 -12.89,9.38 -2.7,2.34 -5.17,4.97 -7.45,7.73 -1.95,2.36 -3.79,4.84 -6.02,6.94 -2.25,2.12 -4.89,3.84 -7.74,4.77 -3.47,1.13 -7.13,1.08 -10.47,0.22 -2.34,-0.6 -4.63,-1.64 -6.08,-3.53 -1.45,-1.89 -1.92,-4.44 -2.09,-6.94 -0.3,-4.42 0.23,-8.93 0.71,-13.42 0.4,-3.73 0.77,-7.46 0.92,-11.18 0.27,-6.77 -0.18,-13.47 -1.09,-20.05 -0.16,-1.11 -0.32,-2.22 -0.23,-3.35 0.09,-1.14 0.47,-2.32 1.27,-3.2 0.74,-0.81 1.77,-1.29 2.79,-1.52 1.02,-0.24 2.06,-0.25 3.09,-0.28 2.43,-0.06 4.86,-0.21 7.25,0.01 1.51,0.13 2.99,0.41 4.49,0.55 2.51,0.24 5.12,0.12 7.64,-0.62 2.71,-0.8 5.29,-2.29 8.05,-2.7 1.13,-0.17 2.26,-0.15 3.36,0.01 1.12,0.15 2.24,0.46 3.1,1.15 0.66,0.52 1.14,1.23 1.51,1.99 0.56,1.14 0.9,2.39 1.1,3.68 0.17,1.14 0.24,2.31 0.53,3.41 0.48,1.81 1.58,3.35 2.89,4.6 1.32,1.25 2.85,2.24 4.39,3.22 1.53,0.97 3.07,1.93 4.7,2.73 0.77,0.38 1.56,0.72 2.29,1.15 0.74,0.44 1.42,0.97 1.91,1.67 0.66,0.95 0.92,2.2 0.72,3.43 z"/>
<path id="foot_right_base" fill="url(#fill_foot_right_base)"
d="m 213.47,222.92 c -2.26,2.68 -5.4,4.45 -8.53,6.05 -5.33,2.71 -10.86,5.1 -15.87,8.37 -3.36,2.19 -6.46,4.76 -9.36,7.53 -2.48,2.37 -4.83,4.9 -7.61,6.91 -2.81,2.03 -6.05,3.5 -9.48,4.01 -0.95,0.14 -1.9,0.21 -2.86,0.21 -3.24,0 -6.48,-0.78 -9.46,-2.08 -2.7,-1.17 -5.3,-2.86 -6.86,-5.36 -1.56,-2.52 -1.92,-5.59 -1.92,-8.56 -0.01,-5.23 0.96,-10.41 1.87,-15.57 0.76,-4.29 1.48,-8.58 1.95,-12.91 0.85,-7.86 0.84,-15.81 0.28,-23.71 -0.1,-1.32 -0.21,-2.65 -0.01,-3.96 0.2,-1.31 0.74,-2.62 1.74,-3.48 0.93,-0.8 2.17,-1.16 3.4,-1.22 1.22,-0.07 2.44,0.12 3.65,0.3 2.85,0.42 5.73,0.74 8.52,1.48 1.76,0.46 3.48,1.08 5.23,1.56 2.94,0.79 6.01,1.17 9.02,0.82 3.25,-0.38 6.41,-1.6 9.68,-1.52 1.34,0.03 2.67,0.28 3.95,0.69 1.3,0.41 2.59,1 3.55,1.98 0.73,0.74 1.24,1.67 1.62,2.64 0.57,1.44 0.88,2.98 1.01,4.52 0.11,1.37 0.09,2.76 0.35,4.11 0.43,2.21 1.6,4.24 3.04,5.97 1.45,1.74 3.18,3.21 4.91,4.66 1.73,1.45 3.46,2.89 5.32,4.16 0.87,0.6 1.77,1.16 2.6,1.81 0.83,0.66 1.59,1.42 2.11,2.34 0.45,0.81 0.69,1.72 0.69,2.65 0,0.52 -0.07,1.04 -0.23,1.56 -0.45,1.43 -1.28,2.82 -2.3,4.04 z"/>
<path id="foot_right_layer_1" fill="#cd8907" filter="url(#blur_foot_right_layer_1)" clip-path="url(#clip_foot_right)"
d="m 213.21,216.12 c -0.53,1.33 -1.28,2.58 -2.22,3.67 -2.07,2.42 -4.93,4.01 -7.78,5.44 -4.88,2.44 -9.92,4.58 -14.5,7.52 -3.06,1.97 -5.9,4.28 -8.55,6.78 -2.26,2.13 -4.41,4.41 -6.95,6.21 -2.57,1.83 -5.53,3.14 -8.65,3.6 -3.8,0.56 -7.72,-0.16 -11.25,-1.67 -2.46,-1.06 -4.84,-2.56 -6.27,-4.83 -1.42,-2.26 -1.75,-5.02 -1.75,-7.69 -0.02,-4.71 0.87,-9.37 1.71,-14 0.7,-3.85 1.36,-7.71 1.78,-11.6 0.76,-7.08 0.73,-14.22 0.25,-21.32 -0.08,-1.19 -0.17,-2.39 0.01,-3.57 0.18,-1.18 0.67,-2.35 1.57,-3.13 0.85,-0.73 1.99,-1.05 3.11,-1.1 1.11,-0.06 2.22,0.12 3.33,0.28 2.61,0.38 5.23,0.67 7.78,1.33 1.61,0.42 3.18,0.98 4.78,1.4 2.68,0.72 5.49,1.06 8.24,0.74 2.97,-0.34 5.85,-1.44 8.83,-1.37 1.23,0.03 2.44,0.26 3.61,0.62 1.19,0.37 2.37,0.9 3.25,1.78 0.66,0.67 1.11,1.51 1.48,2.38 0.53,1.29 0.89,2.67 0.91,4.07 0.03,1.46 -0.28,2.92 -0.09,4.37 0.16,1.17 0.66,2.28 1.3,3.28 0.63,1 1.4,1.91 2.17,2.81 1.48,1.75 2.96,3.53 4.82,4.87 2.11,1.53 4.62,2.43 6.8,3.85 0.65,0.43 1.28,0.91 1.74,1.54 0.78,1.06 0.98,2.5 0.54,3.74 z"/>
<path id="foot_right_layer_2" fill="#f5c021" filter="url(#blur_foot_right_layer_2)" clip-path="url(#clip_foot_right)"
d="m 212.91,214.61 c -0.6,1.35 -1.37,2.6 -2.28,3.71 -2.12,2.58 -4.99,4.35 -8,5.49 -4.97,1.88 -10.39,2.13 -15.26,4.27 -2.97,1.3 -5.65,3.26 -8.36,5.12 -2.18,1.49 -4.42,2.94 -6.82,3.98 -2.72,1.19 -5.6,1.85 -8.5,2.32 -1.84,0.29 -3.71,0.51 -5.57,0.41 -1.86,-0.1 -3.72,-0.54 -5.37,-1.49 -1.24,-0.72 -2.36,-1.75 -3.03,-3.1 -0.73,-1.49 -0.86,-3.24 -0.85,-4.94 0.05,-4.5 1.02,-8.96 0.99,-13.47 -0.03,-3.93 -0.81,-7.8 -1.03,-11.72 -0.43,-7.54 1.19,-15.2 -0.24,-22.59 -0.22,-1.19 -0.53,-2.37 -0.52,-3.58 0.01,-0.6 0.1,-1.21 0.31,-1.77 0.22,-0.55 0.56,-1.06 1.01,-1.42 0.39,-0.29 0.84,-0.47 1.31,-0.56 0.46,-0.08 0.94,-0.06 1.41,0.01 0.93,0.15 1.82,0.51 2.73,0.78 2.6,0.78 5.35,0.76 8,1.35 1.66,0.36 3.26,0.97 4.91,1.41 2.75,0.76 5.63,1.08 8.46,0.75 3.04,-0.36 6.01,-1.46 9.07,-1.38 1.26,0.03 2.5,0.26 3.71,0.62 1.21,0.36 2.42,0.87 3.34,1.8 0.65,0.67 1.13,1.52 1.51,2.4 0.57,1.29 0.96,2.69 0.95,4.11 -0.01,0.74 -0.12,1.47 -0.19,2.21 -0.06,0.74 -0.08,1.49 0.09,2.2 0.18,0.72 0.55,1.37 0.97,1.96 0.42,0.59 0.9,1.12 1.34,1.7 1.22,1.61 2.1,3.49 3.05,5.3 0.95,1.81 2.02,3.6 3.53,4.91 2.05,1.77 4.7,2.48 6.99,3.89 0.67,0.41 1.31,0.89 1.78,1.55 0.38,0.52 0.63,1.15 0.73,1.81 0.09,0.65 0.03,1.34 -0.17,1.96 z"/>
<path id="foot_right_glare" fill="url(#fill_foot_right_glare)" filter="url(#blur_foot_right_glare)" clip-path="url(#clip_foot_right)"
d="m 148.08,181.58 c 2.82,-0.76 5.22,1.38 7.27,2.99 1.32,1.13 3.24,0.85 4.86,0.9 2.69,-0.09 5.36,0.45 8.05,0.12 5.3,-0.45 10.49,-1.75 15.81,-1.97 2.54,-0.16 5.4,-0.31 7.59,1.17 0.89,0.62 2.2,3.23 3.07,2.25 -0.36,-2.74 -2.39,-5.39 -5.11,-6.12 -2.14,-0.34 -4.3,0.25 -6.46,0.06 -6.39,-0.15 -12.75,-1.34 -19.16,-1 -4.46,0.04 -8.91,-0.17 -13.37,-0.34 -1.75,-0.36 -2.37,1.19 -3.32,1.79 0.25,0.19 0.34,0.25 0.77,0.15 z"/>
</g>
</g>
<g id="wing_tip_right">
<g id="wing_tip_right_shadow">
<path id="wing_tip_right_shadow_lower" opacity="0.35" fill="url(#fill_wing_tip_right_shadow_lower)" filter="url(#blur_wing_tip_right_shadow_lower)" clip-path="url(#clip_foot_right)"
d="m 185.49,187.61 c -0.48,-0.95 -1.36,-1.66 -2.35,-2.07 -0.98,-0.41 -2.06,-0.55 -3.13,-0.54 -2.13,0.02 -4.25,0.57 -6.38,0.39 -1.79,-0.16 -3.49,-0.83 -5.24,-1.26 -1.81,-0.44 -3.73,-0.61 -5.52,-0.12 -1.92,0.52 -3.61,1.81 -4.67,3.49 -0.94,1.48 -1.38,3.23 -1.52,4.98 -0.14,1.75 0.01,3.5 0.19,5.25 0.12,1.26 0.27,2.52 0.57,3.75 0.31,1.23 0.78,2.43 1.52,3.46 1.07,1.48 2.66,2.54 4.37,3.17 2.8,1.03 5.98,0.98 8.73,-0.15 4.88,-2.12 9.01,-5.92 11.52,-10.6 0.91,-1.68 1.61,-3.47 2.06,-5.31 0.18,-0.74 0.32,-1.49 0.32,-2.25 0.01,-0.75 -0.12,-1.52 -0.47,-2.19 z"/>
<path id="wing_tip_right_shadow_upper" opacity="0.35" fill="url(#fill_wing_tip_right_shadow_upper)" filter="url(#blur_wing_tip_right_shadow_upper)" clip-path="url(#clip_foot_right)"
d="m 185.49,184.89 c -0.48,-0.69 -1.36,-1.2 -2.35,-1.5 -0.98,-0.3 -2.06,-0.39 -3.13,-0.39 -2.13,0.02 -4.25,0.42 -6.38,0.28 -1.79,-0.11 -3.49,-0.6 -5.24,-0.9 -1.81,-0.32 -3.73,-0.45 -5.52,-0.09 -1.92,0.37 -3.61,1.3 -4.67,2.52 -0.94,1.07 -1.38,2.34 -1.52,3.6 -0.14,1.26 0.01,2.53 0.19,3.79 0.12,0.91 0.27,1.83 0.57,2.72 0.31,0.89 0.78,1.76 1.52,2.5 1.07,1.07 2.66,1.83 4.37,2.29 2.8,0.75 5.98,0.71 8.73,-0.11 4.88,-1.53 9.01,-4.28 11.52,-7.66 0.91,-1.22 1.61,-2.51 2.06,-3.84 0.18,-0.54 0.32,-1.08 0.32,-1.62 0.01,-0.55 -0.12,-1.11 -0.47,-1.59 z"/>
</g>
<path id="wing_tip_right_base" fill="#020204"
d="m 189.55,178.72 c -0.35,-0.95 -0.97,-1.79 -1.72,-2.47 -0.75,-0.68 -1.64,-1.2 -2.57,-1.6 -1.86,-0.79 -3.89,-1.09 -5.89,-1.46 -1.87,-0.35 -3.74,-0.78 -5.62,-1.1 -1.96,-0.33 -3.98,-0.55 -5.92,-0.11 -1.69,0.38 -3.26,1.26 -4.54,2.43 -1.28,1.17 -2.28,2.63 -3,4.21 -1.27,2.79 -1.67,5.92 -1.43,8.97 0.18,2.27 0.76,4.61 2.25,6.32 1.21,1.39 2.92,2.26 4.68,2.78 3.04,0.9 6.35,0.85 9.36,-0.13 4.97,-1.67 9.37,-4.98 12.35,-9.29 0.98,-1.43 1.82,-2.98 2.2,-4.66 0.29,-1.28 0.3,-2.66 -0.15,-3.89 z"/>
<g id="wing_tip_right_glare">
<defs>
<path id="path_wing_tip_right_glare"
d="m 168.89,171.07 c -0.47,0.03 -0.93,0.08 -1.4,0.17 -2.99,0.53 -5.73,2.42 -7.27,5.03 -1.09,1.85 -1.58,4.03 -1.43,6.17 0.07,-1.5 0.46,-2.97 1.19,-4.28 1.23,-2.23 3.47,-3.91 5.98,-4.37 1.54,-0.28 3.13,-0.11 4.68,0.08 1.5,0.19 3,0.39 4.47,0.7 2.28,0.5 4.53,1.26 6.44,2.59 0.44,0.31 0.86,0.66 1.21,1.08 0.35,0.41 0.62,0.89 0.73,1.42 0.15,0.78 -0.07,1.6 -0.46,2.29 -0.39,0.7 -0.92,1.3 -1.48,1.86 -0.46,0.46 -0.94,0.89 -1.43,1.32 2.21,-0.43 4.44,-1.03 6.28,-2.31 0.77,-0.55 1.48,-1.2 1.94,-2.02 0.46,-0.83 0.65,-1.83 0.43,-2.75 -0.16,-0.62 -0.5,-1.19 -0.92,-1.67 -0.42,-0.48 -0.93,-0.87 -1.45,-1.24 -2.31,-1.62 -5.01,-2.65 -7.81,-2.99 -1.8,-0.33 -3.61,-0.61 -5.42,-0.83 -1.41,-0.18 -2.86,-0.33 -4.28,-0.25 z"/>
</defs>
<use id="wing_tip_right_glare_1" href="#path_wing_tip_right_glare" xlink:href="#path_wing_tip_right_glare"
fill="url(#fill_wing_tip_right_glare_1)" filter="url(#blur_wing_tip_right_glare)" clip-path="url(#clip_wing_tip_right)"/>
<use id="wing_tip_right_glare_2" href="#path_wing_tip_right_glare" xlink:href="#path_wing_tip_right_glare"
fill="url(#fill_wing_tip_right_glare_2)" filter="url(#blur_wing_tip_right_glare)" clip-path="url(#clip_wing_tip_right)"/>
</g>
</g>
<g id="face">
<g id="eyes">
<g id="eye_left">
<path id="eyeball_left" fill="url(#fill_eyeball_left)"
d="m 84.45,38.28 c -1.53,0.08 -3,0.79 -4.12,1.84 -1.13,1.05 -1.92,2.43 -2.41,3.88 -0.97,2.92 -0.75,6.08 -0.53,9.15 0.2,2.77 0.41,5.6 1.45,8.18 0.52,1.3 1.25,2.51 2.22,3.51 0.97,0.99 2.2,1.76 3.55,2.09 1.26,0.32 2.62,0.26 3.86,-0.13 1.25,-0.4 2.38,-1.11 3.32,-2.02 1.36,-1.33 2.27,-3.07 2.8,-4.9 0.53,-1.83 0.68,-3.75 0.65,-5.66 -0.04,-2.38 -0.35,-4.77 -1.09,-7.03 -0.75,-2.26 -1.94,-4.4 -3.6,-6.11 -0.8,-0.83 -1.72,-1.55 -2.75,-2.06 -1.04,-0.51 -2.2,-0.8 -3.35,-0.74 z"/>
<g id="pupil_left">
<path id="pupil_left_base" fill="#020204"
d="m 80.75,50.99 c -0.32,1.94 -0.33,3.97 0.33,5.81 0.44,1.22 1.17,2.33 2.05,3.28 0.57,0.62 1.23,1.18 1.99,1.55 0.77,0.37 1.65,0.52 2.48,0.32 0.76,-0.19 1.42,-0.68 1.91,-1.29 0.49,-0.61 0.82,-1.34 1.05,-2.09 0.69,-2.21 0.58,-4.62 -0.11,-6.83 -0.49,-1.61 -1.32,-3.16 -2.6,-4.24 -0.62,-0.52 -1.34,-0.93 -2.12,-1.11 -0.78,-0.19 -1.63,-0.14 -2.36,0.19 -0.81,0.37 -1.44,1.07 -1.85,1.86 -0.41,0.79 -0.62,1.67 -0.77,2.55 z"/>
<path id="pupil_left_glare" fill="url(#fill_pupil_left_glare)" filter="url(#blur_pupil_left_glare)" clip-path="url(#clip_pupil_left)"
d="m 84.84,49.59 c 0.21,0.55 0.91,0.75 1.3,1.19 0.37,0.42 0.76,0.87 0.97,1.4 0.39,1.01 -0.39,2.51 0.43,3.23 0.25,0.22 0.77,0.23 1.02,0 0.99,-0.9 0.77,-2.71 0.38,-3.99 -0.36,-1.15 -1.23,-2.25 -2.31,-2.8 -0.5,-0.26 -1.25,-0.47 -1.68,-0.11 -0.27,0.24 -0.24,0.74 -0.11,1.08 z"/>
</g>
<path id="eyelid_left" fill="url(#fill_eyelid_left)" clip-path="url(#clip_eye_left)"
d="m 81.14,44.46 c 2.32,-1.38 5.13,-1.7 7.82,-1.45 2.68,0.26 5.27,1.04 7.87,1.75 1.91,0.52 3.84,1 5.63,1.84 1.78,0.84 3.44,2.08 4.43,3.8 0.16,0.27 0.29,0.56 0.46,0.83 0.17,0.27 0.37,0.52 0.62,0.71 0.25,0.19 0.57,0.32 0.88,0.3 0.16,-0.01 0.32,-0.05 0.45,-0.13 0.14,-0.08 0.26,-0.2 0.33,-0.34 0.08,-0.16 0.11,-0.35 0.1,-0.53 -0.01,-0.18 -0.05,-0.36 -0.1,-0.54 -0.65,-2.37 -2.19,-4.38 -3.35,-6.55 -0.7,-1.3 -1.28,-2.66 -1.98,-3.96 -2.43,-4.45 -6.42,-7.94 -10.95,-10.21 -4.53,-2.27 -9.59,-3.36 -14.65,-3.65 -5.86,-0.35 -11.73,0.35 -17.51,1.37 -2.51,0.44 -5.06,0.96 -7.27,2.21 -1.11,0.62 -2.13,1.42 -2.92,2.42 -0.8,0.99 -1.36,2.18 -1.55,3.44 -0.17,1.22 0.01,2.47 0.44,3.62 0.42,1.15 1.08,2.2 1.86,3.15 1.54,1.91 3.53,3.39 5.36,5.03 1.83,1.63 3.52,3.44 5.57,4.79 1.02,0.68 2.13,1.24 3.31,1.57 1.18,0.33 2.44,0.42 3.64,0.17 1.24,-0.25 2.4,-0.86 3.41,-1.64 1.01,-0.77 1.88,-1.7 2.71,-2.66 1.66,-1.93 3.21,-4.04 5.39,-5.34 z"/>
<path id="eyebrow_left" fill="url(#fill_eyebrow_left)" filter="url(#blur_eyebrow_left)"
d="m 90.77,36.57 c 2.16,2.02 3.76,4.52 4.85,7.16 -0.48,-2.91 -1.23,-5.26 -3.13,-7.16 -1.16,-1.09 -2.49,-2.05 -3.98,-2.72 -1.32,-0.59 -2.77,-0.96 -3.61,-0.97 -0.83,-0.02 -1.03,0 -1.2,0.01 -0.18,0.01 -0.31,0.01 0.23,0.08 0.54,0.06 1.75,0.39 3.05,0.97 1.3,0.58 2.62,1.54 3.79,2.63 z"/>
</g>
<g id="eye_right">
<path id="eyeball_right" fill="url(#fill_eyeball_right)"
d="m 111.61,38.28 c -2.39,1.65 -4.4,3.94 -5.38,6.68 -1.24,3.45 -0.77,7.31 0.43,10.77 1.22,3.55 3.27,6.93 6.36,9.06 1.54,1.07 3.33,1.8 5.19,2.02 1.87,0.22 3.8,-0.09 5.47,-0.95 2.02,-1.06 3.57,-2.91 4.53,-4.98 0.96,-2.08 1.37,-4.37 1.5,-6.66 0.16,-2.9 -0.12,-5.86 -1.08,-8.61 -1.04,-2.99 -2.92,-5.75 -5.58,-7.47 -1.32,-0.86 -2.83,-1.45 -4.4,-1.67 -1.57,-0.22 -3.19,-0.05 -4.67,0.52 -0.84,0.33 -1.62,0.78 -2.37,1.29 z"/>
<g id="pupil_right">
<path id="pupil_right_base" fill="#020204"
d="m 117.14,45.52 c -0.9,0.06 -1.78,0.37 -2.55,0.85 -0.76,0.48 -1.41,1.13 -1.92,1.88 -1.03,1.49 -1.48,3.31 -1.55,5.12 -0.05,1.35 0.1,2.72 0.55,4 0.45,1.28 1.2,2.47 2.25,3.33 1.07,0.89 2.42,1.42 3.81,1.49 1.39,0.06 2.79,-0.34 3.93,-1.13 0.91,-0.63 1.64,-1.5 2.16,-2.48 0.52,-0.97 0.84,-2.05 0.98,-3.15 0.25,-1.93 -0.03,-3.95 -0.93,-5.69 -0.89,-1.74 -2.41,-3.17 -4.24,-3.84 -0.8,-0.29 -1.65,-0.44 -2.49,-0.38 z"/>
<path id="pupil_right_glare" fill="url(#fill_pupil_right_glare)" filter="url(#blur_pupil_right_glare)" clip-path="url(#clip_pupil_right)"
d="m 122.71,53.36 c 1,-1 -0.71,-3.65 -2.05,-4.74 -0.97,-0.78 -3.78,-1.61 -3.66,-0.75 0.12,0.85 1.39,1.95 2.23,2.79 1.05,1.03 3,3.18 3.48,2.7 z"/>
</g>
<path id="eyelid_right" fill="url(#fill_eyelid_right)" clip-path="url(#clip_eye_right)"
d="m 102.56,47.01 c 2.06,-1.71 4.45,-3.01 7,-3.8 5.25,-1.62 11.2,-0.98 15.84,1.97 1.6,1.01 3.03,2.27 4.52,3.45 1.48,1.17 3.06,2.27 4.85,2.9 0.97,0.34 2,0.54 3.02,0.43 0.92,-0.09 1.81,-0.44 2.57,-0.96 0.76,-0.53 1.4,-1.23 1.88,-2.02 0.96,-1.58 1.27,-3.5 1.1,-5.34 -0.33,-3.69 -2.41,-6.94 -4.15,-10.21 -0.55,-1.02 -1.07,-2.06 -1.73,-3.01 -2.01,-2.93 -5.23,-4.86 -8.6,-5.99 -3.37,-1.13 -6.93,-1.54 -10.46,-1.98 -1.58,-0.2 -3.17,-0.41 -4.74,-0.22 -1.81,0.22 -3.51,0.95 -5.28,1.4 -0.84,0.22 -1.69,0.37 -2.52,0.61 -0.83,0.24 -1.65,0.57 -2.33,1.11 -0.98,0.79 -1.6,1.98 -1.87,3.21 -0.27,1.24 -0.21,2.52 -0.01,3.77 0.39,2.5 1.33,4.93 1.24,7.46 -0.06,1.73 -0.61,3.44 -0.54,5.17 0.02,0.51 0.12,1.55 0.21,2.05 z"/>
<path id="eyebrow_right" fill="url(#fill_eyebrow_right)" filter="url(#blur_eyebrow_right)"
d="m 119.93,31.18 c -0.41,0.52 -0.78,1.08 -1.07,1.7 1.85,0.4 3.61,1.16 5.19,2.21 3.06,2.03 5.38,4.99 7.01,8.29 0.38,-0.42 0.72,-0.87 1.02,-1.37 -1.64,-3.44 -4,-6.55 -7.16,-8.65 -1.52,-1 -3.21,-1.77 -4.99,-2.18 z"/>
</g>
</g>
<g id="beak">
<g id="beak_shadow">
<path id="beak_shadow_lower" fill="#000000" fill-opacity="0.258824" filter="url(#blur_beak_shadow_lower)" clip-path="url(#clip_body)"
d="m 81.12,89.33 c 1.47,4.26 4.42,7.89 7.92,10.72 1.16,0.95 2.39,1.82 3.76,2.43 1.36,0.62 2.87,0.97 4.36,0.84 1.46,-0.12 2.85,-0.7 4.13,-1.42 1.28,-0.72 2.46,-1.59 3.7,-2.37 2.12,-1.35 4.39,-2.44 6.6,-3.64 2.65,-1.45 5.23,-3.1 7.46,-5.14 1.03,-0.93 1.98,-1.95 3.11,-2.75 1.13,-0.81 2.49,-1.39 3.87,-1.29 1.04,0.07 2.01,0.51 3.03,0.73 0.51,0.11 1.03,0.16 1.55,0.08 0.51,-0.08 1.01,-0.29 1.37,-0.67 0.44,-0.46 0.64,-1.12 0.61,-1.76 -0.02,-0.63 -0.24,-1.25 -0.54,-1.81 -0.59,-1.13 -1.49,-2.1 -1.89,-3.31 -0.36,-1.08 -0.29,-2.24 -0.26,-3.37 0.03,-1.14 0.01,-2.32 -0.51,-3.33 -0.4,-0.76 -1.07,-1.37 -1.83,-1.77 -0.76,-0.41 -1.62,-0.62 -2.48,-0.7 -1.72,-0.16 -3.44,0.18 -5.17,0.27 -2.28,0.13 -4.58,-0.15 -6.87,-0.02 -2.85,0.18 -5.65,1 -8.51,1.01 -3.26,0.01 -6.52,-1.06 -9.74,-0.55 -1.39,0.22 -2.71,0.72 -4.03,1.16 -1.33,0.45 -2.7,0.84 -4.1,0.82 -1.59,-0.03 -3.13,-0.58 -4.72,-0.69 -0.79,-0.06 -1.6,0 -2.35,0.28 -0.74,0.28 -1.41,0.79 -1.78,1.5 -0.21,0.4 -0.31,0.86 -0.33,1.31 -0.02,0.46 0.04,0.91 0.15,1.36 0.22,0.88 0.63,1.71 0.96,2.55 1.2,3.07 1.46,6.42 2.53,9.53 z"/>
<path id="beak_shadow_upper" opacity="0.3" fill="#000000" filter="url(#blur_beak_shadow_upper)" clip-path="url(#clip_body)"
d="m 77.03,77.2 c 2.85,1.76 5.41,3.93 7.56,6.39 1.99,2.29 3.68,4.89 6.29,6.58 1.83,1.2 4.04,1.87 6.28,2.08 2.63,0.24 5.29,-0.15 7.83,-0.84 2.35,-0.63 4.62,-1.53 6.7,-2.71 3.97,-2.25 7.28,-5.55 11.65,-7.03 0.95,-0.33 1.94,-0.56 2.86,-0.96 0.92,-0.39 1.79,-0.99 2.23,-1.83 0.42,-0.82 0.4,-1.75 0.54,-2.64 0.15,-0.96 0.48,-1.88 0.66,-2.83 0.18,-0.95 0.2,-1.96 -0.24,-2.83 -0.37,-0.72 -1.04,-1.29 -1.81,-1.66 -0.77,-0.36 -1.64,-0.52 -2.51,-0.56 -1.72,-0.08 -3.43,0.33 -5.16,0.47 -2.28,0.19 -4.58,-0.08 -6.87,-0.01 -2.85,0.08 -5.66,0.67 -8.51,0.8 -3.25,0.14 -6.49,-0.34 -9.74,-0.44 -1.41,-0.05 -2.83,-0.03 -4.21,0.2 -1.39,0.22 -2.75,0.65 -3.92,1.37 -1.14,0.69 -2.07,1.64 -3.11,2.45 -0.52,0.41 -1.08,0.78 -1.68,1.07 -0.61,0.28 -1.28,0.48 -1.96,0.51 -0.35,0.01 -0.71,-0.01 -1.05,0.04 -0.59,0.08 -1.13,0.39 -1.47,0.83 -0.34,0.45 -0.47,1.02 -0.36,1.55 z"/>
</g>
<path id="beak_base" fill="url(#fill_beak_base)"
d="m 91.66,58.53 c 1.53,-1.71 2.57,-3.8 4.03,-5.56 0.73,-0.88 1.58,-1.69 2.57,-2.26 0.99,-0.57 2.15,-0.89 3.29,-0.79 1.27,0.11 2.46,0.74 3.39,1.61 0.93,0.87 1.62,1.97 2.17,3.12 0.53,1.11 0.95,2.28 1.71,3.24 0.81,1.02 1.94,1.71 2.97,2.52 0.51,0.4 1.01,0.83 1.41,1.34 0.41,0.51 0.72,1.1 0.86,1.74 0.13,0.65 0.06,1.33 -0.16,1.95 -0.23,0.62 -0.61,1.18 -1.09,1.64 -0.95,0.92 -2.25,1.42 -3.56,1.6 -2.62,0.37 -5.27,-0.41 -7.92,-0.34 -2.67,0.08 -5.29,1.02 -7.97,0.93 -1.33,-0.05 -2.69,-0.38 -3.79,-1.14 -0.55,-0.39 -1.03,-0.88 -1.38,-1.45 -0.34,-0.57 -0.55,-1.23 -0.58,-1.9 -0.02,-0.64 0.13,-1.28 0.39,-1.86 0.25,-0.59 0.61,-1.12 1.01,-1.62 0.81,-0.99 1.8,-1.81 2.65,-2.77 z"/>
<g id="mandible_lower">
<path id="mandible_lower_base" fill="url(#fill_mandible_lower_base)"
d="m 77.14,75.05 c 0.06,0.26 0.15,0.5 0.28,0.73 0.23,0.38 0.57,0.69 0.93,0.95 0.36,0.27 0.75,0.49 1.13,0.72 2.01,1.27 3.65,3.04 5.11,4.92 1.95,2.52 3.68,5.31 6.29,7.14 1.84,1.3 4.04,2.03 6.28,2.26 2.63,0.26 5.29,-0.16 7.83,-0.91 2.35,-0.69 4.62,-1.66 6.7,-2.95 3.97,-2.44 7.28,-6.02 11.65,-7.63 0.95,-0.35 1.94,-0.6 2.86,-1.03 0.92,-0.44 1.79,-1.08 2.23,-2 0.42,-0.88 0.4,-1.9 0.54,-2.87 0.15,-1.03 0.48,-2.03 0.66,-3.06 0.18,-1.03 0.2,-2.13 -0.24,-3.08 -0.37,-0.78 -1.04,-1.4 -1.81,-1.79 -0.77,-0.4 -1.64,-0.58 -2.51,-0.62 -1.72,-0.08 -3.43,0.36 -5.16,0.52 -2.28,0.21 -4.58,-0.09 -6.87,-0.02 -2.85,0.09 -5.66,0.73 -8.51,0.87 -3.25,0.15 -6.49,-0.35 -9.74,-0.48 -1.41,-0.06 -2.83,-0.04 -4.22,0.2 -1.39,0.23 -2.75,0.71 -3.91,1.51 -1.13,0.78 -2.03,1.84 -3.07,2.74 -0.52,0.45 -1.08,0.86 -1.7,1.16 -0.61,0.3 -1.29,0.49 -1.98,0.47 -0.35,-0.01 -0.72,-0.06 -1.05,0.04 -0.21,0.07 -0.4,0.2 -0.56,0.35 -0.16,0.16 -0.29,0.34 -0.41,0.52 -0.29,0.42 -0.54,0.87 -0.75,1.34 z"/>
<path id="mandible_lower_glare" fill="#d9b30d" filter="url(#blur_mandible_lower_glare)" clip-path="url(#clip_mandible_lower)"
d="m 89.9,78.56 c -0.33,1.37 -0.13,2.87 0.56,4.11 0.68,1.24 1.84,2.2 3.19,2.65 1.7,0.57 3.62,0.29 5.21,-0.54 0.93,-0.48 1.77,-1.16 2.3,-2.06 0.27,-0.44 0.46,-0.94 0.53,-1.46 0.06,-0.51 0.02,-1.05 -0.16,-1.54 -0.2,-0.53 -0.56,-1 -0.99,-1.37 -0.44,-0.37 -0.95,-0.64 -1.5,-0.82 -1.08,-0.36 -2.77,-0.66 -3.91,-0.68 -2.02,-0.04 -4.9,0.34 -5.23,1.71 z"/>
</g>
<g id="mandible_upper">
<path id="mandible_upper_shadow" fill="#604405" filter="url(#blur_mandible_upper_shadow)" clip-path="url(#clip_mandible_lower)"
d="m 84.31,67.86 c -1.16,0.68 -2.27,1.43 -3.36,2.2 -0.57,0.41 -1.15,0.84 -1.45,1.47 -0.21,0.44 -0.26,0.94 -0.27,1.43 0,0.5 0.03,0.99 -0.04,1.48 -0.04,0.33 -0.13,0.66 -0.14,0.99 -0.01,0.17 0,0.34 0.04,0.5 0.05,0.16 0.13,0.32 0.24,0.44 0.15,0.16 0.35,0.26 0.56,0.32 0.21,0.06 0.42,0.09 0.64,0.14 1.01,0.24 1.89,0.86 2.66,1.56 0.77,0.69 1.47,1.48 2.28,2.13 2.18,1.78 5.07,2.52 7.89,2.56 2.82,0.05 5.61,-0.54 8.36,-1.16 2.16,-0.49 4.32,-0.99 6.39,-1.76 3.2,-1.18 6.16,-2.96 8.72,-5.19 1.17,-1.01 2.26,-2.12 3.57,-2.94 1.15,-0.73 2.44,-1.21 3.62,-1.9 0.11,-0.06 0.21,-0.13 0.3,-0.2 0.1,-0.08 0.18,-0.18 0.24,-0.28 0.09,-0.19 0.09,-0.42 0.03,-0.62 -0.06,-0.2 -0.18,-0.38 -0.31,-0.55 -0.15,-0.18 -0.31,-0.34 -0.49,-0.5 -1.23,-1.05 -2.89,-1.43 -4.51,-1.56 -1.61,-0.12 -3.24,-0.03 -4.83,-0.3 -1.5,-0.25 -2.92,-0.81 -4.37,-1.27 -1.52,-0.49 -3.07,-0.87 -4.64,-1.13 -3.71,-0.61 -7.52,-0.49 -11.19,0.27 -3.49,0.73 -6.87,2.05 -9.94,3.87 z"/>
<path id="mandible_upper_base" fill="url(#fill_mandible_upper_base)"
d="m 83.94,63.95 c -1.66,1.12 -3.16,2.49 -4.43,4.04 -0.72,0.89 -1.38,1.86 -1.74,2.94 -0.29,0.86 -0.39,1.76 -0.57,2.65 -0.07,0.33 -0.15,0.66 -0.14,1 0,0.16 0.02,0.33 0.07,0.5 0.05,0.16 0.14,0.31 0.25,0.43 0.2,0.2 0.47,0.31 0.74,0.37 0.28,0.05 0.56,0.06 0.84,0.09 1.25,0.15 2.4,0.75 3.44,1.47 1.04,0.71 2,1.55 3.07,2.22 2.35,1.49 5.16,2.15 7.95,2.26 2.78,0.11 5.56,-0.31 8.3,-0.86 2.17,-0.43 4.33,-0.95 6.39,-1.76 3.16,-1.25 6.01,-3.16 8.72,-5.19 1.24,-0.92 2.46,-1.87 3.57,-2.94 0.37,-0.37 0.74,-0.74 1.14,-1.08 0.4,-0.33 0.85,-0.62 1.35,-0.78 0.76,-0.24 1.58,-0.17 2.37,-0.04 0.59,0.1 1.18,0.23 1.78,0.21 0.3,-0.02 0.6,-0.07 0.88,-0.18 0.28,-0.11 0.54,-0.28 0.73,-0.52 0.25,-0.3 0.38,-0.7 0.38,-1.09 0,-0.4 -0.12,-0.79 -0.32,-1.13 -0.4,-0.68 -1.09,-1.14 -1.81,-1.46 -0.99,-0.44 -2.06,-0.65 -3.11,-0.91 -3.23,-0.78 -6.37,-1.93 -9.34,-3.41 -1.48,-0.73 -2.92,-1.54 -4.37,-2.32 -1.5,-0.8 -3.02,-1.57 -4.64,-2.07 -3.64,-1.1 -7.6,-0.74 -11.19,0.51 -3.98,1.38 -7.58,3.84 -10.31,7.05 z"/>
<path id="mandible_upper_glare" fill="#f6da4a" filter="url(#blur_mandible_upper_glare)" clip-path="url(#clip_mandible_upper)"
d="m 109.45,64.75 c -0.2,-0.24 -0.48,-0.42 -0.78,-0.51 -0.3,-0.09 -0.62,-0.09 -0.93,-0.04 -0.62,0.11 -1.18,0.44 -1.7,0.8 -1.47,1.01 -2.77,2.26 -3.91,3.64 -1.5,1.83 -2.74,3.94 -3.16,6.27 -0.07,0.39 -0.11,0.8 -0.07,1.19 0.05,0.4 0.2,0.79 0.49,1.07 0.24,0.25 0.58,0.4 0.92,0.45 0.35,0.05 0.71,0 1.04,-0.11 0.66,-0.22 1.21,-0.69 1.74,-1.15 2.87,-2.58 5.47,-5.66 6.51,-9.38 0.1,-0.37 0.19,-0.75 0.19,-1.14 0,-0.39 -0.1,-0.78 -0.34,-1.09 z"/>
<path id="naris_left" opacity="0.8" fill="url(#fill_naris_left)" filter="url(#blur_naris_left)"
d="m 92.72,59.06 c -0.77,-0.25 -2.03,1.1 -1.62,1.79 0.11,0.19 0.46,0.43 0.7,0.3 0.35,-0.19 0.64,-0.89 1.02,-1.16 0.25,-0.18 0.2,-0.84 -0.1,-0.93 z"/>
<path id="naris_right" opacity="0.8" fill="url(#fill_naris_right)" filter="url(#blur_naris_right)"
d="m 102.56,59.42 c 0.2,0.64 1.23,0.53 1.83,0.84 0.52,0.27 0.94,0.86 1.53,0.88 0.56,0.01 1.44,-0.2 1.51,-0.76 0.09,-0.73 -0.98,-1.2 -1.67,-1.47 -0.89,-0.34 -2.03,-0.52 -2.86,-0.06 -0.19,0.11 -0.4,0.36 -0.34,0.57 z"/>
</g>
<path id="beak_corner" fill="url(#fill_beak_corner)" filter="url(#blur_beak_corner)" clip-path="url(#clip_beak)"
d="m 129.27,69.15 a 2.42,3.1 16.94 0 1 -2.81,3.04 2.42,3.1 16.94 0 1 -2.12,-3.04 2.42,3.1 16.94 0 1 2.81,-3.05 2.42,3.1 16.94 0 1 2.12,3.05 z"/>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 49 KiB

1
img/windows.svg Normal file
View file

@ -0,0 +1 @@
<svg aria-hidden="true" viewBox="0 0 25 25" xmlns="http://www.w3.org/2000/svg"><path d="M11.52.5H0v11.4h11.52V.5Zm12.72 0H12.72v11.4h11.52V.5ZM11.52 13.1H0v11.4h11.52V13.1Zm12.72 0H12.72v11.4h11.52V13.1Z" fill="#0078d4"/></svg>

After

Width:  |  Height:  |  Size: 228 B

11
systems.toml Normal file
View file

@ -0,0 +1,11 @@
systems = [
{ name = "Android", id = "android" },
{ name = "Apple", id = "apple" },
{ name = "Browser", id = "browser" },
{ name = "Haiku", id = "haiku" },
{ name = "KaiOS", id = "kaios" },
{ name = "Linux", id = "linux" },
{ name = "POSIX", id = "posix" },
{ name = "UBports", id = "ubports" },
{ name = "Windows", id = "windows" },
]

View file

@ -31,7 +31,7 @@
Download Download
</a> </a>
</div> </div>
<div id="container-of-content"> <div id="container">
<div id="content"> <div id="content">
{% if links %} {% if links %}
<div id="action-bar"> <div id="action-bar">
@ -85,51 +85,38 @@
<code id="exception">{{exception}}</code> <code id="exception">{{exception}}</code>
</div> </div>
{% endif %} {% endif %}
{% if number_of_pages %}
<div id="number-of-pages">
{% if number_of_pages > 3 %}
{% if page_number < 2 %}
<span class="inactive" id="first">First</span>
<span class="inactive">Back</span>
{% else %}
<a href="?page=1" id="first">First</a>
<a href="?page={{page_number-1}}">Back</a>
{% endif %}
<a href="?page={{page_number}}">{{page_number}}</a>
{% if page_number == number_of_pages %}
<span class="inactive">Proceed</span>
<span class="inactive" id="last">Last</span>
{% else %}
<a href="?page={{page_number+1}}">Proceed</a>
<a href="?page={{number_of_pages}}" id="last">Last</a>
{% endif %}
{% else %}
{% for number in range(number_of_pages) %}
<a href="?page={{number+1}}">{{number+1}}</a>
{% endfor %}
{% endif %}
</div>
{% endif %}
{% if previous %}
<div id="number-of-pages">
<a href="./">Previous</a>
</div>
{% endif %}
<!-- div>
<a id="preview" href="/view/{{jid_bare}}">
Preview journal OR Preview group chat
</a>
</div -->
<!-- div>
<a href="{{brand_site}}">
<img id="logo-bottom" src="/img/logo-wordmark-vertical.svg" />
</a>
</div -->
<!-- div id="note">
The Universal Messaging Standard
</div -->
</div> </div>
</div> </div>
{% if number_of_pages %}
<div id="number-of-pages">
{% if number_of_pages > 3 %}
{% if page_number < 2 %}
<span class="inactive" id="first">First</span>
<span class="inactive">Back</span>
{% else %}
<a href="?page=1" id="first">First</a>
<a href="?page={{page_number-1}}">Back</a>
{% endif %}
<a href="?page={{page_number}}">{{page_number}}</a>
{% if page_number == number_of_pages %}
<span class="inactive">Proceed</span>
<span class="inactive" id="last">Last</span>
{% else %}
<a href="?page={{page_number+1}}">Proceed</a>
<a href="?page={{number_of_pages}}" id="last">Last</a>
{% endif %}
{% else %}
{% for number in range(number_of_pages) %}
<a href="?page={{number+1}}">{{number+1}}</a>
{% endfor %}
{% endif %}
</div>
{% endif %}
{% if previous %}
<div id="number-of-pages">
<a href="./">Previous</a>
</div>
{% endif %}
{% if message %} {% if message %}
<div id="xmpp-message">{{message}}</div> <div id="xmpp-message">{{message}}</div>
{% endif %} {% endif %}

View file

@ -31,7 +31,7 @@
Download Download
</a> </a>
</div> </div>
<div id="container-of-profile"> <div id="container">
<div id="profile-compact"> <div id="profile-compact">
</div> </div>

View file

@ -26,33 +26,21 @@
<a href="{{brand_site}}"> <a href="{{brand_site}}">
<img id="logo" src="/img/logo-wordmark-horizontal.svg" /> <img id="logo" src="/img/logo-wordmark-horizontal.svg" />
</a> </a>
<a id="download" href="/download/{{software}}"> <a id="download" href="/download">
{{title}} Download
</a> </a>
</div> </div>
<div id="action-bar">
<a href="/download/android" id="android">
Android
</a>
<a href="/download/apple" id="apple">
Apple
</a>
<a href="/download/browser" id="browser">
Browser
</a>
<a href="/download/haiku" id="haiku">
Haiku
</a>
<a href="/download/linux" id="linux">
Linux
</a>
<a href="/download/windows" id="windows">
Windows
</a>
</div>
<div id="container-of-selection"> <div id="container-of-selection">
{% if client_selection %} {% if client_selection %}
<h1>XMPP Clients For {{title}}</h1> <h1>{{title}}</h1>
<div id="software-menu">
{% for client in client_selection %}
<a class="system" href="#{{client['iden']}}">
<img src="/img/{{client['iden']}}.svg"/>
<div>{{client['name']}}</div>
</a>
{% endfor %}
</div>
{% if title == 'Apple' %} {% if title == 'Apple' %}
<div id="security-notices"> <div id="security-notices">
<span class="notice"> <span class="notice">
@ -60,9 +48,9 @@
<img src="/img/haiku.svg" /> <img src="/img/haiku.svg" />
</a> </a>
<span> <span>
Please refer to the section <a href="/download/haiku">XMPP Please refer to the section
Clients For Haiku</a>, if you are using the Haiku operating <a href="/download/haiku">Haiku</a> for a selection of
system. clients for the Haiku operating system.
</span> </span>
</span> </span>
</div> </div>
@ -103,8 +91,9 @@
<span class="notice"> <span class="notice">
<img src="/img/haikudepot.svg" /> <img src="/img/haikudepot.svg" />
<span> <span>
Most of the software that are listed here should be available Most of the software that are listed herein should be
for you to install from desktop directly with HaikuDepot. available for you to install from desktop directly with
HaikuDepot.
</span> </span>
</span> </span>
</div> </div>
@ -112,7 +101,7 @@
{% if title == 'Linux' %} {% if title == 'Linux' %}
<div id="security-notices"> <div id="security-notices">
<span class="notice"> <span class="notice">
<img src="/img/tux.svg" /> <img src="/img/linux.svg" />
<span> <span>
The listed XMPP clients, herein, are also usable with Linux The listed XMPP clients, herein, are also usable with Linux
systems that are designed for mobile devices, such as systems that are designed for mobile devices, such as
@ -126,19 +115,20 @@
<img src="/img/posix.svg" /> <img src="/img/posix.svg" />
</a> </a>
<span> <span>
Please refer to section <a href="/download/posix">XMPP Please refer to section <a href="/download/posix">POSIX</a>
Clients For POSIX</a>, if you prefer console software with for a selection of console software with text-based interface.
text based interface.
</span> </span>
</span> </span>
</div>
{% endif %}
{% if title == 'POSIX' %}
<div id="security-notices">
<span class="notice"> <span class="notice">
<a href="/download/ubports"> <img src="/img/posix.svg" />
<img src="/img/ubports.svg" />
</a>
<span> <span>
Please refer to section <a href="/download/ubports">XMPP The software that are listed herein are intended for people
Clients For UBports</a>, if you are using the UBports who either want to use console interface, or remotely
mobile system (also Ubuntu Touch). control their chat client.
</span> </span>
</span> </span>
</div> </div>
@ -148,8 +138,8 @@
<span class="notice"> <span class="notice">
<img src="/img/openstore.svg" style="border-radius: 8px" /> <img src="/img/openstore.svg" style="border-radius: 8px" />
<span> <span>
Most of the software that are listed here should be available The software that are listed herein are available for you to
for you to install from device directly with OpenStore. install directly with OpenStore.
</span> </span>
</span> </span>
</div> </div>
@ -161,12 +151,25 @@
<img src="/img/reactos.svg" /> <img src="/img/reactos.svg" />
</a> </a>
<span> <span>
The listed XMPP clients, herein, are compatible with the The listed XMPP clients, herein, are also compatible with
<a href="https://reactos.org">ReactOS</a> operating system. the <a href="https://reactos.org">ReactOS</a> operating
system.
</span> </span>
</span> </span>
</div> </div>
{% endif %} {% endif %}
<div class="plain-note">
XMPP clients of other devices and systems can be found at the
<a href="/selection">main selection</a> page.
</div>
{% if skipped %}
<div class="plain-note">
Display the <a href="/download/{{software}}/all">
complete list</a> of XMPP clients for {{title}}.
</div>
{% endif %}
<br/>
<hr/>
<dl id="selection"> <dl id="selection">
{% for client in client_selection %} {% for client in client_selection %}
<dt> <dt>
@ -179,26 +182,26 @@
<span> <span>
<span class="text">{{client['about']}}</span> <span class="text">{{client['about']}}</span>
<div class="features"> <div class="features">
{% if 'adhoc' in client['features'] %} {% if 'adhoc' in client['properties'] %}
<span>🪄️ Ad-Hoc Commands</span> <span>🪄️ Ad-Hoc Commands</span>
{% endif %} {% endif %}
{% if 'desktop' in client['features'] %} {% if 'desktop' in client['properties'] %}
<span>🖥️ Desktop</span> <span>🖥️ Desktop</span>
{% endif %} {% endif %}
{% if 'mobile' in client['features'] %} {% if 'mobile' in client['properties'] %}
<span>📱 Mobile</span> <span>📱 Mobile</span>
{% endif %} {% endif %}
{% if 'omemo' in client['features'] %} {% if 'omemo' in client['properties'] %}
<!-- img class="icon" src="/img/omemo.svg" / --> <!-- img class="icon" src="/img/omemo.svg" / -->
<span>🐟 OMEMO</span> <span>🐟 OMEMO</span>
{% endif %} {% endif %}
{% if 'openpgp' in client['features'] %} {% if 'openpgp' in client['properties'] %}
<span>🔐️ OpenPGP</span> <span>🔐️ OpenPGP</span>
{% endif %} {% endif %}
{% if 'otr' in client['features'] %} {% if 'otr' in client['properties'] %}
<span>🔏️ OTR</span> <span>🔏️ OTR</span>
{% endif %} {% endif %}
{% if 'pubsub' in client['features'] %} {% if 'pubsub' in client['properties'] %}
<span>📡️ PubSub</span> <span>📡️ PubSub</span>
{% endif %} {% endif %}
{% if 'resources' in client %} {% if 'resources' in client %}
@ -217,8 +220,8 @@
</span> </span>
</dd> </dd>
{% endfor %} {% endfor %}
<hr/>
<br/> <br/>
<hr/>
<dt> <dt>
<a href="https://xmpp.org/software/"> <a href="https://xmpp.org/software/">
<img class="narrow" src="/img/xmpp.svg"/> <img class="narrow" src="/img/xmpp.svg"/>

View file

@ -66,7 +66,7 @@
Download Download
</a> </a>
</div> </div>
<div id="container-of-profile"> <div id="container">
<div id="profile"> <div id="profile">
<h1>{{title}}</h1> <h1>{{title}}</h1>
{% if filename %} {% if filename %}

View file

@ -32,7 +32,7 @@
Download Download
</a> </a>
</div> </div>
<div id="container-of-profile"> <div id="container">
<div id="profile"> <div id="profile">
<h1>FASI</h1> <h1>FASI</h1>
<h3>Fast And Sleek Invite</h3> <h3>Fast And Sleek Invite</h3>

View file

@ -31,7 +31,7 @@
Download Download
</a> </a>
</div> </div>
<div id="container-of-content"> <div id="container">
<div id="content"> <div id="content">
{% if links %} {% if links %}
<div id="action-bar"> <div id="action-bar">

View file

@ -29,7 +29,7 @@
Download Download
</a> </a>
</div> </div>
<div id="container-of-profile"> <div id="container">
<div id="profile"> <div id="profile">
<h1>{{title}}</h1> <h1>{{title}}</h1>
{% if note %} {% if note %}

52
xhtml/software.xhtml Normal file
View file

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- Kayla (Céile) XMPP Invite -->
<!-- Zenya (Xenia) XMPP Invite -->
<!-- Fast And Sleek Invite (FASI) -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<title>{{brand_name}}: System</title>
<meta name="description" content="Operating System Selection" />
<meta name="generator" content="Fast And Sleek Invite" />
<meta name="uri" content="{{xmpp_uri}}" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta property="og:description" content="Operating System Selection" />
<meta property="og:image" content="/img/logo-wordmark-horizontal.svg" />
<meta property="og:site_name" content="Operating System Selection" />
<meta property="og:title" content="Operating System Selection" />
<meta property="og:type" content="website" />
<meta property="og:url" content="{{url}}" />
<link rel="alternate icon" href="/img/favicon.ico" type="image/x-icon" />
<link rel="icon" href="/img/favicon.svg" type="image/svg+xml" />
<link rel="stylesheet" href="/css/stylesheet.css" media="screen" type="text/css" />
</head>
<body>
<div id="overlay">
<div id="bar">
<a href="{{brand_site}}">
<img id="logo" src="/img/logo-wordmark-horizontal.svg" />
</a>
<a id="download" href="/download">
Download
</a>
</div>
<div id="container-of-profile">
<div id="profile">
<h1>Choose Your System</h1>
<div class="plain-note">
And find the XMPP clients that are best for you.
</div>
<div id="software">
{% for system in software %}
<a class="system" href="/download/{{system['id']}}">
<img src="/img/{{system['id']}}.svg" />
<div>{{system['name']}}</div>
</a>
{% endfor %}
</div>
</div>
</div>
</div>
</body>
</html>