diff --git a/src/pretix/control/templates/pretixcontrol/auth/base.html b/src/pretix/control/templates/pretixcontrol/auth/base.html
index 54e15129d..cb84c2d12 100644
--- a/src/pretix/control/templates/pretixcontrol/auth/base.html
+++ b/src/pretix/control/templates/pretixcontrol/auth/base.html
@@ -9,6 +9,18 @@
{% endcompress %}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pretix/control/templates/pretixcontrol/base.html b/src/pretix/control/templates/pretixcontrol/base.html
index 8f62ecf16..d8745e8a4 100644
--- a/src/pretix/control/templates/pretixcontrol/base.html
+++ b/src/pretix/control/templates/pretixcontrol/base.html
@@ -52,8 +52,20 @@
{% endcompress %}
{{ html_head|safe }}
+
-
+
+
+
+
+
+
+
+
+
+
+
+
{% block custom_header %}{% endblock %}
{{ html_head|safe }}
-
{% block custom_header %}{% endblock %}
+
+
+
+
+
+
+
+
+
+
+
{% block above %}
diff --git a/src/pretix/presale/urls.py b/src/pretix/presale/urls.py
index a9156a2e1..5b1e9a26d 100644
--- a/src/pretix/presale/urls.py
+++ b/src/pretix/presale/urls.py
@@ -8,6 +8,7 @@ import pretix.presale.views.locale
import pretix.presale.views.order
import pretix.presale.views.organizer
import pretix.presale.views.robots
+import pretix.presale.views.theme
import pretix.presale.views.user
import pretix.presale.views.waiting
import pretix.presale.views.widget
@@ -111,5 +112,7 @@ organizer_patterns = [
locale_patterns = [
url(r'^locale/set$', pretix.presale.views.locale.LocaleSet.as_view(), name='locale.set'),
url(r'^robots.txt$', pretix.presale.views.robots.robots_txt, name='robots.txt'),
+ url(r'^browserconfig.xml$', pretix.presale.views.theme.browserconfig_xml, name='browserconfig.xml'),
+ url(r'^site.webmanifest$', pretix.presale.views.theme.webmanifest, name='site.webmanifest'),
url(r'^widget/v1\.(?P
[a-zA-Z0-9_\-]+)\.js$', pretix.presale.views.widget.widget_js, name='widget.js'),
]
diff --git a/src/pretix/presale/views/theme.py b/src/pretix/presale/views/theme.py
new file mode 100644
index 000000000..6d72d1c42
--- /dev/null
+++ b/src/pretix/presale/views/theme.py
@@ -0,0 +1,50 @@
+from django.http import HttpResponse
+from django.templatetags.static import static
+from django.views.decorators.cache import cache_page
+
+
+@cache_page(3600)
+def browserconfig_xml(request):
+ return HttpResponse(
+ """
+
+
+
+
+
+ #3b1c4a
+
+
+""".format(
+ static('pretixbase/img/icons/mstile-150x150.png'),
+ static('pretixbase/img/icons/mstile-310x310.png'),
+ ), content_type='text/xml'
+ )
+
+
+@cache_page(3600)
+def webmanifest(request):
+ return HttpResponse(
+ """{
+ "name": "",
+ "short_name": "",
+ "icons": [
+ {
+ "src": "%s",
+ "sizes": "192x192",
+ "type": "image/png"
+ },
+ {
+ "src": "%s",
+ "sizes": "512x512",
+ "type": "image/png"
+ }
+ ],
+ "theme_color": "#3b1c4a",
+ "background_color": "#3b1c4a",
+ "display": "standalone"
+}""" % (
+ static('pretixbase/img/icons/android-chrome-192x192.png'),
+ static('pretixbase/img/icons/android-chrome-512x512.png'),
+ ), content_type='text/json'
+ )
diff --git a/src/pretix/static/pretixbase/img/icons/android-chrome-192x192.png b/src/pretix/static/pretixbase/img/icons/android-chrome-192x192.png
new file mode 100644
index 000000000..ae973eddf
Binary files /dev/null and b/src/pretix/static/pretixbase/img/icons/android-chrome-192x192.png differ
diff --git a/src/pretix/static/pretixbase/img/icons/android-chrome-512x512.png b/src/pretix/static/pretixbase/img/icons/android-chrome-512x512.png
new file mode 100644
index 000000000..844885ad1
Binary files /dev/null and b/src/pretix/static/pretixbase/img/icons/android-chrome-512x512.png differ
diff --git a/src/pretix/static/pretixbase/img/icons/apple-touch-icon.png b/src/pretix/static/pretixbase/img/icons/apple-touch-icon.png
new file mode 100644
index 000000000..2b30893ae
Binary files /dev/null and b/src/pretix/static/pretixbase/img/icons/apple-touch-icon.png differ
diff --git a/src/pretix/static/pretixbase/img/icons/favicon-16x16.png b/src/pretix/static/pretixbase/img/icons/favicon-16x16.png
new file mode 100644
index 000000000..2f91c546b
Binary files /dev/null and b/src/pretix/static/pretixbase/img/icons/favicon-16x16.png differ
diff --git a/src/pretix/static/pretixbase/img/icons/favicon-194x194.png b/src/pretix/static/pretixbase/img/icons/favicon-194x194.png
new file mode 100644
index 000000000..86f8d020f
Binary files /dev/null and b/src/pretix/static/pretixbase/img/icons/favicon-194x194.png differ
diff --git a/src/pretix/static/pretixbase/img/icons/favicon-32x32.png b/src/pretix/static/pretixbase/img/icons/favicon-32x32.png
new file mode 100644
index 000000000..a84fe28a8
Binary files /dev/null and b/src/pretix/static/pretixbase/img/icons/favicon-32x32.png differ
diff --git a/src/pretix/static/pretixbase/img/icons/favicon.ico b/src/pretix/static/pretixbase/img/icons/favicon.ico
new file mode 100644
index 000000000..fcae5c671
Binary files /dev/null and b/src/pretix/static/pretixbase/img/icons/favicon.ico differ
diff --git a/src/pretix/static/pretixbase/img/icons/mstile-150x150.png b/src/pretix/static/pretixbase/img/icons/mstile-150x150.png
new file mode 100644
index 000000000..71321fb14
Binary files /dev/null and b/src/pretix/static/pretixbase/img/icons/mstile-150x150.png differ
diff --git a/src/pretix/static/pretixbase/img/icons/mstile-310x310.png b/src/pretix/static/pretixbase/img/icons/mstile-310x310.png
new file mode 100644
index 000000000..d6b15d93a
Binary files /dev/null and b/src/pretix/static/pretixbase/img/icons/mstile-310x310.png differ
diff --git a/src/pretix/static/pretixbase/img/icons/safari-pinned-tab.svg b/src/pretix/static/pretixbase/img/icons/safari-pinned-tab.svg
new file mode 100644
index 000000000..0ed7a8c20
--- /dev/null
+++ b/src/pretix/static/pretixbase/img/icons/safari-pinned-tab.svg
@@ -0,0 +1 @@
+
\ No newline at end of file