commit 5d09719d862221e445d240d52ec7ff42195f2813 Author: Gabriel Huber Date: Fri Dec 20 21:13:12 2024 +0100 Clean repository diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..14501e0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.~lock* +/*.html +*.odt +*.odg +zutun.txt diff --git a/README.md b/README.md new file mode 100644 index 0000000..9cb8031 --- /dev/null +++ b/README.md @@ -0,0 +1,6 @@ +## Build + +``` +sudo pip3 install staticjinja +staticjinja build +``` diff --git a/datenschutz.md b/datenschutz.md new file mode 100644 index 0000000..cf45ef8 --- /dev/null +++ b/datenschutz.md @@ -0,0 +1,50 @@ +# Datenschutz + +## 1 Ihre Daten auf dieser Webseite + +Auf der Webseite ComputerSchaf.at werden weder durch ComputerSchaf, Lukas Zehentner e.U. (im Nachfolgenden: das Unternehmen) noch durch Dritte persönliche Daten erhoben. Für seitenexterne Inhalte z.B. Social Media-Präsenzen des Unternehmens ist die Datenschutzbestimmung des jeweiligen Mediums heranzuziehen. + +## 2 Datenerhebung und Speicherung + +### 2.1 Erhebung ihrer Daten und Aufnahme in die Kundendatenbank + +Im Interesse der guten Abwicklung von Geschäftsbeziehungen werden folgende Daten nach Erstkontakt (bzw. Neukontakt nach Löschung) bei Ihnen erfragt und in die Kundendatenbank aufgenommen: + +* Vor- und Nachname +* Adresse +* E-Mail-Adresse +* Telefonnummer + +Zudem wird Ihnen eine für Abrechnungszwecke verwendete Kundennummer zugewiesen. Diese bleibt zwischen Geschäftskontakten gleich. + +Zusätzlich zu den oben genannten Daten können bedarfsweise zusätzliche Daten erhoben werden, dies kann gegebenenfalls auch nach dem Erstkontakt stattfinden (Siehe Punkt 2.1.1). + +### 2.1.1 Zusätzliche personenbezogene Daten + +Sollte dies erforderlich sein, kann das Unternehmen Sie bezüglich weiterer benötigter personenbezogene Daten kontaktieren. Bitte beachten Sie, dass solche Prozesse ausschließlich über die in den Kontaktdaten des Unternehmens vermerkten Kommunikationskanälen passiert. Sollten Sie sich unsicher sein, ob eine solche Anfrage legitim ist, antworten Sie nicht auf diese und kontaktieren das Unternehmen stattdessen direkt. + +## 2.2 Löschsperre während bestehenden Auftrag + +Im Falle der Beauftragung des Unternehmens zur Erfüllung einer Dienstleistung, stimmen Sie zu, dass Ihre Daten aus der Datenbank erst dann gelöscht werden können, nachdem die Dienstleistung vollbracht und in vollen Umfang vergütet wurde. Das selbiges gilt für rechtliche Streitigkeit. Ihr Recht bezüglich Berichtigung und Auskunft bleibt davon unberührt. Die Verwendung dieser Daten wird in Punkt 2.3 erläutert. + +## 2.3 Nutzung ihrer Daten durch das Unternehmen + +Für Kontakt, Anfahrt, Lieferung Rechnungsstellung werden die Daten aus der Kundendatenbank verwendet. Auch im Falle der Notwendigkeit eines Rechtsverfahrens wird Ihre angegebene Adresse als Zustelladresse verwendet. Ihre Daten werden generell nicht zu Werbezwecken verwendet, es sei denn es wird explizit zugestimmt. + +## 2.4 Weitergabe der Daten an Dritte + +Das Unternehmen gibt Ihre Daten nicht an Dritte weiter. Sollte dies erforderlich seinen, werden Sie vorhin kontaktiert und um Erlaubnis dieser Weitergabe gebeten. Das Unternehmen gibt nie persönliche Daten ohne Ihre Zustimmung weiter. +Eine Ausnahme hier von stellt die Weitergabe von Daten an Behörden da, gegenüber denen das Unternehmen Auskunftspflichtig ist. Insofern dies nicht behördlich untersagt wird, werden Sie darüber informiert. + +# DSGVO-Bestimmungen + +## Ihre Rechte + +Entsprechend Datenschutzgrundsatzverordnung (im Nachfolgenden: DSGVO) haben Sie das Recht auf Auskunft, Berichtigung und Löschung der persönlichen Daten. Im Falle einer stattgefundenen Datenweitergabe können Sie zudem über das Unternehmen die Löschung (Ausnahme hierzu siehe Punkt 2.2) ihrer personenbezogenen Daten bei den Empfängern dieser beantragen. +Ausgenommen von dem Recht auf Löschung sind adressierte Rechnungen, insofern diese noch nicht mehr als sieben Jahre zurückliegen, da eine gesetzliche Aufbewahrungsverpflichtung besteht (Siehe Bundesabgabenordnung § 132). + +## Datensicherheit + +Gemäß DSGVO werden Ihre personenbezogenen sowie sonstige Daten, die Speicherung im Unternehmenssytem bedürfen, auf gesicherten, Firmeneigenen Servern gespeichert und gegebenenfalls über geschützte Remoteverbindungen aufgerufen. +Datenträger, mit welchen das Unternehmen zur Datenrettung (oder ähnliche Dienstleistungen) beauftragt wurde werden nur im Falle der aktiven Bearbeitung an Computersysteme angeschlossen und andernfalls sicher verwahrt. +Sollte es im Unternehmen zu einem Datendiebstahl kommen, von denen Ihre Daten betroffenen sein könnten, werden Sie unverzüglich darüber informiert. diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..b105b3b --- /dev/null +++ b/robots.txt @@ -0,0 +1 @@ +Sitemap: https://computerschaf.at/sitemap.txt diff --git a/sitemap.txt b/sitemap.txt new file mode 100644 index 0000000..f5f30ea --- /dev/null +++ b/sitemap.txt @@ -0,0 +1,4 @@ +https://computerschaf.at/index.html +https://computerschaf.at/bedingungen.html +https://computerschaf.at/impressum.html +https://computerschaf.at/datenschutz.html diff --git a/static/fonts/LatoLatin/LICENSE.txt b/static/fonts/LatoLatin/LICENSE.txt new file mode 100755 index 0000000..6d2c416 --- /dev/null +++ b/static/fonts/LatoLatin/LICENSE.txt @@ -0,0 +1,94 @@ +Copyright (c) 2010-2015, Łukasz Dziedzic (dziedzic@typoland.com), +with Reserved Font Name Lato. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/static/fonts/LatoLatin/LatoLatin.css b/static/fonts/LatoLatin/LatoLatin.css new file mode 100644 index 0000000..92cf323 --- /dev/null +++ b/static/fonts/LatoLatin/LatoLatin.css @@ -0,0 +1,185 @@ +/* + * LatoLatin by Łukasz Dziedzic - http://www.latofonts.com/lato-free-fonts/ + * License: OFL-1.1 + */ + +@font-face { + font-family: 'LatoLatin'; + font-style: normal; + font-weight: 100; + font-display: swap; + src: local('LatoLatin'), + url('woff2/LatoLatin Hairline.woff2') format('woff2'), + url('woff/LatoLatin Hairline.woff') format('woff'); +} + +@font-face { + font-family: 'LatoLatin'; + font-style: italic; + font-weight: 100; + font-display: swap; + src: local('LatoLatin'), + url('woff2/LatoLatin Hairline Italic.woff2') format('woff2'), + url('woff/LatoLatin Hairline Italic.woff') format('woff'); +} + +@font-face { + font-family: 'LatoLatin'; + font-style: normal; + font-weight: 200; + font-display: swap; + src: local('LatoLatin'), + url('woff2/LatoLatin Thin.woff2') format('woff2'), + url('woff/LatoLatin Thin.woff') format('woff'); +} + +@font-face { + font-family: 'LatoLatin'; + font-style: italic; + font-weight: 200; + font-display: swap; + src: local('LatoLatin'), + url('woff2/LatoLatin Thin Italic.woff2') format('woff2'), + url('woff/LatoLatin Thin Italic.woff') format('woff'); +} + +@font-face { + font-family: 'LatoLatin'; + font-style: normal; + font-weight: 300; + font-display: swap; + src: local('LatoLatin'), + url('woff2/LatoLatin Light.woff2') format('woff2'), + url('woff/LatoLatin Light.woff') format('woff'); +} + +@font-face { + font-family: 'LatoLatin'; + font-style: italic; + font-weight: 300; + font-display: swap; + src: local('LatoLatin'), + url('woff2/LatoLatin Light Italic.woff2') format('woff2'), + url('woff/LatoLatin Light Italic.woff') format('woff'); +} + +@font-face { + font-family: 'LatoLatin'; + font-style: normal; + font-weight: 400; + font-display: swap; + src: local('LatoLatin'), + url('woff2/LatoLatin Regular.woff2') format('woff2'), + url('woff/LatoLatin Regular.woff') format('woff'); +} + +@font-face { + font-family: 'LatoLatin'; + font-style: italic; + font-weight: 400; + font-display: swap; + src: local('LatoLatin'), + url('woff2/LatoLatin Italic.woff2') format('woff2'), + url('woff/LatoLatin Italic.woff') format('woff'); +} + +@font-face { + font-family: 'LatoLatin'; + font-style: normal; + font-weight: 500; + font-display: swap; + src: local('LatoLatin'), + url('woff2/LatoLatin Medium.woff2') format('woff2'), + url('woff/LatoLatin Medium.woff') format('woff'); +} + +@font-face { + font-family: 'LatoLatin'; + font-style: italic; + font-weight: 500; + font-display: swap; + src: local('LatoLatin'), + url('woff2/LatoLatin Medium Italic.woff2') format('woff2'), + url('woff/LatoLatin Medium Italic.woff') format('woff'); +} + +@font-face { + font-family: 'LatoLatin'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: local('LatoLatin'), + url('woff2/LatoLatin Semibold.woff2') format('woff2'), + url('woff/LatoLatin Semibold.woff') format('woff'); +} + +@font-face { + font-family: 'LatoLatin'; + font-style: italic; + font-weight: 600; + font-display: swap; + src: local('LatoLatin'), + url('woff2/LatoLatin Semibold Italic.woff2') format('woff2'), + url('woff/LatoLatin Semibold Italic.woff') format('woff'); +} + +@font-face { + font-family: 'LatoLatin'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: local('LatoLatin'), + url('woff2/LatoLatin Bold.woff2') format('woff2'), + url('woff/LatoLatin Bold.woff') format('woff'); +} + +@font-face { + font-family: 'LatoLatin'; + font-style: italic; + font-weight: 700; + font-display: swap; + src: local('LatoLatin'), + url('woff2/LatoLatin Bold Italic.woff2') format('woff2'), + url('woff/LatoLatin Bold Italic.woff') format('woff'); +} + +@font-face { + font-family: 'LatoLatin'; + font-style: normal; + font-weight: 800; + font-display: swap; + src: local('LatoLatin'), + url('woff2/LatoLatin Heavy.woff2') format('woff2'), + url('woff/LatoLatin Heavy.woff') format('woff'); +} + +@font-face { + font-family: 'LatoLatin'; + font-style: italic; + font-weight: 800; + font-display: swap; + src: local('LatoLatin'), + url('woff2/LatoLatin Heavy Italic.woff2') format('woff2'), + url('woff/LatoLatin Heavy Italic.woff') format('woff'); +} + +@font-face { + font-family: 'LatoLatin'; + font-style: normal; + font-weight: 900; + font-display: swap; + src: local('LatoLatin'), + url('woff2/LatoLatin Black.woff2') format('woff2'), + url('woff/LatoLatin Black.woff') format('woff'); +} + +@font-face { + font-family: 'LatoLatin'; + font-style: italic; + font-weight: 900; + font-display: swap; + src: local('LatoLatin'), + url('woff2/LatoLatin Black Italic.woff2') format('woff2'), + url('woff/LatoLatin Black Italic.woff') format('woff'); +} + diff --git a/static/fonts/LatoLatin/ttf/LatoLatin Black Italic.ttf b/static/fonts/LatoLatin/ttf/LatoLatin Black Italic.ttf new file mode 100644 index 0000000..76563c2 Binary files /dev/null and b/static/fonts/LatoLatin/ttf/LatoLatin Black Italic.ttf differ diff --git a/static/fonts/LatoLatin/ttf/LatoLatin Black.ttf b/static/fonts/LatoLatin/ttf/LatoLatin Black.ttf new file mode 100644 index 0000000..45c55e4 Binary files /dev/null and b/static/fonts/LatoLatin/ttf/LatoLatin Black.ttf differ diff --git a/static/fonts/LatoLatin/ttf/LatoLatin Bold Italic.ttf b/static/fonts/LatoLatin/ttf/LatoLatin Bold Italic.ttf new file mode 100644 index 0000000..c1f225a Binary files /dev/null and b/static/fonts/LatoLatin/ttf/LatoLatin Bold Italic.ttf differ diff --git a/static/fonts/LatoLatin/ttf/LatoLatin Bold.ttf b/static/fonts/LatoLatin/ttf/LatoLatin Bold.ttf new file mode 100644 index 0000000..c598c24 Binary files /dev/null and b/static/fonts/LatoLatin/ttf/LatoLatin Bold.ttf differ diff --git a/static/fonts/LatoLatin/ttf/LatoLatin Hairline Italic.ttf b/static/fonts/LatoLatin/ttf/LatoLatin Hairline Italic.ttf new file mode 100644 index 0000000..d7d8753 Binary files /dev/null and b/static/fonts/LatoLatin/ttf/LatoLatin Hairline Italic.ttf differ diff --git a/static/fonts/LatoLatin/ttf/LatoLatin Hairline.ttf b/static/fonts/LatoLatin/ttf/LatoLatin Hairline.ttf new file mode 100644 index 0000000..5984ab0 Binary files /dev/null and b/static/fonts/LatoLatin/ttf/LatoLatin Hairline.ttf differ diff --git a/static/fonts/LatoLatin/ttf/LatoLatin Heavy Italic.ttf b/static/fonts/LatoLatin/ttf/LatoLatin Heavy Italic.ttf new file mode 100644 index 0000000..4f91d03 Binary files /dev/null and b/static/fonts/LatoLatin/ttf/LatoLatin Heavy Italic.ttf differ diff --git a/static/fonts/LatoLatin/ttf/LatoLatin Heavy.ttf b/static/fonts/LatoLatin/ttf/LatoLatin Heavy.ttf new file mode 100644 index 0000000..6d97505 Binary files /dev/null and b/static/fonts/LatoLatin/ttf/LatoLatin Heavy.ttf differ diff --git a/static/fonts/LatoLatin/ttf/LatoLatin Italic.ttf b/static/fonts/LatoLatin/ttf/LatoLatin Italic.ttf new file mode 100644 index 0000000..c61fc07 Binary files /dev/null and b/static/fonts/LatoLatin/ttf/LatoLatin Italic.ttf differ diff --git a/static/fonts/LatoLatin/ttf/LatoLatin Light Italic.ttf b/static/fonts/LatoLatin/ttf/LatoLatin Light Italic.ttf new file mode 100644 index 0000000..b881036 Binary files /dev/null and b/static/fonts/LatoLatin/ttf/LatoLatin Light Italic.ttf differ diff --git a/static/fonts/LatoLatin/ttf/LatoLatin Light.ttf b/static/fonts/LatoLatin/ttf/LatoLatin Light.ttf new file mode 100644 index 0000000..6af1b85 Binary files /dev/null and b/static/fonts/LatoLatin/ttf/LatoLatin Light.ttf differ diff --git a/static/fonts/LatoLatin/ttf/LatoLatin Medium Italic.ttf b/static/fonts/LatoLatin/ttf/LatoLatin Medium Italic.ttf new file mode 100644 index 0000000..6f929df Binary files /dev/null and b/static/fonts/LatoLatin/ttf/LatoLatin Medium Italic.ttf differ diff --git a/static/fonts/LatoLatin/ttf/LatoLatin Medium.ttf b/static/fonts/LatoLatin/ttf/LatoLatin Medium.ttf new file mode 100644 index 0000000..7ebafb4 Binary files /dev/null and b/static/fonts/LatoLatin/ttf/LatoLatin Medium.ttf differ diff --git a/static/fonts/LatoLatin/ttf/LatoLatin Regular.ttf b/static/fonts/LatoLatin/ttf/LatoLatin Regular.ttf new file mode 100644 index 0000000..bcc5778 Binary files /dev/null and b/static/fonts/LatoLatin/ttf/LatoLatin Regular.ttf differ diff --git a/static/fonts/LatoLatin/ttf/LatoLatin Semibold Italic.ttf b/static/fonts/LatoLatin/ttf/LatoLatin Semibold Italic.ttf new file mode 100644 index 0000000..d715514 Binary files /dev/null and b/static/fonts/LatoLatin/ttf/LatoLatin Semibold Italic.ttf differ diff --git a/static/fonts/LatoLatin/ttf/LatoLatin Semibold.ttf b/static/fonts/LatoLatin/ttf/LatoLatin Semibold.ttf new file mode 100644 index 0000000..b9481d1 Binary files /dev/null and b/static/fonts/LatoLatin/ttf/LatoLatin Semibold.ttf differ diff --git a/static/fonts/LatoLatin/ttf/LatoLatin Thin Italic.ttf b/static/fonts/LatoLatin/ttf/LatoLatin Thin Italic.ttf new file mode 100644 index 0000000..34f99ba Binary files /dev/null and b/static/fonts/LatoLatin/ttf/LatoLatin Thin Italic.ttf differ diff --git a/static/fonts/LatoLatin/ttf/LatoLatin Thin.ttf b/static/fonts/LatoLatin/ttf/LatoLatin Thin.ttf new file mode 100644 index 0000000..7752047 Binary files /dev/null and b/static/fonts/LatoLatin/ttf/LatoLatin Thin.ttf differ diff --git a/static/fonts/LatoLatin/woff/LatoLatin Black Italic.woff b/static/fonts/LatoLatin/woff/LatoLatin Black Italic.woff new file mode 100644 index 0000000..142c1c9 Binary files /dev/null and b/static/fonts/LatoLatin/woff/LatoLatin Black Italic.woff differ diff --git a/static/fonts/LatoLatin/woff/LatoLatin Black.woff b/static/fonts/LatoLatin/woff/LatoLatin Black.woff new file mode 100644 index 0000000..d1e2579 Binary files /dev/null and b/static/fonts/LatoLatin/woff/LatoLatin Black.woff differ diff --git a/static/fonts/LatoLatin/woff/LatoLatin Bold Italic.woff b/static/fonts/LatoLatin/woff/LatoLatin Bold Italic.woff new file mode 100644 index 0000000..3e683fe Binary files /dev/null and b/static/fonts/LatoLatin/woff/LatoLatin Bold Italic.woff differ diff --git a/static/fonts/LatoLatin/woff/LatoLatin Bold.woff b/static/fonts/LatoLatin/woff/LatoLatin Bold.woff new file mode 100644 index 0000000..cdfcbe0 Binary files /dev/null and b/static/fonts/LatoLatin/woff/LatoLatin Bold.woff differ diff --git a/static/fonts/LatoLatin/woff/LatoLatin Hairline Italic.woff b/static/fonts/LatoLatin/woff/LatoLatin Hairline Italic.woff new file mode 100644 index 0000000..bcb96fd Binary files /dev/null and b/static/fonts/LatoLatin/woff/LatoLatin Hairline Italic.woff differ diff --git a/static/fonts/LatoLatin/woff/LatoLatin Hairline.woff b/static/fonts/LatoLatin/woff/LatoLatin Hairline.woff new file mode 100644 index 0000000..5392604 Binary files /dev/null and b/static/fonts/LatoLatin/woff/LatoLatin Hairline.woff differ diff --git a/static/fonts/LatoLatin/woff/LatoLatin Heavy Italic.woff b/static/fonts/LatoLatin/woff/LatoLatin Heavy Italic.woff new file mode 100644 index 0000000..d588f6f Binary files /dev/null and b/static/fonts/LatoLatin/woff/LatoLatin Heavy Italic.woff differ diff --git a/static/fonts/LatoLatin/woff/LatoLatin Heavy.woff b/static/fonts/LatoLatin/woff/LatoLatin Heavy.woff new file mode 100644 index 0000000..82e5027 Binary files /dev/null and b/static/fonts/LatoLatin/woff/LatoLatin Heavy.woff differ diff --git a/static/fonts/LatoLatin/woff/LatoLatin Italic.woff b/static/fonts/LatoLatin/woff/LatoLatin Italic.woff new file mode 100644 index 0000000..d8cf84c Binary files /dev/null and b/static/fonts/LatoLatin/woff/LatoLatin Italic.woff differ diff --git a/static/fonts/LatoLatin/woff/LatoLatin Light Italic.woff b/static/fonts/LatoLatin/woff/LatoLatin Light Italic.woff new file mode 100644 index 0000000..bb72fd2 Binary files /dev/null and b/static/fonts/LatoLatin/woff/LatoLatin Light Italic.woff differ diff --git a/static/fonts/LatoLatin/woff/LatoLatin Light.woff b/static/fonts/LatoLatin/woff/LatoLatin Light.woff new file mode 100644 index 0000000..e7d4278 Binary files /dev/null and b/static/fonts/LatoLatin/woff/LatoLatin Light.woff differ diff --git a/static/fonts/LatoLatin/woff/LatoLatin Medium Italic.woff b/static/fonts/LatoLatin/woff/LatoLatin Medium Italic.woff new file mode 100644 index 0000000..ab7bbc8 Binary files /dev/null and b/static/fonts/LatoLatin/woff/LatoLatin Medium Italic.woff differ diff --git a/static/fonts/LatoLatin/woff/LatoLatin Medium.woff b/static/fonts/LatoLatin/woff/LatoLatin Medium.woff new file mode 100644 index 0000000..a430a4f Binary files /dev/null and b/static/fonts/LatoLatin/woff/LatoLatin Medium.woff differ diff --git a/static/fonts/LatoLatin/woff/LatoLatin Regular.woff b/static/fonts/LatoLatin/woff/LatoLatin Regular.woff new file mode 100644 index 0000000..bf73a6d Binary files /dev/null and b/static/fonts/LatoLatin/woff/LatoLatin Regular.woff differ diff --git a/static/fonts/LatoLatin/woff/LatoLatin Semibold Italic.woff b/static/fonts/LatoLatin/woff/LatoLatin Semibold Italic.woff new file mode 100644 index 0000000..ae27f2f Binary files /dev/null and b/static/fonts/LatoLatin/woff/LatoLatin Semibold Italic.woff differ diff --git a/static/fonts/LatoLatin/woff/LatoLatin Semibold.woff b/static/fonts/LatoLatin/woff/LatoLatin Semibold.woff new file mode 100644 index 0000000..5e22897 Binary files /dev/null and b/static/fonts/LatoLatin/woff/LatoLatin Semibold.woff differ diff --git a/static/fonts/LatoLatin/woff/LatoLatin Thin Italic.woff b/static/fonts/LatoLatin/woff/LatoLatin Thin Italic.woff new file mode 100644 index 0000000..72902b4 Binary files /dev/null and b/static/fonts/LatoLatin/woff/LatoLatin Thin Italic.woff differ diff --git a/static/fonts/LatoLatin/woff/LatoLatin Thin.woff b/static/fonts/LatoLatin/woff/LatoLatin Thin.woff new file mode 100644 index 0000000..431e4a7 Binary files /dev/null and b/static/fonts/LatoLatin/woff/LatoLatin Thin.woff differ diff --git a/static/fonts/LatoLatin/woff2/LatoLatin Black Italic.woff2 b/static/fonts/LatoLatin/woff2/LatoLatin Black Italic.woff2 new file mode 100644 index 0000000..e9862e6 Binary files /dev/null and b/static/fonts/LatoLatin/woff2/LatoLatin Black Italic.woff2 differ diff --git a/static/fonts/LatoLatin/woff2/LatoLatin Black.woff2 b/static/fonts/LatoLatin/woff2/LatoLatin Black.woff2 new file mode 100644 index 0000000..4127b4d Binary files /dev/null and b/static/fonts/LatoLatin/woff2/LatoLatin Black.woff2 differ diff --git a/static/fonts/LatoLatin/woff2/LatoLatin Bold Italic.woff2 b/static/fonts/LatoLatin/woff2/LatoLatin Bold Italic.woff2 new file mode 100644 index 0000000..f7bace1 Binary files /dev/null and b/static/fonts/LatoLatin/woff2/LatoLatin Bold Italic.woff2 differ diff --git a/static/fonts/LatoLatin/woff2/LatoLatin Bold.woff2 b/static/fonts/LatoLatin/woff2/LatoLatin Bold.woff2 new file mode 100644 index 0000000..2615c85 Binary files /dev/null and b/static/fonts/LatoLatin/woff2/LatoLatin Bold.woff2 differ diff --git a/static/fonts/LatoLatin/woff2/LatoLatin Hairline Italic.woff2 b/static/fonts/LatoLatin/woff2/LatoLatin Hairline Italic.woff2 new file mode 100644 index 0000000..69fa81d Binary files /dev/null and b/static/fonts/LatoLatin/woff2/LatoLatin Hairline Italic.woff2 differ diff --git a/static/fonts/LatoLatin/woff2/LatoLatin Hairline.woff2 b/static/fonts/LatoLatin/woff2/LatoLatin Hairline.woff2 new file mode 100644 index 0000000..820ac0f Binary files /dev/null and b/static/fonts/LatoLatin/woff2/LatoLatin Hairline.woff2 differ diff --git a/static/fonts/LatoLatin/woff2/LatoLatin Heavy Italic.woff2 b/static/fonts/LatoLatin/woff2/LatoLatin Heavy Italic.woff2 new file mode 100644 index 0000000..0a95552 Binary files /dev/null and b/static/fonts/LatoLatin/woff2/LatoLatin Heavy Italic.woff2 differ diff --git a/static/fonts/LatoLatin/woff2/LatoLatin Heavy.woff2 b/static/fonts/LatoLatin/woff2/LatoLatin Heavy.woff2 new file mode 100644 index 0000000..24bc6fa Binary files /dev/null and b/static/fonts/LatoLatin/woff2/LatoLatin Heavy.woff2 differ diff --git a/static/fonts/LatoLatin/woff2/LatoLatin Italic.woff2 b/static/fonts/LatoLatin/woff2/LatoLatin Italic.woff2 new file mode 100644 index 0000000..aaa5a35 Binary files /dev/null and b/static/fonts/LatoLatin/woff2/LatoLatin Italic.woff2 differ diff --git a/static/fonts/LatoLatin/woff2/LatoLatin Light Italic.woff2 b/static/fonts/LatoLatin/woff2/LatoLatin Light Italic.woff2 new file mode 100644 index 0000000..fc21432 Binary files /dev/null and b/static/fonts/LatoLatin/woff2/LatoLatin Light Italic.woff2 differ diff --git a/static/fonts/LatoLatin/woff2/LatoLatin Light.woff2 b/static/fonts/LatoLatin/woff2/LatoLatin Light.woff2 new file mode 100644 index 0000000..b6d0288 Binary files /dev/null and b/static/fonts/LatoLatin/woff2/LatoLatin Light.woff2 differ diff --git a/static/fonts/LatoLatin/woff2/LatoLatin Medium Italic.woff2 b/static/fonts/LatoLatin/woff2/LatoLatin Medium Italic.woff2 new file mode 100644 index 0000000..1a3a3f1 Binary files /dev/null and b/static/fonts/LatoLatin/woff2/LatoLatin Medium Italic.woff2 differ diff --git a/static/fonts/LatoLatin/woff2/LatoLatin Medium.woff2 b/static/fonts/LatoLatin/woff2/LatoLatin Medium.woff2 new file mode 100644 index 0000000..20251fe Binary files /dev/null and b/static/fonts/LatoLatin/woff2/LatoLatin Medium.woff2 differ diff --git a/static/fonts/LatoLatin/woff2/LatoLatin Regular.woff2 b/static/fonts/LatoLatin/woff2/LatoLatin Regular.woff2 new file mode 100644 index 0000000..a4d084b Binary files /dev/null and b/static/fonts/LatoLatin/woff2/LatoLatin Regular.woff2 differ diff --git a/static/fonts/LatoLatin/woff2/LatoLatin Semibold Italic.woff2 b/static/fonts/LatoLatin/woff2/LatoLatin Semibold Italic.woff2 new file mode 100644 index 0000000..da18241 Binary files /dev/null and b/static/fonts/LatoLatin/woff2/LatoLatin Semibold Italic.woff2 differ diff --git a/static/fonts/LatoLatin/woff2/LatoLatin Semibold.woff2 b/static/fonts/LatoLatin/woff2/LatoLatin Semibold.woff2 new file mode 100644 index 0000000..1861c24 Binary files /dev/null and b/static/fonts/LatoLatin/woff2/LatoLatin Semibold.woff2 differ diff --git a/static/fonts/LatoLatin/woff2/LatoLatin Thin Italic.woff2 b/static/fonts/LatoLatin/woff2/LatoLatin Thin Italic.woff2 new file mode 100644 index 0000000..caafd60 Binary files /dev/null and b/static/fonts/LatoLatin/woff2/LatoLatin Thin Italic.woff2 differ diff --git a/static/fonts/LatoLatin/woff2/LatoLatin Thin.woff2 b/static/fonts/LatoLatin/woff2/LatoLatin Thin.woff2 new file mode 100644 index 0000000..3f0cc90 Binary files /dev/null and b/static/fonts/LatoLatin/woff2/LatoLatin Thin.woff2 differ diff --git a/static/img/favicon.ico b/static/img/favicon.ico new file mode 100644 index 0000000..45a3c94 Binary files /dev/null and b/static/img/favicon.ico differ diff --git a/static/img/fotos/datentraeger.jpeg b/static/img/fotos/datentraeger.jpeg new file mode 100644 index 0000000..16b9510 Binary files /dev/null and b/static/img/fotos/datentraeger.jpeg differ diff --git a/static/img/fotos/datentraeger_240.webp b/static/img/fotos/datentraeger_240.webp new file mode 100644 index 0000000..b82d29b Binary files /dev/null and b/static/img/fotos/datentraeger_240.webp differ diff --git a/static/img/fotos/datentraeger_360.webp b/static/img/fotos/datentraeger_360.webp new file mode 100644 index 0000000..33666bd Binary files /dev/null and b/static/img/fotos/datentraeger_360.webp differ diff --git a/static/img/fotos/datentraeger_480.webp b/static/img/fotos/datentraeger_480.webp new file mode 100644 index 0000000..9ac5c5a Binary files /dev/null and b/static/img/fotos/datentraeger_480.webp differ diff --git a/static/img/fotos/laptop_matte.jpeg b/static/img/fotos/laptop_matte.jpeg new file mode 100644 index 0000000..02b7e3e Binary files /dev/null and b/static/img/fotos/laptop_matte.jpeg differ diff --git a/static/img/fotos/laptop_matte_240.webp b/static/img/fotos/laptop_matte_240.webp new file mode 100644 index 0000000..8ab7a80 Binary files /dev/null and b/static/img/fotos/laptop_matte_240.webp differ diff --git a/static/img/fotos/laptop_matte_360.webp b/static/img/fotos/laptop_matte_360.webp new file mode 100644 index 0000000..435d7d2 Binary files /dev/null and b/static/img/fotos/laptop_matte_360.webp differ diff --git a/static/img/fotos/laptop_matte_480.webp b/static/img/fotos/laptop_matte_480.webp new file mode 100644 index 0000000..03321d6 Binary files /dev/null and b/static/img/fotos/laptop_matte_480.webp differ diff --git a/static/img/fotos/thumbnail.py b/static/img/fotos/thumbnail.py new file mode 100755 index 0000000..0b9c7c1 --- /dev/null +++ b/static/img/fotos/thumbnail.py @@ -0,0 +1,12 @@ +#!/usr/bin/python3 +import sys +import pathlib +import subprocess + +SIZES = [(320, 240), (480, 360), (640, 480)] + +image_path = pathlib.Path(sys.argv[1]) +for width, height in SIZES: + thumb_name = image_path.with_name(f"{image_path.stem}_{height}.webp") + print(f"Generating {width}x{height} at {thumb_name}") + subprocess.run(["convert", str(image_path), "-resize", f"{width}x{height}", thumb_name]) diff --git a/static/img/icons/computer.svg b/static/img/icons/computer.svg new file mode 100644 index 0000000..473723d --- /dev/null +++ b/static/img/icons/computer.svg @@ -0,0 +1,19 @@ + + + + + + +? + + + + + + diff --git a/static/img/icons/facebook.svg b/static/img/icons/facebook.svg new file mode 100644 index 0000000..e2e1def --- /dev/null +++ b/static/img/icons/facebook.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + diff --git a/static/img/icons/harddrive.svg b/static/img/icons/harddrive.svg new file mode 100644 index 0000000..8381631 --- /dev/null +++ b/static/img/icons/harddrive.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/icons/instagram.svg b/static/img/icons/instagram.svg new file mode 100644 index 0000000..4ce33d4 --- /dev/null +++ b/static/img/icons/instagram.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/icons/mail.svg b/static/img/icons/mail.svg new file mode 100644 index 0000000..06a6357 --- /dev/null +++ b/static/img/icons/mail.svg @@ -0,0 +1,16 @@ + + + + + + +? + + + + + diff --git a/static/img/icons/questionmark.svg b/static/img/icons/questionmark.svg new file mode 100644 index 0000000..042855e --- /dev/null +++ b/static/img/icons/questionmark.svg @@ -0,0 +1,20 @@ + + + + + + +? + + + + + diff --git a/static/img/icons/screwdriver.svg b/static/img/icons/screwdriver.svg new file mode 100644 index 0000000..f2a51a8 --- /dev/null +++ b/static/img/icons/screwdriver.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + diff --git a/static/img/icons/telephone.svg b/static/img/icons/telephone.svg new file mode 100644 index 0000000..12bbaf5 --- /dev/null +++ b/static/img/icons/telephone.svg @@ -0,0 +1,16 @@ + + + + + + +? + + diff --git a/static/img/icons/youtube.svg b/static/img/icons/youtube.svg new file mode 100644 index 0000000..83bba3e --- /dev/null +++ b/static/img/icons/youtube.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/static/img/logo.svg b/static/img/logo.svg new file mode 100644 index 0000000..119e017 --- /dev/null +++ b/static/img/logo.svg @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/leaflet/images/layers-2x.png b/static/leaflet/images/layers-2x.png new file mode 100644 index 0000000..200c333 Binary files /dev/null and b/static/leaflet/images/layers-2x.png differ diff --git a/static/leaflet/images/layers.png b/static/leaflet/images/layers.png new file mode 100644 index 0000000..1a72e57 Binary files /dev/null and b/static/leaflet/images/layers.png differ diff --git a/static/leaflet/images/marker-icon-2x.png b/static/leaflet/images/marker-icon-2x.png new file mode 100644 index 0000000..88f9e50 Binary files /dev/null and b/static/leaflet/images/marker-icon-2x.png differ diff --git a/static/leaflet/images/marker-icon.png b/static/leaflet/images/marker-icon.png new file mode 100644 index 0000000..950edf2 Binary files /dev/null and b/static/leaflet/images/marker-icon.png differ diff --git a/static/leaflet/images/marker-shadow.png b/static/leaflet/images/marker-shadow.png new file mode 100644 index 0000000..9fd2979 Binary files /dev/null and b/static/leaflet/images/marker-shadow.png differ diff --git a/static/leaflet/leaflet.css b/static/leaflet/leaflet.css new file mode 100644 index 0000000..981874b --- /dev/null +++ b/static/leaflet/leaflet.css @@ -0,0 +1,656 @@ +/* required styles */ + +.leaflet-pane, +.leaflet-tile, +.leaflet-marker-icon, +.leaflet-marker-shadow, +.leaflet-tile-container, +.leaflet-pane > svg, +.leaflet-pane > canvas, +.leaflet-zoom-box, +.leaflet-image-layer, +.leaflet-layer { + position: absolute; + left: 0; + top: 0; + } +.leaflet-container { + overflow: hidden; + } +.leaflet-tile, +.leaflet-marker-icon, +.leaflet-marker-shadow { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + -webkit-user-drag: none; + } +/* Prevents IE11 from highlighting tiles in blue */ +.leaflet-tile::selection { + background: transparent; +} +/* Safari renders non-retina tile on retina better with this, but Chrome is worse */ +.leaflet-safari .leaflet-tile { + image-rendering: -webkit-optimize-contrast; + } +/* hack that prevents hw layers "stretching" when loading new tiles */ +.leaflet-safari .leaflet-tile-container { + width: 1600px; + height: 1600px; + -webkit-transform-origin: 0 0; + } +.leaflet-marker-icon, +.leaflet-marker-shadow { + display: block; + } +/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */ +/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */ +.leaflet-container .leaflet-overlay-pane svg { + max-width: none !important; + max-height: none !important; + } +.leaflet-container .leaflet-marker-pane img, +.leaflet-container .leaflet-shadow-pane img, +.leaflet-container .leaflet-tile-pane img, +.leaflet-container img.leaflet-image-layer, +.leaflet-container .leaflet-tile { + max-width: none !important; + max-height: none !important; + width: auto; + padding: 0; + } + +.leaflet-container.leaflet-touch-zoom { + -ms-touch-action: pan-x pan-y; + touch-action: pan-x pan-y; + } +.leaflet-container.leaflet-touch-drag { + -ms-touch-action: pinch-zoom; + /* Fallback for FF which doesn't support pinch-zoom */ + touch-action: none; + touch-action: pinch-zoom; +} +.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom { + -ms-touch-action: none; + touch-action: none; +} +.leaflet-container { + -webkit-tap-highlight-color: transparent; +} +.leaflet-container a { + -webkit-tap-highlight-color: rgba(51, 181, 229, 0.4); +} +.leaflet-tile { + filter: inherit; + visibility: hidden; + } +.leaflet-tile-loaded { + visibility: inherit; + } +.leaflet-zoom-box { + width: 0; + height: 0; + -moz-box-sizing: border-box; + box-sizing: border-box; + z-index: 800; + } +/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */ +.leaflet-overlay-pane svg { + -moz-user-select: none; + } + +.leaflet-pane { z-index: 400; } + +.leaflet-tile-pane { z-index: 200; } +.leaflet-overlay-pane { z-index: 400; } +.leaflet-shadow-pane { z-index: 500; } +.leaflet-marker-pane { z-index: 600; } +.leaflet-tooltip-pane { z-index: 650; } +.leaflet-popup-pane { z-index: 700; } + +.leaflet-map-pane canvas { z-index: 100; } +.leaflet-map-pane svg { z-index: 200; } + +.leaflet-vml-shape { + width: 1px; + height: 1px; + } +.lvml { + behavior: url(#default#VML); + display: inline-block; + position: absolute; + } + + +/* control positioning */ + +.leaflet-control { + position: relative; + z-index: 800; + pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ + pointer-events: auto; + } +.leaflet-top, +.leaflet-bottom { + position: absolute; + z-index: 1000; + pointer-events: none; + } +.leaflet-top { + top: 0; + } +.leaflet-right { + right: 0; + } +.leaflet-bottom { + bottom: 0; + } +.leaflet-left { + left: 0; + } +.leaflet-control { + float: left; + clear: both; + } +.leaflet-right .leaflet-control { + float: right; + } +.leaflet-top .leaflet-control { + margin-top: 10px; + } +.leaflet-bottom .leaflet-control { + margin-bottom: 10px; + } +.leaflet-left .leaflet-control { + margin-left: 10px; + } +.leaflet-right .leaflet-control { + margin-right: 10px; + } + + +/* zoom and fade animations */ + +.leaflet-fade-anim .leaflet-popup { + opacity: 0; + -webkit-transition: opacity 0.2s linear; + -moz-transition: opacity 0.2s linear; + transition: opacity 0.2s linear; + } +.leaflet-fade-anim .leaflet-map-pane .leaflet-popup { + opacity: 1; + } +.leaflet-zoom-animated { + -webkit-transform-origin: 0 0; + -ms-transform-origin: 0 0; + transform-origin: 0 0; + } +svg.leaflet-zoom-animated { + will-change: transform; +} + +.leaflet-zoom-anim .leaflet-zoom-animated { + -webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1); + -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1); + transition: transform 0.25s cubic-bezier(0,0,0.25,1); + } +.leaflet-zoom-anim .leaflet-tile, +.leaflet-pan-anim .leaflet-tile { + -webkit-transition: none; + -moz-transition: none; + transition: none; + } + +.leaflet-zoom-anim .leaflet-zoom-hide { + visibility: hidden; + } + + +/* cursors */ + +.leaflet-interactive { + cursor: pointer; + } +.leaflet-grab { + cursor: -webkit-grab; + cursor: -moz-grab; + cursor: grab; + } +.leaflet-crosshair, +.leaflet-crosshair .leaflet-interactive { + cursor: crosshair; + } +.leaflet-popup-pane, +.leaflet-control { + cursor: auto; + } +.leaflet-dragging .leaflet-grab, +.leaflet-dragging .leaflet-grab .leaflet-interactive, +.leaflet-dragging .leaflet-marker-draggable { + cursor: move; + cursor: -webkit-grabbing; + cursor: -moz-grabbing; + cursor: grabbing; + } + +/* marker & overlays interactivity */ +.leaflet-marker-icon, +.leaflet-marker-shadow, +.leaflet-image-layer, +.leaflet-pane > svg path, +.leaflet-tile-container { + pointer-events: none; + } + +.leaflet-marker-icon.leaflet-interactive, +.leaflet-image-layer.leaflet-interactive, +.leaflet-pane > svg path.leaflet-interactive, +svg.leaflet-image-layer.leaflet-interactive path { + pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */ + pointer-events: auto; + } + +/* visual tweaks */ + +.leaflet-container { + background: #ddd; + outline-offset: 1px; + } +.leaflet-container a { + color: #0078A8; + } +.leaflet-zoom-box { + border: 2px dotted #38f; + background: rgba(255,255,255,0.5); + } + + +/* general typography */ +.leaflet-container { + font-family: "Helvetica Neue", Arial, Helvetica, sans-serif; + font-size: 12px; + font-size: 0.75rem; + line-height: 1.5; + } + + +/* general toolbar styles */ + +.leaflet-bar { + box-shadow: 0 1px 5px rgba(0,0,0,0.65); + border-radius: 4px; + } +.leaflet-bar a { + background-color: #fff; + border-bottom: 1px solid #ccc; + width: 26px; + height: 26px; + line-height: 26px; + display: block; + text-align: center; + text-decoration: none; + color: black; + } +.leaflet-bar a, +.leaflet-control-layers-toggle { + background-position: 50% 50%; + background-repeat: no-repeat; + display: block; + } +.leaflet-bar a:hover, +.leaflet-bar a:focus { + background-color: #f4f4f4; + } +.leaflet-bar a:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; + } +.leaflet-bar a:last-child { + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + border-bottom: none; + } +.leaflet-bar a.leaflet-disabled { + cursor: default; + background-color: #f4f4f4; + color: #bbb; + } + +.leaflet-touch .leaflet-bar a { + width: 30px; + height: 30px; + line-height: 30px; + } +.leaflet-touch .leaflet-bar a:first-child { + border-top-left-radius: 2px; + border-top-right-radius: 2px; + } +.leaflet-touch .leaflet-bar a:last-child { + border-bottom-left-radius: 2px; + border-bottom-right-radius: 2px; + } + +/* zoom control */ + +.leaflet-control-zoom-in, +.leaflet-control-zoom-out { + font: bold 18px 'Lucida Console', Monaco, monospace; + text-indent: 1px; + } + +.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out { + font-size: 22px; + } + + +/* layers control */ + +.leaflet-control-layers { + box-shadow: 0 1px 5px rgba(0,0,0,0.4); + background: #fff; + border-radius: 5px; + } +.leaflet-control-layers-toggle { + background-image: url(images/layers.png); + width: 36px; + height: 36px; + } +.leaflet-retina .leaflet-control-layers-toggle { + background-image: url(images/layers-2x.png); + background-size: 26px 26px; + } +.leaflet-touch .leaflet-control-layers-toggle { + width: 44px; + height: 44px; + } +.leaflet-control-layers .leaflet-control-layers-list, +.leaflet-control-layers-expanded .leaflet-control-layers-toggle { + display: none; + } +.leaflet-control-layers-expanded .leaflet-control-layers-list { + display: block; + position: relative; + } +.leaflet-control-layers-expanded { + padding: 6px 10px 6px 6px; + color: #333; + background: #fff; + } +.leaflet-control-layers-scrollbar { + overflow-y: scroll; + overflow-x: hidden; + padding-right: 5px; + } +.leaflet-control-layers-selector { + margin-top: 2px; + position: relative; + top: 1px; + } +.leaflet-control-layers label { + display: block; + font-size: 13px; + font-size: 1.08333em; + } +.leaflet-control-layers-separator { + height: 0; + border-top: 1px solid #ddd; + margin: 5px -10px 5px -6px; + } + +/* Default icon URLs */ +.leaflet-default-icon-path { /* used only in path-guessing heuristic, see L.Icon.Default */ + background-image: url(images/marker-icon.png); + } + + +/* attribution and scale controls */ + +.leaflet-container .leaflet-control-attribution { + background: #fff; + background: rgba(255, 255, 255, 0.8); + margin: 0; + } +.leaflet-control-attribution, +.leaflet-control-scale-line { + padding: 0 5px; + color: #333; + line-height: 1.4; + } +.leaflet-control-attribution a { + text-decoration: none; + } +.leaflet-control-attribution a:hover, +.leaflet-control-attribution a:focus { + text-decoration: underline; + } +.leaflet-attribution-flag { + display: inline !important; + vertical-align: baseline !important; + width: 1em; + height: 0.6669em; + } +.leaflet-left .leaflet-control-scale { + margin-left: 5px; + } +.leaflet-bottom .leaflet-control-scale { + margin-bottom: 5px; + } +.leaflet-control-scale-line { + border: 2px solid #777; + border-top: none; + line-height: 1.1; + padding: 2px 5px 1px; + white-space: nowrap; + -moz-box-sizing: border-box; + box-sizing: border-box; + background: rgba(255, 255, 255, 0.8); + text-shadow: 1px 1px #fff; + } +.leaflet-control-scale-line:not(:first-child) { + border-top: 2px solid #777; + border-bottom: none; + margin-top: -2px; + } +.leaflet-control-scale-line:not(:first-child):not(:last-child) { + border-bottom: 2px solid #777; + } + +.leaflet-touch .leaflet-control-attribution, +.leaflet-touch .leaflet-control-layers, +.leaflet-touch .leaflet-bar { + box-shadow: none; + } +.leaflet-touch .leaflet-control-layers, +.leaflet-touch .leaflet-bar { + border: 2px solid rgba(0,0,0,0.2); + background-clip: padding-box; + } + + +/* popup */ + +.leaflet-popup { + position: absolute; + text-align: center; + margin-bottom: 20px; + } +.leaflet-popup-content-wrapper { + padding: 1px; + text-align: left; + border-radius: 12px; + } +.leaflet-popup-content { + margin: 13px 24px 13px 20px; + line-height: 1.3; + font-size: 13px; + font-size: 1.08333em; + min-height: 1px; + } +.leaflet-popup-content p { + margin: 17px 0; + margin: 1.3em 0; + } +.leaflet-popup-tip-container { + width: 40px; + height: 20px; + position: absolute; + left: 50%; + margin-top: -1px; + margin-left: -20px; + overflow: hidden; + pointer-events: none; + } +.leaflet-popup-tip { + width: 17px; + height: 17px; + padding: 1px; + + margin: -10px auto 0; + pointer-events: auto; + + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + } +.leaflet-popup-content-wrapper, +.leaflet-popup-tip { + background: white; + color: #333; + box-shadow: 0 3px 14px rgba(0,0,0,0.4); + } +.leaflet-container a.leaflet-popup-close-button { + position: absolute; + top: 0; + right: 0; + border: none; + text-align: center; + width: 24px; + height: 24px; + font: 16px/24px Tahoma, Verdana, sans-serif; + color: #757575; + text-decoration: none; + background: transparent; + } +.leaflet-container a.leaflet-popup-close-button:hover, +.leaflet-container a.leaflet-popup-close-button:focus { + color: #585858; + } +.leaflet-popup-scrolled { + overflow: auto; + } + +.leaflet-oldie .leaflet-popup-content-wrapper { + -ms-zoom: 1; + } +.leaflet-oldie .leaflet-popup-tip { + width: 24px; + margin: 0 auto; + + -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)"; + filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678); + } + +.leaflet-oldie .leaflet-control-zoom, +.leaflet-oldie .leaflet-control-layers, +.leaflet-oldie .leaflet-popup-content-wrapper, +.leaflet-oldie .leaflet-popup-tip { + border: 1px solid #999; + } + + +/* div icon */ + +.leaflet-div-icon { + background: #fff; + border: 1px solid #666; + } + + +/* Tooltip */ +/* Base styles for the element that has a tooltip */ +.leaflet-tooltip { + position: absolute; + padding: 6px; + background-color: #fff; + border: 1px solid #fff; + border-radius: 3px; + color: #222; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + pointer-events: none; + box-shadow: 0 1px 3px rgba(0,0,0,0.4); + } +.leaflet-tooltip.leaflet-interactive { + cursor: pointer; + pointer-events: auto; + } +.leaflet-tooltip-top:before, +.leaflet-tooltip-bottom:before, +.leaflet-tooltip-left:before, +.leaflet-tooltip-right:before { + position: absolute; + pointer-events: none; + border: 6px solid transparent; + background: transparent; + content: ""; + } + +/* Directions */ + +.leaflet-tooltip-bottom { + margin-top: 6px; +} +.leaflet-tooltip-top { + margin-top: -6px; +} +.leaflet-tooltip-bottom:before, +.leaflet-tooltip-top:before { + left: 50%; + margin-left: -6px; + } +.leaflet-tooltip-top:before { + bottom: 0; + margin-bottom: -12px; + border-top-color: #fff; + } +.leaflet-tooltip-bottom:before { + top: 0; + margin-top: -12px; + margin-left: -6px; + border-bottom-color: #fff; + } +.leaflet-tooltip-left { + margin-left: -6px; +} +.leaflet-tooltip-right { + margin-left: 6px; +} +.leaflet-tooltip-left:before, +.leaflet-tooltip-right:before { + top: 50%; + margin-top: -6px; + } +.leaflet-tooltip-left:before { + right: 0; + margin-right: -12px; + border-left-color: #fff; + } +.leaflet-tooltip-right:before { + left: 0; + margin-left: -12px; + border-right-color: #fff; + } + +/* Printing */ + +@media print { + /* Prevent printers from removing background-images of controls. */ + .leaflet-control { + -webkit-print-color-adjust: exact; + print-color-adjust: exact; + } + } diff --git a/static/leaflet/leaflet.js b/static/leaflet/leaflet.js new file mode 100644 index 0000000..047bfe7 --- /dev/null +++ b/static/leaflet/leaflet.js @@ -0,0 +1,6 @@ +/* @preserve + * Leaflet 1.9.3, a JS library for interactive maps. https://leafletjs.com + * (c) 2010-2022 Vladimir Agafonkin, (c) 2010-2011 CloudMade + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).leaflet={})}(this,function(t){"use strict";function l(t){for(var e,i,n=1,o=arguments.length;n=this.min.x&&i.x<=this.max.x&&e.y>=this.min.y&&i.y<=this.max.y},intersects:function(t){t=_(t);var e=this.min,i=this.max,n=t.min,t=t.max,o=t.x>=e.x&&n.x<=i.x,t=t.y>=e.y&&n.y<=i.y;return o&&t},overlaps:function(t){t=_(t);var e=this.min,i=this.max,n=t.min,t=t.max,o=t.x>e.x&&n.xe.y&&n.y=n.lat&&i.lat<=o.lat&&e.lng>=n.lng&&i.lng<=o.lng},intersects:function(t){t=g(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),t=t.getNorthEast(),o=t.lat>=e.lat&&n.lat<=i.lat,t=t.lng>=e.lng&&n.lng<=i.lng;return o&&t},overlaps:function(t){t=g(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),t=t.getNorthEast(),o=t.lat>e.lat&&n.late.lng&&n.lng","http://www.w3.org/2000/svg"===(Ft.firstChild&&Ft.firstChild.namespaceURI));function y(t){return 0<=navigator.userAgent.toLowerCase().indexOf(t)}var b={ie:pt,ielt9:mt,edge:n,webkit:ft,android:gt,android23:vt,androidStock:yt,opera:xt,chrome:wt,gecko:bt,safari:Pt,phantom:Lt,opera12:o,win:Tt,ie3d:Mt,webkit3d:zt,gecko3d:_t,any3d:Ct,mobile:Zt,mobileWebkit:St,mobileWebkit3d:Et,msPointer:kt,pointer:Ot,touch:Bt,touchNative:At,mobileOpera:It,mobileGecko:Rt,retina:Nt,passiveEvents:Dt,canvas:jt,svg:Ht,vml:!Ht&&function(){try{var t=document.createElement("div"),e=(t.innerHTML='',t.firstChild);return e.style.behavior="url(#default#VML)",e&&"object"==typeof e.adj}catch(t){return!1}}(),inlineSvg:Ft,mac:0===navigator.platform.indexOf("Mac"),linux:0===navigator.platform.indexOf("Linux")},Wt=b.msPointer?"MSPointerDown":"pointerdown",Ut=b.msPointer?"MSPointerMove":"pointermove",Vt=b.msPointer?"MSPointerUp":"pointerup",qt=b.msPointer?"MSPointerCancel":"pointercancel",Gt={touchstart:Wt,touchmove:Ut,touchend:Vt,touchcancel:qt},Kt={touchstart:function(t,e){e.MSPOINTER_TYPE_TOUCH&&e.pointerType===e.MSPOINTER_TYPE_TOUCH&&O(e);ee(t,e)},touchmove:ee,touchend:ee,touchcancel:ee},Yt={},Xt=!1;function Jt(t,e,i){return"touchstart"!==e||Xt||(document.addEventListener(Wt,$t,!0),document.addEventListener(Ut,Qt,!0),document.addEventListener(Vt,te,!0),document.addEventListener(qt,te,!0),Xt=!0),Kt[e]?(i=Kt[e].bind(this,i),t.addEventListener(Gt[e],i,!1),i):(console.warn("wrong event specified:",e),u)}function $t(t){Yt[t.pointerId]=t}function Qt(t){Yt[t.pointerId]&&(Yt[t.pointerId]=t)}function te(t){delete Yt[t.pointerId]}function ee(t,e){if(e.pointerType!==(e.MSPOINTER_TYPE_MOUSE||"mouse")){for(var i in e.touches=[],Yt)e.touches.push(Yt[i]);e.changedTouches=[e],t(e)}}var ie=200;function ne(t,i){t.addEventListener("dblclick",i);var n,o=0;function e(t){var e;1!==t.detail?n=t.detail:"mouse"===t.pointerType||t.sourceCapabilities&&!t.sourceCapabilities.firesTouchEvents||((e=Ne(t)).some(function(t){return t instanceof HTMLLabelElement&&t.attributes.for})&&!e.some(function(t){return t instanceof HTMLInputElement||t instanceof HTMLSelectElement})||((e=Date.now())-o<=ie?2===++n&&i(function(t){var e,i,n={};for(i in t)e=t[i],n[i]=e&&e.bind?e.bind(t):e;return(t=n).type="dblclick",n.detail=2,n.isTrusted=!1,n._simulated=!0,n}(t)):n=1,o=e))}return t.addEventListener("click",e),{dblclick:i,simDblclick:e}}var oe,se,re,ae,he,le,ue=we(["transform","webkitTransform","OTransform","MozTransform","msTransform"]),ce=we(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),de="webkitTransition"===ce||"OTransition"===ce?ce+"End":"transitionend";function _e(t){return"string"==typeof t?document.getElementById(t):t}function pe(t,e){var i=t.style[e]||t.currentStyle&&t.currentStyle[e];return"auto"===(i=i&&"auto"!==i||!document.defaultView?i:(t=document.defaultView.getComputedStyle(t,null))?t[e]:null)?null:i}function P(t,e,i){t=document.createElement(t);return t.className=e||"",i&&i.appendChild(t),t}function T(t){var e=t.parentNode;e&&e.removeChild(t)}function me(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function fe(t){var e=t.parentNode;e&&e.lastChild!==t&&e.appendChild(t)}function ge(t){var e=t.parentNode;e&&e.firstChild!==t&&e.insertBefore(t,e.firstChild)}function ve(t,e){return void 0!==t.classList?t.classList.contains(e):0<(t=xe(t)).length&&new RegExp("(^|\\s)"+e+"(\\s|$)").test(t)}function M(t,e){var i;if(void 0!==t.classList)for(var n=W(e),o=0,s=n.length;othis.options.maxZoom)?this.setZoom(t):this},panInsideBounds:function(t,e){this._enforcingBounds=!0;var i=this.getCenter(),t=this._limitCenter(i,this._zoom,g(t));return i.equals(t)||this.panTo(t,e),this._enforcingBounds=!1,this},panInside:function(t,e){var i=m((e=e||{}).paddingTopLeft||e.padding||[0,0]),n=m(e.paddingBottomRight||e.padding||[0,0]),o=this.project(this.getCenter()),t=this.project(t),s=this.getPixelBounds(),i=_([s.min.add(i),s.max.subtract(n)]),s=i.getSize();return i.contains(t)||(this._enforcingBounds=!0,n=t.subtract(i.getCenter()),i=i.extend(t).getSize().subtract(s),o.x+=n.x<0?-i.x:i.x,o.y+=n.y<0?-i.y:i.y,this.panTo(this.unproject(o),e),this._enforcingBounds=!1),this},invalidateSize:function(t){if(!this._loaded)return this;t=l({animate:!1,pan:!0},!0===t?{animate:!0}:t);var e=this.getSize(),i=(this._sizeChanged=!0,this._lastCenter=null,this.getSize()),n=e.divideBy(2).round(),o=i.divideBy(2).round(),n=n.subtract(o);return n.x||n.y?(t.animate&&t.pan?this.panBy(n):(t.pan&&this._rawPanBy(n),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(a(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:e,newSize:i})):this},stop:function(){return this.setZoom(this._limitZoom(this._zoom)),this.options.zoomSnap||this.fire("viewreset"),this._stop()},locate:function(t){var e,i;return t=this._locateOptions=l({timeout:1e4,watch:!1},t),"geolocation"in navigator?(e=a(this._handleGeolocationResponse,this),i=a(this._handleGeolocationError,this),t.watch?this._locationWatchId=navigator.geolocation.watchPosition(e,i,t):navigator.geolocation.getCurrentPosition(e,i,t)):this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){var e;this._container._leaflet_id&&(e=t.code,t=t.message||(1===e?"permission denied":2===e?"position unavailable":"timeout"),this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:e,message:"Geolocation error: "+t+"."}))},_handleGeolocationResponse:function(t){if(this._container._leaflet_id){var e,i,n=new v(t.coords.latitude,t.coords.longitude),o=n.toBounds(2*t.coords.accuracy),s=this._locateOptions,r=(s.setView&&(e=this.getBoundsZoom(o),this.setView(n,s.maxZoom?Math.min(e,s.maxZoom):e)),{latlng:n,bounds:o,timestamp:t.timestamp});for(i in t.coords)"number"==typeof t.coords[i]&&(r[i]=t.coords[i]);this.fire("locationfound",r)}},addHandler:function(t,e){return e&&(e=this[t]=new e(this),this._handlers.push(e),this.options[t]&&e.enable()),this},remove:function(){if(this._initEvents(!0),this.options.maxBounds&&this.off("moveend",this._panInsideMaxBounds),this._containerId!==this._container._leaflet_id)throw new Error("Map container is being reused by another instance");try{delete this._container._leaflet_id,delete this._containerId}catch(t){this._container._leaflet_id=void 0,this._containerId=void 0}for(var t in void 0!==this._locationWatchId&&this.stopLocate(),this._stop(),T(this._mapPane),this._clearControlPos&&this._clearControlPos(),this._resizeRequest&&(r(this._resizeRequest),this._resizeRequest=null),this._clearHandlers(),this._loaded&&this.fire("unload"),this._layers)this._layers[t].remove();for(t in this._panes)T(this._panes[t]);return this._layers=[],this._panes=[],delete this._mapPane,delete this._renderer,this},createPane:function(t,e){e=P("div","leaflet-pane"+(t?" leaflet-"+t.replace("Pane","")+"-pane":""),e||this._mapPane);return t&&(this._panes[t]=e),e},getCenter:function(){return this._checkIfLoaded(),this._lastCenter&&!this._moved()?this._lastCenter.clone():this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds();return new s(this.unproject(t.getBottomLeft()),this.unproject(t.getTopRight()))},getMinZoom:function(){return void 0===this.options.minZoom?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return void 0===this.options.maxZoom?void 0===this._layersMaxZoom?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,e,i){t=g(t),i=m(i||[0,0]);var n=this.getZoom()||0,o=this.getMinZoom(),s=this.getMaxZoom(),r=t.getNorthWest(),t=t.getSouthEast(),i=this.getSize().subtract(i),t=_(this.project(t,n),this.project(r,n)).getSize(),r=b.any3d?this.options.zoomSnap:1,a=i.x/t.x,i=i.y/t.y,t=e?Math.max(a,i):Math.min(a,i),n=this.getScaleZoom(t,n);return r&&(n=Math.round(n/(r/100))*(r/100),n=e?Math.ceil(n/r)*r:Math.floor(n/r)*r),Math.max(o,Math.min(s,n))},getSize:function(){return this._size&&!this._sizeChanged||(this._size=new p(this._container.clientWidth||0,this._container.clientHeight||0),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(t,e){t=this._getTopLeftPoint(t,e);return new f(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._pixelOrigin},getPixelWorldBounds:function(t){return this.options.crs.getProjectedBounds(void 0===t?this.getZoom():t)},getPane:function(t){return"string"==typeof t?this._panes[t]:t},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t,e){var i=this.options.crs;return e=void 0===e?this._zoom:e,i.scale(t)/i.scale(e)},getScaleZoom:function(t,e){var i=this.options.crs,t=(e=void 0===e?this._zoom:e,i.zoom(t*i.scale(e)));return isNaN(t)?1/0:t},project:function(t,e){return e=void 0===e?this._zoom:e,this.options.crs.latLngToPoint(w(t),e)},unproject:function(t,e){return e=void 0===e?this._zoom:e,this.options.crs.pointToLatLng(m(t),e)},layerPointToLatLng:function(t){t=m(t).add(this.getPixelOrigin());return this.unproject(t)},latLngToLayerPoint:function(t){return this.project(w(t))._round()._subtract(this.getPixelOrigin())},wrapLatLng:function(t){return this.options.crs.wrapLatLng(w(t))},wrapLatLngBounds:function(t){return this.options.crs.wrapLatLngBounds(g(t))},distance:function(t,e){return this.options.crs.distance(w(t),w(e))},containerPointToLayerPoint:function(t){return m(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return m(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){t=this.containerPointToLayerPoint(m(t));return this.layerPointToLatLng(t)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(w(t)))},mouseEventToContainerPoint:function(t){return De(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){t=this._container=_e(t);if(!t)throw new Error("Map container not found.");if(t._leaflet_id)throw new Error("Map container is already initialized.");S(t,"scroll",this._onScroll,this),this._containerId=h(t)},_initLayout:function(){var t=this._container,e=(this._fadeAnimated=this.options.fadeAnimation&&b.any3d,M(t,"leaflet-container"+(b.touch?" leaflet-touch":"")+(b.retina?" leaflet-retina":"")+(b.ielt9?" leaflet-oldie":"")+(b.safari?" leaflet-safari":"")+(this._fadeAnimated?" leaflet-fade-anim":"")),pe(t,"position"));"absolute"!==e&&"relative"!==e&&"fixed"!==e&&"sticky"!==e&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._paneRenderers={},this._mapPane=this.createPane("mapPane",this._container),Z(this._mapPane,new p(0,0)),this.createPane("tilePane"),this.createPane("overlayPane"),this.createPane("shadowPane"),this.createPane("markerPane"),this.createPane("tooltipPane"),this.createPane("popupPane"),this.options.markerZoomAnimation||(M(t.markerPane,"leaflet-zoom-hide"),M(t.shadowPane,"leaflet-zoom-hide"))},_resetView:function(t,e,i){Z(this._mapPane,new p(0,0));var n=!this._loaded,o=(this._loaded=!0,e=this._limitZoom(e),this.fire("viewprereset"),this._zoom!==e);this._moveStart(o,i)._move(t,e)._moveEnd(o),this.fire("viewreset"),n&&this.fire("load")},_moveStart:function(t,e){return t&&this.fire("zoomstart"),e||this.fire("movestart"),this},_move:function(t,e,i,n){void 0===e&&(e=this._zoom);var o=this._zoom!==e;return this._zoom=e,this._lastCenter=t,this._pixelOrigin=this._getNewPixelOrigin(t),n?i&&i.pinch&&this.fire("zoom",i):((o||i&&i.pinch)&&this.fire("zoom",i),this.fire("move",i)),this},_moveEnd:function(t){return t&&this.fire("zoomend"),this.fire("moveend")},_stop:function(){return r(this._flyToFrame),this._panAnim&&this._panAnim.stop(),this},_rawPanBy:function(t){Z(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_panInsideMaxBounds:function(){this._enforcingBounds||this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(t){this._targets={};var e=t?k:S;e((this._targets[h(this._container)]=this)._container,"click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress keydown keyup",this._handleDOMEvent,this),this.options.trackResize&&e(window,"resize",this._onResize,this),b.any3d&&this.options.transform3DLimit&&(t?this.off:this.on).call(this,"moveend",this._onMoveEnd)},_onResize:function(){r(this._resizeRequest),this._resizeRequest=x(function(){this.invalidateSize({debounceMoveend:!0})},this)},_onScroll:function(){this._container.scrollTop=0,this._container.scrollLeft=0},_onMoveEnd:function(){var t=this._getMapPanePos();Math.max(Math.abs(t.x),Math.abs(t.y))>=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,e){for(var i,n=[],o="mouseout"===e||"mouseover"===e,s=t.target||t.srcElement,r=!1;s;){if((i=this._targets[h(s)])&&("click"===e||"preclick"===e)&&this._draggableMoved(i)){r=!0;break}if(i&&i.listens(e,!0)){if(o&&!Fe(s,t))break;if(n.push(i),o)break}if(s===this._container)break;s=s.parentNode}return n=n.length||r||o||!this.listens(e,!0)?n:[this]},_isClickDisabled:function(t){for(;t&&t!==this._container;){if(t._leaflet_disable_click)return!0;t=t.parentNode}},_handleDOMEvent:function(t){var e,i=t.target||t.srcElement;!this._loaded||i._leaflet_disable_events||"click"===t.type&&this._isClickDisabled(i)||("mousedown"===(e=t.type)&&Me(i),this._fireDOMEvent(t,e))},_mouseEvents:["click","dblclick","mouseover","mouseout","contextmenu"],_fireDOMEvent:function(t,e,i){"click"===t.type&&((a=l({},t)).type="preclick",this._fireDOMEvent(a,a.type,i));var n=this._findEventTargets(t,e);if(i){for(var o=[],s=0;sthis.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(e),n=this._getCenterOffset(t)._divideBy(1-1/n);if(!0!==i.animate&&!this.getSize().contains(n))return!1;x(function(){this._moveStart(!0,!1)._animateZoom(t,e,!0)},this)}return!0},_animateZoom:function(t,e,i,n){this._mapPane&&(i&&(this._animatingZoom=!0,this._animateToCenter=t,this._animateToZoom=e,M(this._mapPane,"leaflet-zoom-anim")),this.fire("zoomanim",{center:t,zoom:e,noUpdate:n}),this._tempFireZoomEvent||(this._tempFireZoomEvent=this._zoom!==this._animateToZoom),this._move(this._animateToCenter,this._animateToZoom,void 0,!0),setTimeout(a(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&&z(this._mapPane,"leaflet-zoom-anim"),this._animatingZoom=!1,this._move(this._animateToCenter,this._animateToZoom,void 0,!0),this._tempFireZoomEvent&&this.fire("zoom"),delete this._tempFireZoomEvent,this.fire("move"),this._moveEnd(!0))}});function Ue(t){return new B(t)}var Ve,B=et.extend({options:{position:"topright"},initialize:function(t){c(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var e=this._map;return e&&e.removeControl(this),this.options.position=t,e&&e.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this.remove(),this._map=t;var e=this._container=this.onAdd(t),i=this.getPosition(),t=t._controlCorners[i];return M(e,"leaflet-control"),-1!==i.indexOf("bottom")?t.insertBefore(e,t.firstChild):t.appendChild(e),this._map.on("unload",this.remove,this),this},remove:function(){return this._map&&(T(this._container),this.onRemove&&this.onRemove(this._map),this._map.off("unload",this.remove,this),this._map=null),this},_refocusOnMap:function(t){this._map&&t&&0",e=document.createElement("div");return e.innerHTML=t,e.firstChild},_addItem:function(t){var e,i=document.createElement("label"),n=this._map.hasLayer(t.layer),n=(t.overlay?((e=document.createElement("input")).type="checkbox",e.className="leaflet-control-layers-selector",e.defaultChecked=n):e=this._createRadioElement("leaflet-base-layers_"+h(this),n),this._layerControlInputs.push(e),e.layerId=h(t.layer),S(e,"click",this._onInputClick,this),document.createElement("span")),o=(n.innerHTML=" "+t.name,document.createElement("span"));return i.appendChild(o),o.appendChild(e),o.appendChild(n),(t.overlay?this._overlaysList:this._baseLayersList).appendChild(i),this._checkDisabledLayers(),i},_onInputClick:function(){var t,e,i=this._layerControlInputs,n=[],o=[];this._handlingClick=!0;for(var s=i.length-1;0<=s;s--)t=i[s],e=this._getLayer(t.layerId).layer,t.checked?n.push(e):t.checked||o.push(e);for(s=0;se.options.maxZoom},_expandIfNotCollapsed:function(){return this._map&&!this.options.collapsed&&this.expand(),this},_expandSafely:function(){var t=this._section;S(t,"click",O),this.expand(),setTimeout(function(){k(t,"click",O)})}})),Ge=B.extend({options:{position:"topleft",zoomInText:'',zoomInTitle:"Zoom in",zoomOutText:'',zoomOutTitle:"Zoom out"},onAdd:function(t){var e="leaflet-control-zoom",i=P("div",e+" leaflet-bar"),n=this.options;return this._zoomInButton=this._createButton(n.zoomInText,n.zoomInTitle,e+"-in",i,this._zoomIn),this._zoomOutButton=this._createButton(n.zoomOutText,n.zoomOutTitle,e+"-out",i,this._zoomOut),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),i},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},disable:function(){return this._disabled=!0,this._updateDisabled(),this},enable:function(){return this._disabled=!1,this._updateDisabled(),this},_zoomIn:function(t){!this._disabled&&this._map._zoomthis._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(t.shiftKey?3:1))},_createButton:function(t,e,i,n,o){i=P("a",i,n);return i.innerHTML=t,i.href="#",i.title=e,i.setAttribute("role","button"),i.setAttribute("aria-label",e),Ie(i),S(i,"click",Re),S(i,"click",o,this),S(i,"click",this._refocusOnMap,this),i},_updateDisabled:function(){var t=this._map,e="leaflet-disabled";z(this._zoomInButton,e),z(this._zoomOutButton,e),this._zoomInButton.setAttribute("aria-disabled","false"),this._zoomOutButton.setAttribute("aria-disabled","false"),!this._disabled&&t._zoom!==t.getMinZoom()||(M(this._zoomOutButton,e),this._zoomOutButton.setAttribute("aria-disabled","true")),!this._disabled&&t._zoom!==t.getMaxZoom()||(M(this._zoomInButton,e),this._zoomInButton.setAttribute("aria-disabled","true"))}}),Ke=(A.mergeOptions({zoomControl:!0}),A.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new Ge,this.addControl(this.zoomControl))}),B.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var e="leaflet-control-scale",i=P("div",e),n=this.options;return this._addScales(n,e+"-line",i),t.on(n.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,e,i){t.metric&&(this._mScale=P("div",e,i)),t.imperial&&(this._iScale=P("div",e,i))},_update:function(){var t=this._map,e=t.getSize().y/2,t=t.distance(t.containerPointToLatLng([0,e]),t.containerPointToLatLng([this.options.maxWidth,e]));this._updateScales(t)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var e=this._getRoundNum(t);this._updateScale(this._mScale,e<1e3?e+" m":e/1e3+" km",e/t)},_updateImperial:function(t){var e,i,t=3.2808399*t;5280'+(b.inlineSvg?' ':"")+"Leaflet"},initialize:function(t){c(this,t),this._attributions={}},onAdd:function(t){for(var e in(t.attributionControl=this)._container=P("div","leaflet-control-attribution"),Ie(this._container),t._layers)t._layers[e].getAttribution&&this.addAttribution(t._layers[e].getAttribution());return this._update(),t.on("layeradd",this._addAttribution,this),this._container},onRemove:function(t){t.off("layeradd",this._addAttribution,this)},_addAttribution:function(t){t.layer.getAttribution&&(this.addAttribution(t.layer.getAttribution()),t.layer.once("remove",function(){this.removeAttribution(t.layer.getAttribution())},this))},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t&&(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update()),this},removeAttribution:function(t){return t&&this._attributions[t]&&(this._attributions[t]--,this._update()),this},_update:function(){if(this._map){var t,e=[];for(t in this._attributions)this._attributions[t]&&e.push(t);var i=[];this.options.prefix&&i.push(this.options.prefix),e.length&&i.push(e.join(", ")),this._container.innerHTML=i.join(' ')}}}),n=(A.mergeOptions({attributionControl:!0}),A.addInitHook(function(){this.options.attributionControl&&(new Ye).addTo(this)}),B.Layers=qe,B.Zoom=Ge,B.Scale=Ke,B.Attribution=Ye,Ue.layers=function(t,e,i){return new qe(t,e,i)},Ue.zoom=function(t){return new Ge(t)},Ue.scale=function(t){return new Ke(t)},Ue.attribution=function(t){return new Ye(t)},et.extend({initialize:function(t){this._map=t},enable:function(){return this._enabled||(this._enabled=!0,this.addHooks()),this},disable:function(){return this._enabled&&(this._enabled=!1,this.removeHooks()),this},enabled:function(){return!!this._enabled}})),ft=(n.addTo=function(t,e){return t.addHandler(e,this),this},{Events:e}),Xe=b.touch?"touchstart mousedown":"mousedown",Je=it.extend({options:{clickTolerance:3},initialize:function(t,e,i,n){c(this,n),this._element=t,this._dragStartTarget=e||t,this._preventOutline=i},enable:function(){this._enabled||(S(this._dragStartTarget,Xe,this._onDown,this),this._enabled=!0)},disable:function(){this._enabled&&(Je._dragging===this&&this.finishDrag(!0),k(this._dragStartTarget,Xe,this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(t){var e,i;this._enabled&&(this._moved=!1,ve(this._element,"leaflet-zoom-anim")||(t.touches&&1!==t.touches.length?Je._dragging===this&&this.finishDrag():Je._dragging||t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||((Je._dragging=this)._preventOutline&&Me(this._element),Le(),re(),this._moving||(this.fire("down"),i=t.touches?t.touches[0]:t,e=Ce(this._element),this._startPoint=new p(i.clientX,i.clientY),this._startPos=Pe(this._element),this._parentScale=Ze(e),i="mousedown"===t.type,S(document,i?"mousemove":"touchmove",this._onMove,this),S(document,i?"mouseup":"touchend touchcancel",this._onUp,this)))))},_onMove:function(t){var e;this._enabled&&(t.touches&&1e&&(i.push(t[n]),o=n);oe.max.x&&(i|=2),t.ye.max.y&&(i|=8),i}function ni(t,e,i,n){var o=e.x,e=e.y,s=i.x-o,r=i.y-e,a=s*s+r*r;return 0this._layersMaxZoom&&this.setZoom(this._layersMaxZoom),void 0===this.options.minZoom&&this._layersMinZoom&&this.getZoom()t.y!=n.y>t.y&&t.x<(n.x-i.x)*(t.y-i.y)/(n.y-i.y)+i.x&&(l=!l);return l||vi.prototype._containsPoint.call(this,t,!0)}});var xi=ui.extend({initialize:function(t,e){c(this,e),this._layers={},t&&this.addData(t)},addData:function(t){var e,i,n,o=d(t)?t:t.features;if(o){for(e=0,i=o.length;es.x&&(r=i.x+a-s.x+o.x),i.x-r-n.x<(a=0)&&(r=i.x-n.x),i.y+e+o.y>s.y&&(a=i.y+e-s.y+o.y),i.y-a-n.y<0&&(a=i.y-n.y),(r||a)&&(this.options.keepInView&&(this._autopanning=!0),t.fire("autopanstart").panBy([r,a]))))},_getAnchor:function(){return m(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():[0,0])}})),Bi=(A.mergeOptions({closePopupOnClick:!0}),A.include({openPopup:function(t,e,i){return this._initOverlay(Ai,t,e,i).openOn(this),this},closePopup:function(t){return(t=arguments.length?t:this._popup)&&t.close(),this}}),o.include({bindPopup:function(t,e){return this._popup=this._initOverlay(Ai,this._popup,t,e),this._popupHandlersAdded||(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,this._popup=null),this},openPopup:function(t){return this._popup&&(this instanceof ui||(this._popup._source=this),this._popup._prepareOpen(t||this._latlng)&&this._popup.openOn(this._map)),this},closePopup:function(){return this._popup&&this._popup.close(),this},togglePopup:function(){return this._popup&&this._popup.toggle(this),this},isPopupOpen:function(){return!!this._popup&&this._popup.isOpen()},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},getPopup:function(){return this._popup},_openPopup:function(t){var e;this._popup&&this._map&&(Re(t),e=t.layer||t.target,this._popup._source!==e||e instanceof mi?(this._popup._source=e,this.openPopup(t.latlng)):this._map.hasLayer(this._popup)?this.closePopup():this.openPopup(t.latlng))},_movePopup:function(t){this._popup.setLatLng(t.latlng)},_onKeyPress:function(t){13===t.originalEvent.keyCode&&this._openPopup(t)}}),Oi.extend({options:{pane:"tooltipPane",offset:[0,0],direction:"auto",permanent:!1,sticky:!1,opacity:.9},onAdd:function(t){Oi.prototype.onAdd.call(this,t),this.setOpacity(this.options.opacity),t.fire("tooltipopen",{tooltip:this}),this._source&&(this.addEventParent(this._source),this._source.fire("tooltipopen",{tooltip:this},!0))},onRemove:function(t){Oi.prototype.onRemove.call(this,t),t.fire("tooltipclose",{tooltip:this}),this._source&&(this.removeEventParent(this._source),this._source.fire("tooltipclose",{tooltip:this},!0))},getEvents:function(){var t=Oi.prototype.getEvents.call(this);return this.options.permanent||(t.preclick=this.close),t},_initLayout:function(){var t="leaflet-tooltip "+(this.options.className||"")+" leaflet-zoom-"+(this._zoomAnimated?"animated":"hide");this._contentNode=this._container=P("div",t),this._container.setAttribute("role","tooltip"),this._container.setAttribute("id","leaflet-tooltip-"+h(this))},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(t){var e,i=this._map,n=this._container,o=i.latLngToContainerPoint(i.getCenter()),i=i.layerPointToContainerPoint(t),s=this.options.direction,r=n.offsetWidth,a=n.offsetHeight,h=m(this.options.offset),l=this._getAnchor(),i="top"===s?(e=r/2,a):"bottom"===s?(e=r/2,0):(e="center"===s?r/2:"right"===s?0:"left"===s?r:i.xthis.options.maxZoom||nthis.options.maxZoom||void 0!==this.options.minZoom&&oi.max.x)||!e.wrapLat&&(t.yi.max.y))return!1}return!this.options.bounds||(e=this._tileCoordsToBounds(t),g(this.options.bounds).overlaps(e))},_keyToBounds:function(t){return this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToNwSe:function(t){var e=this._map,i=this.getTileSize(),n=t.scaleBy(i),i=n.add(i);return[e.unproject(n,t.z),e.unproject(i,t.z)]},_tileCoordsToBounds:function(t){t=this._tileCoordsToNwSe(t),t=new s(t[0],t[1]);return t=this.options.noWrap?t:this._map.wrapLatLngBounds(t)},_tileCoordsToKey:function(t){return t.x+":"+t.y+":"+t.z},_keyToTileCoords:function(t){var t=t.split(":"),e=new p(+t[0],+t[1]);return e.z=+t[2],e},_removeTile:function(t){var e=this._tiles[t];e&&(T(e.el),delete this._tiles[t],this.fire("tileunload",{tile:e.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){M(t,"leaflet-tile");var e=this.getTileSize();t.style.width=e.x+"px",t.style.height=e.y+"px",t.onselectstart=u,t.onmousemove=u,b.ielt9&&this.options.opacity<1&&C(t,this.options.opacity)},_addTile:function(t,e){var i=this._getTilePos(t),n=this._tileCoordsToKey(t),o=this.createTile(this._wrapCoords(t),a(this._tileReady,this,t));this._initTile(o),this.createTile.length<2&&x(a(this._tileReady,this,t,null,o)),Z(o,i),this._tiles[n]={el:o,coords:t,current:!0},e.appendChild(o),this.fire("tileloadstart",{tile:o,coords:t})},_tileReady:function(t,e,i){e&&this.fire("tileerror",{error:e,tile:i,coords:t});var n=this._tileCoordsToKey(t);(i=this._tiles[n])&&(i.loaded=+new Date,this._map._fadeAnimated?(C(i.el,0),r(this._fadeFrame),this._fadeFrame=x(this._updateOpacity,this)):(i.active=!0,this._pruneTiles()),e||(M(i.el,"leaflet-tile-loaded"),this.fire("tileload",{tile:i.el,coords:t})),this._noTilesToLoad()&&(this._loading=!1,this.fire("load"),b.ielt9||!this._map._fadeAnimated?x(this._pruneTiles,this):setTimeout(a(this._pruneTiles,this),250)))},_getTilePos:function(t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var e=new p(this._wrapX?H(t.x,this._wrapX):t.x,this._wrapY?H(t.y,this._wrapY):t.y);return e.z=t.z,e},_pxBoundsToTileRange:function(t){var e=this.getTileSize();return new f(t.min.unscaleBy(e).floor(),t.max.unscaleBy(e).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var t in this._tiles)if(!this._tiles[t].loaded)return!1;return!0}});var Ni=Ri.extend({options:{minZoom:0,maxZoom:18,subdomains:"abc",errorTileUrl:"",zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1,referrerPolicy:!1},initialize:function(t,e){this._url=t,(e=c(this,e)).detectRetina&&b.retina&&0')}}catch(t){}return function(t){return document.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}(),zt={_initContainer:function(){this._container=P("div","leaflet-vml-container")},_update:function(){this._map._animatingZoom||(Hi.prototype._update.call(this),this.fire("update"))},_initPath:function(t){var e=t._container=Ui("shape");M(e,"leaflet-vml-shape "+(this.options.className||"")),e.coordsize="1 1",t._path=Ui("path"),e.appendChild(t._path),this._updateStyle(t),this._layers[h(t)]=t},_addPath:function(t){var e=t._container;this._container.appendChild(e),t.options.interactive&&t.addInteractiveTarget(e)},_removePath:function(t){var e=t._container;T(e),t.removeInteractiveTarget(e),delete this._layers[h(t)]},_updateStyle:function(t){var e=t._stroke,i=t._fill,n=t.options,o=t._container;o.stroked=!!n.stroke,o.filled=!!n.fill,n.stroke?(e=e||(t._stroke=Ui("stroke")),o.appendChild(e),e.weight=n.weight+"px",e.color=n.color,e.opacity=n.opacity,n.dashArray?e.dashStyle=d(n.dashArray)?n.dashArray.join(" "):n.dashArray.replace(/( *, *)/g," "):e.dashStyle="",e.endcap=n.lineCap.replace("butt","flat"),e.joinstyle=n.lineJoin):e&&(o.removeChild(e),t._stroke=null),n.fill?(i=i||(t._fill=Ui("fill")),o.appendChild(i),i.color=n.fillColor||n.color,i.opacity=n.fillOpacity):i&&(o.removeChild(i),t._fill=null)},_updateCircle:function(t){var e=t._point.round(),i=Math.round(t._radius),n=Math.round(t._radiusY||i);this._setPath(t,t._empty()?"M0 0":"AL "+e.x+","+e.y+" "+i+","+n+" 0,23592600")},_setPath:function(t,e){t._path.v=e},_bringToFront:function(t){fe(t._container)},_bringToBack:function(t){ge(t._container)}},Vi=b.vml?Ui:ct,qi=Hi.extend({_initContainer:function(){this._container=Vi("svg"),this._container.setAttribute("pointer-events","none"),this._rootGroup=Vi("g"),this._container.appendChild(this._rootGroup)},_destroyContainer:function(){T(this._container),k(this._container),delete this._container,delete this._rootGroup,delete this._svgSize},_update:function(){var t,e,i;this._map._animatingZoom&&this._bounds||(Hi.prototype._update.call(this),e=(t=this._bounds).getSize(),i=this._container,this._svgSize&&this._svgSize.equals(e)||(this._svgSize=e,i.setAttribute("width",e.x),i.setAttribute("height",e.y)),Z(i,t.min),i.setAttribute("viewBox",[t.min.x,t.min.y,e.x,e.y].join(" ")),this.fire("update"))},_initPath:function(t){var e=t._path=Vi("path");t.options.className&&M(e,t.options.className),t.options.interactive&&M(e,"leaflet-interactive"),this._updateStyle(t),this._layers[h(t)]=t},_addPath:function(t){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){T(t._path),t.removeInteractiveTarget(t._path),delete this._layers[h(t)]},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var e=t._path,t=t.options;e&&(t.stroke?(e.setAttribute("stroke",t.color),e.setAttribute("stroke-opacity",t.opacity),e.setAttribute("stroke-width",t.weight),e.setAttribute("stroke-linecap",t.lineCap),e.setAttribute("stroke-linejoin",t.lineJoin),t.dashArray?e.setAttribute("stroke-dasharray",t.dashArray):e.removeAttribute("stroke-dasharray"),t.dashOffset?e.setAttribute("stroke-dashoffset",t.dashOffset):e.removeAttribute("stroke-dashoffset")):e.setAttribute("stroke","none"),t.fill?(e.setAttribute("fill",t.fillColor||t.color),e.setAttribute("fill-opacity",t.fillOpacity),e.setAttribute("fill-rule",t.fillRule||"evenodd")):e.setAttribute("fill","none"))},_updatePoly:function(t,e){this._setPath(t,dt(t._parts,e))},_updateCircle:function(t){var e=t._point,i=Math.max(Math.round(t._radius),1),n="a"+i+","+(Math.max(Math.round(t._radiusY),1)||i)+" 0 1,0 ",e=t._empty()?"M0 0":"M"+(e.x-i)+","+e.y+n+2*i+",0 "+n+2*-i+",0 ";this._setPath(t,e)},_setPath:function(t,e){t._path.setAttribute("d",e)},_bringToFront:function(t){fe(t._path)},_bringToBack:function(t){ge(t._path)}});function Gi(t){return b.svg||b.vml?new qi(t):null}b.vml&&qi.include(zt),A.include({getRenderer:function(t){t=(t=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer)||(this._renderer=this._createRenderer());return this.hasLayer(t)||this.addLayer(t),t},_getPaneRenderer:function(t){var e;return"overlayPane"!==t&&void 0!==t&&(void 0===(e=this._paneRenderers[t])&&(e=this._createRenderer({pane:t}),this._paneRenderers[t]=e),e)},_createRenderer:function(t){return this.options.preferCanvas&&Wi(t)||Gi(t)}});var Ki=yi.extend({initialize:function(t,e){yi.prototype.initialize.call(this,this._boundsToLatLngs(t),e)},setBounds:function(t){return this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return[(t=g(t)).getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}});qi.create=Vi,qi.pointsToPath=dt,xi.geometryToLayer=wi,xi.coordsToLatLng=Pi,xi.coordsToLatLngs=Li,xi.latLngToCoords=Ti,xi.latLngsToCoords=Mi,xi.getFeature=zi,xi.asFeature=Ci,A.mergeOptions({boxZoom:!0});var _t=n.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){S(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){k(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){T(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){0!==this._resetStateTimeout&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||1!==t.which&&1!==t.button)return!1;this._clearDeferredResetState(),this._resetState(),re(),Le(),this._startPoint=this._map.mouseEventToContainerPoint(t),S(document,{contextmenu:Re,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=P("div","leaflet-zoom-box",this._container),M(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t);var t=new f(this._point,this._startPoint),e=t.getSize();Z(this._box,t.min),this._box.style.width=e.x+"px",this._box.style.height=e.y+"px"},_finish:function(){this._moved&&(T(this._box),z(this._container,"leaflet-crosshair")),ae(),Te(),k(document,{contextmenu:Re,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){1!==t.which&&1!==t.button||(this._finish(),this._moved&&(this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(a(this._resetState,this),0),t=new s(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point)),this._map.fitBounds(t).fire("boxzoomend",{boxZoomBounds:t})))},_onKeyDown:function(t){27===t.keyCode&&(this._finish(),this._clearDeferredResetState(),this._resetState())}}),Ct=(A.addInitHook("addHandler","boxZoom",_t),A.mergeOptions({doubleClickZoom:!0}),n.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var e=this._map,i=e.getZoom(),n=e.options.zoomDelta,i=t.originalEvent.shiftKey?i-n:i+n;"center"===e.options.doubleClickZoom?e.setZoom(i):e.setZoomAround(t.containerPoint,i)}})),Zt=(A.addInitHook("addHandler","doubleClickZoom",Ct),A.mergeOptions({dragging:!0,inertia:!0,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0}),n.extend({addHooks:function(){var t;this._draggable||(t=this._map,this._draggable=new Je(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on("predrag",this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDragWrap,this),t.on("zoomend",this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))),M(this._map._container,"leaflet-grab leaflet-touch-drag"),this._draggable.enable(),this._positions=[],this._times=[]},removeHooks:function(){z(this._map._container,"leaflet-grab"),z(this._map._container,"leaflet-touch-drag"),this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},moving:function(){return this._draggable&&this._draggable._moving},_onDragStart:function(){var t,e=this._map;e._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity?(t=g(this._map.options.maxBounds),this._offsetLimit=_(this._map.latLngToContainerPoint(t.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(t.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))):this._offsetLimit=null,e.fire("movestart").fire("dragstart"),e.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(t){var e,i;this._map.options.inertia&&(e=this._lastTime=+new Date,i=this._lastPos=this._draggable._absPos||this._draggable._newPos,this._positions.push(i),this._times.push(e),this._prunePositions(e)),this._map.fire("move",t).fire("drag",t)},_prunePositions:function(t){for(;1e.max.x&&(t.x=this._viscousLimit(t.x,e.max.x)),t.y>e.max.y&&(t.y=this._viscousLimit(t.y,e.max.y)),this._draggable._newPos=this._draggable._startPos.add(t))},_onPreDragWrap:function(){var t=this._worldWidth,e=Math.round(t/2),i=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-e+i)%t+e-i,n=(n+e+i)%t-e-i,t=Math.abs(o+i)e.getMaxZoom()&&1OpenStreetMap' + }).addTo(map); + + //Adding Zones in prefered order, to ensure correct coloring of borders + zone_c.addTo(map); + zone_a.addTo(map); + zone_b_1.addTo(map); + zone_b_2.addTo(map); +} + +if (document.getElementById("map") != null) { + initMap(null); +} else { + window.addEventListener("DOMContentLoaded", initMap); +} diff --git a/static/styles.css b/static/styles.css new file mode 100644 index 0000000..c0de87e --- /dev/null +++ b/static/styles.css @@ -0,0 +1,391 @@ +*, *:before, *:after { + box-sizing: border-box; +} + +html { + scroll-behavior: smooth; + scroll-padding-top: 7em; + height: 100%; +} + +body { + display: flex; + flex-direction: column; + margin: 0; + min-height: 100%; + font-size: 1.25em; + font-family: LatoLatin, Lato, Roboto, Noto, sans-serif; + text-align: justify; +} + +header, main, footer { + display: flex; + flex-direction: column; + align-items: center; +} + +main { + flex-grow: 1; +} + +.header-contact { + background: #DD8033; +} + +.header-nav, footer { + background: #65bb50; +} + +.header-contact { + width: 100%; +} + +.header-content, .main-content, .footer-content { + max-width: 1000px; + width: 100%; +} + +.header-content { + display: flex; + flex-direction: row; + align-items: center; + margin: 0 auto; + padding: 0.2em 0.3em; +} + +.header-nav .header-content { + gap: 0.8em; + font-size: 1.2em; +} + +.header-contact .header-content { + gap: 1.2em; + line-height: 1.6em; + justify-content: center; +} + +.header-right { + flex-grow: 1; + text-align: right; + margin-right: 10px; + display: flex; + flex-direction: row; + justify-content: right; +} + +.header-spacer { + flex-grow: 1; + min-width: 1em; +} + +.header-title { + font-size: 1.3em; + display: inline-flex; + align-items: center; + font-weight: 600; + margin: 0.2em 0; +} + +.header-nav { + width: 100%; + position: sticky; + z-index: 100; + top: 0; + box-shadow: 0px 3px 3px rgba(0, 0, 0, 0.15); +} + +.header-contact { + width: 100%; +} + +.text-icon { + height: 1em; + width: auto; + vertical-align: middle; +} + +a { + text-decoration: none; +} + +a, a:visited, a:hover, a:focus { + color: inherit; +} + +a:hover { + text-decoration: underline; +} + +.header-title:hover, .service-link:hover, .social-media:hover { + text-decoration: none; +} + +.service-icon:hover { + filter: drop-shadow( 0px 0px 3px rgba(0, 0, 0, .7)); +} + +.logo-img { + height: 2em; + width: auto; + margin-right: 0.3em; +} + +.lang-item { + margin: 0 0.2em; +} + +h1, h2, h3, h4 { + text-align: center; +} + +.intro-text { + margin-bottom: 2em; + text-align: center; + font-size: 1.2em; + font-weight: 500; +} + +.overview { + display: flex; + flex-direction: row; + width: 100%; + justify-content: space-between; + text-align: center; +} + +.overview > * { + width: 22%; +} + +.service-link { + display: flex; + flex-direction: column; +} + +.service-icon { + width: 100%; + height: auto; +} + +.service-name { + font-weight: bold; + font-size: 1.2em; + margin-bottom: 0.4em; + margin-top: 0.9em; +} + +.service:hover > .service-inner { + height: 2.5em; +} + +section { + background-color: #FFFFFF; + width: 100%; +} + +section:nth-child(even) { + background-color: #F5F5F5; +} + +.section-inner { + max-width: 1000px; + width: 100%; + margin: auto; + padding: 2.5em 0.5em; +} + +.section-inner > *:first-child { + margin-top: 0; +} + +.split-section { + display: flex; + flex-direction: row; + gap: 1.5em; +} + +.split-section-reverse { + flex-direction: row-reverse; +} + +.split-section-text { + width: 70%; +} + +.split-section-text > *:first-child { + margin-top: 0; +} + +.split-section-text > *:last-child { + margin-bottom: 0; +} + +.split-section-img { + width: 30%; + display: flex; + flex-direction: column; + justify-content: center; +} + +.split-section-img a { + max-height: 100%; +} + +.split-section-img img { + width: 100%; + height: auto; + display: block; +} + +footer { + padding: 2em 0.5em; + box-shadow: 0px -3px 3px rgba(0, 0, 0, 0.15); +} + +.footer-content { + display: flex; + flex-direction: row; + gap: 10px; +} + +.footer-content > * { + width: 30%; + flex-grow: 1; + text-align: center; +} + +footer h2 { + margin-top: 0; +} + +.footer-sep { + width: 0; + flex-grow: 0; + border-left: 0.2em solid #F5F5F5; +} + +.social-media { + display: inline-flex; + margin: 0 0.2em; +} + +.social-icon { + height: 3em; + width: auto; +} + +.credits { + font-size: 0.85em; +} + +.privacy h2, .privacy h3, .privacy h3 { + text-align: initial; +} + +#map { + height: 400px; + z-index: 1; +} + +.zone-heading { + text-align: left; + margin-top: 1em; + margin-bottom: 0.3em; +} + +.legend { + width: fit-content; + margin: 0.3em auto; +} + +.legend-item { + display: inline-flex; + margin: 0 0.3em; + align-items: center; +} + +.legend-square { + display: inline-block; + height: 1em; + width: 1em; + margin-right: 0.2em; + border-radius: 0.2em; + border: 1px solid #868686; +} + +.green { + background-color: #3ef06e; +} + +.blue { + background-color: #3388ff; +} + +.orange { + background-color: #ffeb0a; +} + +@media only screen and (max-width:768px) { + .header-content { + flex-direction: column; + align-items: start; + } + + .header-nav .header-content { + gap: 0.15em; + } + + .header-contact .header-content { + gap: initial; + } + + .nav-img { + height: 1.5em; + } + + .overview { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 1em; + } + + .split-section { + flex-direction: column; + gap: 2em; + } + + .split-section-text { + width: auto; + } + + .split-section-reverse { + flex-direction: column; + } + + .split-section-img { + height: 11em; + width: auto; + flex-direction: row; + } + + .split-section-img a { + height: 100%; + } + + .split-section-img img { + height: 100%; + width: auto; + } + + .footer-content { + flex-direction: column; + } + + .footer-content > * { + width: initial; + } + + .overview > * { + width: initial; + } +} diff --git a/templates/_base.html b/templates/_base.html new file mode 100644 index 0000000..42e884d --- /dev/null +++ b/templates/_base.html @@ -0,0 +1,89 @@ + + + + + + {% block title %}ComputerSchaf{% endblock %} + + + + + {% block assets %}{% endblock %} + + + + +
+ +
+ {% block main %} +
+
+ {% endblock %} + + + diff --git a/templates/bedingungen.html b/templates/bedingungen.html new file mode 100644 index 0000000..d7f91ca --- /dev/null +++ b/templates/bedingungen.html @@ -0,0 +1,106 @@ +{% extends "_base.html" %} +{% block title %}Bedingungen - ComputerSchaf{% endblock %} + +{% block assets %} + + + +{% endblock %} + +{% block main %} +
+

Bedingungen

+
+
+

Dienstleistungen

+

+ Reparatur, Datenrettung, Beratung/Hilfe, Verleih von Laptops +

+

+ Stundensatz Reparatur/Datenrettung: € 60,-
+ Stundensatz Beratung/Hilfe: € 50,-
+ Die Verrechnung erfolgt generell Viertelstündlich, jedoch wird mindestens eine halbe Stunde in Rechnung gestellt.
+ Eventueller Materialaufwand separat zu zahlen - Informationen diesbezüglich werden vor Reparaturen bekannt gegeben +

+
+
+
+
+

Verleih

+

+ Benötigen Sie sofort einen funktionstüchtigen Laptop mit allen geläufigen Office-Programmen? Ich biete Ihnen sowohl Windows-Laptops als auch MacBooks zu Verleih an. Alle Laptops werden mit passendem Ladegerät verliehen. +

+

+ Lenovo Thinkpad:
+ Over-Night: € 50,-
+ Woche: € 90,-
+ Monat: € 200,- +

+

+ Zubehör:
+ DVD-Brenner
+ Maus (Wireless)
+ Diverse Videokabel +

+
+
+
+
+

Rückgabebedingungen

+

+ Rückgabe hat spätestens bis zum vertraglich festgehaltenen Datum um 18 Uhr zu erfolgen. + Die Rückgabe gilt nur dann als vollbracht, wenn der Laptop inklusive allem verliehenen Zubehör (z.B. Ladegeräte, DVD-Brenner, etc.) retourniert worden ist. Für verspätete Rückgaben wird eine Verspätungsgebühr verrechnet. +

+

+ Für die Rückgabe per Rückversand, hat der Versand spätestens am Rückgabetag in einem geeigneten Paket zu erfolgen. Hierfür wird Ihnen ein Rücksendeetikett per Mail zur Verfügung gestellt. Es ist darauf zu achten, dass der Laptop entsprechend für den Versand gepolstert wird, dafür benötigtes Verpackungsmaterial ist vom Kunden zu stellen. Für die Versandrückgabe inklusive Versandetikett wird ein Unkostenpreis von € 10,- verrechnet.
+ Abholung von Leihgeräten bei Ihnen Vorort ist nach zu vereinbarenden Bedingungen möglich.
+ Persönliche Rückgabe am Firmenstandort ist ohne Mehrkosten nach telefonischer Anmeldung möglich. +

+
+
+
+
+

Anfahrtskosten

+
+
+ + Zone A + + + Zone B + + + Zone C + +
+

+

Zone A

+

+ Innsbruck: Arzl, Olympisches Dorf, Mühlau1 / Rum, Neu-Rum, Thaur
+ Anfahrtskosten: € 10,- – Erstmalige Anfahrt kostenlos! +

+

Zone B

+

+ Innsbruck: Saggen, Mariahilf-St. Nikolaus, Dreiheiligen, Innenstadt, Reichenau / Hall in Tirol, Absam
+ Anfahrtkosten: € 25,- +

+

Zone C

+

+ Innsbruck: Hötting-Mitte1, Pradl, Wilten2
+ Anfahrtkosten: € 40,- +

+ 1 Ausgenommen Hungerburg
+ 2 Ausgenommen Mentlberg und Sieglanger
+

+
+
+
+
+

Zahlung

+

+ Die Zahlung erfolgt auf Rechnung oder in Bar. Für die Zahlung per Rechnung gibt es eine generelle Zahlungsfrist von 21 Tagen ab Rechnungsdatum, bitte geben Sie im Feld "Zahlungsreferenz" die auf der Rechnung angeführte Referenznummer an. Ich behalte mir das Recht vor, im Falle des Nichtbegleichens der Rechnung, nach einmaligen Senden einer Mahnung Mahngebühren einzuheben. +

+
+
+
+{% endblock %} diff --git a/templates/datenschutz.html b/templates/datenschutz.html new file mode 100644 index 0000000..f14b50f --- /dev/null +++ b/templates/datenschutz.html @@ -0,0 +1,47 @@ +{% extends "_base.html" %} +{% block title %}Datenschutz - ComputerSchaf{% endblock %} + +{% block main %} +
+

Datenschutz

+
+
+

1 Ihre Daten auf dieser Webseite

+

Auf der Webseite ComputerSchaf.at werden weder durch ComputerSchaf e.U. (im Nachfolgenden: das Unternehmen) noch durch Dritte persönliche Daten erhoben. Für seitenexterne Inhalte z.B. Social Media-Präsenzen des Unternehmens ist die Datenschutzbestimmung des jeweiligen Mediums heranzuziehen.

+

2 Datenerhebung und Speicherung

+

2.1 Erhebung ihrer Daten und Aufnahme in die Kundendatenbank

+

Im Interesse der guten Abwicklung von Geschäftsbeziehungen werden folgende Daten nach Erstkontakt (bzw. Neukontakt nach Löschung) bei Ihnen erfragt und in die Kundendatenbank aufgenommen:

+
    +
  • Vor- und Nachname
  • +
  • Adresse
  • +
  • E-Mail-Adresse
  • +
  • Telefonnummer
  • +
+

Zudem wird Ihnen eine für Abrechnungszwecke verwendete Kundennummer zugewiesen. Diese bleibt zwischen Geschäftskontakten gleich.

+

Zusätzlich zu den oben genannten Daten können bedarfsweise zusätzliche Daten erhoben werden, dies kann gegebenenfalls auch nach dem Erstkontakt stattfinden (Siehe Punkt 2.1.1).

+

2.1.1 Zusätzliche personenbezogene Daten

+

Sollte dies erforderlich sein, kann das Unternehmen Sie bezüglich weiterer benötigter personenbezogene Daten kontaktieren. Bitte beachten Sie, dass solche Prozesse ausschließlich über die in den Kontaktdaten des Unternehmens vermerkten Kommunikationskanälen passiert. Sollten Sie sich unsicher sein, ob eine solche Anfrage legitim ist, antworten Sie nicht auf diese und kontaktieren das Unternehmen stattdessen direkt.

+

2.2 Löschsperre während bestehenden Auftrag

+

Im Falle der Beauftragung des Unternehmens zur Erfüllung einer Dienstleistung, stimmen Sie zu, dass Ihre Daten aus der Datenbank erst dann gelöscht werden können, nachdem die Dienstleistung vollbracht und in vollen Umfang vergütet wurde. Das selbiges gilt für rechtliche Streitigkeit. Ihr Recht bezüglich Berichtigung und Auskunft bleibt davon unberührt. Die Verwendung dieser Daten wird in Punkt 2.3 erläutert.

+

2.3 Nutzung ihrer Daten durch das Unternehmen

+

Für Kontakt, Anfahrt, Lieferung Rechnungsstellung werden die Daten aus der Kundendatenbank verwendet. Auch im Falle der Notwendigkeit eines Rechtsverfahrens wird Ihre angegebene Adresse als Zustelladresse verwendet. Ihre Daten werden generell nicht zu Werbezwecken verwendet, es sei denn es wird explizit zugestimmt.

+

2.4 Weitergabe der Daten an Dritte

+

Das Unternehmen gibt Ihre Daten nicht an Dritte weiter. Sollte dies erforderlich seinen, werden Sie vorhin kontaktiert und um Erlaubnis dieser Weitergabe gebeten. Das Unternehmen gibt nie persönliche Daten ohne Ihre Zustimmung weiter. + Eine Ausnahme hier von stellt die Weitergabe von Daten an Behörden da, gegenüber denen das Unternehmen Auskunftspflichtig ist. Insofern dies nicht behördlich untersagt wird, werden Sie darüber informiert.

+
+
+

DSGVO-Bestimmungen

+
+
+

Ihre Rechte

+

Entsprechend Datenschutzgrundsatzverordnung (im Nachfolgenden: DSGVO) haben Sie das Recht auf Auskunft, Berichtigung und Löschung der persönlichen Daten. Im Falle einer stattgefundenen Datenweitergabe können Sie zudem über das Unternehmen die Löschung (Ausnahme hierzu siehe Punkt 2.2) ihrer personenbezogenen Daten bei den Empfängern dieser beantragen. + Ausgenommen von dem Recht auf Löschung sind adressierte Rechnungen, insofern diese noch nicht mehr als sieben Jahre zurückliegen, da eine gesetzliche Aufbewahrungsverpflichtung besteht (Siehe Bundesabgabenordnung § 132).

+

Datensicherheit

+

Gemäß DSGVO werden Ihre personenbezogenen sowie sonstige Daten, die Speicherung im Unternehmenssytem bedürfen, auf gesicherten, Firmeneigenen Servern gespeichert und gegebenenfalls über geschützte Remoteverbindungen aufgerufen. + Datenträger, mit welchen das Unternehmen zur Datenrettung (oder ähnliche Dienstleistungen) beauftragt wurde werden nur im Falle der aktiven Bearbeitung an Computersysteme angeschlossen und andernfalls sicher verwahrt. + Sollte es im Unternehmen zu einem Datendiebstahl kommen, von denen Ihre Daten betroffenen sein könnten, werden Sie unverzüglich darüber informiert. +

+
+
+
+{%endblock%} diff --git a/templates/impressum.html b/templates/impressum.html new file mode 100644 index 0000000..b8a92d0 --- /dev/null +++ b/templates/impressum.html @@ -0,0 +1,46 @@ +{% extends "_base.html" %} +{% block title %}Impressum - ComputerSchaf{% endblock %} + +{% block main %} +
+

Impressum

+
+
+

+ ComputerSchaf
+ Inhaberin Lucia Zehentner BA
+
+ Eingetragenes Einzelunternehmen
+
+ IT-Dienstleistungen
+
+ UID-Nr: -
+ (Unecht umsatzsteuerbefreit gemäß Kleinunternehmerregelung)
+ FN: 594429k
+ FB-Gericht: Innsbruck
+ Sitz: 6063 Rum, Ulmenstraße 65/Top 1
+ Tel: +43 664 1240214
+ E-Mail: office@ComputerSchaf.at
+
+ Mitglied der WKÖ und der WK Tirol
+
+ Gewerbeordnung: www.ris.bka.gv.at
+
+ Zuständige Behörde: BH Innsbruck-Land +

+

+ Verbraucher haben die Möglichkeit, + Beschwerden an die Online- + Streitbeilegungsplattform der EU zu + richten: http://ec.europa.eu/odr. + Sie können allfällige Beschwerde auch an + die oben angegebene E-Mail-Adresse + richten. +

+

+ Blattlinie: Information über die Tätigkeiten und Dienstleistungen der ComputerSchaf e.U. +

+
+
+
+{% endblock %} diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..566a900 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,154 @@ +{% extends "_base.html" %} +{% block main %} +
+
+
+
+ ComputerSchaf ist Ihr Rundum-Computerservice aus Rum. Gerne komme ich in Innsbruck, Rum, + Thaur oder Hall persönlich bei Ihnen vorbei und erarbeite maßgeschneiderte Lösungen für Sie. + Ich biete Ihnen folgende Dienstleistungen: +
+
+
+ + + Hilfe & Beratung + + + Ich helfe Ihnen bei PC Problemen und berate Sie bei Neuanschafungen. + +
+
+ + + Reparatur + + + Ich repariere elektronische Geräte. + +
+
+ + + Datenrettung + + + Ich rette Ihre Daten von defekten Geräten. + +
+
+ + + Verleih + + + Während der Reparatur bekommen Sie ein Leihgerät zur Verfügung gestellt. + +
+
+
+
+
+
+

Hilfe & Beratung

+ Wieso ist mein Computer so langsam? Wie aktualisiere ich mein Betriebssystem? + Welcher Laptop entspricht meinen Bedürfnissen? + Für diese und viele andere Fragen stehe ich Ihnen mit Rat und Tat zur Seite. +
+
+
+
+

Reparatur

+
+
+

+ Egal ob ein DVD-Laufwerk sich nicht mehr öffnet, ein Lüfter laute Geräusche macht oder + der Computer gar nicht mehr hochfährt – ich übernehme für Sie die Diagnose des Problems + und erarbeite eine Lösung. Die Erstdiagnose erfolgt direkt bei Ihnen vor Ort – oftmals + kann ich Ihren Rechner direkt reparieren und Sie können diesen dann innerhalb kurzer + Zeit wieder verwenden. +

+

+ Sollte das Problem spezifische Ersatzteile, ein nicht-mobiles Werkzeug oder eine + detailliertere Diagnose benötigen, nehme ich Ihr Gerät mit und repariere es + baldmöglichst – beachten Sie hierbei auch die Möglichkeit ein Leihgerät in Anspruch zu + nehmen. Je nach Vereinbarung sende ich Ihnen das Gerät nach erfolgter Reparatur + postalisch zu oder bringe es Ihnen persönlich vorbei. +

+

+ Selbstverständlich gilt: Wenn sich eine vereinbarte Reparatur als nicht umsetzbar + herausstellt, ist diese auch nicht zu zahlen. +

+
+
+ + Laptop zur Reparatur geöffnet auf einer Arbeitsunterlage + +
+
+
+
+
+
+

Datenrettung

+
+
+

+ Ist ihnen ein wichtiges Dokument verloren gegangen oder möchten Sie Daten von einen + kaputten Computer auf ein Neugerät mitnehmen? +

+

+ Hier kann ich helfen! Mittels Softwarelösungen stelle ich Dokumente wieder her, durch + Ausbau der Festplatte können selbst von Computern mit Totalschaden oftmals Daten + gerettet werden. +

+

+ Bitte beachten Sie, dass der Erfolg einer Datenrettung auch von Ihnen abhängt: + Speichern Sie sobald Sie den Verlust einer Datei bemerken möglichst keine Daten mehr + auf das betroffene Laufwerk und schließen Sie alle Programme. Wenn Sie gerade an etwas + arbeiten, speichern Sie dies auf einen USB-Stick oder eine externe Festplatte. +

+

+ Gerne führe ich auch Backups für Sie durch und konfiguriere Ihren Computer so, dass + zukünftige Datenverluste unwahrscheinlicher sind. +

+
+
+ + Geöffnetes Gehäuse eines SSD Datenträgers + +
+
+
+
+
+
+

Verleih

+

+ Gerne können Sie sich einen Laptop oder ein MacBook leihen. Bei diesen Computern + handelt es sich um zeitgemäße Office-Geräte mit aktuellen Betriebsystem, frisch für + Sie aufgesetzt. Das heißt sie können Software die Sie für Arbeit, Uni oder Privat + verwenden auf den Leihcomputer installieren – selbstverständlich helfe ich Ihnen auch + hierbei. +

+

+ Wenn ihr eigener Laptop zur Diagnose und Reparatur von mir mitgenommen werden muss, + erhalten Sie das Leihgerät für bis zu sieben Tage kostenlos. Sie können die Geräte + selbstverständlich auch ohne Reparaturdienste in Anspruch zu nehmen leihen. +

+
+
+
+{% endblock %}