2
0
mirror of https://github.com/offen/website.git synced 2024-12-23 05:20:21 +01:00

Merge pull request #77 from offen/merge-homepage

Merge homepage
This commit is contained in:
Frederik Ring 2019-07-26 13:14:41 +02:00 committed by GitHub
commit 9f3171597c
46 changed files with 93492 additions and 3 deletions

View File

@ -327,7 +327,6 @@ jobs:
paths:
- ~/offen/packages/node_modules
key: offen-packages-{{ checksum "package.json" }}
- restore_cache:
key: offen-auditorium-{{ checksum "auditorium/package.json" }}
- run:
@ -363,6 +362,56 @@ jobs:
$(npm bin)/sls deploy --config vault/serverless.yml
$(npm bin)/sls client deploy --config vault/serverless.yml --no-confirm
deploy_homepage:
docker:
- image: circleci/python:3.6
working_directory: ~/offen/homepage
environment:
- SOURCE_BRANCH: master
- TARGET_BRANCH: gh-pages
steps:
- checkout:
path: ~/offen
- restore_cache:
key: offen-homepage-{{ checksum "requirements.txt" }}
- run:
name: Install dependencies
command: |
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
- save_cache:
paths:
- ~/offen/homepage/venv
key: offen-homepage-{{ checksum "requirements.txt" }}
- run:
name: Deploy
command: |
source venv/bin/activate
git config --global user.email $GH_EMAIL
git config --global user.name $GH_NAME
git clone $CIRCLE_REPOSITORY_URL out
cd out
git checkout $TARGET_BRANCH || git checkout --orphan $TARGET_BRANCH
git rm -rf .
cd ..
make publish
cp -a output/. out/.
mkdir -p out/.circleci && cp -a .circleci/. out/.circleci/.
cp CNAME out/CNAME
cd out
git add -A
git commit -m "Automated deployment to GitHub Pages: ${CIRCLE_SHA1}" --allow-empty
git push origin $TARGET_BRANCH
workflows:
version: 2
test_build_deploy:
@ -381,3 +430,5 @@ workflows:
<<: *deploy_preconditions
- deploy_python:
<<: *deploy_preconditions
- deploy_homepage:
<<: *deploy_preconditions

View File

@ -2,7 +2,7 @@ help:
@echo " setup"
@echo " Build the containers and install dependencies."
@echo " bootstrap"
@echo " Create a KMS key and initialize the database."
@echo " Set up keys and seed databases."
@echo " IMPORTANT: this wipes any existing data in your local database."
setup:

View File

@ -37,7 +37,19 @@ You can test your setup by starting the application:
$ docker-compose up
```
which should enable you to access <http://localhost:8080/status> seeing a successful response.
which should enable you to access <http://localhost:9955/> and use the `auditorium`
### Developing the homepage
In order to ease sharing of styles, the <https://www.offen.dev> site is also part of this repository. It runs in a separate development environment:
```
$ cd homepage
$ make setup
$ docker-compose up
```
A live reloading development server will run on <http://localhost:8000>.
### License

110
homepage/.gitignore vendored Normal file
View File

@ -0,0 +1,110 @@
# built pelican site
output/
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# pyenv
.python-version
# celery beat schedule file
celerybeat-schedule
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
test.py
*.json

1
homepage/CNAME Normal file
View File

@ -0,0 +1 @@
www.offen.dev

78
homepage/Makefile Normal file
View File

@ -0,0 +1,78 @@
PY?=python3
PELICAN?=pelican
PELICANOPTS=
BASEDIR=$(CURDIR)
INPUTDIR=$(BASEDIR)/content
OUTPUTDIR=$(BASEDIR)/output
CONFFILE=$(BASEDIR)/pelicanconf.py
PUBLISHCONF=$(BASEDIR)/publishconf.py
DEBUG ?= 0
ifeq ($(DEBUG), 1)
PELICANOPTS += -D
endif
RELATIVE ?= 0
ifeq ($(RELATIVE), 1)
PELICANOPTS += --relative-urls
endif
help:
@echo 'Makefile for a pelican Web site '
@echo ' '
@echo 'Usage: '
@echo ' make html (re)generate the web site '
@echo ' make clean remove the generated files '
@echo ' make regenerate regenerate files upon modification '
@echo ' make publish generate using production settings '
@echo ' make serve [PORT=8000] serve site at http://localhost:8000'
@echo ' make serve-global [SERVER=0.0.0.0] serve (as root) to $(SERVER):80 '
@echo ' make devserver [PORT=8000] serve and regenerate together '
@echo ' make ssh_upload upload the web site via SSH '
@echo ' make rsync_upload upload the web site via rsync+ssh '
@echo ' '
@echo 'Set the DEBUG variable to 1 to enable debugging, e.g. make DEBUG=1 html '
@echo 'Set the RELATIVE variable to 1 to enable relative urls '
@echo ' '
html:
$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
clean:
[ ! -d $(OUTPUTDIR) ] || rm -rf $(OUTPUTDIR)
regenerate:
$(PELICAN) -r $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
serve:
ifdef PORT
$(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT)
else
$(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
endif
serve-global:
ifdef SERVER
$(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT) -b $(SERVER)
else
$(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT) -b 0.0.0.0
endif
devserver:
ifdef PORT
$(PELICAN) -lr $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT)
else
$(PELICAN) -lr $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
endif
publish:
$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(PUBLISHCONF) $(PELICANOPTS)
setup:
@docker-compose run homepage pip install --user -r requirements.txt
.PHONY: html help clean regenerate serve serve-global devserver stopserver publish

22
homepage/README.md Normal file
View File

@ -0,0 +1,22 @@
# offen.dev
> Organization homepage
The site is using Pelican
## Site development
Create a Python virtual environment using the tools of your choice and install the requirements. E.g.:
```
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
```
Serve the site locally on http://localhost:8000:
```
make devserver
```
### License
MIT © [Frederik Ring](https://www.frederikring.com), [Hendrik Niefeld](http://niefeld.com/)

View File

@ -0,0 +1,80 @@
Title: Deep dive | offen
description: offen is a free and open source analytics software for websites and web applications that allows respectful handling of data.
save_as: deep-dive/index.html
href: /deep-dive/
### What is this thing called "my data" and why does seemingly everyone want to get hold of it?
It has a ring, gives a slight spine-chilling sensation and generates a whole lot of clicks: consumer magazines like German "Computer Bild" caution about "Google espionage" [^1] just like the internet has countless tutorials on turning off numerous "data leeches" [^2]. Interestingly, diving into these realms will have you accidentally catching the next toolbar, malware infection or even worse [^3].
[^1]: Gegen Google-Spionage wehren <https://www.computerbild.de/artikel/cb-Ratgeber-Kurse-Wissen-Was-weiss-Google-ueber-Sie-2799009.html>
[^2]: Datenkrake Windows 10: So schalten Sie auff&auml;llige Funktionen ab <https://praxistipps.chip.de/datenkrake-windows-10-so-schalten-sie-auffaellige-funktionen-ab_99652>
[^3]: Pick a Download, Any Download! <https://blog.malwarebytes.com/cybercrime/2012/10/pick-a-download-any-download/>
Yet, many internet users still don't know what really is happening to their data. Public relation activities trying to calm the public - as undertaken by Facebook for example [^4] - end up being rather disturbing instead of creating transparency, or adding real value to the public debate. Denelle Dixon, COO of Mozilla, just publicly warned the European Commission [^5] about the dangerous effects an opaque apparatus such as Facebook can have on society. Updated Terms and Conditions only parenthetically mention that newly created Google accounts will now hand over real names to third parties for advertising purposes [^6].
[^4]: Sometimes People Assume Facebook Does Things It Doesn't Do <https://www.zeit.de/digital/datenschutz/2019-01/social-media-facebook-mark-zuckerberg-ads-privacy-business-model-transparency>
[^5]: Mozilla Raises Concerns Over Facebook's Lack of Transparency <https://blog.mozilla.org/blog/2019/01/31/mozilla-raises-concerns-over-facebooks-lack-of-transparency/>
[^6]: Google Has Quietly Dropped Ban on Personally Identifiable Web Tracking <https://www.propublica.org/article/google-has-quietly-dropped-ban-on-personally-identifiable-web-tracking>
As a regular user of the internet, are you really being spied upon? *What exactly is "my data"?* Can a website operator see my name when I'm using it? Does it know about my Email address or my phone number? Does it know which other websites I have been visiting, which search query led me to the site in the first place, what I have recently purchased online, or who I am acquainted with?
> If you have something that you don't want anyone to know, maybe you shouldn't be doing it in the first place. [^7]
>
> Eric Schmidt (at this time CEO of Google), 2009
[^7]: Google CEO Eric Schmidt Dismisses the Importance of Privacy <https://www.eff.org/de/deeplinks/2009/12/google-ceo-eric-schmidt-dismisses-privacy>
We would like to turn the tables on this much quoted statement and apply it to the operators of services and websites instead of their users. The analytics software __offen__ *transparently and uncompromisingly discloses what data is being collected and what it is being used for* to the users.
---
### For users
Visiting a website or using a web application that utilizes __offen__, the user gains access to and ownership of the usage data collected. The cookie used by __offen__ allows viewing all of the associated metrics, the users can *assert themselves what is being collected and what isn't*. Data is being displayed in an accessible and articulate manner and each metric comes with explanations about its usage, relevance and possible privacy implications.
Users can choose to export their data, delete it selectively or in its entirety, or simply opt out of any data collection.
### For operators
Operators of small and mid-sized websites and web applications are faced with growing challenges not only since the introduction of GDPR: how do they gain insights into what users are interested in and which of the features offered are being used? Is it possible to showcase *transparent and considerate handling of user data* - i.e. neither being spy or data leech - without surrendering and abandoning usage metrics altogether?
Choosing __offen__, websites and web applications obtain a free, open and robust tool for collecting and analyzing relevant usage data. The insights gained enable continuous improvement of these services while still respecting their user's privacy. *Opening up the data to the users does not constitute a disadvantage, but strengthens the relationship with them* by being entirely transparent.
### Part of the public debate
Transparently handling usage data in the open creates mutual trust while still enabling operators to collect needed usage statistics. __offen__ is designed to be a mediating agent only, and does not side with either users or operators. Sharing knowledge between the two parties creates opportunities for an *open and fact based discussion* about user data and privacy. Users gain insights into what data is being collected and what these data points are used for, just like they learn about which kind of data is not part of the collection. They are enabled to reach self-determined decisions about what they consent with and what they disagree with when it comes to privacy on the web, also in other contexts than analytics.
We want to exemplify that it is time to depart the age of "data capitalism" [^8] and to create *technologies and infrastructure that are transparent, open and oriented towards the common good*
[^8]: Vielleicht wird in Zukunft auch mit Gewalt um Daten gek&auml;mpft <https://www.zeit.de/digital/datenschutz/2019-01/datenschutz-nick-couldry-datenkolonialismus-datenhandel/komplettansicht>
---
### offen as a technology
At runtime, __offen__ is just mediating exchange between users and operators. Usage data is collected in conformance to GDPR and with the concept of "Datensparsamkeit" [^9] in mind. All user data is encrypted in the browser so that it can only be accessed by the users themselves or the matching operator. While being collected in the context of a website or application, neither operators nor third party scripts have any possibilty to access the usage data. __offen__ itself doesn't have any way of decrypting, processing or even selling the gathered data at any point.
[^9]: Datensparsamkeit <https://martinfowler.com/bliki/Datensparsamkeit.html>
The software itself, as well as *all the used tools are open source*, [project planning][pivotal-tracker]{: target="_blank"} and [technical specification][rfcs-repo]{: target="_blank"} take place in the open and actively solicit feedback from the general public. The infrastructure the service is deployed to is split into three isolated environments in order to minimize possible attack vectors.
[pivotal-tracker]: https://www.pivotaltracker.com/n/projects/2334535
[rfcs-repo]: https://github.com/offen/rfcs
Users and operators are given intuitive and accessibility-focused tools for analyzing and managing their data in the form of a web application and a browser extension. Operators deploy the service using a simple script tag. More sophisticated use cases are covered by a dedicated SDK.
---
### Modus Operandi
Developing and running __offen__ can only work out when it is entirely *free of any kind of economic constraints or goals* and its only objective is *contributing to the common good*. Development of a prototype is reliant on public grants or similar funding sources. Long term operation of the software, just like its maintenance and continued development, is tied to resources granted by foundations or being donated by the public.
### Status Quo
__offen__ is created by [Frederik Ring][frederik-ring]{: target="_blank"} and [Hendrik Niefeld][hendrik-niefeld]{: target="_blank"} and is currently being conceptually designed, both as a product as well as as a software.
We are happy about any kind of feedback. From *criticism and praise to contributions or support*, everything is welcome.
[hendrik-niefeld]: http://niefeld.com/
[frederik-ring]: https://www.frederikring.com/

View File

@ -0,0 +1,12 @@
Title: Transparent web analytics | offen
description: offen is a free and open source analytics software for websites and web applications that allows respectful handling of data.
save_as: index.html
href: /
__offen__ is a web analytics software that gives users access to the data they are generating. Not only operators running sites or applications are given able to use the analytics tools, but also *the users themselves are granted access to and ownership of their data*.
Usage metrics come with explanations about their meaning, relevance, usage and possible privacy implications. __offen__ also details *which kind of data is not collected*. All data can be deleted selectively or in its entirety by the users, or the collection can be disabled altogether.
__offen__ treats both users and operators as parties of equal importance. Users can expect full transparency and are encouraged to make *autonomous and informed decisions regarding the use of their data*. Operators are enabled to gain insights while respecting their users' privacy and their data.
__offen__ is currently in the early stages of development and is applying for funds to sustain its development. An early alpha version is running on this site: you can visit the [auditorium](https://auditorium-alpha.offen.dev) to access your data.

View File

@ -0,0 +1,11 @@
Title: Opt-out | offen
description: offen is a free and open source analytics software for websites and web applications that allows respectful handling of data.
save_as: opt-out/index.html
### You are opted out
This will prevent __offen__ from aggregating the actions you have taken on participating websites.
Operators now cannot draw any conclusions from your actions via __offen__. At the same time, however, they *cannot create a better experience* for you and other users.
<img style="-webkit-user-select: none; display:none;" src="https://server-alpha.offen.dev/opt-out">

View File

@ -0,0 +1,32 @@
Title: Status | offen
description: offen is a free and open source analytics software for websites and web applications that allows respectful handling of data.
save_as: status/index.html
href: /status/
### Current status
#### July 2019
We have deployed an alpha version of __offen__ that we are currently testing on a few select sites. Usage data is collected and can be accessed by both users and site operators. Users can opt out and delete their data at any time. You can *follow the development at [github.com/offen/offen](https://github.com/offen/offen)*
---
### Next up
#### Tech
The next big task from a technical perspective is enabling account creation by third parties. This will allow us to open up a beta version of to select operators and collect their - as well as their user's - feedback.
#### Explainer
Once the user interface starts to get less volatile at the end of our alpha test, we will start to add explanations to all of the metrics as well as create additional content to educate users about the privacy measures we are taking and about their implications.
#### Milieu
Currently, we are researching the milieu on the topics of privacy and web analytics software in more detail. The aim is to create a selection of opinion leaders, bloggers and journalists who will be invited to test and evaluate.
#### Story
Our product story is based on three key questions. What makes __offen__ stand out from other offerings in the field? What is the motivation for site operators to implement an open source analytics software that limits the amount of data collected? How can we raise or amplify users' awareness for a respectful handling of their data?
#### Publicity
This product story is the starting point for publicty efforts that will start as soon as a beta version is available. They include own blog posts, forum marketing as well as SEO measures.

View File

@ -0,0 +1,17 @@
version: '3'
services:
homepage:
build:
context: '.'
dockerfile: ./../Dockerfile.python
working_dir: /offen/homepage
volumes:
- ..:/offen
- homepagedeps:/root/.local
command: make devserver
ports:
- 8000:8000
volumes:
homepagedeps:

44
homepage/pelicanconf.py Normal file
View File

@ -0,0 +1,44 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*- #
from __future__ import unicode_literals
import logging
# If your site is available via HTTPS, make sure SITEURL begins with https://
#SITEURL = 'https://www.offen.dev'
RELATIVE_URLS = False
AUTHOR = 'offen'
SITENAME = 'offen'
SITEURL = 'https://www.offen.dev'
PATH = 'content'
TIMEZONE = 'Europe/Berlin'
DEFAULT_LANG = 'en'
# Feed generation is usually not desired when developing
FEED_ALL_ATOM = None
CATEGORY_FEED_ATOM = None
TRANSLATION_FEED_ATOM = None
AUTHOR_FEED_ATOM = None
AUTHOR_FEED_RSS = None
# pagination
DEFAULT_PAGINATION = False
THEME = './theme'
# Delete the output directory before generating new files.
DELETE_OUTPUT_DIRECTORY = True
# dont create following standard pages
AUTHORS_SAVE_AS = None
ARCHIVES_SAVE_AS = None
CATEGORIES_SAVE_AS = None
TAGS_SAVE_AS = None
# keep this for access to page variable
DIRECT_TEMPLATES = []
GITHUB_ORG = 'https://github.com/offen'
CONTACT_EMAIL = 'mail@offen.dev'
PATREON_URL = 'https://www.patreon.com/bePatron?u=21484999'

27
homepage/publishconf.py Normal file
View File

@ -0,0 +1,27 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*- #
from __future__ import unicode_literals
# This file is only used if you use `make publish` or
# explicitly specify it as your config file.
import os
import sys
sys.path.append(os.curdir)
from pelicanconf import *
# If your site is available via HTTPS, make sure SITEURL begins with https://
SITEURL = 'https://www.offen.dev'
RELATIVE_URLS = False
FEED_ALL_ATOM = 'feeds/all.atom.xml'
CATEGORY_FEED_ATOM = 'feeds/{slug}.atom.xml'
DELETE_OUTPUT_DIRECTORY = True
# Following items are often useful when publishing
#DISQUS_SITENAME = ""
#GOOGLE_ANALYTICS = ""
OFFEN_ACCOUNT_ID = "5ec8345a-2a45-4eb9-92e5-8d9e5684db58"

View File

@ -0,0 +1,2 @@
pelican==4.0.1
markdown==3.1.1

77
homepage/tasks.py Normal file
View File

@ -0,0 +1,77 @@
# -*- coding: utf-8 -*-
import os
import shutil
import sys
import datetime
from invoke import task
from invoke.util import cd
from pelican.server import ComplexHTTPRequestHandler, RootedHTTPServer
CONFIG = {
# Local path configuration (can be absolute or relative to tasks.py)
'deploy_path': 'output',
# Port for `serve`
'port': 8000,
}
@task
def clean(c):
"""Remove generated files"""
if os.path.isdir(CONFIG['deploy_path']):
shutil.rmtree(CONFIG['deploy_path'])
os.makedirs(CONFIG['deploy_path'])
@task
def build(c):
"""Build local version of site"""
c.run('pelican -s pelicanconf.py')
@task
def rebuild(c):
"""`build` with the delete switch"""
c.run('pelican -d -s pelicanconf.py')
@task
def regenerate(c):
"""Automatically regenerate site upon file modification"""
c.run('pelican -r -s pelicanconf.py')
@task
def serve(c):
"""Serve site at http://localhost:8000/"""
class AddressReuseTCPServer(RootedHTTPServer):
allow_reuse_address = True
server = AddressReuseTCPServer(
CONFIG['deploy_path'],
('', CONFIG['port']),
ComplexHTTPRequestHandler)
sys.stderr.write('Serving on port {port} ...\n'.format(**CONFIG))
server.serve_forever()
@task
def reserve(c):
"""`build`, then `serve`"""
build(c)
serve(c)
@task
def preview(c):
"""Build production version of site"""
c.run('pelican -s publishconf.py')
@task
def publish(c):
"""Publish to production via rsync"""
c.run('pelican -s publishconf.py')
c.run(
'rsync --delete --exclude ".DS_Store" -pthrvz -c '
'{} {production}:{dest_path}'.format(
CONFIG['deploy_path'].rstrip('/') + '/',
**CONFIG))

View File

@ -0,0 +1,31 @@
@font-face {
font-family: 'Noto Sans';
font-weight: 400;
font-style: normal;
src: url("/theme/styles/fonts/Noto-Sans-400/Noto-Sans-400.eot");
src: url("/theme/styles/fonts/Noto-Sans-400/Noto-Sans-400.eot?#iefix") format("embedded-opentype"), local("Noto Sans"), local("Noto-Sans-400"), url("/theme/styles/fonts/Noto-Sans-400/Noto-Sans-400.woff2") format("woff2"), url("/theme/styles/fonts/Noto-Sans-400/Noto-Sans-400.woff") format("woff"), url("/theme/styles/fonts/Noto-Sans-400/Noto-Sans-400.ttf") format("truetype"), url("/theme/styles/fonts/Noto-Sans-400/Noto-Sans-400.svg#NotoSans") format("svg")
}
@font-face {
font-family: 'Noto Sans';
font-weight: 700;
font-style: normal;
src: url("/theme/styles/fonts/Noto-Sans-700/Noto-Sans-700.eot");
src: url("/theme/styles/fonts/Noto-Sans-700/Noto-Sans-700.eot?#iefix") format("embedded-opentype"), local("Noto Sans Bold"), local("Noto-Sans-700"), url("/theme/styles/fonts/Noto-Sans-700/Noto-Sans-700.woff2") format("woff2"), url("/theme/styles/fonts/Noto-Sans-700/Noto-Sans-700.woff") format("woff"), url("/theme/styles/fonts/Noto-Sans-700/Noto-Sans-700.ttf") format("truetype"), url("/theme/styles/fonts/Noto-Sans-700/Noto-Sans-700.svg#NotoSans") format("svg")
}
@font-face {
font-family: 'Noto Sans';
font-weight: 400;
font-style: italic;
src: url("/theme/styles/fonts/Noto-Sans-italic/Noto-Sans-italic.eot");
src: url("/theme/styles/fonts/Noto-Sans-italic/Noto-Sans-italic.eot?#iefix") format("embedded-opentype"), local("Noto Sans Italic"), local("Noto-Sans-italic"), url("/theme/styles/fonts/Noto-Sans-italic/Noto-Sans-italic.woff2") format("woff2"), url("/theme/styles/fonts/Noto-Sans-italic/Noto-Sans-italic.woff") format("woff"), url("/theme/styles/fonts/Noto-Sans-italic/Noto-Sans-italic.ttf") format("truetype"), url("/theme/styles/fonts/Noto-Sans-italic/Noto-Sans-italic.svg#NotoSans") format("svg")
}
@font-face {
font-family: 'Noto Sans';
font-weight: 700;
font-style: italic;
src: url("/theme/styles/fonts/Noto-Sans-700italic/Noto-Sans-700italic.eot");
src: url("/theme/styles/fonts/Noto-Sans-700italic/Noto-Sans-700italic.eot?#iefix") format("embedded-opentype"), local("Noto Sans Bold Italic"), local("Noto-Sans-700italic"), url("/theme/styles/fonts/Noto-Sans-700italic/Noto-Sans-700italic.woff2") format("woff2"), url("/theme/styles/fonts/Noto-Sans-700italic/Noto-Sans-700italic.woff") format("woff"), url("/theme/styles/fonts/Noto-Sans-700italic/Noto-Sans-700italic.ttf") format("truetype"), url("/theme/styles/fonts/Noto-Sans-700italic/Noto-Sans-700italic.svg#NotoSans") format("svg")
}

View File

@ -0,0 +1,9 @@
section {
display: flex;
flex-flow: column;
}
section .footnote {
padding-top: 30px;
order: 100;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,111 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="165"
height="102"
viewBox="0 0 43.656248 26.9875"
version="1.1"
id="svg876"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
sodipodi:docname="logo.svg">
<defs
id="defs870" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.8284271"
inkscape:cx="17.025315"
inkscape:cy="35.503545"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
showguides="false"
units="px"
inkscape:window-width="1957"
inkscape:window-height="829"
inkscape:window-x="42"
inkscape:window-y="72"
inkscape:window-maximized="0" />
<metadata
id="metadata873">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-270.01246)">
<g
transform="matrix(0.93794678,0,0,0.93794678,0.15285618,18.564905)"
id="g1419"
inkscape:label="Layer 1"
style="fill:#f7bf08;fill-opacity:1">
<g
id="g1417"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.30451775px;line-height:1.25;font-family:'Caveat Brush';-inkscape-font-specification:'Caveat Brush, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#f7bf08;fill-opacity:1;stroke:none;stroke-width:0.60761291"
aria-label="offen">
<path
id="path1409"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.30451775px;font-family:'Caveat Brush';-inkscape-font-specification:'Caveat Brush, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f7bf08;fill-opacity:1;stroke-width:0.60761291"
d="m 5.0254636,287.97574 q -0.1701317,-0.97218 -0.9478762,-0.89927 -0.4374813,0.0243 -0.7534401,0.58331 -0.4374813,0.85066 -0.3888723,2.21171 0.072914,1.33675 0.1944362,1.94436 0.1458271,0.58331 0.4860903,1.02079 0.1944362,0.34026 0.5833085,0.31596 0.6805265,0 0.9964852,-1.14231 l 0.1944361,-0.58331 q 0.1215226,-0.12152 0.048609,-0.24305 0.2430452,-0.60761 0.2673497,-1.43396 -0.2430452,-0.17014 -0.2916542,-0.31596 -0.1458272,-0.41318 -0.1458272,-0.55901 -0.1701316,-0.12152 -0.1944361,-0.46178 -0.024305,-0.34027 -0.048609,-0.43748 z m -4.44772678,2.28462 0.0972181,-1.23953 q 0.17013163,-1.67701 1.02078968,-2.86793 0.8263536,-0.99649 2.3332337,-1.02079 h 0.1458271 q 1.4096621,0 2.0415795,0.60761 0.6805265,0.5347 0.9964853,1.16662 0.3402632,0.63191 0.4374813,0.92357 0.097218,0.29165 0.1215226,0.85066 0.048609,1.04509 -0.4131768,1.19092 0.3402632,2.30893 -0.4131768,3.66998 -0.2430452,0.559 -0.704831,1.21523 -0.3402633,0.43748 -1.2152259,0.48609 -0.8749627,0 -1.5311846,-0.0972 -0.6319175,-0.0972 -1.4096621,-0.60761 -0.7777445,-0.5347 -1.09370324,-1.72562 -0.34026325,-1.14232 -0.41317681,-2.55198 z"
inkscape:connector-curvature="0" />
<path
id="path1411"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.30451775px;font-family:'Caveat Brush';-inkscape-font-specification:'Caveat Brush, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f7bf08;fill-opacity:1;stroke-width:0.60761291"
d="m 15.447545,285.52098 0.48609,-0.0243 q 0.704831,0 2.284625,-0.31596 0.04861,-0.19444 0.04861,-0.43748 l 0.121522,-0.60762 q 0,-0.24304 0.145827,-0.87496 0,-0.31596 0.09722,-0.60761 0,-0.24305 0.07291,-0.63192 0.07291,-0.41318 0.121523,-0.89927 0.07291,-0.0972 0.07291,-0.29165 0.0243,-0.21874 0.09722,-0.46179 -0.656222,-0.14583 -1.482575,-0.19443 -1.118008,0.14582 -1.239531,0.26735 -0.534699,0.46178 -0.729135,0.80204 -0.218741,0.36457 -0.510395,1.19093 -0.121523,0.0486 -0.194436,0.38887 -0.04861,0.38887 -0.26735,0.97218 -0.170132,0.46178 -0.291654,1.0694 -0.121523,0.58331 -0.04861,0.70483 0.243045,0 0.388872,-0.0243 0.170132,-0.17013 0.826354,-0.0243 z m 4.909512,4.76369 q -0.07291,0.60761 -0.04861,0.72913 l -0.07291,0.5104 v 0.43748 q 0.04861,1.43396 0.09722,2.01727 0.121522,0.48609 0.121522,0.72914 0,0.43748 -0.680526,0.70483 -0.413177,0.17013 -0.923572,0.17013 -0.510395,0 -0.75344,-0.38887 l -0.170131,-0.58331 -0.09722,-0.559 -0.07291,-0.19444 q 0,-0.12152 -0.07291,-0.34026 l -0.04861,-0.68053 q 0,-0.58331 0.0243,-1.02079 v -0.17013 q 0,-0.0972 0.04861,-0.29166 0.07291,-0.19443 0.0243,-0.46178 0.145827,-1.23953 0.121523,-1.55549 0,-0.31596 0.04861,-0.65622 0.04861,-0.36457 0,-0.72914 0.121523,-0.43748 0.170132,-0.85066 -0.461786,-0.0243 -1.579794,0.0486 -1.215226,0.0729 -2.600583,0.34027 -0.09722,0.29165 -0.121523,0.68052 -0.02431,0.38887 -0.07291,0.99649 -0.04861,0.58331 -0.04861,0.87496 v 0.82635 q -0.07291,0.55901 -0.04861,0.72914 l -0.07291,0.51039 v 0.43749 q 0.04861,1.43396 0.09722,1.99297 0.121522,0.48609 0.121522,0.75344 0,0.41317 -0.680526,0.70483 -0.534699,0.14582 -0.996485,0.14582 -0.437482,0 -0.680527,-0.36456 l -0.170131,-0.58331 -0.09722,-0.58331 -0.07291,-0.19444 q 0,-0.0972 -0.07291,-0.31596 l -0.04861,-0.68052 q 0,-0.60761 0.02431,-1.02079 v -0.17013 q 0,-0.0972 0.04861,-0.29166 0.07291,-0.19443 0.0243,-0.48609 0.145828,-1.21522 0.121523,-1.55549 0,-0.34026 0.04861,-0.65622 0.04861,-0.34026 0,-0.70483 0.07291,-0.34026 0.09722,-0.38887 0.02431,-0.0729 0.07291,-0.46179 h -0.826354 q -0.5833083,0 -0.7291354,-0.0243 -0.704831,0 -0.8992672,-0.38887 -0.1458271,-0.41318 0.1944362,-0.92358 0.048609,-0.12152 0.4131768,-0.14582 0.5590036,0 1.9929706,-0.29166 0.04861,-0.19443 0.04861,-0.34026 l 0.121522,-0.85066 q 0,-0.21874 0.145828,-0.87496 0,-0.31596 0.09722,-0.60761 0,-0.21875 0.07291,-0.72914 0.194436,-0.99649 0.218741,-1.48258 0.170131,-0.31595 0.194436,-0.41317 -0.09722,-0.12153 0.07291,-0.34027 l 0.07291,-0.14582 q 0.04861,-0.29166 0.680527,-0.89927 l 0.631917,-0.36457 q 0.145827,-0.19443 1.166617,-0.51039 0.218741,-0.12153 0.923572,0.0972 0.07291,0.0243 0.413176,0 0.364568,-0.0243 0.559004,0.0486 0.194436,0.0729 0.26735,0.0729 l 0.559004,0.0729 q 1.118008,0.36457 1.604098,0.68053 0.145827,-0.24305 0.388872,-0.46179 0.243046,-0.24304 0.388873,-0.29165 l 0.437481,-0.29166 q 0.26735,-0.29165 1.093703,-0.46178 0.850658,-0.17013 1.458271,0.0243 0.315959,0 0.510395,0.0729 0.194436,0.0729 0.291654,0.0729 l 0.583309,0.0972 q 0.826353,0.34026 0.947876,0.5347 0.121523,0.17013 0.07291,0.34026 -0.291655,0.87496 -1.312444,0.72914 l -1.045095,0.0486 q -0.802049,0.29166 -1.142312,0.99649 -0.413177,0.60761 -0.559004,1.48258 -0.145827,0.85065 -0.218741,1.04509 -0.04861,0.19444 -0.121522,0.43748 -0.07291,0.17013 -0.170132,0.68053 -0.09722,0.48609 -0.0243,0.60761 0.243045,0 0.388872,-0.0243 0.170132,-0.17014 0.826354,-0.0243 l 0.48609,-0.0243 q 1.336748,0 1.628403,0.48609 0.170131,0.24304 -0.02431,0.60761 -0.170131,0.34026 -0.510395,0.46179 l -2.357538,0.29165 -0.75344,0.14583 q -0.121523,0.34026 -0.145827,0.80205 -0.02431,0.46178 -0.07291,0.97218 -0.04861,0.51039 -0.04861,0.77774 z"
inkscape:connector-curvature="0" />
<path
id="path1413"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.30451775px;font-family:'Caveat Brush';-inkscape-font-specification:'Caveat Brush, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f7bf08;fill-opacity:1;stroke-width:0.60761291"
d="m 29.329981,286.22581 q -0.04861,-0.12152 -0.340263,-0.0972 -0.26735,0.0243 -0.413177,0.29166 -0.996485,1.57979 -1.069399,3.37832 0.826354,0.19444 1.409663,-0.72913 0.75344,-2.38184 0.413176,-2.84363 z m -1.895752,9.64889 -0.243045,-0.0486 -0.340263,-0.34027 q -0.145828,0 -0.218741,-0.12152 -0.26735,-0.31596 -0.972181,-1.26384 l -0.364568,-1.33674 q 0,-0.38888 -0.145827,-0.68053 -0.243045,-1.0937 -0.291654,-1.23953 -0.04861,-0.17013 -0.07291,-0.89927 0,-0.72913 0.07291,-1.0694 0.07291,-0.46178 0.899267,-2.28462 0.218741,-0.21874 0.26735,-0.58331 l 0.388872,-0.559 q 0.5347,-0.63192 1.142313,-0.92358 0,-0.0486 0.826353,-0.24304 0.170132,-0.0243 0.777745,0.12152 1.458271,0.34027 1.822839,0.85066 l 0.07291,0.12152 q 0.461786,0.65622 0.534699,2.01728 -0.07291,0.60761 -0.121522,1.02079 -0.04861,0.41317 -0.5347,1.50688 -0.364567,0.68052 -0.704831,1.0937 -0.534699,0.38887 -0.729135,0.38887 -0.09722,0.0486 -0.413177,0.0486 h -0.559004 q -0.07291,-0.0243 -0.315958,-0.0243 -0.243046,0 -0.704832,-0.12152 0,0.53469 0.291655,1.53118 0.315958,0.97218 0.510395,1.19092 0.510394,0.38887 0.802049,0.5104 0.291654,0.12152 0.777744,0.0486 0.486091,-0.0972 0.704831,-0.34026 l 0.631918,-0.77774 q 0.607613,-0.82636 1.23953,-0.14583 0.291654,0.31596 0.218741,0.63192 -0.04861,0.29165 -0.486091,1.19092 -0.364567,0.58331 -0.777744,0.97218 -0.75344,0.38887 -0.899267,0.38887 -0.218741,0.0243 -0.680527,-0.0729 -0.243045,0.12152 -0.826353,-0.0243 0,-0.0486 -0.145828,-0.0729 -0.121522,0 -0.340263,-0.0729 l 0.04861,-0.0243 q -0.04861,0 -0.291654,0 l -0.680526,-0.36457 z"
inkscape:connector-curvature="0" />
<path
id="path1415"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:24.30451775px;font-family:'Caveat Brush';-inkscape-font-specification:'Caveat Brush, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f7bf08;fill-opacity:1;stroke-width:0.60761291"
d="m 39.755481,294.2463 -0.145827,-0.41318 -0.26735,-1.6284 q -0.121522,-0.46178 -0.121522,-0.82635 l 0.09722,-1.0694 q 0,-0.26735 0.0243,-0.29165 -0.291654,0 -0.874962,0.70483 -0.04861,0.0729 -0.145827,0.24304 -1.02079,1.6284 -1.215226,3.91303 -0.194436,0.41318 -0.510395,0.41318 -0.656222,-0.14583 -0.729136,-0.14583 l -0.170131,0.0243 h -0.315959 q -0.559004,-0.0486 -0.729136,-0.43748 -0.09722,-0.12152 -0.09722,-0.63192 v -0.34026 l -0.07291,-1.33675 v -1.99297 q 0,-0.34026 -0.04861,-0.85066 -0.04861,-0.559 -0.0243,-1.74992 0.0243,-1.21523 -0.0243,-1.28814 -0.04861,-0.0972 -0.04861,-0.24305 0,-0.14582 0.07291,-0.29165 0.07291,-0.14583 0.656222,-0.31596 0.315959,-0.19443 0.5347,-0.19443 0.340263,0.0729 0.874962,0.29165 0.364568,0.0729 0.364568,0.70483 0.04861,1.04509 0,1.50688 -0.0243,0.46179 0.0243,1.87145 1.798534,-3.45124 3.208196,-4.15607 0.121523,-0.12153 0.364568,-0.12153 0.243045,0 0.559004,0.24305 0.315958,0.24304 0.437481,0.31596 0.121523,0.0729 0.26735,0.24304 0.170131,0.17013 0.267349,0.21874 0.291655,0.48609 0.121523,2.28463 -0.0243,0.26735 -0.04861,0.48609 -0.0243,0.19443 -0.0243,0.87496 0,0.68053 0.0243,0.94788 0.07291,0.85066 0.07291,0.99648 l 0.121523,0.92357 q 0.243045,0.55901 0.243045,0.87497 0.0243,0.29165 0.437482,0.94787 0.170131,0.36457 -0.145828,0.58331 -0.48609,0.24305 -0.534699,0.19444 -0.0243,-0.0243 -0.26735,0.0486 -0.243045,0.0972 -0.874962,0.0486 -0.315959,-0.0729 -0.631918,-0.38888 l -0.364568,-0.36456 q -0.194436,-0.29166 -0.267349,-0.63192 -0.121523,-0.12152 -0.07291,-0.19444 z"
inkscape:connector-curvature="0" />
</g>
</g>
<g
id="layer1-3"
inkscape:label="Layer 1"
transform="matrix(0.11331872,0,0,0.11331872,26.188505,260.73811)"
style="fill:#f7bf08;fill-opacity:1">
<g
transform="translate(218.54583,-14.816667)"
id="g2026"
style="fill:#f7bf08;fill-opacity:1">
<path
inkscape:connector-curvature="0"
style="fill:#f7bf08;stroke:none;stroke-width:0.26458332;fill-opacity:1"
d="m -120.04445,102.97209 c -5.0673,0.66543 -10.2399,1.16046 -15.08125,2.98503 -2.31801,0.87365 -4.26772,2.46274 -6.34999,3.76872 -3.51923,2.20716 -7.21387,4.57359 -10.00549,7.69012 -2.6108,2.91412 -4.48281,6.69078 -5.88912,10.31478 -1.62676,4.19206 -3.09925,8.78682 -3.73967,13.22917 -0.28356,1.96691 -0.67048,3.79862 -0.42527,5.82083 0.81608,6.72942 5.2337,10.97518 11.06371,13.81972 3.54171,1.72826 6.56828,2.67626 10.58334,2.27462 1.42081,-0.14181 2.81384,-0.53525 4.23333,-0.70749 1.87536,-0.22728 4.01743,-0.25506 5.82083,-0.80936 1.24434,-0.38259 2.26563,-1.1483 3.43958,-1.6727 2.95858,-1.32186 5.8428,-2.55773 8.73125,-4.04416 3.32873,-1.71291 7.00353,-3.0681 10.05417,-5.28611 3.99865,-2.90724 7.14693,-7.86632 9.228667,-12.30577 0.713317,-1.52056 1.024732,-3.1533 1.46685,-4.7625 1.626129,-5.91978 2.2733,-12.1965 -0.201348,-17.99167 -1.131093,-2.64901 -2.927879,-4.60534 -4.937919,-6.61458 -1.36578,-1.36525 -2.77177,-2.72283 -4.49792,-3.63458 -1.97564,-1.04352 -4.44605,-1.36525 -6.61458,-1.74202 -2.29129,-0.39793 -4.5421,-0.6387 -6.87917,-0.33205 z"
id="path821" />
<path
inkscape:connector-curvature="0"
style="fill:#f7bf08;stroke:none;stroke-width:0.26458332;fill-opacity:1"
d="m -87.236113,107.73459 c 0.474398,1.6465 1.360752,3.16997 1.997869,4.7625 1.198033,2.99482 2.078567,6.08542 2.652448,9.26042 1.419489,7.8568 0.639498,16.54096 -2.008452,24.07708 -1.405467,4.00077 -3.471598,7.76896 -5.171811,11.64167 -2.696633,6.14283 -4.963847,12.4423 -10.699221,16.46105 -1.14141,0.79957 -2.46009,1.14618 -3.70417,1.73831 -3.53986,1.68461 -7.73456,3.34407 -11.64166,3.95579 -1.40256,0.2196 -2.8067,-0.31803 -4.23334,-0.11536 -5.20858,0.74057 -10.01156,1.84997 -15.34583,1.48431 -5.99202,-0.41063 -12.2256,-2.15688 -17.4625,-5.11545 -1.72863,-0.97658 -3.41312,-2.01745 -5.02708,-3.17606 -1.22248,-0.87762 -2.31032,-1.94257 -3.70417,-2.53259 1.00682,2.25901 3.10904,3.51393 4.71657,5.29272 3.65559,4.04522 7.32859,8.05763 11.42698,11.67501 4.2635,3.76343 8.24389,8.47804 13.75437,10.45686 3.38984,1.21735 6.7728,1.4605 10.31875,1.70339 2.95778,0.2024 6.02588,0.49265 8.99583,0.19553 5.61763,-0.56145 11.09213,-2.96202 16.139584,-5.34432 3.975629,-1.87669 7.875058,-3.67639 11.067521,-6.82731 5.699389,-5.62478 9.200091,-12.18565 12.162631,-19.53313 1.687777,-4.18544 3.258608,-8.4291 3.712104,-12.96458 0.295275,-2.9509 -0.153458,-6.31085 -0.438944,-9.26042 -0.582083,-6.01319 -1.859227,-11.61944 -4.24471,-17.19792 -1.382448,-3.23321 -3.267869,-6.14389 -4.823354,-9.26042 -1.415786,-2.83686 -3.098007,-5.42687 -5.031317,-7.9375 -0.985044,-1.27926 -1.917435,-2.72812 -3.408098,-3.43958 z"
id="path853" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

View File

@ -0,0 +1 @@
./../../../styles

View File

@ -0,0 +1,40 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>{% block title %}{% endblock %}</title>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="description" content="{{ page.description }}">
<meta property="og:site_name" content="{{ SITENAME }}">
<meta property="og:locale" content="{{ DEFAULT_LANG }}">
<meta property="og:title" content="{{ page.title }}">
<meta property="og:description" content="{{ page.description }}">
<meta property="og:type" content="website">
<meta property="og:url" content="{{ SITEURL }}/{{ page.save_as }}">
<meta property="og:image" content="{{ SITEURL }}/theme/images/offen-logo-social-media.jpg">
<meta name="twitter:image:alt" content="offen logo">
<meta name="twitter:card" content="summary_large_image">
<link rel="canonical" href="{{ SITEURL }}/{{ page.save_as }}">
<link rel="shortcut icon" type="image/x-icon" href="/theme/images/favicon.ico">
<link rel="stylesheet" type="text/css" href="/theme/css/fonts.css">
<link rel="stylesheet" type="text/css" href="/theme/styles/index.css">
<link rel="stylesheet" type="text/css" href="/theme/css/style.css">
{% if OFFEN_ACCOUNT_ID %}
<script async src="https://script-alpha.offen.dev/script.js" data-account-id="{{ OFFEN_ACCOUNT_ID }}"></script>
{% endif %}
</head>
<body>
<div class="wrapper">
<header>
<a href="/" title="offen home page" alt="offen home page">
<img src="/theme/images/logo.svg" alt="offen logo" width="165" height="102" class="logo">
</a>
</header>
{% block content %}{% endblock %}
</div>
</body>
</html>

View File

@ -0,0 +1,50 @@
{% extends "base.html" %}
{% block title %}
{{ page.title }}
{% endblock %}
{% block content %}
<section>
{% block before_content %}
<h1>
<strong>offen</strong> is a free and open source analytics software for websites and web applications that allows respectful handling of data.
</h1>
{% endblock %}
{% block page_content %}
{{ page.content }}
{% endblock %}
{% block after_content %}
<nav class="navigation-wrapper">
<div class="button-wrapper btn-fill-space">
{% if page.href != "/deep-dive/" %}
<a class="btn btn-color-grey" href="/deep-dive/">
Deep dive
</a>
{% endif %}
{% if page.href != "/" %}
<a class="btn btn-color-grey" href="/">
Summary
</a>
{% endif %}
{% if page.href != "/status/" %}
<a class="btn btn-color-grey" href="/status/">
Status
</a>
{% endif %}
<a class="btn btn-color-orange" href="mailto:{{CONTACT_EMAIL}}">
Contact
</a>
</div>
<div class="button-wrapper btn-fill-space">
<a class="btn btn-color-orange" href="{{GITHUB_ORG}}" target="_blank">
Get involved
</a>
<a class="btn btn-color-orange" href="{{PATREON_URL}}" target="_blank">
Support us
</a>
</div>
</nav>
{% endblock %}
</section>
{% endblock %}

94
styles/fonts/LICENSE Normal file
View File

@ -0,0 +1,94 @@
Copyright 2018 The Noto Project Authors (github.com/googlei18n/noto-fonts)
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.

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

422
styles/index.css Normal file
View File

@ -0,0 +1,422 @@
/* Typo
------------------------------------------------------------- */
body {
padding: 50px;
background-color: #fff;
color: #898989;
font: 18px/1.5 "Noto Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 18px;
line-height: 1.5;
font-weight: 400;
}
h1,
h2,
h3,
h4 {
color: #404040;
font-size: 28px;
line-height: 1.4;
font-weight: 400;
margin: 0 0 40px 0;
}
h3,
h4 {
font-size: 18px;
margin: 30px 0 20px 0;
}
.section-auditorium h3 {
margin: 0 0 10px 0;
}
h4 {
color: #898989;
margin: 30px 0 6px 0;
}
.section-auditorium h4 {
margin: 30px 0 20px 0;
}
/* Links
------------------------------------------------------------- */
a,
a:hover,
a:focus {
color: #898989;
text-decoration: none;
font-weight: 700;
}
button {
cursor: pointer;
font: inherit;
font-size: inherit;
font-weight: 700;
}
h1 a,
h1 a:hover,
h1 a:focus {
color: #f7bf08;
text-decoration: none;
font-weight: 400;
}
small a,
small a:hover,
small a:focus {
color: #898989;
text-decoration: none;
font-weight: 700;
}
sup {
line-height: 1;
}
sup a,
sup a:hover,
sup a:focus {
color: #cfcfcf;
}
ol {
padding-inline-start: 20px;
}
ol li p a,
ol li p a:hover,
ol li p a:focus {
color: #cfcfcf;
}
/* Typo Elements
------------------------------------------------------------- */
.logo {
margin: -20px 0 0 0;
}
blockquote {
border-left: 1px solid #e5e5e5;
margin: 0;
padding: 0 0 0 20px;
font-style: italic
}
hr {
border-top: 1px solid #d5d5d5;
height: 0;
margin: 80px 0 0 0;
}
.footnote hr {
border: 0;
height: 0;
margin: 0;
}
blockquote {
border-left: 1px solid #d5d5d5;
margin: 40px 0 40px 0;
}
strong {
font-weight: 700
}
strong,
h1 strong,
h2 strong,
h3 strong {
color: #404040;
text-decoration: none;
font-weight: 400;
}
h1 strong,
h2 strong,
h3 strong {
color: #898989;
}
tbody,
h4 strong {
color: #404040;
text-decoration: none;
font-weight: 700;
}
h4 strong {
font-size: 36px;
}
/* Buttons
------------------------------------------------------------- */
.btn {
-webkit-border-radius: 0;
-moz-border-radius: 0;
border-radius: 0px;
padding: 6px;
text-align: center;
text-decoration: none;
}
.btn-color-grey,
.btn-color-grey:visited,
.btn-color-grey:link {
background: #fff;
color: #898989;
border: solid #898989 5px;
}
.btn-color-orange,
.btn-color-orange:visited,
.btn-color-orange:link {
background: #fff;
color: #F7BF08;
border: solid #F7BF08 5px;
}
.btn-color-grey:hover,
.btn-color-grey:active {
background: #898989;
color: #fff;
text-decoration: none;
}
.btn-color-orange:hover,
.btn-color-orange:active {
background: #F7BF08;
color: #fff;
text-decoration: none;
}
.btn {
margin: 0 0 15px 0;
}
.button-wrapper {
display: flex;
flex-flow: column wrap;
justify-content: space-around;
}
.navigation-wrapper {
margin: 60px 0 0 0;
}
@media (min-width: 480px) {
.button-wrapper {
align-items: center;
flex-flow: row wrap;
-ms-flex-flow: row wrap;
-webkit-flex-flow: row wrap;
}
.btn {
flex-grow: 1;
}
.btn {
margin: 0 15px 15px 0;
}
.btn:last-of-type {
margin: 0 0 15px 0;
}
}
/* Custom Underline
------------------------------------------------------------- */
em {
color: #898989;
background: linear-gradient(transparent 66%, #fde28c 66%);
font-style: normal;
}
/* Layout
------------------------------------------------------------- */
.wrapper {
width: 860px;
margin: 0 auto
}
header {
width: 270px;
float: left;
position: fixed;
-webkit-font-smoothing: subpixel-antialiased
}
section,
section-auditorium {
float: right;
width: 600px;
padding: 0 0 40px 0;
}
section > p,
section-auditorium > p {
margin: 0 0 20px 0;
}
section > p:last-child,
section-auditorium > p:last-child {
margin: 0 0 60px 0;
}
.row {
display: flex;
justify-content: flex-start;
}
.row h4:first-child {
margin-right: 30px;
}
/* Tables
------------------------------------------------------------- */
.table-full-width {
box-sizing: border-box
}
td {
padding-right: 30px;
}
/* Footer
------------------------------------------------------------- */
footer {
width: 270px;
float: left;
position: fixed;
bottom: 100px;
-webkit-font-smoothing: subpixel-antialiased
}
.footnote {
color: #d5d5d5;
font-size: 14px;
margin: 20px 0 0 0;
}
.footnote ol {
margin-bottom: 0;
}
.footer-list {
list-style-type: none;
padding: 0;
margin: 0;
}
.footer-list li {
display: inline-block;
font-size: 14px;
margin-right: 0.14em;
}
/* Media Queries
------------------------------------------------------------- */
@media screen and (max-width: 960px) {
div.wrapper {
width: auto;
margin: 0
}
header,
section,
section-auditorium,
footer {
float: none;
position: static;
width: auto
}
header {
padding-right: 320px
}
section,
section-auditorium {
border: none;
width: auto;
padding: 0 0 0 0;
margin: 40px 0 40px 0;
}
section > p:first-child,
section > p:last-child,
section-auditorium > p:first-child,
section-auditorium > p:last-child {
margin: 0 0 40px 0;
}
}
@media screen and (max-width: 480px) {
body {
font-size: 14px;
line-height: 1.3;
padding: 15px;
word-wrap: break-word;
}
h1,
h2 {
font-size: 20px;
line-height: 1.3;
margin: 0 0 20px 0;
}
h3,
h4 {
font-size: 14px;
line-height: 1.3;
margin: 30px 0 15px 0;
}
h4 strong {
font-size: 28px;
}
header {
padding: 0
}
.logo {
margin: 0;
}
hr {
margin: 60px 0 0 0;
}
blockquote {
margin: 15px 0 15px 0;
}
.row {
justify-content: space-between;
}
.row h4:first-child {
margin-right: 0;
}
.table-full-width {
width: 100%;
}
td {
padding-right: 0;
}
}