commit 50f1eba33ae075ebafabf2eeb96fa3b1f2927dd0 Author: randogoth Date: Sat Jul 1 11:01:17 2023 +0300 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9b300cb --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +web/output/ +__pycache__/ +*.py[cod] +*$py.class \ No newline at end of file diff --git a/design/css/code_blocks/darkly.css b/design/css/code_blocks/darkly.css new file mode 100644 index 0000000..603db88 --- /dev/null +++ b/design/css/code_blocks/darkly.css @@ -0,0 +1,38 @@ +/* + Darkly Pygments Theme + (c) 2014 Sourcey + http://sourcey.com +*/ + +pre { + white-space: pre; + overflow: auto; + word-wrap: normal; /* horizontal scrolling */ + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + padding: 20px; + background: #343642; + color: #C1C2C3; +} + +.hll { background-color: #ffc; } +.gd { color: #2e3436; background-color: #0e1416; } +.gr { color: #eeeeec; background-color: #c00; } +.gi { color: #babdb6; background-color: #1f2b2d; } +.go { color: #2c3032; background-color: #2c3032; } +.kt { color: #e3e7df; } +.ni { color: #888a85; } +.c,.cm,.c1,.cs { color: #8D9684; } +.err,.g,.l,.n,.x,.p,.ge, +.gp,.gs,.gt,.ld,.s,.nc,.nd, +.ne,.nl,.nn,.nx,.py,.ow,.w,.sb, +.sc,.sd,.s2,.se,.sh,.si,.sx,.sr, +.s1,.ss,.bp { color: #C1C2C3; } +.k,.kc,.kd,.kn,.kp,.kr, +.nt { color: #729fcf; } +.cp,.gh,.gu,.na,.nf { color: #E9A94B ; } +.m,.nb,.no,.mf,.mh,.mi,.mo, +.il { color: #8ae234; } +.o { color: #989DAA; } +.nv,.vc,.vg,.vi { color: #fff; } diff --git a/design/css/code_blocks/github.css b/design/css/code_blocks/github.css new file mode 100644 index 0000000..4919ebd --- /dev/null +++ b/design/css/code_blocks/github.css @@ -0,0 +1,84 @@ +/* to make lines scroll instead of wrap */ +/* from http://stackoverflow.com/a/23393920 */ + +.highlight pre code * { + white-space: nowrap; // this sets all children inside to nowrap +} + +.highlight pre { + overflow-x: auto; // this sets the scrolling in x +} + +.highlight pre code { + white-space: pre; // forces to respect
 formatting
+}
+
+
+/*
+ * GitHub style for Pygments syntax highlighter, for use with Jekyll
+ * Courtesy of GitHub.com
+ */
+
+.highlight pre, pre, .highlight .hll { background-color: #f8f8f8; border: 1px solid #ccc; padding: 6px 10px; border-radius: 3px; }
+.highlight .c { color: #999988; font-style: italic; }
+.highlight .err { color: #a61717; background-color: #e3d2d2; }
+.highlight .k { font-weight: bold; }
+.highlight .o { font-weight: bold; }
+.highlight .cm { color: #999988; font-style: italic; }
+.highlight .cp { color: #999999; font-weight: bold; }
+.highlight .c1 { color: #999988; font-style: italic; }
+.highlight .cs { color: #999999; font-weight: bold; font-style: italic; }
+.highlight .gd { color: #000000; background-color: #ffdddd; }
+.highlight .gd .x { color: #000000; background-color: #ffaaaa; }
+.highlight .ge { font-style: italic; }
+.highlight .gr { color: #aa0000; }
+.highlight .gh { color: #999999; }
+.highlight .gi { color: #000000; background-color: #ddffdd; }
+.highlight .gi .x { color: #000000; background-color: #aaffaa; }
+.highlight .go { color: #888888; }
+.highlight .gp { color: #555555; }
+.highlight .gs { font-weight: bold; }
+.highlight .gu { color: #800080; font-weight: bold; }
+.highlight .gt { color: #aa0000; }
+.highlight .kc { font-weight: bold; }
+.highlight .kd { font-weight: bold; }
+.highlight .kn { font-weight: bold; }
+.highlight .kp { font-weight: bold; }
+.highlight .kr { font-weight: bold; }
+.highlight .kt { color: #445588; font-weight: bold; }
+.highlight .m { color: #009999; }
+.highlight .s { color: #dd1144; }
+.highlight .n { color: #333333; }
+.highlight .na { color: teal; }
+.highlight .nb { color: #0086b3; }
+.highlight .nc { color: #445588; font-weight: bold; }
+.highlight .no { color: teal; }
+.highlight .ni { color: purple; }
+.highlight .ne { color: #990000; font-weight: bold; }
+.highlight .nf { color: #990000; font-weight: bold; }
+.highlight .nn { color: #555555; }
+.highlight .nt { color: navy; }
+.highlight .nv { color: teal; }
+.highlight .ow { font-weight: bold; }
+.highlight .w { color: #bbbbbb; }
+.highlight .mf { color: #009999; }
+.highlight .mh { color: #009999; }
+.highlight .mi { color: #009999; }
+.highlight .mo { color: #009999; }
+.highlight .sb { color: #dd1144; }
+.highlight .sc { color: #dd1144; }
+.highlight .sd { color: #dd1144; }
+.highlight .s2 { color: #dd1144; }
+.highlight .se { color: #dd1144; }
+.highlight .sh { color: #dd1144; }
+.highlight .si { color: #dd1144; }
+.highlight .sx { color: #dd1144; }
+.highlight .sr { color: #009926; }
+.highlight .s1 { color: #dd1144; }
+.highlight .ss { color: #990073; }
+.highlight .bp { color: #999999; }
+.highlight .vc { color: teal; }
+.highlight .vg { color: teal; }
+.highlight .vi { color: teal; }
+.highlight .il { color: #009999; }
+.highlight .gc { color: #999; background-color: #EAF2F5; }
diff --git a/design/css/code_blocks/monokai.css b/design/css/code_blocks/monokai.css
new file mode 100644
index 0000000..c6424dc
--- /dev/null
+++ b/design/css/code_blocks/monokai.css
@@ -0,0 +1,80 @@
+/*
+  Monokai Pygments Theme
+*/
+
+pre {
+  white-space: pre;
+  overflow: auto;
+  word-wrap: normal; /* horizontal scrolling */
+  -moz-border-radius: 3px;
+  -webkit-border-radius: 3px;
+  border-radius: 3px;
+  padding: 20px;
+  background: #343642;
+  color: #C1C2C3;
+}
+
+.hll { background-color: #49483e }
+.c { color: #75715e } /* Comment */
+.err { color: #960050; background-color: #1e0010 } /* Error */
+.k { color: #66d9ef } /* Keyword */
+.l { color: #ae81ff } /* Literal */
+.n { color: #f8f8f2 } /* Name */
+.o { color: #f92672 } /* Operator */
+.p { color: #f8f8f2 } /* Punctuation */
+.cm { color: #75715e } /* Comment.Multiline */
+.cp { color: #75715e } /* Comment.Preproc */
+.c1 { color: #75715e } /* Comment.Single */
+.cs { color: #75715e } /* Comment.Special */
+.ge { font-style: italic } /* Generic.Emph */
+.gs { font-weight: bold } /* Generic.Strong */
+.kc { color: #66d9ef } /* Keyword.Constant */
+.kd { color: #66d9ef } /* Keyword.Declaration */
+.kn { color: #f92672 } /* Keyword.Namespace */
+.kp { color: #66d9ef } /* Keyword.Pseudo */
+.kr { color: #66d9ef } /* Keyword.Reserved */
+.kt { color: #66d9ef } /* Keyword.Type */
+.ld { color: #e6db74 } /* Literal.Date */
+.m { color: #ae81ff } /* Literal.Number */
+.s { color: #e6db74 } /* Literal.String */
+.na { color: #a6e22e } /* Name.Attribute */
+.nb { color: #f8f8f2 } /* Name.Builtin */
+.nc { color: #a6e22e } /* Name.Class */
+.no { color: #66d9ef } /* Name.Constant */
+.nd { color: #a6e22e } /* Name.Decorator */
+.ni { color: #f8f8f2 } /* Name.Entity */
+.ne { color: #a6e22e } /* Name.Exception */
+.nf { color: #a6e22e } /* Name.Function */
+.nl { color: #f8f8f2 } /* Name.Label */
+.nn { color: #f8f8f2 } /* Name.Namespace */
+.nx { color: #a6e22e } /* Name.Other */
+.py { color: #f8f8f2 } /* Name.Property */
+.nt { color: #f92672 } /* Name.Tag */
+.nv { color: #f8f8f2 } /* Name.Variable */
+.ow { color: #f92672 } /* Operator.Word */
+.w { color: #f8f8f2 } /* Text.Whitespace */
+.mf { color: #ae81ff } /* Literal.Number.Float */
+.mh { color: #ae81ff } /* Literal.Number.Hex */
+.mi { color: #ae81ff } /* Literal.Number.Integer */
+.mo { color: #ae81ff } /* Literal.Number.Oct */
+.sb { color: #e6db74 } /* Literal.String.Backtick */
+.sc { color: #e6db74 } /* Literal.String.Char */
+.sd { color: #e6db74 } /* Literal.String.Doc */
+.s2 { color: #e6db74 } /* Literal.String.Double */
+.se { color: #ae81ff } /* Literal.String.Escape */
+.sh { color: #e6db74 } /* Literal.String.Heredoc */
+.si { color: #e6db74 } /* Literal.String.Interpol */
+.sx { color: #e6db74 } /* Literal.String.Other */
+.sr { color: #e6db74 } /* Literal.String.Regex */
+.s1 { color: #e6db74 } /* Literal.String.Single */
+.ss { color: #e6db74 } /* Literal.String.Symbol */
+.bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */
+.vc { color: #f8f8f2 } /* Name.Variable.Class */
+.vg { color: #f8f8f2 } /* Name.Variable.Global */
+.vi { color: #f8f8f2 } /* Name.Variable.Instance */
+.il { color: #ae81ff } /* Literal.Number.Integer.Long */
+
+.gh { } /* Generic Heading & Diff Header */
+.gu { color: #75715e; } /* Generic.Subheading & Diff Unified/Comment? */
+.gd { color: #f92672; } /* Generic.Deleted & Diff Deleted */
+.gi { color: #a6e22e; } /* Generic.Inserted & Diff Inserted */
diff --git a/design/css/code_blocks/tomorrow.css b/design/css/code_blocks/tomorrow.css
new file mode 100644
index 0000000..7b4e17f
--- /dev/null
+++ b/design/css/code_blocks/tomorrow.css
@@ -0,0 +1,70 @@
+/*
+  Tomorrow Pygments Theme
+*/
+
+pre { background: #ffffff; color: #4d4d4c }
+
+.hll { background-color: #d6d6d6 }
+.c { color: #8e908c } /* Comment */
+.err { color: #c82829 } /* Error */
+.k { color: #8959a8 } /* Keyword */
+.l { color: #f5871f } /* Literal */
+.n { color: #4d4d4c } /* Name */
+.o { color: #3e999f } /* Operator */
+.p { color: #4d4d4c } /* Punctuation */
+.cm { color: #8e908c } /* Comment.Multiline */
+.cp { color: #8e908c } /* Comment.Preproc */
+.c1 { color: #8e908c } /* Comment.Single */
+.cs { color: #8e908c } /* Comment.Special */
+.gd { color: #c82829 } /* Generic.Deleted */
+.ge { font-style: italic } /* Generic.Emph */
+.gh { color: #4d4d4c; font-weight: bold } /* Generic.Heading */
+.gi { color: #718c00 } /* Generic.Inserted */
+.gp { color: #8e908c; font-weight: bold } /* Generic.Prompt */
+.gs { font-weight: bold } /* Generic.Strong */
+.gu { color: #3e999f; font-weight: bold } /* Generic.Subheading */
+.kc { color: #8959a8 } /* Keyword.Constant */
+.kd { color: #8959a8 } /* Keyword.Declaration */
+.kn { color: #3e999f } /* Keyword.Namespace */
+.kp { color: #8959a8 } /* Keyword.Pseudo */
+.kr { color: #8959a8 } /* Keyword.Reserved */
+.kt { color: #eab700 } /* Keyword.Type */
+.ld { color: #718c00 } /* Literal.Date */
+.m { color: #f5871f } /* Literal.Number */
+.s { color: #718c00 } /* Literal.String */
+.na { color: #4271ae } /* Name.Attribute */
+.nb { color: #4d4d4c } /* Name.Builtin */
+.nc { color: #eab700 } /* Name.Class */
+.no { color: #c82829 } /* Name.Constant */
+.nd { color: #3e999f } /* Name.Decorator */
+.ni { color: #4d4d4c } /* Name.Entity */
+.ne { color: #c82829 } /* Name.Exception */
+.nf { color: #4271ae } /* Name.Function */
+.nl { color: #4d4d4c } /* Name.Label */
+.nn { color: #eab700 } /* Name.Namespace */
+.nx { color: #4271ae } /* Name.Other */
+.py { color: #4d4d4c } /* Name.Property */
+.nt { color: #3e999f } /* Name.Tag */
+.nv { color: #c82829 } /* Name.Variable */
+.ow { color: #3e999f } /* Operator.Word */
+.w { color: #4d4d4c } /* Text.Whitespace */
+.mf { color: #f5871f } /* Literal.Number.Float */
+.mh { color: #f5871f } /* Literal.Number.Hex */
+.mi { color: #f5871f } /* Literal.Number.Integer */
+.mo { color: #f5871f } /* Literal.Number.Oct */
+.sb { color: #718c00 } /* Literal.String.Backtick */
+.sc { color: #4d4d4c } /* Literal.String.Char */
+.sd { color: #8e908c } /* Literal.String.Doc */
+.s2 { color: #718c00 } /* Literal.String.Double */
+.se { color: #f5871f } /* Literal.String.Escape */
+.sh { color: #718c00 } /* Literal.String.Heredoc */
+.si { color: #f5871f } /* Literal.String.Interpol */
+.sx { color: #718c00 } /* Literal.String.Other */
+.sr { color: #718c00 } /* Literal.String.Regex */
+.s1 { color: #718c00 } /* Literal.String.Single */
+.ss { color: #718c00 } /* Literal.String.Symbol */
+.bp { color: #4d4d4c } /* Name.Builtin.Pseudo */
+.vc { color: #c82829 } /* Name.Variable.Class */
+.vg { color: #c82829 } /* Name.Variable.Global */
+.vi { color: #c82829 } /* Name.Variable.Instance */
+.il { color: #f5871f } /* Literal.Number.Integer.Long */
diff --git a/design/css/code_blocks/tomorrow_night.css b/design/css/code_blocks/tomorrow_night.css
new file mode 100644
index 0000000..ed1ff41
--- /dev/null
+++ b/design/css/code_blocks/tomorrow_night.css
@@ -0,0 +1,70 @@
+/*
+  Tomorrow Night Pygments Theme
+*/
+
+pre  { background: #1d1f21; color: #c5c8c6 }
+
+.hll { background-color: #373b41 }
+.c { color: #969896 } /* Comment */
+.err { color: #cc6666 } /* Error */
+.k { color: #b294bb } /* Keyword */
+.l { color: #de935f } /* Literal */
+.n { color: #c5c8c6 } /* Name */
+.o { color: #8abeb7 } /* Operator */
+.p { color: #c5c8c6 } /* Punctuation */
+.cm { color: #969896 } /* Comment.Multiline */
+.cp { color: #969896 } /* Comment.Preproc */
+.c1 { color: #969896 } /* Comment.Single */
+.cs { color: #969896 } /* Comment.Special */
+.gd { color: #cc6666 } /* Generic.Deleted */
+.ge { font-style: italic } /* Generic.Emph */
+.gh { color: #c5c8c6; font-weight: bold } /* Generic.Heading */
+.gi { color: #b5bd68 } /* Generic.Inserted */
+.gp { color: #969896; font-weight: bold } /* Generic.Prompt */
+.gs { font-weight: bold } /* Generic.Strong */
+.gu { color: #8abeb7; font-weight: bold } /* Generic.Subheading */
+.kc { color: #b294bb } /* Keyword.Constant */
+.kd { color: #b294bb } /* Keyword.Declaration */
+.kn { color: #8abeb7 } /* Keyword.Namespace */
+.kp { color: #b294bb } /* Keyword.Pseudo */
+.kr { color: #b294bb } /* Keyword.Reserved */
+.kt { color: #f0c674 } /* Keyword.Type */
+.ld { color: #b5bd68 } /* Literal.Date */
+.m { color: #de935f } /* Literal.Number */
+.s { color: #b5bd68 } /* Literal.String */
+.na { color: #81a2be } /* Name.Attribute */
+.nb { color: #c5c8c6 } /* Name.Builtin */
+.nc { color: #f0c674 } /* Name.Class */
+.no { color: #cc6666 } /* Name.Constant */
+.nd { color: #8abeb7 } /* Name.Decorator */
+.ni { color: #c5c8c6 } /* Name.Entity */
+.ne { color: #cc6666 } /* Name.Exception */
+.nf { color: #81a2be } /* Name.Function */
+.nl { color: #c5c8c6 } /* Name.Label */
+.nn { color: #f0c674 } /* Name.Namespace */
+.nx { color: #81a2be } /* Name.Other */
+.py { color: #c5c8c6 } /* Name.Property */
+.nt { color: #8abeb7 } /* Name.Tag */
+.nv { color: #cc6666 } /* Name.Variable */
+.ow { color: #8abeb7 } /* Operator.Word */
+.w { color: #c5c8c6 } /* Text.Whitespace */
+.mf { color: #de935f } /* Literal.Number.Float */
+.mh { color: #de935f } /* Literal.Number.Hex */
+.mi { color: #de935f } /* Literal.Number.Integer */
+.mo { color: #de935f } /* Literal.Number.Oct */
+.sb { color: #b5bd68 } /* Literal.String.Backtick */
+.sc { color: #c5c8c6 } /* Literal.String.Char */
+.sd { color: #969896 } /* Literal.String.Doc */
+.s2 { color: #b5bd68 } /* Literal.String.Double */
+.se { color: #de935f } /* Literal.String.Escape */
+.sh { color: #b5bd68 } /* Literal.String.Heredoc */
+.si { color: #de935f } /* Literal.String.Interpol */
+.sx { color: #b5bd68 } /* Literal.String.Other */
+.sr { color: #b5bd68 } /* Literal.String.Regex */
+.s1 { color: #b5bd68 } /* Literal.String.Single */
+.ss { color: #b5bd68 } /* Literal.String.Symbol */
+.bp { color: #c5c8c6 } /* Name.Builtin.Pseudo */
+.vc { color: #cc6666 } /* Name.Variable.Class */
+.vg { color: #cc6666 } /* Name.Variable.Global */
+.vi { color: #cc6666 } /* Name.Variable.Instance */
+.il { color: #de935f } /* Literal.Number.Integer.Long */
diff --git a/design/css/header.jpg b/design/css/header.jpg
new file mode 100644
index 0000000..a87e23c
Binary files /dev/null and b/design/css/header.jpg differ
diff --git a/design/css/style.css b/design/css/style.css
new file mode 100644
index 0000000..c78d747
--- /dev/null
+++ b/design/css/style.css
@@ -0,0 +1,1888 @@
+/*! normalize.css v3.0.1 | MIT License | git.io/normalize */
+
+html {
+    font-family: sans-serif;
+    -ms-text-size-adjust: 100%;
+    -webkit-text-size-adjust: 100%
+}
+
+body {
+    margin: 0;
+}
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+nav,
+section,
+summary {
+    display: block
+}
+
+audio,
+canvas,
+progress,
+video {
+    display: inline-block;
+    vertical-align: baseline
+}
+
+audio:not([controls]) {
+    display: none;
+    height: 0
+}
+
+[hidden],
+template {
+    display: none
+}
+
+a {
+    background: 0 0
+}
+
+a:active,
+a:hover {
+    outline: 0
+}
+
+abbr[title] {
+    border-bottom: 1px dotted
+}
+
+b,
+strong {
+    font-weight: 700
+}
+
+dfn {
+    font-style: italic
+}
+
+h1 {
+    font-size: 2em;
+    margin: .67em 0
+}
+
+mark {
+    background: #ff0;
+    color: #000
+}
+
+small {
+    font-size: 80%
+}
+
+sub,
+sup {
+    font-size: 75%;
+    line-height: 0;
+    position: relative;
+    vertical-align: baseline
+}
+
+sup {
+    top: -.5em
+}
+
+sub {
+    bottom: -.25em
+}
+
+img {
+    border: 0
+}
+
+svg:not(:root) {
+    overflow: hidden
+}
+
+figure {
+    margin: 1em 40px
+}
+
+hr {
+    box-sizing: content-box;
+    height: 0
+}
+
+pre {
+    overflow: auto
+}
+
+code,
+kbd,
+pre,
+samp {
+    font-family: monospace, monospace;
+    font-size: 1em
+}
+
+button,
+input,
+optgroup,
+select,
+textarea {
+    color: inherit;
+    font: inherit;
+    margin: 0
+}
+
+button {
+    overflow: visible
+}
+
+button,
+select {
+    text-transform: none
+}
+
+button,
+html input[type=button],
+input[type=reset],
+input[type=submit] {
+    -webkit-appearance: button;
+    cursor: pointer
+}
+
+button[disabled],
+html input[disabled] {
+    cursor: default
+}
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+    border: 0;
+    padding: 0
+}
+
+input {
+    line-height: normal
+}
+
+input[type=checkbox],
+input[type=radio] {
+    box-sizing: border-box;
+    padding: 0
+}
+
+input[type=number]::-webkit-inner-spin-button,
+input[type=number]::-webkit-outer-spin-button {
+    height: auto
+}
+
+input[type=search] {
+    -webkit-appearance: textfield;
+    box-sizing: content-box
+}
+
+input[type=search]::-webkit-search-cancel-button,
+input[type=search]::-webkit-search-decoration {
+    -webkit-appearance: none
+}
+
+fieldset {
+    border: 1px solid silver;
+    margin: 0 2px;
+    padding: .35em .625em .75em
+}
+
+legend {
+    border: 0;
+    padding: 0
+}
+
+textarea {
+    overflow: auto
+}
+
+optgroup {
+    font-weight: 700
+}
+
+table {
+    border-collapse: collapse;
+    border-spacing: 0
+}
+
+td,
+th {
+    padding: 0
+}
+
+@font-face {
+  font-family: 'Classic Console Neue';
+  src: local('Classic Console Neue'), local('ClassicConsoleNeue'),
+       url('../font/clacon2.woff2') format('woff2')
+}
+
+@font-face {
+  font-family: 'IBM Plex Sans';
+  src: url('../font/IBMPlexSansHebrew-Bold.ttf');
+}
+
+@font-face {
+    font-family: 'icons';
+    src: url("../font/icons.eot?51058516");
+    src: url("../font/icons.eot?51058516#iefix") format("embedded-opentype"), url("../font/icons.woff?51058516") format("woff"), url("../font/icons.ttf?51058516") format("truetype"), url("../font/icons.svg?51058516#icons") format("svg");
+    font-weight: normal;
+    font-style: normal
+}
+
+[class^="ic-"]:before,
+[class*=" ic-"]:before {
+    font-family: 'icons';
+    font-style: normal;
+    font-weight: normal;
+    speak: none;
+    display: inline-block;
+    text-decoration: inherit;
+    width: 1em;
+    margin-right: .2em;
+    text-align: center;
+    font-variant: normal;
+    text-transform: none;
+    line-height: 1em;
+    margin-left: .2em
+}
+
+.ic-star:before {
+    content: '\e800'
+}
+
+.ic-rss:before {
+    content: '\e801'
+}
+
+.ic-posts:before {
+    content: '\e802'
+}
+
+.ic-location:before {
+    content: '\e803'
+}
+
+.ic-link:before {
+    content: '\e804'
+}
+
+.ic-googleplus:before {
+    content: '\e805'
+}
+
+.ic-facebook:before {
+    content: '\e806'
+}
+
+.ic-arrow-right:before {
+    content: '\e807'
+}
+
+.ic-arrow-left:before {
+    content: '\e808'
+}
+
+.ic-twitter:before {
+    content: '\e809'
+}
+
+.ic-menu:before {
+    content: '\e80a'
+}
+
+.hljs {
+    display: block;
+    color: #66645c;
+    -webkit-text-size-adjust: none
+}
+
+.hljs-comment,
+.diff .hljs-header,
+.hljs-javadoc {
+    color: #998;
+    font-style: italic
+}
+
+.hljs-keyword,
+.css .rule .hljs-keyword,
+.hljs-winutils,
+.nginx .hljs-title,
+.hljs-subst,
+.hljs-request,
+.hljs-status {
+    color: #333;
+    font-weight: bold
+}
+
+.hljs-number,
+.hljs-hexcolor,
+.ruby .hljs-constant {
+    color: #008080
+}
+
+.hljs-string,
+.hljs-tag .hljs-value,
+.hljs-phpdoc,
+.hljs-dartdoc,
+.tex .hljs-formula {
+    color: #d14
+}
+
+.hljs-title,
+.hljs-id,
+.scss .hljs-preprocessor {
+    color: #900;
+    font-weight: bold
+}
+
+.hljs-list .hljs-keyword,
+.hljs-subst {
+    font-weight: normal
+}
+
+.hljs-class .hljs-title,
+.hljs-type,
+.vhdl .hljs-literal,
+.tex .hljs-command {
+    color: #458;
+    font-weight: bold
+}
+
+.hljs-tag,
+.hljs-tag .hljs-title,
+.hljs-rule .hljs-property,
+.django .hljs-tag .hljs-keyword {
+    color: #000080;
+    font-weight: normal
+}
+
+.hljs-attribute,
+.hljs-variable,
+.lisp .hljs-body,
+.hljs-name {
+    color: #008080
+}
+
+.hljs-regexp {
+    color: #009926
+}
+
+.hljs-symbol,
+.ruby .hljs-symbol .hljs-string,
+.lisp .hljs-keyword,
+.clojure .hljs-keyword,
+.scheme .hljs-keyword,
+.tex .hljs-special,
+.hljs-prompt {
+    color: #990073
+}
+
+.hljs-built_in {
+    color: #0086b3
+}
+
+.hljs-preprocessor,
+.hljs-pragma,
+.hljs-pi,
+.hljs-doctype,
+.hljs-shebang,
+.hljs-cdata {
+    color: #999;
+    font-weight: bold
+}
+
+.hljs-deletion {
+    background: #fdd
+}
+
+.hljs-addition {
+    background: #dfd
+}
+
+.diff .hljs-change {
+    background: #0086b3
+}
+
+.hljs-chunk {
+    color: #aaa
+}
+
+@supports ((-ms-flex-wrap: wrap) or (flex-wrap: wrap)) {
+    body {
+        display: -ms-flexbox;
+        display: flex;
+        -ms-flex-direction: column;
+        flex-direction: column;
+        min-height: 100vh
+    }
+    #wrapper {
+        -ms-flex: 1;
+        flex: 1
+    }
+}
+
+html {
+    font-size: 62.5%;
+    overflow-x: hidden
+}
+
+html.menu-active,
+.menu-active body {
+    overflow-y: hidden
+}
+
+body {
+    font-size: 2em;
+    line-height: 1.5em;
+    font-family: 'Classic Console Neue', sans-serif;
+    color: rgba(255, 255, 255, 0.8);
+    text-rendering: optimizeLegibility;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+    overflow-x: hidden;
+    background-color: #090A0E;
+}
+
+a {
+    color: #090A0E;
+    background-color: #626FAC;
+    font-weight: normal;
+    padding: 0.2em 0.3em 0em 0.3em;
+    text-decoration: none;
+    transition: all ease-out 0.2s
+}
+
+a:hover,
+a:focus {
+    color: #626FAC;
+    background-color: #090A0E;
+    text-decoration: none;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+    font-family: 'IBM Plex Sans', serif;
+    text-rendering: optimizeLegibility;
+    text-transform: uppercase;
+    color: rgba(255, 255, 255, 0.6);
+}
+
+h1 {
+    font-size: 4em;
+    line-height: 1em;
+    text-indent: -0.08em;
+}
+
+h2 {
+    font-size: 2em;
+    line-height: 1em;
+    text-indent: -0.08em;
+}
+
+h3 {
+    font-size: 1.5em;
+    line-height: 1.333em;
+}
+
+h4 {
+    font-size: 1.25em;
+    line-height: 1.2em;
+}
+
+h1 a,
+h2 a,
+h3 a,
+h4 a,
+h5 a,
+h6 a {
+    font-weight: inherit;
+    background: none;
+    color: #626FAC;
+}
+
+p,
+ul,
+ol {
+    margin: 2em auto
+}
+
+ul {
+    list-style: none
+}
+
+li {
+    position: relative
+}
+
+ul>li:before,
+ol>li:before {
+    position: absolute;
+    width: 1.5em;
+    margin-left: -2em;
+    font-family: 'Classic Console Neue', sans-serif;
+    font-size: 1em;
+    line-height: 1.5em;
+    text-align: right;
+}
+
+ul>li:before {
+    margin-top: 0.25em;
+    content: '*'
+}
+
+ol {
+    list-style-type: none;
+    counter-reset: item
+}
+
+ol>li:before {
+    content: counter(item) ". " !important;
+    counter-increment: item
+}
+
+ol ol,
+ul ul,
+ul ol,
+ol ul {
+    padding-left: 30px;
+    margin: 15px 0
+}
+
+hr {
+    display: block;
+    height: 1px;
+    margin: 2em 0;
+    padding: 0;
+    background: #e5e4e1;
+    border: 0
+}
+
+blockquote {
+    margin: 2em auto;
+    padding: 1em;
+    box-sizing: border-box;
+    border-left: 0.01em solid rgba(255, 255, 255, 0.6);
+    font-style: italic;
+    color: rgba(255, 255, 255, 0.6);
+}
+
+blockquote p {
+    margin: 1em auto
+}
+
+blockquote p:first-child {
+    margin-top: 0
+}
+
+blockquote p:last-child {
+    margin-bottom: 0
+}
+
+em,
+i {
+    font-style: italic;
+
+}
+
+strong,
+b {
+    color: #090A0E;
+    background-color: rgba(255, 255, 255, 0.8);
+    font-weight: normal;
+    padding: 0.2em 0.3em 0em 0.3em;
+}
+
+small {
+    font-size: 0.9em;
+
+}
+
+dl {
+    margin: 20px 0
+}
+
+dl dt {
+    float: left;
+    width: 180px;
+    overflow: hidden;
+    clear: left;
+    text-align: right;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    font-weight: bold;
+    margin-bottom: 10px
+}
+
+dl dd {
+    margin-left: 200px;
+    margin-bottom: 12px
+}
+
+mark {
+    background-color: #222534
+}
+
+code,
+tt {
+    position: relative;
+    margin: 0 0.333em;
+    padding: 0.333em 0.666em;
+    font-family: 'Inconsolata', monospace, sans-serif;
+    font-size: 0.75em;
+    white-space: pre;
+    background: #222534;
+    border: 1px solid #e5e4e1;
+    top: -2px
+}
+
+pre {
+    position: relative;
+    margin: 2em auto;
+    padding: 1em;
+    overflow: hidden;
+    font-family: 'Inconsolata', monospace, sans-serif;
+    white-space: pre;
+    background: #222534;
+    border: 1px solid #e5e4e1;
+    box-sizing: border-box
+}
+
+pre .lines {
+    position: absolute;
+    width: 2.666em;
+    height: 100%;
+    left: 0;
+    top: 0;
+    padding: 1.333em 0;
+    border-right: 1px solid #e5e4e1;
+    font-size: 0.75em;
+    line-height: 2em;
+    text-align: right;
+    box-sizing: border-box;
+    background: rgba(255, 255, 255, 0.5)
+}
+
+pre .lines .line {
+    display: block;
+    padding-right: 0.333em;
+    color: #45484d
+}
+
+pre code,
+pre tt {
+    position: static;
+    top: auto;
+    margin: -1.333em -1.333em -1.333em 1.333em;
+    padding: 1.333em;
+    overflow: scroll;
+    font-size: 0.75em;
+    line-height: 2em;
+    white-space: pre;
+    background: transparent;
+    border: none;
+    vertical-align: inherit
+}
+
+kbd {
+    display: inline-block;
+    margin-bottom: 0.5em;
+    padding: 1px 8px;
+    border: #e5e4e1 1px solid;
+    color: #45484d;
+    text-shadow: #fff 0 1px 0;
+    font-size: 0.9em;
+    font-weight: bold;
+    background: #222534;
+    border-radius: 4px;
+    box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 1px 0 0 #fff inset
+}
+
+table {
+    width: 100%;
+    max-width: 100%;
+    margin: 2em 0;
+    background-color: transparent;
+    border: 1px solid #e5e4e1
+}
+
+table th,
+table td {
+    position: relative;
+    padding: 0.5em;
+    line-height: 0.95em;
+    text-align: left;
+    border: 1px solid #e5e4e1
+}
+
+table th {
+    font-size: 0.75em;
+    line-height: 1.25em;
+    padding: 0.666em;
+    color: #626FAC;
+}
+
+table td:after {
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    left: -1px;
+    top: -1px;
+    padding: 1px;
+    z-index: -1;
+    content: '';
+    background: #222534
+}
+
+img {
+    display: block;
+    max-width: 100%;
+    height: auto;
+    margin: 2.5em auto
+}
+
+
+div .imgview-space {
+    display: block;
+    position: relative;
+}
+
+div .imgview-image {
+    display: block;
+    width: 100vw;
+    position: absolute;
+    left: 0;
+    z-index: 5;
+    background-attachment: fixed;
+    background-position: top;
+    background-repeat: no-repeat;
+    background-size: cover;
+}
+
+.clear {
+    clear: both
+}
+
+.hidden {
+    display: none
+}
+
+@keyframes fadein {
+    0% {
+        opacity: .2
+    }
+    100% {
+        opacity: .9
+    }
+}
+
+#blog-header {
+    position: relative;
+    padding: 6em 0;
+    text-align: center
+}
+
+#blog-header:after {
+    position: absolute;
+    width: 32em;
+    height: 1px;
+    left: 50%;
+    bottom: 0;
+    margin-left: -16em;
+    content: '';
+    background: #222534
+}
+
+#blog-header.has-cover {
+    padding: 9em 0 10em;
+    background: #000;
+    overflow: hidden;
+    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1)
+}
+
+.author-template #blog-header:after,
+#blog-header.has-cover:after {
+    display: none
+}
+
+.paged #blog-header.has-cover,
+.tag-template #blog-header {
+    padding: 4em 0
+}
+
+.author-template #blog-header.has-cover {
+    padding: 6em 0
+}
+
+.blog-cover {
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    left: 0;
+    top: 0;
+    z-index: 5;
+    background: no-repeat scroll center center/cover #000;
+    animation: 0.5s ease-in forwards fadein
+}
+
+.blog-cover:after {
+    position: absolute;
+    width: 100%;
+    height: 6em;
+    left: 0;
+    bottom: 0;
+    z-index: 5;
+    content: '';
+}
+
+.blog-logo {
+    position: fixed;
+    max-width: 2em;
+    left: 0;
+    top: 0;
+    margin: 1em;
+    z-index: 200
+}
+
+.blog-logo img {
+    display: block;
+    margin: 0 auto
+}
+
+.blog-name {
+    position: relative;
+    display: block;
+    z-index: 10;
+    margin: 0;
+    padding: 0;
+    font-size: 2em;
+    line-height: 1em;
+    text-decoration: none
+}
+
+.home-template .blog-name {
+    font-size: 3em
+}
+
+.has-cover .blog-name {
+}
+
+.blog-name a {
+    text-decoration: none;
+    font-weight: inherit;
+    color: inherit
+}
+
+.blog-description {
+    position: relative;
+    display: block;
+    z-index: 10;
+    margin: 0.25em 0;
+    padding: 0;
+    font-size: 1em;
+    line-height: 1.5em
+}
+
+.home-template .blog-description {
+    font-size: 1.5em
+}
+
+.has-cover .blog-description {
+}
+
+#wrapper {
+    position: relative;
+    padding-right: 0;
+    transition: all ease-out 0.25s
+}
+
+#wrapper .hidden-close {
+    display: none;
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    left: 0;
+    top: 0;
+    z-index: 350
+}
+
+#wrapper a,
+#wrapper a:hover,
+#wrapper a:focus {
+    background: none;
+}
+
+.menu-active #wrapper {
+    padding-right: 16em
+}
+
+.menu-active #wrapper .hidden-close {
+    display: block
+}
+
+.inner {
+    max-width: 32em;
+    margin: 0 auto;
+    padding: 0 2em
+}
+
+.nav-button {
+    position: fixed;
+    top: 0;
+    margin: 1em;
+    z-index: 200
+}
+
+.nav-button#home-button {
+    left: 0
+}
+
+.nav-button#menu-button {
+    right: 0
+}
+
+.nav-button a {
+    display: block;
+    height: 1.5em;
+    margin-bottom: 1em;
+    padding: 0.5em 1.25em;
+    border: 1px solid #59503A;
+    font-size: 0.75em;
+    line-height: 1.666em;
+    text-shadow: none;
+    cursor: pointer;
+    transition: color, border-color ease 0.3s;
+    border-radius: 2em
+}
+
+.nav-button a:hover,
+.nav-button a:focus {
+    color: #fff;
+    border-color: #fff
+}
+
+.cover-active .nav-button a {
+    border-color: rgba(255, 255, 255, 0.5);
+    background: transparent
+}
+
+.cover-active .nav-button a:hover,
+.cover-active .nav-button a:focus {
+    border-color: #fff
+}
+
+.nav-button a i {
+    display: inline-block;
+    color: inherit
+}
+
+.nav-button a i:before {
+    position: relative;
+    width: auto;
+    top: -2px;
+    margin: auto;
+    font-size: 0.625em;
+    line-height: 1.6em
+}
+
+#menu {
+    position: fixed;
+    width: 16em;
+    height: 100%;
+    top: 0;
+    right: 0;
+    background: #090A0E;
+    border-left: 1px solid #fff;
+    z-index: 400;
+    overflow: hidden;
+    box-shadow: inset -2px 0 7px rgba(0, 0, 0, 0.1);
+    transform: translate3d(16em, 0, 0);
+    transition: all ease-out 0.25s
+}
+
+.menu-active #menu {
+    transform: translate3d(0, 0, 0)
+}
+
+#menu .close-button {
+    position: absolute;
+    width: 2em;
+    height: 2em;
+    top: 0;
+    right: 0;
+    margin: 1em;
+    border: 1px solid #c2c7cc;
+    color: transparent;
+    cursor: pointer;
+    transition: all ease 0.3s;
+    border-radius: 2em;
+    box-sizing: border-box;
+    z-index: 500
+}
+
+#menu .close-button:hover,
+#menu .close-button:focus {
+    transform: rotate(180deg);
+    border-color: #fff
+}
+
+#menu .close-button:after,
+#menu .close-button:before {
+    position: absolute;
+    width: 1em;
+    height: 1px;
+    left: 50%;
+    top: 50%;
+    margin-left: -0.5em;
+    content: '';
+    background: #8a9199;
+    transition: all ease 0.3s
+}
+
+#menu .close-button:hover:after,
+#menu .close-button:hover:before,
+#menu .close-button:focus:after,
+#menu .close-button:focus:before {
+}
+
+#menu .close-button:after {
+    transform: rotate(45deg)
+}
+
+#menu .close-button:before {
+    transform: rotate(-45deg)
+}
+
+#menu .nav-wrapper {
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    overflow-x: hidden;
+    overflow-y: scroll;
+    box-sizing: border-box
+}
+
+#menu .nav-label {
+    color: #fff;
+    display: block;
+    padding: 1.666em 2em;
+    margin: 0;
+    opacity: 0.5;
+    font-size: 0.75em;
+    line-height: 2em
+}
+
+#menu ul {
+    position: relative;
+    width: 100%;
+    margin: auto;
+    padding: 0
+}
+
+#menu li {
+    position: relative
+}
+
+#menu li:before {
+    position: absolute;
+    width: 100%;
+    height: 1px;
+    left: 1.5em;
+    bottom: 0;
+    margin: auto;
+    content: '';
+    background: rgba(0, 0, 0, 0.1)
+}
+
+#menu li:last-child:before {
+    display: none
+}
+
+#menu li.active:after {
+    position: absolute;
+    content: '';
+    width: 0.2em;
+    height: 100%;
+    left: 0;
+    top: 0;
+}
+
+#menu li a {
+    display: block;
+    padding: 1.25em 1.5em;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+    font-weight: 400;
+    background: none;
+    color: rgba(255, 255, 255, 0.8);
+}
+
+#menu li a:hover,
+#menu li a:focus {
+    background: rgba(0, 0, 0, 0.05)
+}
+
+#menu li a i {
+    position: relative;
+    top: -0.25em;
+    font-size: 0.5em;
+    color: inherit
+}
+
+#menu li.active a {
+    font-weight: 500
+}
+
+.progress-container {
+    position: fixed;
+    width: 100%;
+    height: 4px;
+    left: 0;
+    top: 0;
+    z-index: 1000;
+    background: transparent;
+    transition: opacity ease-out 1s
+}
+
+.progress-container.ready {
+    opacity: 0.2
+}
+
+.progress-bar {
+    display: block;
+    width: 0;
+    height: 1px;
+    background: #626FAC;
+    box-shadow: 0 0 1px #626FAC, 0 0 3px #626FAC
+}
+
+#footer {
+    position: relative;
+    z-index: 20;
+    line-height: 1em;
+    padding-bottom: 6em
+}
+
+.credits {
+    text-align: center;
+    font-size: 0.625em;
+    line-height: 1em;
+    padding: 1.1em 0;
+    overflow: auto;
+    opacity: 0.5
+}
+
+.credits a {
+    color: inherit
+}
+
+.credits span {
+    display: block
+}
+
+.credits-theme {
+    float: left
+}
+
+.credits-software {
+    float: right
+}
+
+#blog-author {
+    position: relative;
+    z-index: 40;
+    margin: auto 6em
+}
+
+#blog-author:after {
+    position: absolute;
+    width: 32em;
+    height: 1px;
+    left: 50%;
+    bottom: 0;
+    margin-left: -16em;
+    content: '';
+    background: #e5e4e1
+}
+
+#blog-author .post-author {
+    margin-top: -5em;
+    padding-bottom: 3em;
+    border: 0
+}
+
+#blog-author .post-author-avatar {
+    width: 20%;
+    margin: 0 2.5%
+}
+
+#blog-author.has-cover .post-author-avatar {
+    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1)
+}
+
+#blog-author.has-cover .post-author-avatar img {
+    border: 0.125em solid #fff
+}
+
+#blog-author .post-author-name {
+    padding: 0.333em 0 0;
+    font-size: 2em;
+    line-height: 1em
+}
+
+#blog-author.has-cover .post-author-name {
+    padding: 0.333em 0;
+    font-weight: 500;
+    letter-spacing: 0.025em;
+    line-height: 1.333em;
+    color: #fff
+}
+
+#blog-author.has-cover .post-author-about {
+    margin-top: 1.333em
+}
+
+.container {
+    position: relative
+}
+
+.container .post {
+    padding: 4em 0
+}
+
+.container .post:after {
+    position: absolute;
+    width: 32em;
+    height: 1px;
+    left: 50%;
+    bottom: 0;
+    margin-left: -16em;
+    content: '';
+    background: #e5e4e1
+}
+
+.container .post.featured .post-title:after {
+    position: absolute;
+    width: 1em;
+    height: 1em;
+    left: -1.75em;
+    top: 0;
+    margin-top: -0.25em;
+    font-family: 'icons';
+    font-size: 0.5em;
+    font-style: normal;
+    font-weight: normal;
+    content: '\e800';
+    color: inherit;
+    text-align: center;
+    color: #e5e4e1
+}
+
+.post.page {
+    padding-bottom: 4em
+}
+
+.page-template #footer:after {
+    position: absolute;
+    width: 32em;
+    height: 1px;
+    left: 50%;
+    top: 0;
+    margin-left: -16em;
+    content: '';
+    background: #e5e4e1
+}
+
+#post-header {
+    position: relative;
+    padding-top: 6em
+}
+
+#post-header.has-cover {
+    padding: 16em 0 2em;
+    background: #000;
+    overflow: hidden;
+    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1)
+}
+
+.post-cover {
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    left: 0;
+    top: 0;
+    background: no-repeat scroll center center/cover #000;
+    animation: 0.5s ease-in forwards fadein
+}
+
+.post-cover:after {
+    position: absolute;
+    width: 100%;
+    height: 12em;
+    left: 0;
+    bottom: 0;
+    content: '';
+}
+
+.post {
+    position: relative;
+    padding-top: 2em;
+    z-index: 10
+}
+
+.post-title {
+    position: relative;
+    z-index: 10;
+    margin: 0 0 0.5em;
+    font-size: 2em;
+    line-height: 1em;
+    font-weight: 700;
+    text-indent: -1px;
+    color: #000
+}
+
+.has-cover .post-title {
+    color: #fff
+}
+
+.post-title a {
+    text-decoration: none;
+    color: inherit;
+    font-weight: inherit
+}
+
+.post-meta {
+    position: relative;
+    z-index: 10;
+    display: block;
+    margin-bottom: 1.333em;
+    font-family: 'Fira Sans', sans-serif;
+    font-size: 0.75em;
+    font-weight: 400;
+    line-height: 1.333em;
+    opacity: 0.5
+}
+
+.has-cover .post-meta {
+    color: #fff;
+    opacity: 0.75
+}
+
+.post-meta a {
+    color: rgba(255, 255, 255, 0.8);
+    background:none;
+    text-decoration: none;
+    border-bottom: 1px solid transparent
+}
+
+.post-meta a:hover,
+.post-meta a:focus {
+    border-color: rgba(0, 0, 0, 0.5)
+}
+
+.has-cover .post-meta a:hover,
+.has-cover .post-meta a:focus {
+    border-color: rgba(255, 255, 255, 0.5)
+}
+
+.post-excerpt p {
+    margin: 0
+}
+
+.post-content a {
+
+}
+
+.post-content a:hover,
+.post-content a:focus {
+
+}
+
+.post-content img,
+.post-content .fluid-width-video-wrapper {
+    max-width: none;
+    width: 110%;
+    margin-left: -5%
+}
+
+.post-info {
+    margin-top: 6em;
+    overflow: hidden
+}
+
+.post-share {
+    max-width: 25%;
+    float: right
+}
+
+.post-share a {
+    display: block;
+    width: 2em;
+    height: 2em;
+    margin: 0.333em 0 0.333em 0.666em;
+    padding: 0;
+    float: left;
+    font-size: 0.75em;
+    line-height: 2em;
+    text-align: center;
+    text-decoration: none;
+    color: #fff;
+    border-radius: 2px;
+    transition: all ease 0.3s
+}
+
+.post-share a:hover,
+.post-share a:focus {
+    background-color: #212226
+}
+
+.post-share a i {
+    color: inherit
+}
+
+.post-share a i:before {
+    width: auto;
+    height: auto
+}
+
+.post-share .twitter {
+    background-color: #3ea9dd
+}
+
+.post-share .facebook {
+    background-color: #3c5a98
+}
+
+.post-share .googleplus {
+    background-color: #d14836
+}
+
+.post-tags {
+    max-width: 75%;
+    float: left;
+    font-family: 'Fira Sans', sans-serif
+}
+
+.post-tags a {
+    display: inline-block;
+    margin: 0 0.333em 0.666em 0;
+    padding: 0.575em 1em;
+    background: #fff;
+    border: 1px solid #f26a3d;
+    font-size: 0.75em;
+    font-weight: 500;
+    line-height: 1.333em;
+    text-align: center;
+    text-decoration: none;
+    border-radius: 2em;
+    transition: all ease 0.3s;
+    box-sizing: border-box
+}
+
+.post-tags a:hover,
+.post-tags a:focus {
+    background: #f26a3d;
+    color: #fff
+}
+
+.post-author {
+    position: relative;
+    margin: 2em 0 0;
+    padding: 2em 0;
+    z-index: 10;
+    border-top: 1px solid #e5e4e1;
+    border-bottom: 1px solid #e5e4e1;
+    clear: both
+}
+
+.post-author-avatar {
+    position: relative;
+    float: left;
+    width: 15%;
+    margin: -0.5em 0 0 5%;
+    overflow: hidden;
+    background: #fff;
+    border-radius: 10em;
+    box-sizing: border-box
+}
+
+.post-author-avatar img {
+    width: 100%;
+    margin: auto;
+    border-radius: 10em;
+    box-sizing: border-box
+}
+
+.post-author-bio {
+    padding-left: 25%;
+    font-family: 'Fira Sans', sans-serif;
+    font-size: 0.75em;
+    line-height: 1.333em
+}
+
+.post-author-name {
+    margin: 0;
+    padding: 0;
+    font-size: 1.333em;
+    line-height: 1em;
+    text-indent: inherit
+}
+
+.post-author-about {
+    margin: 0.666em 0
+}
+
+.post-author-bio span {
+    position: relative;
+    font-size: 0.8em;
+    display: inline-block;
+    margin-top: 1.25em;
+    margin-right: 1.25em;
+    font-weight: 400;
+    opacity: 0.5
+}
+
+.post-author-bio i {
+    color: inherit
+}
+
+.post-author-bio a {
+    color: inherit;
+    text-decoration: none;
+    font-weight: inherit;
+    border-bottom: 1px solid transparent
+}
+
+.post-comments {
+    position: relative;
+    padding: 2em 0;
+    text-align: center;
+    border-bottom: 1px solid #e5e4e1;
+    box-sizing: border-box
+}
+
+.post-comments.activated {
+    margin: -1px 0 0;
+    padding: 1em;
+    background: #faf9f7;
+    border: 1px solid #e5e4e1
+}
+
+.post-comments-activate {
+    display: inline-block;
+    margin: 0;
+    padding: 0.5em 1.25em;
+    border: 1px solid #c2c7cc;
+    font-family: 'Fira Sans', sans-serif;
+    font-size: 0.75em;
+    line-height: 1.333em;
+    color: #8a9199;
+    text-align: center;
+    cursor: pointer;
+    transition: all ease 0.3s;
+    border-radius: 2em
+}
+
+.post-comments-activate:hover,
+.post-comments-activate:focus {
+    color: #f26a3d;
+    border-color: #f26a3d
+}
+
+.activated .post-comments-activate {
+    display: none
+}
+
+.post-nav {
+    position: relative;
+    border-bottom: 1px solid #e5e4e1
+}
+
+.post-nav:after {
+    position: absolute;
+    content: '';
+    width: 1px;
+    height: 100%;
+    left: 50%;
+    top: 0;
+    background: #e5e4e1;
+    z-index: 2
+}
+
+.post-nav-next,
+.post-nav-prev {
+    display: block;
+    width: 50%
+}
+
+.post-nav-next {
+    float: left
+}
+
+.post-nav-prev {
+    float: right
+}
+
+.post-nav-teaser {
+    padding: 1.5em 0;
+    min-height: 6em
+}
+
+.post-nav-next .post-nav-teaser {
+    padding-right: 1em
+}
+
+.post-nav-prev .post-nav-teaser {
+    padding-left: 1em
+}
+
+.post-nav i {
+    position: absolute;
+    top: 50%;
+    width: 2em;
+    height: 2em;
+    margin-top: -1em;
+    font-size: 2em;
+    line-height: 2em;
+    text-align: center;
+    transition: all ease-out 0.3s;
+}
+
+.post-nav-next i {
+    left: 0;
+    margin-left: -1.75em
+}
+
+.post-nav-prev i {
+    right: 0;
+    margin-right: -1.75em
+}
+
+.post-nav a:hover i,
+.post-nav a:focus i {
+    color: #f26a3d
+}
+
+.post-nav-title {
+    margin: 0 0 0.5em;
+    padding: 0;
+    font-size: 1em;
+    line-height: 1em;
+    color: inherit
+}
+
+.post-nav-excerpt {
+    margin: 0;
+    font-size: 0.75em;
+    line-height: 1.333em
+}
+
+.pagination {
+    position: relative;
+    height: 2em;
+    margin: 0;
+    padding: 2em 0;
+    font-family: 'Fira Sans', sans-serif
+}
+
+.pagination:after {
+    position: absolute;
+    width: 32em;
+    height: 1px;
+    left: 50%;
+    bottom: 0;
+    margin-left: -16em;
+    content: '';
+    background: #e5e4e1
+}
+
+.pagination a {
+    position: relative;
+    display: block;
+    height: 1.333em;
+    margin: -1px 0;
+    padding: 0.666em 1em;
+    z-index: 100;
+    border: 1px solid #c2c7cc;
+    font-size: 0.75em;
+    line-height: 1.5em;
+    text-align: center;
+    text-decoration: none;
+    color: #8a9199;
+    transition: all ease 0.3s;
+    border-radius: 2em
+}
+
+.pagination .pagination-prev {
+    float: right;
+    padding-left: 1.333em
+}
+
+.pagination .pagination-next {
+    float: left;
+    padding-right: 1.333em
+}
+
+.pagination a:hover,
+.pagination a:focus {
+    color: #f26a3d;
+    border-color: #f26a3d
+}
+
+.pagination .pagination-label {
+    position: relative;
+    display: inline-block;
+    height: 1em;
+    line-height: 1em
+}
+
+.pagination a i {
+    position: relative;
+    width: auto;
+    top: -1px;
+    margin: auto;
+    color: inherit;
+    font-size: 0.75em;
+    line-height: 1.333em
+}
+
+.pagination .pagination-info {
+    position: absolute;
+    width: 100%;
+    height: 2.666em;
+    left: 0;
+    z-index: 50;
+    display: block;
+    font-size: 0.75em;
+    line-height: 2.666em;
+    text-align: center
+}
+
+.extra-pagination {
+    display: none
+}
+
+.extra-pagination .pagination:after {
+    top: auto;
+    bottom: 0
+}
+
+.archive-template .extra-pagination {
+    display: block
+}
+
+@media only screen and (max-width: 960px) {
+    #wrapper {
+        transform: translate3d(0, 0, 0)
+    }
+    .menu-active #wrapper {
+        padding-right: 0;
+        transform: translate3d(-16em, 0, 0)
+    }
+    .blog-logo,
+    .nav-button {
+        position: absolute
+    }
+    #blog-author {
+        margin: auto
+    }
+}
+
+@media only screen and (max-width: 640px) {
+    html {
+        font-size: 50%
+    }
+    .post-share,
+    .post-tags {
+        max-width: none;
+        float: none;
+        margin: 0 0 2em
+    }
+    .post-share a {
+        margin-left: 0;
+        margin-right: 0.666em
+    }
+    .post-nav i {
+        font-size: 1.5em
+    }
+}
+
+@media only screen and (max-width: 480px) {
+    .inner {
+        padding: 0 16px
+    }
+    .post-template #main-header {
+        padding: 16px 0
+    }
+    #main-nav a {
+        margin: 16px
+    }
+    .post-author-avatar {
+        margin: -0.25em 0 0 0.5em
+    }
+    .container .post.featured .post-title:after {
+        left: 0;
+        top: -1.75em
+    }
+    .post-content img,
+    .post-content .fluid-width-video-wrapper {
+        width: 100%;
+        margin-left: auto
+    }
+    .post-nav:after {
+        display: none
+    }
+    .post-nav-next,
+    .post-nav-prev {
+        display: block;
+        width: 100%
+    }
+    .post-nav-teaser {
+        position: relative;
+        min-height: 4em;
+        padding: 2em 0
+    }
+    .post-nav-next .post-nav-teaser:after {
+        position: absolute;
+        content: '';
+        width: 100%;
+        height: 1px;
+        left: 0;
+        bottom: 0;
+        margin-bottom: -1px;
+        background: #e5e4e1;
+        z-index: 2
+    }
+    .post-nav-next .post-nav-teaser {
+        padding-right: 0;
+        padding-left: 1.5em
+    }
+    .post-nav-prev .post-nav-teaser {
+        padding-left: 0;
+        padding-right: 1.5em
+    }
+    .post-nav-next i {
+        margin-left: -1em
+    }
+    .post-nav-prev i {
+        margin-right: -1em
+    }
+}
+
+@media only screen and (max-width: 320px) {
+    .pagination .pagination-label {
+        display: none
+    }
+}
+
+
+/*# sourceMappingURL=data:application/json;base64,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ImZpbGUiOiJzdHlsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgbm9ybWFsaXplLmNzcyB2My4wLjEgfCBNSVQgTGljZW5zZSB8IGdpdC5pby9ub3JtYWxpemUgKi9odG1se2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7LW1zLXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJX1ib2R5e21hcmdpbjowfWFydGljbGUsYXNpZGUsZGV0YWlscyxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsaGVhZGVyLGhncm91cCxtYWluLG5hdixzZWN0aW9uLHN1bW1hcnl7ZGlzcGxheTpibG9ja31hdWRpbyxjYW52YXMscHJvZ3Jlc3MsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9YXVkaW86bm90KFtjb250cm9sc10pe2Rpc3BsYXk6bm9uZTtoZWlnaHQ6MH1baGlkZGVuXSx0ZW1wbGF0ZXtkaXNwbGF5Om5vbmV9YXtiYWNrZ3JvdW5kOjAgMH1hOmFjdGl2ZSxhOmhvdmVye291dGxpbmU6MH1hYmJyW3RpdGxlXXtib3JkZXItYm90dG9tOjFweCBkb3R0ZWR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6NzAwfWRmbntmb250LXN0eWxlOml0YWxpY31oMXtmb250LXNpemU6MmVtO21hcmdpbjouNjdlbSAwfW1hcmt7YmFja2dyb3VuZDojZmYwO2NvbG9yOiMwMDB9c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MDtwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1zdXB7dG9wOi0uNWVtfXN1Yntib3R0b206LS4yNWVtfWltZ3tib3JkZXI6MH1zdmc6bm90KDpyb290KXtvdmVyZmxvdzpoaWRkZW59ZmlndXJle21hcmdpbjoxZW0gNDBweH1ocnstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveDtoZWlnaHQ6MH1wcmV7b3ZlcmZsb3c6YXV0b31jb2RlLGtiZCxwcmUsc2FtcHtmb250LWZhbWlseTptb25vc3BhY2UsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxZW19YnV0dG9uLGlucHV0LG9wdGdyb3VwLHNlbGVjdCx0ZXh0YXJlYXtjb2xvcjppbmhlcml0O2ZvbnQ6aW5oZXJpdDttYXJnaW46MH1idXR0b257b3ZlcmZsb3c6dmlzaWJsZX1idXR0b24sc2VsZWN0e3RleHQtdHJhbnNmb3JtOm5vbmV9YnV0dG9uLGh0bWwgaW5wdXRbdHlwZT1idXR0b25dLGlucHV0W3R5cGU9cmVzZXRdLGlucHV0W3R5cGU9c3VibWl0XXstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9uO2N1cnNvcjpwb2ludGVyfWJ1dHRvbltkaXNhYmxlZF0saHRtbCBpbnB1dFtkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9YnV0dG9uOjotbW96LWZvY3VzLWlubmVyLGlucHV0OjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowO3BhZGRpbmc6MH1pbnB1dHtsaW5lLWhlaWdodDpub3JtYWx9aW5wdXRbdHlwZT1jaGVja2JveF0saW5wdXRbdHlwZT1yYWRpb117Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MH1pbnB1dFt0eXBlPW51bWJlcl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24saW5wdXRbdHlwZT1udW1iZXJdOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfWlucHV0W3R5cGU9c2VhcmNoXXstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkOy1tb3otYm94LXNpemluZzpjb250ZW50LWJveDstd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveH1pbnB1dFt0eXBlPXNlYXJjaF06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24saW5wdXRbdHlwZT1zZWFyY2hdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfWZpZWxkc2V0e2JvcmRlcjoxcHggc29saWQgc2lsdmVyO21hcmdpbjowIDJweDtwYWRkaW5nOi4zNWVtIC42MjVlbSAuNzVlbX1sZWdlbmR7Ym9yZGVyOjA7cGFkZGluZzowfXRleHRhcmVhe292ZXJmbG93OmF1dG99b3B0Z3JvdXB7Zm9udC13ZWlnaHQ6NzAwfXRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfXRkLHRoe3BhZGRpbmc6MH1AZm9udC1mYWNle2ZvbnQtZmFtaWx5OidpY29ucyc7c3JjOnVybChcIi4uL2ZvbnQvaWNvbnMuZW90PzUxMDU4NTE2XCIpO3NyYzp1cmwoXCIuLi9mb250L2ljb25zLmVvdD81MTA1ODUxNiNpZWZpeFwiKSBmb3JtYXQoXCJlbWJlZGRlZC1vcGVudHlwZVwiKSx1cmwoXCIuLi9mb250L2ljb25zLndvZmY/NTEwNTg1MTZcIikgZm9ybWF0KFwid29mZlwiKSx1cmwoXCIuLi9mb250L2ljb25zLnR0Zj81MTA1ODUxNlwiKSBmb3JtYXQoXCJ0cnVldHlwZVwiKSx1cmwoXCIuLi9mb250L2ljb25zLnN2Zz81MTA1ODUxNiNpY29uc1wiKSBmb3JtYXQoXCJzdmdcIik7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc3R5bGU6bm9ybWFsfVtjbGFzc149XCJpYy1cIl06YmVmb3JlLFtjbGFzcyo9XCIgaWMtXCJdOmJlZm9yZXtmb250LWZhbWlseTonaWNvbnMnO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDtzcGVhazpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RleHQtZGVjb3JhdGlvbjppbmhlcml0O3dpZHRoOjFlbTttYXJnaW4tcmlnaHQ6LjJlbTt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXZhcmlhbnQ6bm9ybWFsO3RleHQtdHJhbnNmb3JtOm5vbmU7bGluZS1oZWlnaHQ6MWVtO21hcmdpbi1sZWZ0Oi4yZW19LmljLXN0YXI6YmVmb3Jle2NvbnRlbnQ6J1xcZTgwMCd9LmljLXJzczpiZWZvcmV7Y29udGVudDonXFxlODAxJ30uaWMtcG9zdHM6YmVmb3Jle2NvbnRlbnQ6J1xcZTgwMid9LmljLWxvY2F0aW9uOmJlZm9yZXtjb250ZW50OidcXGU4MDMnfS5pYy1saW5rOmJlZm9yZXtjb250ZW50OidcXGU4MDQnfS5pYy1nb29nbGVwbHVzOmJlZm9yZXtjb250ZW50OidcXGU4MDUnfS5pYy1mYWNlYm9vazpiZWZvcmV7Y29udGVudDonXFxlODA2J30uaWMtYXJyb3ctcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6J1xcZTgwNyd9LmljLWFycm93LWxlZnQ6YmVmb3Jle2NvbnRlbnQ6J1xcZTgwOCd9LmljLXR3aXR0ZXI6YmVmb3Jle2NvbnRlbnQ6J1xcZTgwOSd9LmljLW1lbnU6YmVmb3Jle2NvbnRlbnQ6J1xcZTgwYSd9QGZvbnQtZmFjZXtmb250LWZhbWlseTonQ2FyZG8nO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjQwMDtzcmM6bG9jYWwoXCJDYXJkb1wiKSxsb2NhbChcIkNhcmRvLVJlZ3VsYXJcIiksdXJsKFwiLy9mb250cy5nc3RhdGljLmNvbS9zL2NhcmRvL3Y4L2Y5R2JPMF9Mbnd3dWFSQzZ5QWgwSktDV2N5bmZfY0R4WHdDTHhpaXhHMWMud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksdXJsKFwiLy9mb250cy5nc3RhdGljLmNvbS9zL2NhcmRvL3Y4L2M2WmlfdWxxN2h2LWF2ay1HOVl1dDZDV2N5bmZfY0R4WHdDTHhpaXhHMWMud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpfUBmb250LWZhY2V7Zm9udC1mYW1pbHk6J0NhcmRvJztmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDo3MDA7c3JjOmxvY2FsKFwiQ2FyZG8gQm9sZFwiKSxsb2NhbChcIkNhcmRvLUJvbGRcIiksdXJsKFwiLy9mb250cy5nc3RhdGljLmNvbS9zL2NhcmRvL3Y4L1gtMUJFSFRLcFJZemFkM0pFWHk5LW5ZaGpiU3B2YzQ3ZWU2eFJfODBIbncud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksdXJsKFwiLy9mb250cy5nc3RhdGljLmNvbS9zL2NhcmRvL3Y4L2dIQzFLZ1JQZFZOZHZ2VmN4TE1DWTNZaGpiU3B2YzQ3ZWU2eFJfODBIbncud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpfUBmb250LWZhY2V7Zm9udC1mYW1pbHk6J0NhcmRvJztmb250LXN0eWxlOml0YWxpYztmb250LXdlaWdodDo0MDA7c3JjOmxvY2FsKFwiQ2FyZG8gSXRhbGljXCIpLGxvY2FsKFwiQ2FyZG8tSXRhbGljXCIpLHVybChcIi8vZm9udHMuZ3N0YXRpYy5jb20vcy9jYXJkby92OC9hUnBLZWxEZ3gxM292NmFzdkMzUWJnTFV1RXBUeW9Vc3RxRW01QU1sSm80LndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLHVybChcIi8vZm9udHMuZ3N0YXRpYy5jb20vcy9jYXJkby92OC9tU0tTeEFJeWJQVGZSb2lrN3hBZVRRTFV1RXBUeW9Vc3RxRW01QU1sSm80LndvZmZcIikgZm9ybWF0KFwid29mZlwiKX1AZm9udC1mYWNle2ZvbnQtZmFtaWx5OidGaXJhIFNhbnMnO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjQwMDtzcmM6bG9jYWwoXCJGaXJhIFNhbnNcIiksbG9jYWwoXCJGaXJhU2Fucy1SZWd1bGFyXCIpLHVybChcIi8vZm9udHMuZ3N0YXRpYy5jb20vcy9maXJhc2Fucy92NS9FanNyekRrUVVRQ0R3c0J0THBjVlFaQncxeFUxcktwdEpqXzBqYW5zOTIwLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLHVybChcIi8vZm9udHMuZ3N0YXRpYy5jb20vcy9maXJhc2Fucy92NS9FanNyekRrUVVRQ0R3c0J0THBjVlFiTzNMZGNBWllXbDlTaTZ2dnhMLXFVLndvZmZcIikgZm9ybWF0KFwid29mZlwiKX1AZm9udC1mYWNle2ZvbnQtZmFtaWx5OidGaXJhIFNhbnMnO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjUwMDtzcmM6bG9jYWwoXCJGaXJhIFNhbnMgTWVkaXVtXCIpLGxvY2FsKFwiRmlyYVNhbnMtTWVkaXVtXCIpLHVybChcIi8vZm9udHMuZ3N0YXRpYy5jb20vcy9maXJhc2Fucy92NS96TTJ1OFYzQ3VQVndBQVhGUWNEaTRCYW1wdTVfN0NqSFc1c3B4b2VOM1ZzLndvZmYyXCIpIGZvcm1hdChcIndvZmYyXCIpLHVybChcIi8vZm9udHMuZ3N0YXRpYy5jb20vcy9maXJhc2Fucy92NS96TTJ1OFYzQ3VQVndBQVhGUWNEaTRLUkRPemppUGNZbkZvb09VR0NPc1JrLndvZmZcIikgZm9ybWF0KFwid29mZlwiKX1AZm9udC1mYWNle2ZvbnQtZmFtaWx5OidGaXJhIFNhbnMnO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjcwMDtzcmM6bG9jYWwoXCJGaXJhIFNhbnMgQm9sZFwiKSxsb2NhbChcIkZpcmFTYW5zLUJvbGRcIiksdXJsKFwiLy9mb250cy5nc3RhdGljLmNvbS9zL2ZpcmFzYW5zL3Y1L0R1Z1BkU2xqbU9Ub2NaT1IyQ0l0T2hhbXB1NV83Q2pIVzVzcHhvZU4zVnMud29mZjJcIikgZm9ybWF0KFwid29mZjJcIiksdXJsKFwiLy9mb250cy5nc3RhdGljLmNvbS9zL2ZpcmFzYW5zL3Y1L0R1Z1BkU2xqbU9Ub2NaT1IyQ0l0T3FSRE96amlQY1luRm9vT1VHQ09zUmsud29mZlwiKSBmb3JtYXQoXCJ3b2ZmXCIpfS5obGpze2Rpc3BsYXk6YmxvY2s7Y29sb3I6IzY2NjQ1Yzstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6bm9uZX0uaGxqcy1jb21tZW50LC5kaWZmIC5obGpzLWhlYWRlciwuaGxqcy1qYXZhZG9je2NvbG9yOiM5OTg7Zm9udC1zdHlsZTppdGFsaWN9LmhsanMta2V5d29yZCwuY3NzIC5ydWxlIC5obGpzLWtleXdvcmQsLmhsanMtd2ludXRpbHMsLm5naW54IC5obGpzLXRpdGxlLC5obGpzLXN1YnN0LC5obGpzLXJlcXVlc3QsLmhsanMtc3RhdHVze2NvbG9yOiMzMzM7Zm9udC13ZWlnaHQ6Ym9sZH0uaGxqcy1udW1iZXIsLmhsanMtaGV4Y29sb3IsLnJ1YnkgLmhsanMtY29uc3RhbnR7Y29sb3I6IzAwODA4MH0uaGxqcy1zdHJpbmcsLmhsanMtdGFnIC5obGpzLXZhbHVlLC5obGpzLXBocGRvYywuaGxqcy1kYXJ0ZG9jLC50ZXggLmhsanMtZm9ybXVsYXtjb2xvcjojZDE0fS5obGpzLXRpdGxlLC5obGpzLWlkLC5zY3NzIC5obGpzLXByZXByb2Nlc3Nvcntjb2xvcjojOTAwO2ZvbnQtd2VpZ2h0OmJvbGR9LmhsanMtbGlzdCAuaGxqcy1rZXl3b3JkLC5obGpzLXN1YnN0e2ZvbnQtd2VpZ2h0Om5vcm1hbH0uaGxqcy1jbGFzcyAuaGxqcy10aXRsZSwuaGxqcy10eXBlLC52aGRsIC5obGpzLWxpdGVyYWwsLnRleCAuaGxqcy1jb21tYW5ke2NvbG9yOiM0NTg7Zm9udC13ZWlnaHQ6Ym9sZH0uaGxqcy10YWcsLmhsanMtdGFnIC5obGpzLXRpdGxlLC5obGpzLXJ1bGUgLmhsanMtcHJvcGVydHksLmRqYW5nbyAuaGxqcy10YWcgLmhsanMta2V5d29yZHtjb2xvcjojMDAwMDgwO2ZvbnQtd2VpZ2h0Om5vcm1hbH0uaGxqcy1hdHRyaWJ1dGUsLmhsanMtdmFyaWFibGUsLmxpc3AgLmhsanMtYm9keSwuaGxqcy1uYW1le2NvbG9yOiMwMDgwODB9LmhsanMtcmVnZXhwe2NvbG9yOiMwMDk5MjZ9LmhsanMtc3ltYm9sLC5ydWJ5IC5obGpzLXN5bWJvbCAuaGxqcy1zdHJpbmcsLmxpc3AgLmhsanMta2V5d29yZCwuY2xvanVyZSAuaGxqcy1rZXl3b3JkLC5zY2hlbWUgLmhsanMta2V5d29yZCwudGV4IC5obGpzLXNwZWNpYWwsLmhsanMtcHJvbXB0e2NvbG9yOiM5OTAwNzN9LmhsanMtYnVpbHRfaW57Y29sb3I6IzAwODZiM30uaGxqcy1wcmVwcm9jZXNzb3IsLmhsanMtcHJhZ21hLC5obGpzLXBpLC5obGpzLWRvY3R5cGUsLmhsanMtc2hlYmFuZywuaGxqcy1jZGF0YXtjb2xvcjojOTk5O2ZvbnQtd2VpZ2h0OmJvbGR9LmhsanMtZGVsZXRpb257YmFja2dyb3VuZDojZmRkfS5obGpzLWFkZGl0aW9ue2JhY2tncm91bmQ6I2RmZH0uZGlmZiAuaGxqcy1jaGFuZ2V7YmFja2dyb3VuZDojMDA4NmIzfS5obGpzLWNodW5re2NvbG9yOiNhYWF9QHN1cHBvcnRzIChmbGV4LXdyYXA6IHdyYXApe2JvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4taGVpZ2h0OjEwMHZofSN3cmFwcGVye2ZsZXg6MX19aHRtbHtmb250LXNpemU6NjIuNSU7b3ZlcmZsb3cteDpoaWRkZW59aHRtbC5tZW51LWFjdGl2ZSwubWVudS1hY3RpdmUgYm9keXtvdmVyZmxvdy15OmhpZGRlbn1ib2R5e2ZvbnQ6NDAwIDJlbSAvIDEuNWVtICdDYXJkbycsIHNlcmlmO2NvbG9yOiM0NTQ4NGQ7dGV4dC1yZW5kZXJpbmc6b3B0aW1pemVMZWdpYmlsaXR5Oy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWQ7LW1vei1vc3gtZm9udC1zbW9vdGhpbmc6Z3JheXNjYWxlO292ZXJmbG93LXg6aGlkZGVufWF7Y29sb3I6IzIxMjIyNjt0ZXh0LWRlY29yYXRpb246bm9uZTtmb250LXdlaWdodDo0MDA7dHJhbnNpdGlvbjphbGwgZWFzZS1vdXQgMC4yc31hOmhvdmVyLGE6Zm9jdXN7Y29sb3I6IzAwMH1oMSxoMixoMyxoNCxoNSxoNntmb250LWZhbWlseTonRmlyYSBTYW5zJywgc2Fucy1zZXJpZjt0ZXh0LXJlbmRlcmluZzpvcHRpbWl6ZUxlZ2liaWxpdHk7Y29sb3I6IzAwMH1oMXtmb250LXNpemU6MmVtO2xpbmUtaGVpZ2h0OjFlbTt0ZXh0LWluZGVudDotMXB4O21hcmdpbjoyZW0gMCAtMC41ZW19aDJ7Zm9udC1zaXplOjEuNzVlbTtsaW5lLWhlaWdodDoxLjExMWVtO3RleHQtaW5kZW50Oi0xcHg7bWFyZ2luOjIuMjg2ZW0gMCAtMC41NzFlbX1oM3tmb250LXNpemU6MS41ZW07bGluZS1oZWlnaHQ6MS4zMzNlbTttYXJnaW46MmVtIDAgLTAuNjY2ZW19aDR7Zm9udC1zaXplOjEuMjVlbTtsaW5lLWhlaWdodDoxLjJlbTttYXJnaW46Mi40ZW0gMCAtMC44ZW19aDEgYSxoMiBhLGgzIGEsaDQgYSxoNSBhLGg2IGF7Zm9udC13ZWlnaHQ6aW5oZXJpdH1wLHVsLG9se21hcmdpbjoyZW0gYXV0b311bHtsaXN0LXN0eWxlOm5vbmV9bGl7cG9zaXRpb246cmVsYXRpdmV9dWw+bGk6YmVmb3JlLG9sPmxpOmJlZm9yZXtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxLjVlbTttYXJnaW4tbGVmdDotMmVtO2ZvbnQtZmFtaWx5OidGaXJhIFNhbnMnLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxZW07Zm9udC13ZWlnaHQ6NTAwO2xpbmUtaGVpZ2h0OjEuNWVtO3RleHQtYWxpZ246cmlnaHQ7Y29sb3I6IzAwMH11bD5saTpiZWZvcmV7bWFyZ2luLXRvcDowLjI1ZW07Y29udGVudDonKid9b2x7bGlzdC1zdHlsZS10eXBlOm5vbmU7Y291bnRlci1yZXNldDppdGVtfW9sPmxpOmJlZm9yZXtjb250ZW50OmNvdW50ZXIoaXRlbSkgXCIuIFwiICFpbXBvcnRhbnQ7Y291bnRlci1pbmNyZW1lbnQ6aXRlbX1vbCBvbCx1bCB1bCx1bCBvbCxvbCB1bHtwYWRkaW5nLWxlZnQ6MzBweDttYXJnaW46MTVweCAwfWhye2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjFweDttYXJnaW46MmVtIDA7cGFkZGluZzowO2JhY2tncm91bmQ6I2U1ZTRlMTtib3JkZXI6MH1ibG9ja3F1b3Rle21hcmdpbjoyZW0gYXV0bztwYWRkaW5nOjFlbTstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLWxlZnQ6MC4yNWVtIHNvbGlkICNlNWU0ZTE7Zm9udC1zdHlsZTppdGFsaWM7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM0NTQ4NGQ7YmFja2dyb3VuZDojZmFmOWY3fWJsb2NrcXVvdGUgcHttYXJnaW46MWVtIGF1dG99YmxvY2txdW90ZSBwOmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH1ibG9ja3F1b3RlIHA6bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9ZW0saXtmb250LXN0eWxlOml0YWxpYztjb2xvcjojMjEyMjI2fXN0cm9uZyxie2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojMjEyMjI2fXNtYWxse2ZvbnQtc2l6ZTowLjllbTtjb2xvcjojNDU0ODRkfWRse21hcmdpbjoyMHB4IDB9ZGwgZHR7ZmxvYXQ6bGVmdDt3aWR0aDoxODBweDtvdmVyZmxvdzpoaWRkZW47Y2xlYXI6bGVmdDt0ZXh0LWFsaWduOnJpZ2h0O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO2ZvbnQtd2VpZ2h0OmJvbGQ7bWFyZ2luLWJvdHRvbToxMHB4fWRsIGRke21hcmdpbi1sZWZ0OjIwMHB4O21hcmdpbi1ib3R0b206MTJweH1tYXJre2JhY2tncm91bmQtY29sb3I6I2ZmYzMzNn1jb2RlLHR0e3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbjowIDAuMzMzZW07cGFkZGluZzowLjMzM2VtIDAuNjY2ZW07Zm9udC1mYW1pbHk6J0luY29uc29sYXRhJywgbW9ub3NwYWNlLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZTowLjc1ZW07d2hpdGUtc3BhY2U6cHJlO2JhY2tncm91bmQ6I2ZhZjlmNztib3JkZXI6MXB4IHNvbGlkICNlNWU0ZTE7dG9wOi0ycHh9cHJle3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbjoyZW0gYXV0bztwYWRkaW5nOjFlbTtvdmVyZmxvdzpoaWRkZW47Zm9udC1mYW1pbHk6J0luY29uc29sYXRhJywgbW9ub3NwYWNlLCBzYW5zLXNlcmlmO3doaXRlLXNwYWNlOnByZTtiYWNrZ3JvdW5kOiNmYWY5Zjc7Ym9yZGVyOjFweCBzb2xpZCAjZTVlNGUxO2JveC1zaXppbmc6Ym9yZGVyLWJveH1wcmUgLmxpbmVze3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjIuNjY2ZW07aGVpZ2h0OjEwMCU7bGVmdDowO3RvcDowO3BhZGRpbmc6MS4zMzNlbSAwO2JvcmRlci1yaWdodDoxcHggc29saWQgI2U1ZTRlMTtmb250LXNpemU6MC43NWVtO2xpbmUtaGVpZ2h0OjJlbTt0ZXh0LWFsaWduOnJpZ2h0O2JveC1zaXppbmc6Ym9yZGVyLWJveDtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsMC41KX1wcmUgLmxpbmVzIC5saW5le2Rpc3BsYXk6YmxvY2s7cGFkZGluZy1yaWdodDowLjMzM2VtO2NvbG9yOiM0NTQ4NGR9cHJlIGNvZGUscHJlIHR0e3Bvc2l0aW9uOnN0YXRpYzt0b3A6YXV0bzttYXJnaW46LTEuMzMzZW0gLTEuMzMzZW0gLTEuMzMzZW0gMS4zMzNlbTtwYWRkaW5nOjEuMzMzZW07b3ZlcmZsb3c6c2Nyb2xsO2ZvbnQtc2l6ZTowLjc1ZW07bGluZS1oZWlnaHQ6MmVtO3doaXRlLXNwYWNlOnByZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjpub25lO3ZlcnRpY2FsLWFsaWduOmluaGVyaXR9a2Jke2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1ib3R0b206MC41ZW07cGFkZGluZzoxcHggOHB4O2JvcmRlcjojZTVlNGUxIDFweCBzb2xpZDtjb2xvcjojNDU0ODRkO3RleHQtc2hhZG93OiNmZmYgMCAxcHggMDtmb250LXNpemU6MC45ZW07Zm9udC13ZWlnaHQ6Ym9sZDtiYWNrZ3JvdW5kOiNmYWY5Zjc7Ym9yZGVyLXJhZGl1czo0cHg7Ym94LXNoYWRvdzowIDFweCAwIHJnYmEoMCwwLDAsMC4yKSwwIDFweCAwIDAgI2ZmZiBpbnNldH10YWJsZXt3aWR0aDoxMDAlO21heC13aWR0aDoxMDAlO21hcmdpbjoyZW0gMDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlcjoxcHggc29saWQgI2U1ZTRlMX10YWJsZSB0aCx0YWJsZSB0ZHtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOjAuNWVtO2xpbmUtaGVpZ2h0OjAuOTVlbTt0ZXh0LWFsaWduOmxlZnQ7Ym9yZGVyOjFweCBzb2xpZCAjZTVlNGUxfXRhYmxlIHRoe2ZvbnQtZmFtaWx5OidGaXJhIFNhbnMnLCBzYW5zLXNlcmlmO2ZvbnQtd2VpZ2h0OjUwMDtmb250LXNpemU6MC43NWVtO2xpbmUtaGVpZ2h0OjEuMjVlbTtwYWRkaW5nOjAuNjY2ZW07Y29sb3I6IzAwMH10YWJsZSB0ZDphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2xlZnQ6LTFweDt0b3A6LTFweDtwYWRkaW5nOjFweDt6LWluZGV4Oi0xO2NvbnRlbnQ6Jyc7YmFja2dyb3VuZDojZmFmOWY3fWltZ3tkaXNwbGF5OmJsb2NrO21heC13aWR0aDoxMDAlO2hlaWdodDphdXRvO21hcmdpbjoyLjVlbSBhdXRvfS5jbGVhcntjbGVhcjpib3RofS5oaWRkZW57ZGlzcGxheTpub25lfUBrZXlmcmFtZXMgZmFkZWluezAle29wYWNpdHk6LjJ9MTAwJXtvcGFjaXR5Oi45fX0jYmxvZy1oZWFkZXJ7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzo2ZW0gMDt0ZXh0LWFsaWduOmNlbnRlcn0jYmxvZy1oZWFkZXI6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MzJlbTtoZWlnaHQ6MXB4O2xlZnQ6NTAlO2JvdHRvbTowO21hcmdpbi1sZWZ0Oi0xNmVtO2NvbnRlbnQ6Jyc7YmFja2dyb3VuZDojZTVlNGUxfSNibG9nLWhlYWRlci5oYXMtY292ZXJ7cGFkZGluZzo5ZW0gMCAxMGVtO2JhY2tncm91bmQ6IzAwMDtvdmVyZmxvdzpoaWRkZW47dGV4dC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsMC4xKX0uYXV0aG9yLXRlbXBsYXRlICNibG9nLWhlYWRlcjphZnRlciwjYmxvZy1oZWFkZXIuaGFzLWNvdmVyOmFmdGVye2Rpc3BsYXk6bm9uZX0ucGFnZWQgI2Jsb2ctaGVhZGVyLmhhcy1jb3ZlciwudGFnLXRlbXBsYXRlICNibG9nLWhlYWRlcntwYWRkaW5nOjRlbSAwfS5hdXRob3ItdGVtcGxhdGUgI2Jsb2ctaGVhZGVyLmhhcy1jb3ZlcntwYWRkaW5nOjZlbSAwfS5ibG9nLWNvdmVye3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7bGVmdDowO3RvcDowO3otaW5kZXg6NTtiYWNrZ3JvdW5kOm5vLXJlcGVhdCBzY3JvbGwgY2VudGVyIGNlbnRlci9jb3ZlciAjMDAwO2FuaW1hdGlvbjowLjVzIGVhc2UtaW4gZm9yd2FyZHMgZmFkZWlufS5ibG9nLWNvdmVyOmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7aGVpZ2h0OjZlbTtsZWZ0OjA7Ym90dG9tOjA7ei1pbmRleDo4O2NvbnRlbnQ6Jyc7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCB0cmFuc3BhcmVudCAwJSwgcmdiYSgwLDAsMCwwLjUpIDEwMCUpfS5ibG9nLWxvZ297cG9zaXRpb246Zml4ZWQ7bWF4LXdpZHRoOjJlbTtsZWZ0OjA7dG9wOjA7bWFyZ2luOjFlbTt6LWluZGV4OjIwMH0uYmxvZy1sb2dvIGltZ3tkaXNwbGF5OmJsb2NrO21hcmdpbjowIGF1dG99LmJsb2ctbmFtZXtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO3otaW5kZXg6MTA7bWFyZ2luOjA7cGFkZGluZzowO2ZvbnQtZmFtaWx5OidGaXJhIFNhbnMnLCBzYW5zLXNlcmlmO2ZvbnQtd2VpZ2h0OjcwMDtmb250LXNpemU6MmVtO2xpbmUtaGVpZ2h0OjFlbTt0ZXh0LWRlY29yYXRpb246bm9uZX0uaG9tZS10ZW1wbGF0ZSAuYmxvZy1uYW1le2ZvbnQtc2l6ZTozZW19Lmhhcy1jb3ZlciAuYmxvZy1uYW1le2NvbG9yOiNmZmZ9LmJsb2ctbmFtZSBhe3RleHQtZGVjb3JhdGlvbjpub25lO2ZvbnQtd2VpZ2h0OmluaGVyaXQ7Y29sb3I6aW5oZXJpdH0uYmxvZy1kZXNjcmlwdGlvbntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO3otaW5kZXg6MTA7bWFyZ2luOjAuMjVlbSAwO3BhZGRpbmc6MDtmb250LXNpemU6MWVtO2xpbmUtaGVpZ2h0OjEuNWVtfS5ob21lLXRlbXBsYXRlIC5ibG9nLWRlc2NyaXB0aW9ue2ZvbnQtc2l6ZToxLjVlbX0uaGFzLWNvdmVyIC5ibG9nLWRlc2NyaXB0aW9ue2NvbG9yOiNmZmZ9I3dyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZy1yaWdodDowO3RyYW5zaXRpb246YWxsIGVhc2Utb3V0IDAuMjVzfSN3cmFwcGVyIC5oaWRkZW4tY2xvc2V7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7bGVmdDowO3RvcDowO3otaW5kZXg6MzUwfS5tZW51LWFjdGl2ZSAjd3JhcHBlcntwYWRkaW5nLXJpZ2h0OjE2ZW19Lm1lbnUtYWN0aXZlICN3cmFwcGVyIC5oaWRkZW4tY2xvc2V7ZGlzcGxheTpibG9ja30uaW5uZXJ7bWF4LXdpZHRoOjMyZW07bWFyZ2luOjAgYXV0bztwYWRkaW5nOjAgMmVtfS5uYXYtYnV0dG9ue3Bvc2l0aW9uOmZpeGVkO3RvcDowO21hcmdpbjoxZW07ei1pbmRleDoyMDB9Lm5hdi1idXR0b24jaG9tZS1idXR0b257bGVmdDowfS5uYXYtYnV0dG9uI21lbnUtYnV0dG9ue3JpZ2h0OjB9Lm5hdi1idXR0b24gYXtkaXNwbGF5OmJsb2NrO2hlaWdodDoxLjVlbTttYXJnaW4tYm90dG9tOjFlbTtwYWRkaW5nOjAuNWVtIDEuMjVlbTtib3JkZXI6MXB4IHNvbGlkICNjMmM3Y2M7Zm9udC1mYW1pbHk6J0ZpcmEgU2FucycsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjAuNzVlbTtsaW5lLWhlaWdodDoxLjY2NmVtO3RleHQtc2hhZG93Om5vbmU7Y29sb3I6IzhhOTE5OTtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kOiNmZmY7dHJhbnNpdGlvbjpjb2xvcixib3JkZXItY29sb3IgZWFzZSAwLjNzO2JvcmRlci1yYWRpdXM6MmVtfS5uYXYtYnV0dG9uIGE6aG92ZXIsLm5hdi1idXR0b24gYTpmb2N1c3tjb2xvcjojZjI2YTNkO2JvcmRlci1jb2xvcjojZjI2YTNkfS5jb3Zlci1hY3RpdmUgLm5hdi1idXR0b24gYXtjb2xvcjojZmZmO2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LDAuNSk7YmFja2dyb3VuZDp0cmFuc3BhcmVudH0uY292ZXItYWN0aXZlIC5uYXYtYnV0dG9uIGE6aG92ZXIsLmNvdmVyLWFjdGl2ZSAubmF2LWJ1dHRvbiBhOmZvY3Vze2NvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOiNmZmZ9Lm5hdi1idXR0b24gYSBpe2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbG9yOmluaGVyaXR9Lm5hdi1idXR0b24gYSBpOmJlZm9yZXtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDphdXRvO3RvcDotMnB4O21hcmdpbjphdXRvO2ZvbnQtc2l6ZTowLjYyNWVtO2xpbmUtaGVpZ2h0OjEuNmVtfSNtZW51e3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjE2ZW07aGVpZ2h0OjEwMCU7dG9wOjA7cmlnaHQ6MDtiYWNrZ3JvdW5kOiNmMmYyZjA7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNlNWU0ZTE7ei1pbmRleDo0MDA7b3ZlcmZsb3c6aGlkZGVuO2ZvbnQtZmFtaWx5OidGaXJhIFNhbnMnLCBzYW5zLXNlcmlmO2JveC1zaGFkb3c6aW5zZXQgLTJweCAwIDdweCByZ2JhKDAsMCwwLDAuMSk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDE2ZW0sIDAsIDApO3RyYW5zaXRpb246YWxsIGVhc2Utb3V0IDAuMjVzfS5tZW51LWFjdGl2ZSAjbWVudXt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCl9I21lbnUgLmNsb3NlLWJ1dHRvbntwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoyZW07aGVpZ2h0OjJlbTt0b3A6MDtyaWdodDowO21hcmdpbjoxZW07Ym9yZGVyOjFweCBzb2xpZCAjYzJjN2NjO2NvbG9yOnRyYW5zcGFyZW50O2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246YWxsIGVhc2UgMC4zcztib3JkZXItcmFkaXVzOjJlbTtib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDo1MDB9I21lbnUgLmNsb3NlLWJ1dHRvbjpob3ZlciwjbWVudSAuY2xvc2UtYnV0dG9uOmZvY3Vze3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKTtib3JkZXItY29sb3I6I2YyNmEzZH0jbWVudSAuY2xvc2UtYnV0dG9uOmFmdGVyLCNtZW51IC5jbG9zZS1idXR0b246YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFlbTtoZWlnaHQ6MXB4O2xlZnQ6NTAlO3RvcDo1MCU7bWFyZ2luLWxlZnQ6LTAuNWVtO2NvbnRlbnQ6Jyc7YmFja2dyb3VuZDojOGE5MTk5O3RyYW5zaXRpb246YWxsIGVhc2UgMC4zc30jbWVudSAuY2xvc2UtYnV0dG9uOmhvdmVyOmFmdGVyLCNtZW51IC5jbG9zZS1idXR0b246aG92ZXI6YmVmb3JlLCNtZW51IC5jbG9zZS1idXR0b246Zm9jdXM6YWZ0ZXIsI21lbnUgLmNsb3NlLWJ1dHRvbjpmb2N1czpiZWZvcmV7YmFja2dyb3VuZDojZjI2YTNkfSNtZW51IC5jbG9zZS1idXR0b246YWZ0ZXJ7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9I21lbnUgLmNsb3NlLWJ1dHRvbjpiZWZvcmV7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpfSNtZW51IC5uYXYtd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93LXg6aGlkZGVuO292ZXJmbG93LXk6c2Nyb2xsO2JveC1zaXppbmc6Ym9yZGVyLWJveH0jbWVudSAubmF2LWxhYmVse2Rpc3BsYXk6YmxvY2s7cGFkZGluZzoxLjY2NmVtIDJlbTttYXJnaW46MDtvcGFjaXR5OjAuNTtmb250LXNpemU6MC43NWVtO2xpbmUtaGVpZ2h0OjJlbX0jbWVudSB1bHtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlO21hcmdpbjphdXRvO3BhZGRpbmc6MH0jbWVudSBsaXtwb3NpdGlvbjpyZWxhdGl2ZX0jbWVudSBsaTpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTtoZWlnaHQ6MXB4O2xlZnQ6MS41ZW07Ym90dG9tOjA7bWFyZ2luOmF1dG87Y29udGVudDonJztiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMC4xKX0jbWVudSBsaTpsYXN0LWNoaWxkOmJlZm9yZXtkaXNwbGF5Om5vbmV9I21lbnUgbGkuYWN0aXZlOmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6Jyc7d2lkdGg6MC4yZW07aGVpZ2h0OjEwMCU7bGVmdDowO3RvcDowO2JhY2tncm91bmQ6I2YyNmEzZH0jbWVudSBsaSBhe2Rpc3BsYXk6YmxvY2s7cGFkZGluZzoxLjI1ZW0gMS41ZW07Y29sb3I6IzIxMjIyNjt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztmb250LXdlaWdodDo0MDB9I21lbnUgbGkgYTpob3ZlciwjbWVudSBsaSBhOmZvY3Vze2NvbG9yOiMwMDA7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDAuMDUpfSNtZW51IGxpIGEgaXtwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6LTAuMjVlbTtmb250LXNpemU6MC41ZW07Y29sb3I6aW5oZXJpdH0jbWVudSBsaS5hY3RpdmUgYXtjb2xvcjojMDAwO2ZvbnQtd2VpZ2h0OjUwMH0ucHJvZ3Jlc3MtY29udGFpbmVye3Bvc2l0aW9uOmZpeGVkO3dpZHRoOjEwMCU7aGVpZ2h0OjRweDtsZWZ0OjA7dG9wOjA7ei1pbmRleDoxMDAwO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7dHJhbnNpdGlvbjpvcGFjaXR5IGVhc2Utb3V0IDFzfS5wcm9ncmVzcy1jb250YWluZXIucmVhZHl7b3BhY2l0eTowLjJ9LnByb2dyZXNzLWJhcntkaXNwbGF5OmJsb2NrO3dpZHRoOjA7aGVpZ2h0OjFweDtiYWNrZ3JvdW5kOiNmMjZhM2Q7Ym94LXNoYWRvdzowIDAgMXB4ICNmMjZhM2QsMCAwIDNweCAjZjI2YTNkfSNmb290ZXJ7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoyMDtmb250LWZhbWlseTonRmlyYSBTYW5zJywgc2Fucy1zZXJpZjtsaW5lLWhlaWdodDoxZW07cGFkZGluZy1ib3R0b206NmVtfS5jcmVkaXRze3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZTowLjYyNWVtO2xpbmUtaGVpZ2h0OjFlbTtwYWRkaW5nOjEuMWVtIDA7b3ZlcmZsb3c6YXV0bztvcGFjaXR5OjAuNX0uY3JlZGl0cyBhe2NvbG9yOmluaGVyaXR9LmNyZWRpdHMgc3BhbntkaXNwbGF5OmJsb2NrfS5jcmVkaXRzLXRoZW1le2Zsb2F0OmxlZnR9LmNyZWRpdHMtc29mdHdhcmV7ZmxvYXQ6cmlnaHR9I2Jsb2ctYXV0aG9ye3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6NDA7bWFyZ2luOmF1dG8gNmVtfSNibG9nLWF1dGhvcjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDozMmVtO2hlaWdodDoxcHg7bGVmdDo1MCU7Ym90dG9tOjA7bWFyZ2luLWxlZnQ6LTE2ZW07Y29udGVudDonJztiYWNrZ3JvdW5kOiNlNWU0ZTF9I2Jsb2ctYXV0aG9yIC5wb3N0LWF1dGhvcnttYXJnaW4tdG9wOi01ZW07cGFkZGluZy1ib3R0b206M2VtO2JvcmRlcjowfSNibG9nLWF1dGhvciAucG9zdC1hdXRob3ItYXZhdGFye3dpZHRoOjIwJTttYXJnaW46MCAyLjUlfSNibG9nLWF1dGhvci5oYXMtY292ZXIgLnBvc3QtYXV0aG9yLWF2YXRhcntib3gtc2hhZG93OjAgMnB4IDRweCByZ2JhKDAsMCwwLDAuMSl9I2Jsb2ctYXV0aG9yLmhhcy1jb3ZlciAucG9zdC1hdXRob3ItYXZhdGFyIGltZ3tib3JkZXI6MC4xMjVlbSBzb2xpZCAjZmZmfSNibG9nLWF1dGhvciAucG9zdC1hdXRob3ItbmFtZXtwYWRkaW5nOjAuMzMzZW0gMCAwO2ZvbnQtc2l6ZToyZW07bGluZS1oZWlnaHQ6MWVtfSNibG9nLWF1dGhvci5oYXMtY292ZXIgLnBvc3QtYXV0aG9yLW5hbWV7cGFkZGluZzowLjMzM2VtIDA7Zm9udC13ZWlnaHQ6NTAwO2xldHRlci1zcGFjaW5nOjAuMDI1ZW07bGluZS1oZWlnaHQ6MS4zMzNlbTtjb2xvcjojZmZmfSNibG9nLWF1dGhvci5oYXMtY292ZXIgLnBvc3QtYXV0aG9yLWFib3V0e21hcmdpbi10b3A6MS4zMzNlbX0uY29udGFpbmVye3Bvc2l0aW9uOnJlbGF0aXZlfS5jb250YWluZXIgLnBvc3R7cGFkZGluZzo0ZW0gMH0uY29udGFpbmVyIC5wb3N0OmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjMyZW07aGVpZ2h0OjFweDtsZWZ0OjUwJTtib3R0b206MDttYXJnaW4tbGVmdDotMTZlbTtjb250ZW50OicnO2JhY2tncm91bmQ6I2U1ZTRlMX0uY29udGFpbmVyIC5wb3N0LmZlYXR1cmVkIC5wb3N0LXRpdGxlOmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFlbTtoZWlnaHQ6MWVtO2xlZnQ6LTEuNzVlbTt0b3A6MDttYXJnaW4tdG9wOi0wLjI1ZW07Zm9udC1mYW1pbHk6J2ljb25zJztmb250LXNpemU6MC41ZW07Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbnRlbnQ6J1xcZTgwMCc7Y29sb3I6aW5oZXJpdDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojZTVlNGUxfS5wb3N0LnBhZ2V7cGFkZGluZy1ib3R0b206NGVtfS5wYWdlLXRlbXBsYXRlICNmb290ZXI6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MzJlbTtoZWlnaHQ6MXB4O2xlZnQ6NTAlO3RvcDowO21hcmdpbi1sZWZ0Oi0xNmVtO2NvbnRlbnQ6Jyc7YmFja2dyb3VuZDojZTVlNGUxfSNwb3N0LWhlYWRlcntwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nLXRvcDo2ZW19I3Bvc3QtaGVhZGVyLmhhcy1jb3ZlcntwYWRkaW5nOjE2ZW0gMCAyZW07YmFja2dyb3VuZDojMDAwO292ZXJmbG93OmhpZGRlbjt0ZXh0LXNoYWRvdzowIDFweCAycHggcmdiYSgwLDAsMCwwLjEpfS5wb3N0LWNvdmVye3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7bGVmdDowO3RvcDowO3otaW5kZXg6NTtiYWNrZ3JvdW5kOm5vLXJlcGVhdCBzY3JvbGwgY2VudGVyIGNlbnRlci9jb3ZlciAjMDAwO2FuaW1hdGlvbjowLjVzIGVhc2UtaW4gZm9yd2FyZHMgZmFkZWlufS5wb3N0LWNvdmVyOmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7aGVpZ2h0OjEyZW07bGVmdDowO2JvdHRvbTowO3otaW5kZXg6ODtjb250ZW50OicnO2JhY2tncm91bmQ6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCB0cmFuc3BhcmVudCAwJSwgcmdiYSgwLDAsMCwwLjUpIDEwMCUpO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgdHJhbnNwYXJlbnQgMCUsIHJnYmEoMCwwLDAsMC41KSAxMDAlKX0ucG9zdHtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nLXRvcDoyZW07ei1pbmRleDoxMH0ucG9zdC10aXRsZXtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjEwO21hcmdpbjowIDAgMC41ZW07Zm9udC1zaXplOjJlbTtsaW5lLWhlaWdodDoxZW07Zm9udC13ZWlnaHQ6NzAwO3RleHQtaW5kZW50Oi0xcHg7Y29sb3I6IzAwMH0uaGFzLWNvdmVyIC5wb3N0LXRpdGxle2NvbG9yOiNmZmZ9LnBvc3QtdGl0bGUgYXt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXR9LnBvc3QtbWV0YXtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjEwO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbToxLjMzM2VtO2ZvbnQtZmFtaWx5OidGaXJhIFNhbnMnLCBzYW5zLXNlcmlmO2ZvbnQtc2l6ZTowLjc1ZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMzMzZW07b3BhY2l0eTowLjV9Lmhhcy1jb3ZlciAucG9zdC1tZXRhe2NvbG9yOiNmZmY7b3BhY2l0eTowLjc1fS5wb3N0LW1ldGEgYXtjb2xvcjppbmhlcml0O3RleHQtZGVjb3JhdGlvbjpub25lO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHRyYW5zcGFyZW50fS5wb3N0LW1ldGEgYTpob3ZlciwucG9zdC1tZXRhIGE6Zm9jdXN7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC41KX0uaGFzLWNvdmVyIC5wb3N0LW1ldGEgYTpob3ZlciwuaGFzLWNvdmVyIC5wb3N0LW1ldGEgYTpmb2N1c3tib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwwLjUpfS5wb3N0LWV4Y2VycHQgcHttYXJnaW46MH0ucG9zdC1jb250ZW50IGF7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2YyNmEzZH0ucG9zdC1jb250ZW50IGE6aG92ZXIsLnBvc3QtY29udGVudCBhOmZvY3Vze2NvbG9yOiNmMjZhM2R9LnBvc3QtY29udGVudCBpbWcsLnBvc3QtY29udGVudCAuZmx1aWQtd2lkdGgtdmlkZW8td3JhcHBlcnttYXgtd2lkdGg6bm9uZTt3aWR0aDoxMTAlO21hcmdpbi1sZWZ0Oi01JX0ucG9zdC1pbmZve21hcmdpbi10b3A6NmVtO292ZXJmbG93OmhpZGRlbn0ucG9zdC1zaGFyZXttYXgtd2lkdGg6MjUlO2Zsb2F0OnJpZ2h0fS5wb3N0LXNoYXJlIGF7ZGlzcGxheTpibG9jazt3aWR0aDoyZW07aGVpZ2h0OjJlbTttYXJnaW46MC4zMzNlbSAwIDAuMzMzZW0gMC42NjZlbTtwYWRkaW5nOjA7ZmxvYXQ6bGVmdDtmb250LXNpemU6MC43NWVtO2xpbmUtaGVpZ2h0OjJlbTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6MnB4O3RyYW5zaXRpb246YWxsIGVhc2UgMC4zc30ucG9zdC1zaGFyZSBhOmhvdmVyLC5wb3N0LXNoYXJlIGE6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjojMjEyMjI2fS5wb3N0LXNoYXJlIGEgaXtjb2xvcjppbmhlcml0fS5wb3N0LXNoYXJlIGEgaTpiZWZvcmV7d2lkdGg6YXV0bztoZWlnaHQ6YXV0b30ucG9zdC1zaGFyZSAudHdpdHRlcntiYWNrZ3JvdW5kLWNvbG9yOiMzZWE5ZGR9LnBvc3Qtc2hhcmUgLmZhY2Vib29re2JhY2tncm91bmQtY29sb3I6IzNjNWE5OH0ucG9zdC1zaGFyZSAuZ29vZ2xlcGx1c3tiYWNrZ3JvdW5kLWNvbG9yOiNkMTQ4MzZ9LnBvc3QtdGFnc3ttYXgtd2lkdGg6NzUlO2Zsb2F0OmxlZnQ7Zm9udC1mYW1pbHk6J0ZpcmEgU2FucycsIHNhbnMtc2VyaWZ9LnBvc3QtdGFncyBhe2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbjowIDAuMzMzZW0gMC42NjZlbSAwO3BhZGRpbmc6MC41NzVlbSAxZW07YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2YyNmEzZDtmb250LXNpemU6MC43NWVtO2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDoxLjMzM2VtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiNmMjZhM2Q7Ym9yZGVyLXJhZGl1czoyZW07dHJhbnNpdGlvbjphbGwgZWFzZSAwLjNzO2JveC1zaXppbmc6Ym9yZGVyLWJveH0ucG9zdC10YWdzIGE6aG92ZXIsLnBvc3QtdGFncyBhOmZvY3Vze2JhY2tncm91bmQ6I2YyNmEzZDtjb2xvcjojZmZmfS5wb3N0LWF1dGhvcntwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW46MmVtIDAgMDtwYWRkaW5nOjJlbSAwO3otaW5kZXg6MTA7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U1ZTRlMTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTVlNGUxO2NsZWFyOmJvdGh9LnBvc3QtYXV0aG9yLWF2YXRhcntwb3NpdGlvbjpyZWxhdGl2ZTtmbG9hdDpsZWZ0O3dpZHRoOjE1JTttYXJnaW46LTAuNWVtIDAgMCA1JTtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MTBlbTtib3gtc2l6aW5nOmJvcmRlci1ib3h9LnBvc3QtYXV0aG9yLWF2YXRhciBpbWd7d2lkdGg6MTAwJTttYXJnaW46YXV0bztib3JkZXItcmFkaXVzOjEwZW07Ym94LXNpemluZzpib3JkZXItYm94fS5wb3N0LWF1dGhvci1iaW97cGFkZGluZy1sZWZ0OjI1JTtmb250LWZhbWlseTonRmlyYSBTYW5zJywgc2Fucy1zZXJpZjtmb250LXNpemU6MC43NWVtO2xpbmUtaGVpZ2h0OjEuMzMzZW19LnBvc3QtYXV0aG9yLW5hbWV7bWFyZ2luOjA7cGFkZGluZzowO2ZvbnQtc2l6ZToxLjMzM2VtO2xpbmUtaGVpZ2h0OjFlbTt0ZXh0LWluZGVudDppbmhlcml0fS5wb3N0LWF1dGhvci1hYm91dHttYXJnaW46MC42NjZlbSAwfS5wb3N0LWF1dGhvci1iaW8gc3Bhbntwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MC44ZW07ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXRvcDoxLjI1ZW07bWFyZ2luLXJpZ2h0OjEuMjVlbTtmb250LXdlaWdodDo0MDA7b3BhY2l0eTowLjV9LnBvc3QtYXV0aG9yLWJpbyBpe2NvbG9yOmluaGVyaXR9LnBvc3QtYXV0aG9yLWJpbyBhe2NvbG9yOmluaGVyaXQ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC13ZWlnaHQ6aW5oZXJpdDtib3JkZXItYm90dG9tOjFweCBzb2xpZCB0cmFuc3BhcmVudH0ucG9zdC1jb21tZW50c3twb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOjJlbSAwO3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNWU0ZTE7Ym94LXNpemluZzpib3JkZXItYm94fS5wb3N0LWNvbW1lbnRzLmFjdGl2YXRlZHttYXJnaW46LTFweCAwIDA7cGFkZGluZzoxZW07YmFja2dyb3VuZDojZmFmOWY3O2JvcmRlcjoxcHggc29saWQgI2U1ZTRlMX0ucG9zdC1jb21tZW50cy1hY3RpdmF0ZXtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MDtwYWRkaW5nOjAuNWVtIDEuMjVlbTtib3JkZXI6MXB4IHNvbGlkICNjMmM3Y2M7Zm9udC1mYW1pbHk6J0ZpcmEgU2FucycsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjAuNzVlbTtsaW5lLWhlaWdodDoxLjMzM2VtO2NvbG9yOiM4YTkxOTk7dGV4dC1hbGlnbjpjZW50ZXI7Y3Vyc29yOnBvaW50ZXI7dHJhbnNpdGlvbjphbGwgZWFzZSAwLjNzO2JvcmRlci1yYWRpdXM6MmVtfS5wb3N0LWNvbW1lbnRzLWFjdGl2YXRlOmhvdmVyLC5wb3N0LWNvbW1lbnRzLWFjdGl2YXRlOmZvY3Vze2NvbG9yOiNmMjZhM2Q7Ym9yZGVyLWNvbG9yOiNmMjZhM2R9LmFjdGl2YXRlZCAucG9zdC1jb21tZW50cy1hY3RpdmF0ZXtkaXNwbGF5Om5vbmV9LnBvc3QtbmF2e3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNWU0ZTF9LnBvc3QtbmF2OmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6Jyc7d2lkdGg6MXB4O2hlaWdodDoxMDAlO2xlZnQ6NTAlO3RvcDowO2JhY2tncm91bmQ6I2U1ZTRlMTt6LWluZGV4OjJ9LnBvc3QtbmF2LW5leHQsLnBvc3QtbmF2LXByZXZ7ZGlzcGxheTpibG9jazt3aWR0aDo1MCV9LnBvc3QtbmF2LW5leHR7ZmxvYXQ6bGVmdH0ucG9zdC1uYXYtcHJldntmbG9hdDpyaWdodH0ucG9zdC1uYXYtdGVhc2Vye3BhZGRpbmc6MS41ZW0gMDttaW4taGVpZ2h0OjZlbX0ucG9zdC1uYXYtbmV4dCAucG9zdC1uYXYtdGVhc2Vye3BhZGRpbmctcmlnaHQ6MWVtfS5wb3N0LW5hdi1wcmV2IC5wb3N0LW5hdi10ZWFzZXJ7cGFkZGluZy1sZWZ0OjFlbX0ucG9zdC1uYXYgaXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3dpZHRoOjJlbTtoZWlnaHQ6MmVtO21hcmdpbi10b3A6LTFlbTtmb250LXNpemU6MmVtO2xpbmUtaGVpZ2h0OjJlbTt0ZXh0LWFsaWduOmNlbnRlcjt0cmFuc2l0aW9uOmFsbCBlYXNlLW91dCAwLjNzO2NvbG9yOiNlNWU0ZTF9LnBvc3QtbmF2LW5leHQgaXtsZWZ0OjA7bWFyZ2luLWxlZnQ6LTEuNzVlbX0ucG9zdC1uYXYtcHJldiBpe3JpZ2h0OjA7bWFyZ2luLXJpZ2h0Oi0xLjc1ZW19LnBvc3QtbmF2IGE6aG92ZXIgaSwucG9zdC1uYXYgYTpmb2N1cyBpe2NvbG9yOiNmMjZhM2R9LnBvc3QtbmF2LXRpdGxle21hcmdpbjowIDAgMC41ZW07cGFkZGluZzowO2ZvbnQtc2l6ZToxZW07bGluZS1oZWlnaHQ6MWVtO2NvbG9yOmluaGVyaXR9LnBvc3QtbmF2LWV4Y2VycHR7bWFyZ2luOjA7Zm9udC1zaXplOjAuNzVlbTtsaW5lLWhlaWdodDoxLjMzM2VtfS5wYWdpbmF0aW9ue3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDoyZW07bWFyZ2luOjA7cGFkZGluZzoyZW0gMDtmb250LWZhbWlseTonRmlyYSBTYW5zJywgc2Fucy1zZXJpZn0ucGFnaW5hdGlvbjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDozMmVtO2hlaWdodDoxcHg7bGVmdDo1MCU7Ym90dG9tOjA7bWFyZ2luLWxlZnQ6LTE2ZW07Y29udGVudDonJztiYWNrZ3JvdW5kOiNlNWU0ZTF9LnBhZ2luYXRpb24gYXtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2hlaWdodDoxLjMzM2VtO21hcmdpbjotMXB4IDA7cGFkZGluZzowLjY2NmVtIDFlbTt6LWluZGV4OjEwMDtib3JkZXI6MXB4IHNvbGlkICNjMmM3Y2M7Zm9udC1zaXplOjAuNzVlbTtsaW5lLWhlaWdodDoxLjVlbTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTtjb2xvcjojOGE5MTk5O3RyYW5zaXRpb246YWxsIGVhc2UgMC4zcztib3JkZXItcmFkaXVzOjJlbX0ucGFnaW5hdGlvbiAucGFnaW5hdGlvbi1wcmV2e2Zsb2F0OnJpZ2h0O3BhZGRpbmctbGVmdDoxLjMzM2VtfS5wYWdpbmF0aW9uIC5wYWdpbmF0aW9uLW5leHR7ZmxvYXQ6bGVmdDtwYWRkaW5nLXJpZ2h0OjEuMzMzZW19LnBhZ2luYXRpb24gYTpob3ZlciwucGFnaW5hdGlvbiBhOmZvY3Vze2NvbG9yOiNmMjZhM2Q7Ym9yZGVyLWNvbG9yOiNmMjZhM2R9LnBhZ2luYXRpb24gLnBhZ2luYXRpb24tbGFiZWx7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjFlbTtsaW5lLWhlaWdodDoxZW19LnBhZ2luYXRpb24gYSBpe3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOmF1dG87dG9wOi0xcHg7bWFyZ2luOmF1dG87Y29sb3I6aW5oZXJpdDtmb250LXNpemU6MC43NWVtO2xpbmUtaGVpZ2h0OjEuMzMzZW19LnBhZ2luYXRpb24gLnBhZ2luYXRpb24taW5mb3twb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO2hlaWdodDoyLjY2NmVtO2xlZnQ6MDt6LWluZGV4OjUwO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjAuNzVlbTtsaW5lLWhlaWdodDoyLjY2NmVtO3RleHQtYWxpZ246Y2VudGVyfS5leHRyYS1wYWdpbmF0aW9ue2Rpc3BsYXk6bm9uZX0uZXh0cmEtcGFnaW5hdGlvbiAucGFnaW5hdGlvbjphZnRlcnt0b3A6YXV0bztib3R0b206MH0uYXJjaGl2ZS10ZW1wbGF0ZSAuZXh0cmEtcGFnaW5hdGlvbntkaXNwbGF5OmJsb2NrfUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogOTYwcHgpeyN3cmFwcGVye3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKX0ubWVudS1hY3RpdmUgI3dyYXBwZXJ7cGFkZGluZy1yaWdodDowO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtMTZlbSwgMCwgMCl9LmJsb2ctbG9nbywubmF2LWJ1dHRvbntwb3NpdGlvbjphYnNvbHV0ZX0jYmxvZy1hdXRob3J7bWFyZ2luOmF1dG99fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNjQwcHgpe2h0bWx7Zm9udC1zaXplOjUwJX0ucG9zdC1zaGFyZSwucG9zdC10YWdze21heC13aWR0aDpub25lO2Zsb2F0Om5vbmU7bWFyZ2luOjAgMCAyZW19LnBvc3Qtc2hhcmUgYXttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowLjY2NmVtfS5wb3N0LW5hdiBpe2ZvbnQtc2l6ZToxLjVlbX19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0ODBweCl7LmlubmVye3BhZGRpbmc6MCAxNnB4fS5wb3N0LXRlbXBsYXRlICNtYWluLWhlYWRlcntwYWRkaW5nOjE2cHggMH0jbWFpbi1uYXYgYXttYXJnaW46MTZweH0ucG9zdC1hdXRob3ItYXZhdGFye21hcmdpbjotMC4yNWVtIDAgMCAwLjVlbX0uY29udGFpbmVyIC5wb3N0LmZlYXR1cmVkIC5wb3N0LXRpdGxlOmFmdGVye2xlZnQ6MDt0b3A6LTEuNzVlbX0ucG9zdC1jb250ZW50IGltZywucG9zdC1jb250ZW50IC5mbHVpZC13aWR0aC12aWRlby13cmFwcGVye3dpZHRoOjEwMCU7bWFyZ2luLWxlZnQ6YXV0b30ucG9zdC1uYXY6YWZ0ZXJ7ZGlzcGxheTpub25lfS5wb3N0LW5hdi1uZXh0LC5wb3N0LW5hdi1wcmV2e2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJX0ucG9zdC1uYXYtdGVhc2Vye3Bvc2l0aW9uOnJlbGF0aXZlO21pbi1oZWlnaHQ6NGVtO3BhZGRpbmc6MmVtIDB9LnBvc3QtbmF2LW5leHQgLnBvc3QtbmF2LXRlYXNlcjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OicnO3dpZHRoOjEwMCU7aGVpZ2h0OjFweDtsZWZ0OjA7Ym90dG9tOjA7bWFyZ2luLWJvdHRvbTotMXB4O2JhY2tncm91bmQ6I2U1ZTRlMTt6LWluZGV4OjJ9LnBvc3QtbmF2LW5leHQgLnBvc3QtbmF2LXRlYXNlcntwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjEuNWVtfS5wb3N0LW5hdi1wcmV2IC5wb3N0LW5hdi10ZWFzZXJ7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDoxLjVlbX0ucG9zdC1uYXYtbmV4dCBpe21hcmdpbi1sZWZ0Oi0xZW19LnBvc3QtbmF2LXByZXYgaXttYXJnaW4tcmlnaHQ6LTFlbX19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAzMjBweCl7LnBhZ2luYXRpb24gLnBhZ2luYXRpb24tbGFiZWx7ZGlzcGxheTpub25lfX1cbiJdfQ== */
diff --git a/design/css/style.min.css b/design/css/style.min.css
new file mode 100644
index 0000000..4b44dc9
--- /dev/null
+++ b/design/css/style.min.css
@@ -0,0 +1 @@
+/*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@font-face{font-family:'icons';src:url("../font/icons.eot?51058516");src:url("../font/icons.eot?51058516#iefix") format("embedded-opentype"),url("../font/icons.woff?51058516") format("woff"),url("../font/icons.ttf?51058516") format("truetype"),url("../font/icons.svg?51058516#icons") format("svg");font-weight:normal;font-style:normal}[class^="ic-"]:before,[class*=" ic-"]:before{font-family:'icons';font-style:normal;font-weight:normal;speak:none;display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;margin-left:.2em}.ic-star:before{content:'\e800'}.ic-rss:before{content:'\e801'}.ic-posts:before{content:'\e802'}.ic-location:before{content:'\e803'}.ic-link:before{content:'\e804'}.ic-googleplus:before{content:'\e805'}.ic-facebook:before{content:'\e806'}.ic-arrow-right:before{content:'\e807'}.ic-arrow-left:before{content:'\e808'}.ic-twitter:before{content:'\e809'}.ic-menu:before{content:'\e80a'}@font-face{font-family:'Cardo';font-style:normal;font-weight:400;src:local("Cardo"),local("Cardo-Regular"),url("//fonts.gstatic.com/s/cardo/v8/f9GbO0_LnwwuaRC6yAh0JKCWcynf_cDxXwCLxiixG1c.woff2") format("woff2"),url("//fonts.gstatic.com/s/cardo/v8/c6Zi_ulq7hv-avk-G9Yut6CWcynf_cDxXwCLxiixG1c.woff") format("woff")}@font-face{font-family:'Cardo';font-style:normal;font-weight:700;src:local("Cardo Bold"),local("Cardo-Bold"),url("//fonts.gstatic.com/s/cardo/v8/X-1BEHTKpRYzad3JEXy9-nYhjbSpvc47ee6xR_80Hnw.woff2") format("woff2"),url("//fonts.gstatic.com/s/cardo/v8/gHC1KgRPdVNdvvVcxLMCY3YhjbSpvc47ee6xR_80Hnw.woff") format("woff")}@font-face{font-family:'Cardo';font-style:italic;font-weight:400;src:local("Cardo Italic"),local("Cardo-Italic"),url("//fonts.gstatic.com/s/cardo/v8/aRpKelDgx13ov6asvC3QbgLUuEpTyoUstqEm5AMlJo4.woff2") format("woff2"),url("//fonts.gstatic.com/s/cardo/v8/mSKSxAIybPTfRoik7xAeTQLUuEpTyoUstqEm5AMlJo4.woff") format("woff")}@font-face{font-family:'Fira Sans';font-style:normal;font-weight:400;src:local("Fira Sans"),local("FiraSans-Regular"),url("//fonts.gstatic.com/s/firasans/v5/EjsrzDkQUQCDwsBtLpcVQZBw1xU1rKptJj_0jans920.woff2") format("woff2"),url("//fonts.gstatic.com/s/firasans/v5/EjsrzDkQUQCDwsBtLpcVQbO3LdcAZYWl9Si6vvxL-qU.woff") format("woff")}@font-face{font-family:'Fira Sans';font-style:normal;font-weight:500;src:local("Fira Sans Medium"),local("FiraSans-Medium"),url("//fonts.gstatic.com/s/firasans/v5/zM2u8V3CuPVwAAXFQcDi4Bampu5_7CjHW5spxoeN3Vs.woff2") format("woff2"),url("//fonts.gstatic.com/s/firasans/v5/zM2u8V3CuPVwAAXFQcDi4KRDOzjiPcYnFooOUGCOsRk.woff") format("woff")}@font-face{font-family:'Fira Sans';font-style:normal;font-weight:700;src:local("Fira Sans Bold"),local("FiraSans-Bold"),url("//fonts.gstatic.com/s/firasans/v5/DugPdSljmOTocZOR2CItOhampu5_7CjHW5spxoeN3Vs.woff2") format("woff2"),url("//fonts.gstatic.com/s/firasans/v5/DugPdSljmOTocZOR2CItOqRDOzjiPcYnFooOUGCOsRk.woff") format("woff")}.hljs{display:block;color:#66645c;-webkit-text-size-adjust:none}.hljs-comment,.diff .hljs-header,.hljs-javadoc{color:#998;font-style:italic}.hljs-keyword,.css .rule .hljs-keyword,.hljs-winutils,.nginx .hljs-title,.hljs-subst,.hljs-request,.hljs-status{color:#333;font-weight:bold}.hljs-number,.hljs-hexcolor,.ruby .hljs-constant{color:#008080}.hljs-string,.hljs-tag .hljs-value,.hljs-phpdoc,.hljs-dartdoc,.tex .hljs-formula{color:#d14}.hljs-title,.hljs-id,.scss .hljs-preprocessor{color:#900;font-weight:bold}.hljs-list .hljs-keyword,.hljs-subst{font-weight:normal}.hljs-class .hljs-title,.hljs-type,.vhdl .hljs-literal,.tex .hljs-command{color:#458;font-weight:bold}.hljs-tag,.hljs-tag .hljs-title,.hljs-rule .hljs-property,.django .hljs-tag .hljs-keyword{color:#000080;font-weight:normal}.hljs-attribute,.hljs-variable,.lisp .hljs-body,.hljs-name{color:#008080}.hljs-regexp{color:#009926}.hljs-symbol,.ruby .hljs-symbol .hljs-string,.lisp .hljs-keyword,.clojure .hljs-keyword,.scheme .hljs-keyword,.tex .hljs-special,.hljs-prompt{color:#990073}.hljs-built_in{color:#0086b3}.hljs-preprocessor,.hljs-pragma,.hljs-pi,.hljs-doctype,.hljs-shebang,.hljs-cdata{color:#999;font-weight:bold}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.diff .hljs-change{background:#0086b3}.hljs-chunk{color:#aaa}@supports ((-ms-flex-wrap: wrap) or (flex-wrap: wrap)){body{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-height:100vh}#wrapper{-ms-flex:1;flex:1}}html{font-size:62.5%;overflow-x:hidden}html.menu-active,.menu-active body{overflow-y:hidden}body{font:400 2em / 1.5em 'Cardo', serif;color:#45484d;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow-x:hidden}a{color:#212226;text-decoration:none;font-weight:400;transition:all ease-out 0.2s}a:hover,a:focus{color:#000}h1,h2,h3,h4,h5,h6{font-family:'Fira Sans', sans-serif;text-rendering:optimizeLegibility;color:#000}h1{font-size:2em;line-height:1em;text-indent:-1px;margin:2em 0 -0.5em}h2{font-size:1.75em;line-height:1.111em;text-indent:-1px;margin:2.286em 0 -0.571em}h3{font-size:1.5em;line-height:1.333em;margin:2em 0 -0.666em}h4{font-size:1.25em;line-height:1.2em;margin:2.4em 0 -0.8em}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{font-weight:inherit}p,ul,ol{margin:2em auto}ul{list-style:none}li{position:relative}ul>li:before,ol>li:before{position:absolute;width:1.5em;margin-left:-2em;font-family:'Fira Sans', sans-serif;font-size:1em;font-weight:500;line-height:1.5em;text-align:right;color:#000}ul>li:before{margin-top:0.25em;content:'*'}ol{list-style-type:none;counter-reset:item}ol>li:before{content:counter(item) ". " !important;counter-increment:item}ol ol,ul ul,ul ol,ol ul{padding-left:30px;margin:15px 0}hr{display:block;height:1px;margin:2em 0;padding:0;background:#e5e4e1;border:0}blockquote{margin:2em auto;padding:1em;box-sizing:border-box;border-left:0.25em solid #e5e4e1;font-style:italic;font-weight:400;color:#45484d;background:#faf9f7}blockquote p{margin:1em auto}blockquote p:first-child{margin-top:0}blockquote p:last-child{margin-bottom:0}em,i{font-style:italic;color:#212226}strong,b{font-weight:700;color:#212226}small{font-size:0.9em;color:#45484d}dl{margin:20px 0}dl dt{float:left;width:180px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap;font-weight:bold;margin-bottom:10px}dl dd{margin-left:200px;margin-bottom:12px}mark{background-color:#ffc336}code,tt{position:relative;margin:0 0.333em;padding:0.333em 0.666em;font-family:'Inconsolata', monospace, sans-serif;font-size:0.75em;white-space:pre;background:#faf9f7;border:1px solid #e5e4e1;top:-2px}pre{position:relative;margin:2em auto;padding:1em;overflow:hidden;font-family:'Inconsolata', monospace, sans-serif;white-space:pre;background:#faf9f7;border:1px solid #e5e4e1;box-sizing:border-box}pre .lines{position:absolute;width:2.666em;height:100%;left:0;top:0;padding:1.333em 0;border-right:1px solid #e5e4e1;font-size:0.75em;line-height:2em;text-align:right;box-sizing:border-box;background:rgba(255,255,255,0.5)}pre .lines .line{display:block;padding-right:0.333em;color:#45484d}pre code,pre tt{position:static;top:auto;margin:-1.333em -1.333em -1.333em 1.333em;padding:1.333em;overflow:scroll;font-size:0.75em;line-height:2em;white-space:pre;background:transparent;border:none;vertical-align:inherit}kbd{display:inline-block;margin-bottom:0.5em;padding:1px 8px;border:#e5e4e1 1px solid;color:#45484d;text-shadow:#fff 0 1px 0;font-size:0.9em;font-weight:bold;background:#faf9f7;border-radius:4px;box-shadow:0 1px 0 rgba(0,0,0,0.2),0 1px 0 0 #fff inset}table{width:100%;max-width:100%;margin:2em 0;background-color:transparent;border:1px solid #e5e4e1}table th,table td{position:relative;padding:0.5em;line-height:0.95em;text-align:left;border:1px solid #e5e4e1}table th{font-family:'Fira Sans', sans-serif;font-weight:500;font-size:0.75em;line-height:1.25em;padding:0.666em;color:#000}table td:after{position:absolute;width:100%;height:100%;left:-1px;top:-1px;padding:1px;z-index:-1;content:'';background:#faf9f7}img{display:block;max-width:100%;height:auto;margin:2.5em auto}.clear{clear:both}.hidden{display:none}@keyframes fadein{0%{opacity:.2}100%{opacity:.9}}#blog-header{position:relative;padding:6em 0;text-align:center}#blog-header:after{position:absolute;width:32em;height:1px;left:50%;bottom:0;margin-left:-16em;content:'';background:#e5e4e1}#blog-header.has-cover{padding:9em 0 10em;background:#000;overflow:hidden;text-shadow:0 1px 2px rgba(0,0,0,0.1)}.author-template #blog-header:after,#blog-header.has-cover:after{display:none}.paged #blog-header.has-cover,.tag-template #blog-header{padding:4em 0}.author-template #blog-header.has-cover{padding:6em 0}.blog-cover{position:absolute;width:100%;height:100%;left:0;top:0;z-index:5;background:no-repeat scroll center center/cover #000;animation:0.5s ease-in forwards fadein}.blog-cover:after{position:absolute;width:100%;height:6em;left:0;bottom:0;z-index:8;content:'';background:linear-gradient(to bottom, transparent 0%, rgba(0,0,0,0.5) 100%)}.blog-logo{position:fixed;max-width:2em;left:0;top:0;margin:1em;z-index:200}.blog-logo img{display:block;margin:0 auto}.blog-name{position:relative;display:block;z-index:10;margin:0;padding:0;font-family:'Fira Sans', sans-serif;font-weight:700;font-size:2em;line-height:1em;text-decoration:none}.home-template .blog-name{font-size:3em}.has-cover .blog-name{color:#fff}.blog-name a{text-decoration:none;font-weight:inherit;color:inherit}.blog-description{position:relative;display:block;z-index:10;margin:0.25em 0;padding:0;font-size:1em;line-height:1.5em}.home-template .blog-description{font-size:1.5em}.has-cover .blog-description{color:#fff}#wrapper{position:relative;padding-right:0;transition:all ease-out 0.25s}#wrapper .hidden-close{display:none;position:absolute;width:100%;height:100%;left:0;top:0;z-index:350}.menu-active #wrapper{padding-right:16em}.menu-active #wrapper .hidden-close{display:block}.inner{max-width:32em;margin:0 auto;padding:0 2em}.nav-button{position:fixed;top:0;margin:1em;z-index:200}.nav-button#home-button{left:0}.nav-button#menu-button{right:0}.nav-button a{display:block;height:1.5em;margin-bottom:1em;padding:0.5em 1.25em;border:1px solid #c2c7cc;font-family:'Fira Sans', sans-serif;font-size:0.75em;line-height:1.666em;text-shadow:none;color:#8a9199;cursor:pointer;background:#fff;transition:color,border-color ease 0.3s;border-radius:2em}.nav-button a:hover,.nav-button a:focus{color:#f26a3d;border-color:#f26a3d}.cover-active .nav-button a{color:#fff;border-color:rgba(255,255,255,0.5);background:transparent}.cover-active .nav-button a:hover,.cover-active .nav-button a:focus{color:#fff;border-color:#fff}.nav-button a i{display:inline-block;color:inherit}.nav-button a i:before{position:relative;width:auto;top:-2px;margin:auto;font-size:0.625em;line-height:1.6em}#menu{position:fixed;width:16em;height:100%;top:0;right:0;background:#f2f2f0;border-left:1px solid #e5e4e1;z-index:400;overflow:hidden;font-family:'Fira Sans', sans-serif;box-shadow:inset -2px 0 7px rgba(0,0,0,0.1);transform:translate3d(16em, 0, 0);transition:all ease-out 0.25s}.menu-active #menu{transform:translate3d(0, 0, 0)}#menu .close-button{position:absolute;width:2em;height:2em;top:0;right:0;margin:1em;border:1px solid #c2c7cc;color:transparent;cursor:pointer;transition:all ease 0.3s;border-radius:2em;box-sizing:border-box;z-index:500}#menu .close-button:hover,#menu .close-button:focus{transform:rotate(180deg);border-color:#f26a3d}#menu .close-button:after,#menu .close-button:before{position:absolute;width:1em;height:1px;left:50%;top:50%;margin-left:-0.5em;content:'';background:#8a9199;transition:all ease 0.3s}#menu .close-button:hover:after,#menu .close-button:hover:before,#menu .close-button:focus:after,#menu .close-button:focus:before{background:#f26a3d}#menu .close-button:after{transform:rotate(45deg)}#menu .close-button:before{transform:rotate(-45deg)}#menu .nav-wrapper{position:absolute;width:100%;height:100%;overflow-x:hidden;overflow-y:scroll;box-sizing:border-box}#menu .nav-label{display:block;padding:1.666em 2em;margin:0;opacity:0.5;font-size:0.75em;line-height:2em}#menu ul{position:relative;width:100%;margin:auto;padding:0}#menu li{position:relative}#menu li:before{position:absolute;width:100%;height:1px;left:1.5em;bottom:0;margin:auto;content:'';background:rgba(0,0,0,0.1)}#menu li:last-child:before{display:none}#menu li.active:after{position:absolute;content:'';width:0.2em;height:100%;left:0;top:0;background:#f26a3d}#menu li a{display:block;padding:1.25em 1.5em;color:#212226;white-space:nowrap;text-overflow:ellipsis;font-weight:400}#menu li a:hover,#menu li a:focus{color:#000;background:rgba(0,0,0,0.05)}#menu li a i{position:relative;top:-0.25em;font-size:0.5em;color:inherit}#menu li.active a{color:#000;font-weight:500}.progress-container{position:fixed;width:100%;height:4px;left:0;top:0;z-index:1000;background:transparent;transition:opacity ease-out 1s}.progress-container.ready{opacity:0.2}.progress-bar{display:block;width:0;height:1px;background:#f26a3d;box-shadow:0 0 1px #f26a3d,0 0 3px #f26a3d}#footer{position:relative;z-index:20;font-family:'Fira Sans', sans-serif;line-height:1em;padding-bottom:6em}.credits{text-align:center;font-size:0.625em;line-height:1em;padding:1.1em 0;overflow:auto;opacity:0.5}.credits a{color:inherit}.credits span{display:block}.credits-theme{float:left}.credits-software{float:right}#blog-author{position:relative;z-index:40;margin:auto 6em}#blog-author:after{position:absolute;width:32em;height:1px;left:50%;bottom:0;margin-left:-16em;content:'';background:#e5e4e1}#blog-author .post-author{margin-top:-5em;padding-bottom:3em;border:0}#blog-author .post-author-avatar{width:20%;margin:0 2.5%}#blog-author.has-cover .post-author-avatar{box-shadow:0 2px 4px rgba(0,0,0,0.1)}#blog-author.has-cover .post-author-avatar img{border:0.125em solid #fff}#blog-author .post-author-name{padding:0.333em 0 0;font-size:2em;line-height:1em}#blog-author.has-cover .post-author-name{padding:0.333em 0;font-weight:500;letter-spacing:0.025em;line-height:1.333em;color:#fff}#blog-author.has-cover .post-author-about{margin-top:1.333em}.container{position:relative}.container .post{padding:4em 0}.container .post:after{position:absolute;width:32em;height:1px;left:50%;bottom:0;margin-left:-16em;content:'';background:#e5e4e1}.container .post.featured .post-title:after{position:absolute;width:1em;height:1em;left:-1.75em;top:0;margin-top:-0.25em;font-family:'icons';font-size:0.5em;font-style:normal;font-weight:normal;content:'\e800';color:inherit;text-align:center;color:#e5e4e1}.post.page{padding-bottom:4em}.page-template #footer:after{position:absolute;width:32em;height:1px;left:50%;top:0;margin-left:-16em;content:'';background:#e5e4e1}#post-header{position:relative;padding-top:6em}#post-header.has-cover{padding:16em 0 2em;background:#000;overflow:hidden;text-shadow:0 1px 2px rgba(0,0,0,0.1)}.post-cover{position:absolute;width:100%;height:100%;left:0;top:0;z-index:5;background:no-repeat scroll center center/cover #000;animation:0.5s ease-in forwards fadein}.post-cover:after{position:absolute;width:100%;height:12em;left:0;bottom:0;z-index:8;content:'';background:linear-gradient(to bottom, transparent 0%, rgba(0,0,0,0.5) 100%)}.post{position:relative;padding-top:2em;z-index:10}.post-title{position:relative;z-index:10;margin:0 0 0.5em;font-size:2em;line-height:1em;font-weight:700;text-indent:-1px;color:#000}.has-cover .post-title{color:#fff}.post-title a{text-decoration:none;color:inherit;font-weight:inherit}.post-meta{position:relative;z-index:10;display:block;margin-bottom:1.333em;font-family:'Fira Sans', sans-serif;font-size:0.75em;font-weight:400;line-height:1.333em;opacity:0.5}.has-cover .post-meta{color:#fff;opacity:0.75}.post-meta a{color:inherit;text-decoration:none;border-bottom:1px solid transparent}.post-meta a:hover,.post-meta a:focus{border-color:rgba(0,0,0,0.5)}.has-cover .post-meta a:hover,.has-cover .post-meta a:focus{border-color:rgba(255,255,255,0.5)}.post-excerpt p{margin:0}.post-content a{border-bottom:1px solid #f26a3d}.post-content a:hover,.post-content a:focus{color:#f26a3d}.post-content img,.post-content .fluid-width-video-wrapper{max-width:none;width:110%;margin-left:-5%}.post-info{margin-top:6em;overflow:hidden}.post-share{max-width:25%;float:right}.post-share a{display:block;width:2em;height:2em;margin:0.333em 0 0.333em 0.666em;padding:0;float:left;font-size:0.75em;line-height:2em;text-align:center;text-decoration:none;color:#fff;border-radius:2px;transition:all ease 0.3s}.post-share a:hover,.post-share a:focus{background-color:#212226}.post-share a i{color:inherit}.post-share a i:before{width:auto;height:auto}.post-share .twitter{background-color:#3ea9dd}.post-share .facebook{background-color:#3c5a98}.post-share .googleplus{background-color:#d14836}.post-tags{max-width:75%;float:left;font-family:'Fira Sans', sans-serif}.post-tags a{display:inline-block;margin:0 0.333em 0.666em 0;padding:0.575em 1em;background:#fff;border:1px solid #f26a3d;font-size:0.75em;font-weight:500;line-height:1.333em;text-align:center;text-decoration:none;color:#f26a3d;border-radius:2em;transition:all ease 0.3s;box-sizing:border-box}.post-tags a:hover,.post-tags a:focus{background:#f26a3d;color:#fff}.post-author{position:relative;margin:2em 0 0;padding:2em 0;z-index:10;border-top:1px solid #e5e4e1;border-bottom:1px solid #e5e4e1;clear:both}.post-author-avatar{position:relative;float:left;width:15%;margin:-0.5em 0 0 5%;overflow:hidden;background:#fff;border-radius:10em;box-sizing:border-box}.post-author-avatar img{width:100%;margin:auto;border-radius:10em;box-sizing:border-box}.post-author-bio{padding-left:25%;font-family:'Fira Sans', sans-serif;font-size:0.75em;line-height:1.333em}.post-author-name{margin:0;padding:0;font-size:1.333em;line-height:1em;text-indent:inherit}.post-author-about{margin:0.666em 0}.post-author-bio span{position:relative;font-size:0.8em;display:inline-block;margin-top:1.25em;margin-right:1.25em;font-weight:400;opacity:0.5}.post-author-bio i{color:inherit}.post-author-bio a{color:inherit;text-decoration:none;font-weight:inherit;border-bottom:1px solid transparent}.post-comments{position:relative;padding:2em 0;text-align:center;border-bottom:1px solid #e5e4e1;box-sizing:border-box}.post-comments.activated{margin:-1px 0 0;padding:1em;background:#faf9f7;border:1px solid #e5e4e1}.post-comments-activate{display:inline-block;margin:0;padding:0.5em 1.25em;border:1px solid #c2c7cc;font-family:'Fira Sans', sans-serif;font-size:0.75em;line-height:1.333em;color:#8a9199;text-align:center;cursor:pointer;transition:all ease 0.3s;border-radius:2em}.post-comments-activate:hover,.post-comments-activate:focus{color:#f26a3d;border-color:#f26a3d}.activated .post-comments-activate{display:none}.post-nav{position:relative;border-bottom:1px solid #e5e4e1}.post-nav:after{position:absolute;content:'';width:1px;height:100%;left:50%;top:0;background:#e5e4e1;z-index:2}.post-nav-next,.post-nav-prev{display:block;width:50%}.post-nav-next{float:left}.post-nav-prev{float:right}.post-nav-teaser{padding:1.5em 0;min-height:6em}.post-nav-next .post-nav-teaser{padding-right:1em}.post-nav-prev .post-nav-teaser{padding-left:1em}.post-nav i{position:absolute;top:50%;width:2em;height:2em;margin-top:-1em;font-size:2em;line-height:2em;text-align:center;transition:all ease-out 0.3s;color:#e5e4e1}.post-nav-next i{left:0;margin-left:-1.75em}.post-nav-prev i{right:0;margin-right:-1.75em}.post-nav a:hover i,.post-nav a:focus i{color:#f26a3d}.post-nav-title{margin:0 0 0.5em;padding:0;font-size:1em;line-height:1em;color:inherit}.post-nav-excerpt{margin:0;font-size:0.75em;line-height:1.333em}.pagination{position:relative;height:2em;margin:0;padding:2em 0;font-family:'Fira Sans', sans-serif}.pagination:after{position:absolute;width:32em;height:1px;left:50%;bottom:0;margin-left:-16em;content:'';background:#e5e4e1}.pagination a{position:relative;display:block;height:1.333em;margin:-1px 0;padding:0.666em 1em;z-index:100;border:1px solid #c2c7cc;font-size:0.75em;line-height:1.5em;text-align:center;text-decoration:none;color:#8a9199;transition:all ease 0.3s;border-radius:2em}.pagination .pagination-prev{float:right;padding-left:1.333em}.pagination .pagination-next{float:left;padding-right:1.333em}.pagination a:hover,.pagination a:focus{color:#f26a3d;border-color:#f26a3d}.pagination .pagination-label{position:relative;display:inline-block;height:1em;line-height:1em}.pagination a i{position:relative;width:auto;top:-1px;margin:auto;color:inherit;font-size:0.75em;line-height:1.333em}.pagination .pagination-info{position:absolute;width:100%;height:2.666em;left:0;z-index:50;display:block;font-size:0.75em;line-height:2.666em;text-align:center}.extra-pagination{display:none}.extra-pagination .pagination:after{top:auto;bottom:0}.archive-template .extra-pagination{display:block}@media only screen and (max-width: 960px){#wrapper{transform:translate3d(0, 0, 0)}.menu-active #wrapper{padding-right:0;transform:translate3d(-16em, 0, 0)}.blog-logo,.nav-button{position:absolute}#blog-author{margin:auto}}@media only screen and (max-width: 640px){html{font-size:50%}.post-share,.post-tags{max-width:none;float:none;margin:0 0 2em}.post-share a{margin-left:0;margin-right:0.666em}.post-nav i{font-size:1.5em}}@media only screen and (max-width: 480px){.inner{padding:0 16px}.post-template #main-header{padding:16px 0}#main-nav a{margin:16px}.post-author-avatar{margin:-0.25em 0 0 0.5em}.container .post.featured .post-title:after{left:0;top:-1.75em}.post-content img,.post-content .fluid-width-video-wrapper{width:100%;margin-left:auto}.post-nav:after{display:none}.post-nav-next,.post-nav-prev{display:block;width:100%}.post-nav-teaser{position:relative;min-height:4em;padding:2em 0}.post-nav-next .post-nav-teaser:after{position:absolute;content:'';width:100%;height:1px;left:0;bottom:0;margin-bottom:-1px;background:#e5e4e1;z-index:2}.post-nav-next .post-nav-teaser{padding-right:0;padding-left:1.5em}.post-nav-prev .post-nav-teaser{padding-left:0;padding-right:1.5em}.post-nav-next i{margin-left:-1em}.post-nav-prev i{margin-right:-1em}}@media only screen and (max-width: 320px){.pagination .pagination-label{display:none}}
diff --git a/design/font/IBMPlexSansHebrew-Bold.ttf b/design/font/IBMPlexSansHebrew-Bold.ttf
new file mode 100644
index 0000000..16f99f5
Binary files /dev/null and b/design/font/IBMPlexSansHebrew-Bold.ttf differ
diff --git a/design/font/IBMPlexSansHebrew-ExtraLight.ttf b/design/font/IBMPlexSansHebrew-ExtraLight.ttf
new file mode 100644
index 0000000..639cb92
Binary files /dev/null and b/design/font/IBMPlexSansHebrew-ExtraLight.ttf differ
diff --git a/design/font/IBMPlexSansHebrew-Light.ttf b/design/font/IBMPlexSansHebrew-Light.ttf
new file mode 100644
index 0000000..a4a15f1
Binary files /dev/null and b/design/font/IBMPlexSansHebrew-Light.ttf differ
diff --git a/design/font/IBMPlexSansHebrew-Medium.ttf b/design/font/IBMPlexSansHebrew-Medium.ttf
new file mode 100644
index 0000000..932e983
Binary files /dev/null and b/design/font/IBMPlexSansHebrew-Medium.ttf differ
diff --git a/design/font/IBMPlexSansHebrew-Regular.ttf b/design/font/IBMPlexSansHebrew-Regular.ttf
new file mode 100644
index 0000000..31e928e
Binary files /dev/null and b/design/font/IBMPlexSansHebrew-Regular.ttf differ
diff --git a/design/font/IBMPlexSansHebrew-SemiBold.ttf b/design/font/IBMPlexSansHebrew-SemiBold.ttf
new file mode 100644
index 0000000..6ee05a1
Binary files /dev/null and b/design/font/IBMPlexSansHebrew-SemiBold.ttf differ
diff --git a/design/font/IBMPlexSansHebrew-Thin.ttf b/design/font/IBMPlexSansHebrew-Thin.ttf
new file mode 100644
index 0000000..9a50d0b
Binary files /dev/null and b/design/font/IBMPlexSansHebrew-Thin.ttf differ
diff --git a/design/font/clacon2.woff2 b/design/font/clacon2.woff2
new file mode 100644
index 0000000..cf23294
Binary files /dev/null and b/design/font/clacon2.woff2 differ
diff --git a/design/font/icons.eot b/design/font/icons.eot
new file mode 100644
index 0000000..8925a8f
Binary files /dev/null and b/design/font/icons.eot differ
diff --git a/design/font/icons.svg b/design/font/icons.svg
new file mode 100644
index 0000000..d777284
--- /dev/null
+++ b/design/font/icons.svg
@@ -0,0 +1,22 @@
+
+
+
+Copyright (C) 2015 by original authors @ fontello.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/design/font/icons.ttf b/design/font/icons.ttf
new file mode 100644
index 0000000..7b5ccfa
Binary files /dev/null and b/design/font/icons.ttf differ
diff --git a/design/font/icons.woff b/design/font/icons.woff
new file mode 100644
index 0000000..3bb1adb
Binary files /dev/null and b/design/font/icons.woff differ
diff --git a/design/font/noto-sans-v6-greek_greek-ext_latin_latin-ext-700.woff b/design/font/noto-sans-v6-greek_greek-ext_latin_latin-ext-700.woff
new file mode 100644
index 0000000..d95ba65
Binary files /dev/null and b/design/font/noto-sans-v6-greek_greek-ext_latin_latin-ext-700.woff differ
diff --git a/design/font/noto-sans-v6-greek_greek-ext_latin_latin-ext-700.woff2 b/design/font/noto-sans-v6-greek_greek-ext_latin_latin-ext-700.woff2
new file mode 100644
index 0000000..f32f46f
Binary files /dev/null and b/design/font/noto-sans-v6-greek_greek-ext_latin_latin-ext-700.woff2 differ
diff --git a/design/font/noto-sans-v6-greek_greek-ext_latin_latin-ext-700italic.woff b/design/font/noto-sans-v6-greek_greek-ext_latin_latin-ext-700italic.woff
new file mode 100644
index 0000000..d797af4
Binary files /dev/null and b/design/font/noto-sans-v6-greek_greek-ext_latin_latin-ext-700italic.woff differ
diff --git a/design/font/noto-sans-v6-greek_greek-ext_latin_latin-ext-700italic.woff2 b/design/font/noto-sans-v6-greek_greek-ext_latin_latin-ext-700italic.woff2
new file mode 100644
index 0000000..8cc5ad3
Binary files /dev/null and b/design/font/noto-sans-v6-greek_greek-ext_latin_latin-ext-700italic.woff2 differ
diff --git a/design/font/noto-sans-v6-greek_greek-ext_latin_latin-ext-italic.woff b/design/font/noto-sans-v6-greek_greek-ext_latin_latin-ext-italic.woff
new file mode 100644
index 0000000..baaa435
Binary files /dev/null and b/design/font/noto-sans-v6-greek_greek-ext_latin_latin-ext-italic.woff differ
diff --git a/design/font/noto-sans-v6-greek_greek-ext_latin_latin-ext-italic.woff2 b/design/font/noto-sans-v6-greek_greek-ext_latin_latin-ext-italic.woff2
new file mode 100644
index 0000000..25ddaae
Binary files /dev/null and b/design/font/noto-sans-v6-greek_greek-ext_latin_latin-ext-italic.woff2 differ
diff --git a/design/font/noto-sans-v6-greek_greek-ext_latin_latin-ext-regular.woff b/design/font/noto-sans-v6-greek_greek-ext_latin_latin-ext-regular.woff
new file mode 100644
index 0000000..c47304c
Binary files /dev/null and b/design/font/noto-sans-v6-greek_greek-ext_latin_latin-ext-regular.woff differ
diff --git a/design/font/noto-sans-v6-greek_greek-ext_latin_latin-ext-regular.woff2 b/design/font/noto-sans-v6-greek_greek-ext_latin_latin-ext-regular.woff2
new file mode 100644
index 0000000..b531a83
Binary files /dev/null and b/design/font/noto-sans-v6-greek_greek-ext_latin_latin-ext-regular.woff2 differ
diff --git a/design/font/stoke-v6-latin-300.woff b/design/font/stoke-v6-latin-300.woff
new file mode 100644
index 0000000..5e1afe8
Binary files /dev/null and b/design/font/stoke-v6-latin-300.woff differ
diff --git a/design/font/stoke-v6-latin-300.woff2 b/design/font/stoke-v6-latin-300.woff2
new file mode 100644
index 0000000..d907e1a
Binary files /dev/null and b/design/font/stoke-v6-latin-300.woff2 differ
diff --git a/design/font/stoke-v6-latin-regular.woff b/design/font/stoke-v6-latin-regular.woff
new file mode 100644
index 0000000..dfbe832
Binary files /dev/null and b/design/font/stoke-v6-latin-regular.woff differ
diff --git a/design/font/stoke-v6-latin-regular.woff2 b/design/font/stoke-v6-latin-regular.woff2
new file mode 100644
index 0000000..4e8222e
Binary files /dev/null and b/design/font/stoke-v6-latin-regular.woff2 differ
diff --git a/design/images/about-bg.jpg b/design/images/about-bg.jpg
new file mode 100644
index 0000000..af6d4d5
Binary files /dev/null and b/design/images/about-bg.jpg differ
diff --git a/design/images/contact-bg.jpg b/design/images/contact-bg.jpg
new file mode 100644
index 0000000..9bf21a4
Binary files /dev/null and b/design/images/contact-bg.jpg differ
diff --git a/design/images/home-bg.jpg b/design/images/home-bg.jpg
new file mode 100644
index 0000000..a4d2108
Binary files /dev/null and b/design/images/home-bg.jpg differ
diff --git a/design/images/post-bg.jpg b/design/images/post-bg.jpg
new file mode 100644
index 0000000..21750a4
Binary files /dev/null and b/design/images/post-bg.jpg differ
diff --git a/design/images/psithemius_glow.jpg b/design/images/psithemius_glow.jpg
new file mode 100644
index 0000000..f058e61
Binary files /dev/null and b/design/images/psithemius_glow.jpg differ
diff --git a/design/index.html b/design/index.html
new file mode 100644
index 0000000..966cee5
--- /dev/null
+++ b/design/index.html
@@ -0,0 +1,327 @@
+
+
+
+
+
+
+
+Featured Images for the detail View
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ + +
+
+ +

Featured Images for the detail View

+ + + +
+
+
+
+ + +
+
+
+
+

Hi there and welcome to Attila - theme for the blogging platform Pelican. Attila is open source and can be found on GitHub. This article is just a demo post and shows you the style of common used elements.

+
+

Headline 1

+

Headline 2

+

Headline 3

+

Headline 4

+
+

Bear claw danish chocolate lollipop soufflé jelly. Apple pie chocolate cake +jelly-o icing bonbon. Gingerbread pastry fruitcake muffin chocolate bar +cheesecake. Sugar plum bonbon bonbon lemon drops gummies.

+
+
+

Inline 🦄 text styles + link

+

Chocolate tiramisu pastry a link cotton candy sesame +snaps. Dessert cake chocolate bar a bold part sugar plum bonbon 🐓💨 +marshmallow lollipop toffee soufflé. Donut caramels chocolate bar. Oat cake +cookie a marked part cheesecake donut. Jelly-o <some> $code marzipan cake. +Bonbon sesame snaps chocolate an italic part oat cake pudding sweet roll +caramels bonbon. Soufflé muffin 👻 gummies sugar plum dessert bonbon bear claw. +Sweet ice cream jujubes. Marzipan sugar plum pastry chocolate ⌘+A bar +fruitcake. Lollipop lollipop brownie.

+

Ordered & unordered lists

+

Cake jelly-o chocolate cake sugar plum carrot cake lollipop bonbon. Jelly +beans pudding oat cake pie.

+

Unordered list

+
    +
  • Jelly beans pudding oat cake pie.
  • +
  • Cupcake cupcake oat cake candy lemon
  • +
  • Drops marzipan icing. Dessert topping croissant fruitcake sesame snaps cotton candy sweet danish
  • +
  • Sweet roll sweet sugar plum donut
      +
    • Bear claw gingerbread cake donut chocolate bar
    • +
    • Topping cake fruitcake fruitcake
    • +
    +
  • +
  • Ice cream icing chupa chups cupcake jelly-o candy
  • +
  • Croissant jujubes topping tart soufflé pudding
      +
    • Cheesecake caramels icing
    • +
    • Cake jelly-o chocolate cake sugar plum carrot cake lollipop bonbon
    • +
    +
  • +
+

Ordered list

+
    +
  1. Drops marzipan icing. Dessert topping croissant fruitcake sesame snaps cotton candy sweet danish
  2. +
  3. +

    Sweet roll sweet sugar plum donut

    +
      +
    • Bear claw gingerbread cake donut chocolate bar
    • +
    • Topping cake fruitcake fruitcake
    • +
    • Ice cream icing chupa chups cupcake jelly-o candy
    • +
    +
  4. +
+

Definition list

+
+
+

Ice cream

+
icing chupa chups cupcake jelly-o candy. Croissant jujubes topping tart soufflé pudding
+
+

Cake

+
Jelly beans pudding oat cake pie
+
+

Drops marzipan icing

+
Cake jelly-o chocolate cake sugar plum carrot cake lollipop
+
+

Tables, blockquotes and codeblocks

+

Apple pie chocolate cake jelly-o icing bonbon. Gingerbread pastry fruitcake +muffin chocolate bar cheesecake. Sugar plum bonbon bonbon lemon drops gummies.

+ + + + + + + + + + + + + + + + + + + + + +
RGBCMYK
RedCyan
GreenMagenta
BlueYellow
+

Brownie oat cake tart caramels croissant lollipop pastry soufflé lemon drops. +Cotton candy pastry ice cream fruitcake tiramisu jelly beans dragée.

+
+

Jelly beans dessert toffee caramels brownie ice cream croissant chupa chups +liquorice. Danish sweet roll croissant. Powder sugar plum powder danish wafer +cake.

+

Candy jelly beans jujubes muffin. Bear claw danish chocolate lollipop +soufflé jelly.

+
+

Cake soufflé icing gingerbread topping jujubes. Chocolate cake pudding sweet +biscuit cake. Soufflé tart topping gummi bears jujubes lollipop ice cream +pudding.

+

Apple pie jelly-o powder powder sweet. Halvah chocolate bar cotton candy sugar +plum cake. Liquorice marshmallow sweet macaroon.

+
<blockquote>
+    <p>For example.</p>
+</blockquote>
+
+

Cake soufflé icing gingerbread topping jujubes. Chocolate cake pudding sweet +biscuit cake. Soufflé tart topping gummi bears jujubes lollipop ice cream +pudding. Apple pie jelly-o powder powder sweet. Halvah chocolate bar cotton +candy sugar plum cake. Liquorice marshmallow sweet macaroon. Cotton candy +pastry ice cream fruitcake tiramisu jelly beans drag.

+

Apple pie chocolate cake jelly-o icing bonbon. Gingerbread pastry fruitcake +muffin chocolate bar cheesecake. Sugar plum bonbon bonbon lemon drops gummies. +Brownie oat cake tart caramels croissant lollipop pastry soufflé lemon drops. +Jelly beans dessert toffee caramels brownie ice cream croissant chupa chups +liquorice. Danish sweet roll croissant. Powder sugar plum powder danish wafer +cake. Candy jelly beans jujubes muffin. Bear claw danish chocolate lollipop +soufflé jelly.

+
+ + + +
+Show Comments +
+
+ +
+
+
+ + + +
+ + + + + diff --git a/design/js/script.js b/design/js/script.js new file mode 100644 index 0000000..eeafc08 --- /dev/null +++ b/design/js/script.js @@ -0,0 +1,5 @@ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){function c(a){var b="length"in a&&a.length,c=ea.type(a);return"function"!==c&&!ea.isWindow(a)&&(!(1!==a.nodeType||!b)||("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a))}function d(a,b,c){if(ea.isFunction(b))return ea.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return ea.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(ma.test(b))return ea.filter(b,a,c);b=ea.filter(b,a)}return ea.grep(a,function(a){return ea.inArray(a,b)>=0!==c})}function e(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}function f(a){var b=ua[a]={};return ea.each(a.match(ta)||[],function(a,c){b[c]=!0}),b}function g(){oa.addEventListener?(oa.removeEventListener("DOMContentLoaded",h,!1),a.removeEventListener("load",h,!1)):(oa.detachEvent("onreadystatechange",h),a.detachEvent("onload",h))}function h(){(oa.addEventListener||"load"===event.type||"complete"===oa.readyState)&&(g(),ea.ready())}function i(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(za,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c||"false"!==c&&("null"===c?null:+c+""===c?+c:ya.test(c)?ea.parseJSON(c):c)}catch(e){}ea.data(a,b,c)}else c=void 0}return c}function j(a){var b;for(b in a)if(("data"!==b||!ea.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function k(a,b,c,d){if(ea.acceptData(a)){var e,f,g=ea.expando,h=a.nodeType,i=h?ea.cache:a,j=h?a[g]:a[g]&&g;if(j&&i[j]&&(d||i[j].data)||void 0!==c||"string"!=typeof b)return j||(j=h?a[g]=W.pop()||ea.guid++:g),i[j]||(i[j]=h?{}:{toJSON:ea.noop}),("object"==typeof b||"function"==typeof b)&&(d?i[j]=ea.extend(i[j],b):i[j].data=ea.extend(i[j].data,b)),f=i[j],d||(f.data||(f.data={}),f=f.data),void 0!==c&&(f[ea.camelCase(b)]=c),"string"==typeof b?(e=f[b],null==e&&(e=f[ea.camelCase(b)])):e=f,e}}function l(a,b,c){if(ea.acceptData(a)){var d,e,f=a.nodeType,g=f?ea.cache:a,h=f?a[ea.expando]:ea.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){ea.isArray(b)?b=b.concat(ea.map(b,ea.camelCase)):b in d?b=[b]:(b=ea.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;for(;e--;)delete d[b[e]];if(c?!j(d):!ea.isEmptyObject(d))return}(c||(delete g[h].data,j(g[h])))&&(f?ea.cleanData([a],!0):ca.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}function m(){return!0}function n(){return!1}function o(){try{return oa.activeElement}catch(a){}}function p(a){var b=Ka.split("|"),c=a.createDocumentFragment();if(c.createElement)for(;b.length;)c.createElement(b.pop());return c}function q(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==xa?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==xa?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||ea.nodeName(d,b)?f.push(d):ea.merge(f,q(d,b));return void 0===b||b&&ea.nodeName(a,b)?ea.merge([a],f):f}function r(a){Ea.test(a.type)&&(a.defaultChecked=a.checked)}function s(a,b){return ea.nodeName(a,"table")&&ea.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function t(a){return a.type=(null!==ea.find.attr(a,"type"))+"/"+a.type,a}function u(a){var b=Va.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function v(a,b){for(var c,d=0;null!=(c=a[d]);d++)ea._data(c,"globalEval",!b||ea._data(b[d],"globalEval"))}function w(a,b){if(1===b.nodeType&&ea.hasData(a)){var c,d,e,f=ea._data(a),g=ea._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)ea.event.add(b,c,h[c][d])}g.data&&(g.data=ea.extend({},g.data))}}function x(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!ca.noCloneEvent&&b[ea.expando]){e=ea._data(b);for(d in e.events)ea.removeEvent(b,d,e.handle);b.removeAttribute(ea.expando)}"script"===c&&b.text!==a.text?(t(b).text=a.text,u(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),ca.html5Clone&&a.innerHTML&&!ea.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Ea.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}function y(b,c){var d,e=ea(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:ea.css(e[0],"display");return e.detach(),f}function z(a){var b=oa,c=_a[a];return c||(c=y(a,b),"none"!==c&&c||($a=($a||ea(" \ No newline at end of file diff --git a/web/content/blog/boom.md b/web/content/blog/boom.md new file mode 100644 index 0000000..8d22267 --- /dev/null +++ b/web/content/blog/boom.md @@ -0,0 +1,32 @@ +Title: Boom Festival +Date: 2004-08-26 10:08 +Category: installation +Slug: crop-circles-at-boom-festival +Summary: Collaborative video-installation with Ray-V at the Boom Festival 2004 + +Collaborative video-installation with Ray-V at the Boom Festival 2004. Crop circle shaped screens with mapped video content, all controlled by Max/Jitter. + +![](/images/10535_159100014181_153556764181_2604725_8061373_n.jpg "10535_159100014181_153556764181_2604725_8061373_n")(Idhana a Nova, Portugal) + +![](/images/10535_159100009181_153556764181_2604724_4475484_n.jpg "10535_159100009181_153556764181_2604724_4475484_n")(center stage dome setup) + +![](/images/10535_159100984181_153556764181_2604732_7399244_n.jpg "10535_159100984181_153556764181_2604732_7399244_n") + +![](/images/10535_159100004181_153556764181_2604723_859779_n.jpg "10535_159100004181_153556764181_2604723_859779_n")(three projectors are delivred) + +![](/images/10535_159100969181_153556764181_2604731_4058289_n.jpg "10535_159100969181_153556764181_2604731_4058289_n")(the scaffold and screens) + +![](/images/10535_159099999181_153556764181_2604722_6708666_n.jpg "10535_159099999181_153556764181_2604722_6708666_n")(shared studio space with vj geko) + +![](/images/10535_159100994181_153556764181_2604733_6961590_n.jpg "10535_159100994181_153556764181_2604733_6961590_n")(running the installation) + +![](/images/10535_159101589181_153556764181_2604739_1864823_n.jpg "10535_159101589181_153556764181_2604739_1864823_n") + +![](/images/10535_159101584181_153556764181_2604738_1651084_n.jpg "10535_159101584181_153556764181_2604738_1651084_n") + +![](/images/10535_159101004181_153556764181_2604735_7041999_n.jpg "10535_159101004181_153556764181_2604735_7041999_n") + +![](/images/10535_159100999181_153556764181_2604734_5768778_n.jpg "10535_159100999181_153556764181_2604734_5768778_n") + +![](/images/10535_159099994181_153556764181_2604721_7191175_n.jpg "10535_159099994181_153556764181_2604721_7191175_n") + diff --git a/web/content/blog/chisinau.md b/web/content/blog/chisinau.md new file mode 100644 index 0000000..84d8f87 --- /dev/null +++ b/web/content/blog/chisinau.md @@ -0,0 +1,26 @@ +Title: Alternative KunsTräume - Chisinau +Date: 2015-10-17 23:00 +Category: event +Slug: chisinau +Summary: Trip to Moldova to support alternative art spaces in eastern Europe + +The Goethe Institut invited me to a ten day trip to Moldova and Ukraine as part of their program to support alternative art spaces in eastern Europe. + +Together with Berlin based DJ [Stefan Goldmann](http://stefangoldmann.com) I performed a live visual set at ArtBuncher and [Tipografia 5](https://www.facebook.com/tipografia.V) + +[Tipografia 5 Art Cluster](https://www.facebook.com/artclusterT5) also invited me to do a [3 hour workshop about Live Video Performance Art](https://www.facebook.com/events/545558968929765/) + +> Workshop description: "The workshop will attempt to give an overview of the diverse variants of live video art performance: Club VJ'ing, Live Cinema, Audiovisual Performance, Architecture Mapping, and Video Installations. There will be an introduction to video technology and commonly used live video software for Mac and Windows PC, as well as hardware that can be interesting to use. Attendees should have basic computer knowledge and ideally bring their own portable Mac or PC and a rough idea of what they would like to do. No special skills are required. Trial installers for all covered software will be provided." + +![1](/images/t5_2.jpg "photo (C) Michely Moore") +photo (C) Michely Moore + +![2](/images/t5_1.jpg "photo (C) Michely Moore") +photo (C) Michely Moore + +![3](/images/t5_4.jpg "photo (C) Fabian Mühlthaler") +photo (C) Fabian Mühlthaler + +![5](/images/t5_3.jpg "") + + diff --git a/web/content/blog/clujotronic.md b/web/content/blog/clujotronic.md new file mode 100644 index 0000000..a8e2bb8 --- /dev/null +++ b/web/content/blog/clujotronic.md @@ -0,0 +1,30 @@ +Title: Clujotronic +Date: 2021-10-03 +Category: performance +Slug: clujotronic +Summary: Various performances for the electro arts festival in Cluj-Napoca, RO together with Alex Halka and others. + +Organised by the [German Cultural Center](http://www.kulturzentrum-klausenburg.ro) and the [French Institute](https://institutfrancais.ro/cluj-napoca) in Cluj-Napoca, the annual electro arts festival [Clujotronic](https://www.clujotronic.ro) brings together artists and specialists from France, Germany and Romania. The festival is about engaging activities, collaborative projects, and a sense of excitement around tech-based art. + +I was invited to participate in several editions. The first two times the goal of my performance was to create an audiovisual performance within 48 hours together with a Romanian musician I had not met before - and to comply with my own dogma of only using video material shot in Cluj. In 2014 the result was an exploration of the urban landscape of the city of Cluj-Napoca together with [Alex Halka](https://www.alexhalka.eu). + + + +A year later I also collaborated with Tlalit to create video materials from photographs we took during an afternoon in the allegedly haunted Hoia Baciu forest outside of the city. + +In the 2016 edition I wanted to do something completely different than in the years before: a projection into the audience through a room filled with fog. My aim was to play with the depth of the space instead of having video playing on a flat surface. The content consisted exclusively of magical and alchemical symbols which suited the dark ambient techno live-set of *Alex Halka* and [Vlaicu Golcea](https://vlaicugolcea.ro). + +
+  +
+  +
+  +
+  +
+  + +In 2021 I was reinvited to produce an audiovisual facade projection mapping in collaboration with Alex Halka and [Matthieu Tercieux](http://matthieutercieux.com). + +Many thanks to the amazing artists. It has always been a very inspiring and synergetic collaboration. Thanks a lot to the CLUJOTRONIC team for the ideas and for making this festival: Fabian, Alexandra, Andreea, Liliana and Ildiko of Deutsches Kulturzentrum Klausenburg, the Institut Francais, Razvan and his great tech support crew. \ No newline at end of file diff --git a/web/content/blog/crystal-canyons.md b/web/content/blog/crystal-canyons.md new file mode 100644 index 0000000..5f95d0e --- /dev/null +++ b/web/content/blog/crystal-canyons.md @@ -0,0 +1,25 @@ +Title: Lost in Crystal Canyons +Date: 2017-03-20 21:00 +Slug: last-unit-01 +Category: audio +Summary: Debut digital album release of a deep listening ambient drone meditation on cyberpunk + + + +Debut digital [album release](https://lastunit.bandcamp.com/album/lost-in-crystal-canyons) of a deep listening ambient drone meditation on cyberpunk called "Lost in Crystal Canyons" under my alias for audio works, "Last Unit" + +All sounds used in this [album](https://lastunit.bandcamp.com/album/lost-in-crystal-canyons) were recorded with a special coil microphone, capturing the naturally inaudible electromagnetic emissions of the mainboard and componentes of a dual CPU Supermicro rack server. + +
+> The humming beneath the physical matter. Unified Field. The server as a neuron. Cyberspace/mind emerging from electrified matter/brain which itself is a manifestation of energy/consciousness. + +The recordings were resampled, mixed and mangled with a Yamaha MT-120 multitrack cassette recorder, a Roland SP-404SX sampler and a bunch of stompboxes, most prominently a Jomox T-Resonator. None of the tracks were arranged, edited or mastered on a computer but only performed live by Last Unit. + +![instruments](/images/sp404.jpg) + +
+> "All that is visible must grow beyond itself, and extend into the realm of the invisible." (TRON) + +The obvious medium for the final work was an electromagnetic one. In addition to the digital album available on Bandcamp I produced a limited edition of 20 numbered low-bias ferric cassette tapes for extra background hiss and subtle flutter backing up the drones. It includes the two bonus tracks "Pearly I/O" and "Sas Nam" not available on the digital album. The tape comes with a standard case and 160g/m² j-card with photographs, stickers and a signed note. + +![cassette](/images/cassette.jpg) \ No newline at end of file diff --git a/web/content/blog/disonancia-cognitiva.md b/web/content/blog/disonancia-cognitiva.md new file mode 100644 index 0000000..df066c7 --- /dev/null +++ b/web/content/blog/disonancia-cognitiva.md @@ -0,0 +1,9 @@ +Title: Disonancia Cognitiva +Date: 2009-10-10 10:10 +Category: performance +Slug: disonancia-cognitiva +Summary: Audiovisual dance-performance with the project Instant Delay + +Audiovisual dance-performance with the project "Instant Delay" with Georgina Espasa, [Meritxell Campos Olivé](http://www.meritxell.de/), and [Roger Mercader](http://www.myspace.com/metroxylon). Performed at Netaudio Berlin 2009. + + \ No newline at end of file diff --git a/web/content/blog/dostalgia.md b/web/content/blog/dostalgia.md new file mode 100644 index 0000000..c64119a --- /dev/null +++ b/web/content/blog/dostalgia.md @@ -0,0 +1,10 @@ +Title: Website Relaunch +Date: 2023-04-27 +Category: Blog +Summary: The inevitable DOStalgia of a Xennial nerd + +The post-Covid era required a new website as I have not only retired my VJ career but also undergone a phase of personal growth and reorientation I wanted to see reflected on my digital front door. + +After many ideas and sketches revolving around complex moiré patterned parallax effects and a very visual approach I settled with the complete opposite: minimalist and text driven. + +To pay an hommage to my earliest days of creativity with digital technology I went with a design that reflects the "UX" of a personal computer running a DOS operating system. Just like the one I was tinkering with in my mid 1990s teenage years on my dad's discarded 80286 machine on which I had taught myself typewriting, programming in QBASIC, and using word processing software in all kinds of artistic manners. \ No newline at end of file diff --git a/web/content/blog/eb.md b/web/content/blog/eb.md new file mode 100644 index 0000000..e18472f --- /dev/null +++ b/web/content/blog/eb.md @@ -0,0 +1,33 @@ +Title: Electronic Beats Festivals +Date: 2019-11-23 12:00 +Category: collaboration +Slug: electronic-beats-festivals +Summary: Video production, event design and projections for a festival series of Deutsche Telekom for contemporary electronic music culture that takes place across Europe. + +The [Electronic Beats](https://www.electronicbeats.net) Festival is a live music event series of Deutsche Telekom around contemporary electronic music culture that takes place in different cities across Europe. + +[Sense Music & Media](http://www.sensemusic.tv/de/events-de/) (formerly Skudi Optics & Event Design) is responsible for the visual presentation of the brand at events by producing of innovative light objects, interactive media installations and video projections. + +![EB Dresden](/images/eb-dresden.jpg) + +I creatively supported them over several seasons (2012 - 2019) with producing video animations, graphic design, mapping installations, and custom made hard- and software, like a synchronized video looper for CRT TVs. + +
+  +
+  +
+  +
+  +
+  +
+  +
+  +
+  +
+ +![Muster](/images/eb-DSC01459.jpg) \ No newline at end of file diff --git a/web/content/blog/instant.md b/web/content/blog/instant.md new file mode 100644 index 0000000..b36ee77 --- /dev/null +++ b/web/content/blog/instant.md @@ -0,0 +1,16 @@ +Title: #INSTANT +Date: 2018-03-15 23:00 +Category: performance +Slug: instant +Summary: Volatile Live Visuals for the modular techno duo INSTANT on different occasions in Berlin. + +The live modular techno duo Johannes Steyer and Matthias Millhoff, aka [*INSTANT*](http://instant.wtf) invited me to support them with live streamed visuals in their studio and during performances. I used only volatile clips recorded from a USB microscope / macro-camera into a custom *Max/Jitter* patch that loops and transmits them via *Spout* to my VJ Software for further processing. The clips were just macro recordings of the musicians equipment in action during the performances. + + + + + + +For a gig at the *Performance and Visual Artist Club Festival* at Burg Schnabel & Birgit und Bier in Berlin in 2016 I created and set up an installation based on stacking several CRT TV monitors into a pyramid and use that as the only light-source of the stage in a room filled with fog. The content shown consisted of impromptu visuals performed live. + + \ No newline at end of file diff --git a/web/content/blog/kiritanflux.md b/web/content/blog/kiritanflux.md new file mode 100644 index 0000000..31db9c5 --- /dev/null +++ b/web/content/blog/kiritanflux.md @@ -0,0 +1,130 @@ +Title: Live Visuals +Date: 2021-03-01 +Category: performance +Summary: Retiring my 15 year long live VJ career as 'Kiritan Flux' + +Under the nom de guerre of "Kiritan Flux" I performed as a live visual artist and VJ in Berlin and beyond from 2004 until 2021. My VJ work ranged from visual shows at prominent techno events such as Time Warp or Sonus Festival to more conceptual live-cinema performances tailored to their unique local context. + +> *flux* [flûks], n. Lat. _fluxus_, _fluo_, _fluxi_. + +> 1. The act of flowing; the motion or passing of a fluid. +> 2. The moving or passing of any thing in continued succession. +  + + +![MOAM](/images/moam_1.jpg) + +History +======= + +- 09/2019 / Connect / Düsseldorf / DE +- 08/2019 / Sonus Festival / Pag / HR +- 07/2019 / Love Family Park / Rüsselsheim / DE +- 04/2019 / Time Warp / Mannheim / DE +- 10/2018 / Connect / Düsseldorf / DE +- 09/2018 / Electronic Beats Festival / Budapest / HU +- 08/2018 / Sonus Festival / Pag / HR +- 07/2018 / Love Family Park / Rüsselsheim / DE +- 06/2018 / Jewish Culture Festival / Kraków / PL +- 04/2018 / f(t) Festival / Berlin / DE +- 04/2018 / Time Warp / Mannheim / DE +- 02/2018 / Ori @ Rotbart / Berlin / DE +- 03/2018 / Kater Impromptu / Berlin / DE +- 10/2017 / Ori @ Villa Neukölln / Berlin / DE +- 11/2017 / Live Session #Instantboner / Berlin / DE +- 09/2017 / Live Session #Instantboner / Berlin / DE +- 08/2017 / Sonus Festival / Pag / HR +- 08/2017 / Cables of Love / Berlin / DE +- 07/2017 / Jewish Culture Festival / Kraków / PL +- 04/2017 / Time Warp / Mannheim / DE +- 12/2016 / Performance Arts Festival / Berlin / DE +- 10/2016 / Clujotronic / Cluj-Napoca / RO +- 08/2016 / Sonus Festival / Pag / HR +- 07/2016 / Love Family Park / Rüsselsheim / DE +- 04/2016 / Time Warp / Mannheim / DE +- 03/2016 / Reflections Through Conduction / Berlin / DE +- 12/2015 / Dérive Performance / Auroville / IN +- 12/2015 / Scriptorium / Berlin / DE +- 11/2015 / DOKFest Lounge / Kassel / DE +- 10/2015 / #Adapter / Kremenchug / UA +- 10/2015 / Tipografia / Chisinau / MO +- 08/2015 / Sonus Festival / Pag / HR +- 07/2015 / Love Family Park / Rüsselsheim / DE +- 04/2015 / Time Warp / Mannheim / DE +- 02/2015 / Reconstruction With Art / Timisoara / RO +- 01/2015 / Scope Vorspiel / Berlin / DE +- 10/2014 / Time Warp / Utrecht / NL +- 09/2014 / Clujotronic / Cluj-Napoca / RO +- 08/2014 / Sonus Festival / Pag / HR +- 07/2014 / Love Family Park / Rüsselsheim / DE +- 04/2014 / Time Warp / Mannheim / DE +- 02/2014 / 5 Years OFF Recordings / Berlin / DE +- 02/2014 / Unrender / Berlin / DE +- 08/2013 / Sonus Festival / Pag / HR +- 07/2013 / Love Family Park / Rüsselsheim / DE +- 07/2013 / Wyjście Alternatywne / Zduńska Wola / PL +- 04/2013 / Time Warp / Mannheim / DE +- 11/2012 / Patchlab / Kraków / PL +- 10/2012 / Intergalactic Fairy Tale @ Chalet / Berlin / DE +- 08/2012 / Bonnie Bravo / Berlin / DE +- 12/2011 / Freemote / Utrecht / NL +- 08/2011 / Luft und Liebe / Berlin / DE +- 07/2011 / Total Green Party / Berlin / DE +- 06/2011 / Luxus für Alle @ 48h Neukölln / Berlin / DE +- 04/2011 / Typographic Architecture / Berlin / DE +- 11/2010 / Did We Meat? / Berlin / DE +- 08/2010 / Luft und Liebe / Berlin / DE +- 06/2010 / VisualBerlin Festival / Berlin / DE +- 04/2010 / 1 Year Betahaus / Berlin / DE +- 10/2009 / Disonancie Cognitiva / Berlin / DE +- 09/2009 / Atoms & Bits @ Betahaus / Berlin / DE +- 08/2009 / Cadavre Exquis / Berlin / DE +- 06/2008 / Lauter Festival +- 09/2008 / "Coulrophobie" - Pulp Mansion / Berlin / DE +- 06/2008 / FF Bots Will Invade Your B-Rain @ LPM / Roma / IT +- 12/2007 / DMY Designer Dinner @ Kunstfabrik / Berlin / DE +- 10/2007 / Club V "Battle" @ Spindler & Klatt / Berlin / DE +- 09/2007 / "Weltherrschaft" @ LPM / Roma / IT +- 08/2007 / VisualBerlin AV Night @ K:ITA / Berlin / DE +- 08/2007 / "Badespaß" @ 5 Meter Bar / Berlin / DE +- 06/2007 / Davidoff Night @ Spindler & Klatt / Berlin / DE +- 05/2007 / "Designmai Punksters" @ DMY / Berlin / DE +- 03/2007 / "Nep Konijn" @ Consortium / Amsterdam / NL +- 03/2007 / "Nep Konijn" @ Ekko / Utrecht / NL +- 12/2006 / Break It Loose Casino Cosmonaut / Heidelberg / DE +- 12/2006 / AVIT>C23 @ BCC / Berlin / DE +- 11/2006 / "The Italian Job" @ LPM / Roma / IT +- 10/2006 / Club Couch Opening @ ZMF / Berlin / DE +- 09/2006 / Wizards of OS @ Columbia / Berlin / DE +- 07/2006 / "Wrozlaw Parano" Era Nowe Horyzonty / Wrozlaw / PL +- 05/2006 / Reanimation @ KKH / Pasewalk / DE +- 05/2006 / 6 Jahre Imperium @ White Trash / Berlin / DE +- 04/2006 / Freaks, Friends & Players Festival / Bremen / DE +- 03/2006 / Storage / Berlin / DE +- 02/2006 / Das Imperium lädt ein / Berlin / DE +- 12/2005 / Break It Loose Casino Cosmonaut / Heidelberg / DE +- 11/2005 - Break It Loose @ Barista / Oldenburg / DE +- 11/2005 / Goodlife / Berlin / DE +- 10/2005 / Bermudavisualisten / Berlin / DE +- 07/2005 / Rafgier presents "now 2005" / Berlin / DE +- 07/2005 / Dr. Motte's Klangturm / Brandenburg Havel / DE +- 06/2005 / 2 Years Goodlife / Berlin/ DE +- 06/2005 / Campus Vibration II / Brandenburg Havel / DE +- 05/2005 - Break It Loose @ Barista / Oldenburg / DE +- 05/2005 / Rafgier / Berlin / DE +- 04/2005 / Acedia Labelnight / Oldenburg / DE +- 02/2005 / Goodlife / Berlin / DE +- 01/2005 / 1 Year Rafgier / Berlin / DE +- 12/2004 / Break It Loose Casino Cosmonaut / Heidelberg / DE +- 11/2004 / Rafgier / Berlin / DE +- 10/2004 / Break It Loose Salon Jürgenz / Oldenburg / DE +- 08/2004 / Boom Festival / Idhana a Nova / PT +- 07/2004 / Rafgier Destroy euRoClAsh / Berlin / DE +- 07/2004 / Neon Nights / Berlin / DE +- 07/2004 / EM-Lounge / Berlin / DE +- 07/2004 / Zentrale Randlage / Berlin / DE +- 07/2004 / Contact Europe VJ Festival / Berlin / DE +- 07/2004 / Break It Loose Salon Jürgenz / Oldenburg / DE +- 05/2004 / Break It Loose Salon Jürgenz / Oldenburg / DE +- 05/2004 / Sony Style Store / Berlin / DE +- 12/2003 / Break It Loose Casino Cosmonaut / Heidelberg / DE \ No newline at end of file diff --git a/web/content/blog/kurtag.md b/web/content/blog/kurtag.md new file mode 100644 index 0000000..4456949 --- /dev/null +++ b/web/content/blog/kurtag.md @@ -0,0 +1,11 @@ +Title: Kurtág - Reflections Through Conduction +Date: 2016-03-08 21:00 +Category: performance +Slug: kurtag-reflections +Summary: Audiovisual improvisation with Tlalit and Jean-Paul Bourelly's Spontaneous Arkestra + +The world of contemporary music celebrated the 90th birthday of Hungarian composer [György Kurtág](https://en.wikipedia.org/wiki/György_Kurtág). Interpreting this influential oeuvre of contemporary classical music, the Collegium Hungaricum Berlin dedicated a special event to Kurtág on 8 March 2016, presenting two concerts. One of them was a live concert of The Spontaneous Arkestra led by the legendary fusion musician, composer and conceptualist [Jean-Paul Bourelly](https://en.wikipedia.org/wiki/Jean-Paul_Bourelly) through the use of Conduction to command the orchestra and reflect on Kurtág's works. By its nature, Conduction method liberates both conductor and musicians from the traditional boundaries of musical rules, habits and conventions, making the collaboration more spontaneous and surprising the audience with unexpected turns. + +[Tlalit](http://tlal.it) and I did a visual improvisation for the concert. The used material consisted only of macro-videography of the stage and instruments of the musicians shot during the rehearsals the day before by Tlalit. This base material was modified and mixed live by me and masked with music inspired live drawings with [Alchemy](http://al.chemy.org) by Tlalit. + + \ No newline at end of file diff --git a/web/content/blog/mutantenkino.md b/web/content/blog/mutantenkino.md new file mode 100644 index 0000000..522f318 --- /dev/null +++ b/web/content/blog/mutantenkino.md @@ -0,0 +1,112 @@ +Title: Mutantenkino +Date: 2016-09-07 22:00 +Category: cinema +Slug: mutantenkino +Summary: Post-apocalyptic pop-up cinema series that ran from 2012 until 2016 + +From 2012 until 2016 I curated and ran a series of underground non-profit pop-up cinema screenings at Panke and other locations called "Mutantenkino" (German for "mutant cinema") exploring the genre of ¨post-apocalypse b-movies." + +The official description was: + +> MUTANTENKINO presents thematically compiled classics and novelties of post-apocalyptic (short) film on long outdated audiovisual carriers in a dystopian ambience at end-time locations around Berlin. + +> Admission is free, but donations are welcome - but please no money, because that will be worth no more than other colored paper after the doom... + +The trope of the series was to 'educate and prepare for the apocalypse'. Each edition was around 2-3 hours long and featured one or two short-films, a feature film, and one episode of the cartoon series Adventure Time - all compiled to match the topic of the main feature. The feature film was never openly advertised and just hinted at by the topic and description of the individual edition. Advertisement was done via Facebook. + +Here is an [article](https://berliner-filmfestivals.de/2012/05/mutantenkino-im-filmrauschpalast-moabit/) (in German) about the 4th edition that featured a John Carpenter triple feature and [an interview](https://berliner-filmfestivals.de/2012/05/mutantenkino-macher-flux-im-gesprach/) (in German) about Mutantenkino + +Full list of all editions with links to the Facebook events: + +07/09/2016 / [Mutantenkino #31 - Kinzoku](https://www.facebook.com/events/1007925855986882/) +Panke, Berlin Wedding + +06/07/2016 / [Mutantenkino #30 - Phoenix Ragazza](https://www.facebook.com/events/300121453654305/) +Panke, Berlin Wedding + +01/06/2016 / [Mutantenkino #29 - 20 Minutes Into the Future](https://www.facebook.com/events/884598684984498/) +Panke, Berlin Wedding + +04/05/2016 / [Mutantenkino #28 - Firifari II](https://www.facebook.com/events/211327359249590/) +Panke, Berlin Wedding + +06/04/2016 / [Mutantenkino #27 - Firifari](https://www.facebook.com/events/238795093138725/) +Panke, Berlin Wedding + +02/03/2016 / [Mutantenkino #26 - Omega](https://www.facebook.com/events/1567095660284148/) +Panke, Berlin Wedding + +02/12/2015 / [Mutantenkino #25 - The Human Project Lives](https://www.facebook.com/events/481365612042377/) +Panke, Berlin Wedding + +07/10/2015 / [Mutantenkino #24 - schland](https://www.facebook.com/events/465995026921567/) +Panke, Berlin Wedding + +05/08/2015 / [Mutantenkino #23 - Formication](https://www.facebook.com/events/403806056490147/) +Panke, Berlin Wedding + +03/06/2015 / [Mutantenkino #22 - Bogans Undead](https://www.facebook.com/events/1610064792596437/) +Panke, Berlin Wedding + +06/05/2015 / [Mutantenkino #21 - Reality Bites](https://www.facebook.com/events/1584673011803904/) +Panke, Berlin Wedding + +01/04/2015 / [Mutantenkino #20 - DMSDY GRRRL](https://www.facebook.com/events/1557111431222046/) +Panke, Berlin Wedding + +04/03/2015 / [Mutantenkino #19 - Acid Desperado](https://www.facebook.com/events/409754939202911/) +Panke, Berlin Wedding + +04/02/2015 / [Mutantenkino #18 - Brain Vortex](https://www.facebook.com/events/1568973286653459/) +Panke, Berlin Wedding + +07/01/2015 / [Mutantenkino #17 - Конец времён](https://www.facebook.com/events/419564928197169/) +Panke, Berlin Wedding + +17/12/2014 / [Mutantenkino #16 - ClipAward Special](https://www.facebook.com/events/1545617552342929/) +Panke, Berlin Wedding + +12/11/2014 / [Mutantenkino #15 - Crumbling Regime](https://www.facebook.com/events/616558291799592/) +Atelier Äuglein, Berlin Kreuzberg + +01/10/2014 / [Mutantenkino #14 - Fi dels Temps](https://www.facebook.com/events/345091238982536/) +Panke, Berlin Wedding + +03/09/2014 / [Mutantenkino #13 - Behold the Future](https://www.facebook.com/events/270634083134054/) +Atelier Äuglein, Berlin Kreuzberg + +05/08/2014 / [Mutantenkino #12 - Transapocalypse Express](https://www.facebook.com/events/336487683185590/) +Panke, Berlin Wedding + +02/07/2014 / [Mutantenkino #11 - Anarchie Road](https://www.facebook.com/events/707412525988626/) +Panke, Berlin Wedding + +03/06/2014 / [Mutantenkino #10 - Atomic Disco](https://www.facebook.com/events/649291645157314/) +Panke, Berlin Wedding + +20/05/2014 / [Mutantenkino #9 - Beware of the Kiwi](https://www.facebook.com/events/1500771193484566/) +Panke, Berlin Wedding + +02/04/2014 / [Mutantenkino #8 - Primate Business](https://www.facebook.com/events/1422316111352683/) +Panke, Berlin Wedding + +05/02/2014 / [Mutantenkino #7 - nuclear winter edition](https://www.facebook.com/events/589270744493901/) +Panke, Berlin Wedding + +04/12/2013 / [Mutantenkino #6 - Guns & Red Stockings](https://www.facebook.com/events/328886693917353/) +Panke, Berlin Wedding + +04/05/2013 / [Special: An American Hippie in Israel](https://www.facebook.com/events/448542431896624/) +Filmkunst, Berlin Friedrichshain + +28/07/2012 / [Mutantenkino #5 - A MAZE. Night of Machinima IX: Game Over](https://www.facebook.com/events/262396477202058/) +Kino Durchs Fenster, Berlin Friedrichshain + +19/05/2012 / [Mutantenkino #4 - Kino der letzten Tage im Filmerausch](https://www.facebook.com/events/302852359796623/) +Filmrauschpalast, Berlin Moabit + +29/02/2012 / [Mutantenkino #2 - Of Bunkers and Beasts](https://www.facebook.com/events/839822639432368/) +Atelier Überall, Berlin Kreuzberg + +25/01/2012 / [Mutantenkino #1 - Fin du Temps](https://www.facebook.com/events/727142480729764/) +Die Wohngemeinschaft, Berlin Friedrichshain \ No newline at end of file diff --git a/web/content/blog/occulture.md b/web/content/blog/occulture.md new file mode 100644 index 0000000..cee0024 --- /dev/null +++ b/web/content/blog/occulture.md @@ -0,0 +1,10 @@ +Title: Workshop at Occulture Conference +Date: 2019-10-31 20:00 +Category: workshop +Summary: Workshop about Spirit of Place and Randonauting + +I was invited to do a [workshop](https://www.occultureconference.com/2019/lineup/tobias-raayoni-last.html) at the 2019 [Occulture Esoteric Conference](https://www.occultureconference.com) in Berlin. The topic of my presentation was "*Close Encounters With Placeness*": + +> In this workshop we will explore different perspectives on approaching "spirits of place." Taking Berlin as a subject we will take a closer look at some of its psychogeography, and mythology, moody river gods and places of power. One goal is to examine together how to interface with "placeness" as an art and magical practice. An easy and exciting method of doing so is "Randonauting", the exploration of places determined by a set of geographic coordinates calculated by a quantum random number generator. The initial goal of this technique developed by the "Fatum Project" was to see what happens when people visit arbitrary locations. It unexpectedly led the randonauts to discoveries of strange places, weird artifacts and even mystical journeys. In the workshop an introduction to the method will be given and how it can be applied to set off synchronicities, how to use it for divination or other magical applications, or simply for exploring familiar as well as foreign places for fun. + +![Workshop](/images/occulture.jpg) \ No newline at end of file diff --git a/web/content/blog/ori.md b/web/content/blog/ori.md new file mode 100644 index 0000000..c05d534 --- /dev/null +++ b/web/content/blog/ori.md @@ -0,0 +1,23 @@ +Title: Ori Alboher @ Jewish Culture Festival Kraków +Date: 2017-07-02 23:00 +Category: performance +Slug: ori-alboher +Summary: Jerusalem dérive video performance with Israeli musician Ori Alboher, with support from Tlalit +Location: 50.05423172504668, 19.952685453779072 + +I was invited by the *Jewish Cultural Festival Kraków* to develop and perform an audiovisual show together with Israeli musician [Ori Alboher](https://orialboher.bandcamp.com). The topic of the festival was *Jerusalem*. I decided to do one of my dérive video performances. [Tlalit](http://tlal.it) and I travelled to the city of *Jerusalem* and we both filmed impressions of the street-life, architecture and hidden places. Tlalit grew up there, so she knew many great areas I could have not found by myself. + +At the festival in *Kraków* I used only that material for the songs played by *Ori* during our concert. It was a multi-screen presentation with half transparent screens. + +All filmed video material was donated to the festival for free use under a *Creative Commons* license and was re-used by [Elektro Moon Vision](http://elektromoon.co.nr) for several projections around the festival. + +
+  +
+  +
+  +
+  +
+  \ No newline at end of file diff --git a/web/content/blog/placeness.md b/web/content/blog/placeness.md new file mode 100644 index 0000000..1e73f3e --- /dev/null +++ b/web/content/blog/placeness.md @@ -0,0 +1,16 @@ +Title: On Placeness +Date: 2023-04-15 +Category: Blog +Summary: How I think about Placeness in the context of my work + +In the 1960s the Situationist International identified a quality of sociocultural alienation which they dubbed "the spectacle", a self-referencing fiction that reduces the vibrant richness of existence to a lifeless image presented as "reality". The spectacle serves to represent experience as a disconnected assemblage of discrete and unrelated but consumable objects. To combat the spectacle, the Situationist International encouraged the practice of the dérive, which involves aimless drifting through the urban landscape, led solely by subjective stimuli. This practice supposedly allows one to break free from the imposed structures of urban planning and re-territorialize the city into representations that harmonize the inner and outer senses of place. + +> In many of my video performances I used the dérive to invite "place" itself to become the main protagonist as experienced through my subjective lens. I would spend hours wandering through different environments without any objective but capturing on camera whatever caught my attention. It was not only an exciting way to get to know a new place but on many occasions I had the experience that the audience really enjoyed and appreciated my outsider's view on their natural habitat. People found it refreshing and unbiased, allowing them to perceive their surroundings from a new and different perspective. + +Although the SI saw capitalism as the culprit at the core of this alienation I argue that the spectacle lies in fact on a deeper level: the alienation of inner felt sense and outer embodied reality. Our modern enlightened conception of the world is that of a purely external, mechanical place of quantities that is completely separated from an assumed inner private and individual space of psychological qualities. This complete detachment from our surroundings has led to the emergence of a reductionist view of reality. While the sciences treat reality as dead and soul-less mechanical matter also many of the spiritualities have abandoned matter altogether and focus on non-material energies and disincarnate beings. + +The dérive has a profound effect not only because of the aimlessness of the activity freeing us from the distractions of the spectacle but also because we actually pay attention to being embodied in a place. It makes sense that our human consciousness and rationality are fundamentally tied to our physical senses of orientations and interactions in space. We have to also realize that sense of "placeness" is in fact a transformation of our state of awareness through our surroundings. Our subjectivity and the content of our thoughts and feelings are very dependent on the place and places within which we live and act. So the significance of place should not be viewed as a contingent feature of human psychology or biology, but instead as rooted in the very structure that makes possible the human experience. + +For many cultures throughout history, places are imbued with a kind of spirit or energy that is specific to that location - the Genius Loci. This "spirit of place" is not only shaped by but also has an impact on the history, culture, and natural surroundings of a particular location. It is the soul of the place itself. The idea of a Genius Loci highlights the ways in which "placeness" is not simply a physical or metaphysical concept, but rather an embodied and lived experience. + +> After having explored the psychogeography of many places using the technique of the dérive for mere artistic purposes I have begun to see places as entities with their own agency. The deeper I delve into the complexities of placeness the more impossible it becomes to shy away from what is nowadays called *animism* as a universal way to experience the world. \ No newline at end of file diff --git a/web/content/blog/psithemius.md b/web/content/blog/psithemius.md new file mode 100644 index 0000000..404395f --- /dev/null +++ b/web/content/blog/psithemius.md @@ -0,0 +1,33 @@ +Title: Psithemius +Date: 2020-07-16 21:00 +Category: device +Summary: Invention of a magical device based on Renaissance magic and Psionic technology. + +The Psithemius is a psionic device for spirit conjuration and magical manifestation. + +![pointy](/images/pointy.jpg) + +Its basic architecture consists of printed circuit boards hosting concentric circles with magical names and symbols and a triangle with a spiral shaped transmitter in its center. The design is based on a magical system attributed to the German abbot and polymath Johannes Trithemius who lived around the end of the 15th century and developed methods for communing with transdimensional entities. + +![ritual](/images/ritual.jpg) + +For the Psithemius device to work properly, a small single terminated or ball shaped quartz crystal is needed. The device emits light and an electromagnetic field around and into this quartz crystal set in the center of the triangle that acts as a focal point and spirit medium. + +The Psithemius device utilizes principles borrowed from the lesser known works of *Nikola Tesla* and the fringe-science of *Psionics* to detect and electrically amplify the user's intent in the form of magical sigils or radionic rates. The goal is to charge the crystal with energies resonating with the nature of an entity and act as a beacon of condensed intent to attract them to the ritual space. + +![sphere](/images/sphere.jpg) + +A limited edition of the devices was designed by me with the help of an engineer, professionally produced as printed circuit boards in China, and sold to collectors and spiritual practitioners worldwide. + +MAKING OF +========= + +![design](/images/small1.png) + +![pcb](/images/pcb.png) + +![3d](/images/trithemius_bot.png) + +![device](/images/psithemius.jpg) + +![accessory](/images/ingress.jpg) \ No newline at end of file diff --git a/web/content/blog/randonautica.md b/web/content/blog/randonautica.md new file mode 100644 index 0000000..8067b0a --- /dev/null +++ b/web/content/blog/randonautica.md @@ -0,0 +1,26 @@ +Title: Randonautica +Date: 2020-08-01 23:00 +Category: blog +Summary: New job as a project manager of an app created to enhance the human experience with novelty by mindfully exploring the world using random coordinates + +In early 2020 the pandemic led to total cancellation of cultural events which had been my [main source of income in the decades before](({filename}../blog/kiritanflux.md)) and I was forced to radically reconsider my career. + +In summer I was approached by a group of people I had already interacted with for a few months. It was the Randonauts, a movement of geeks and seekers exploring the possibilities of escaping behavioural patterns by means of randomly generated coordinates. They founded a company with the goal to create a [professional app](https://www.randonautica.com) and were looking for a project manager. I immediately said yes and have been working for them ever since. + +![Randonautica Home](/images/rando_home.jpg) + +Randonautica is an app created to enhance the human experience with novelty by mindfully exploring the world, the interconnectivity of the universe and to test the hypothesis that human consciousness and quantum noise that is used to generate random numbers are somehow weirdly entangled. + +[Get it on Google Play](https://play.google.com/store/apps/details?id=com.randonautica.app) [Download on the App Store](https://apps.apple.com/us/app/randonautica/id1493743521) + +Developed by the global movement, The Randonauts and based on the theories stemming from the Fatum Project, the Randonautica app was created to encourage people to venture outside of their day-to-day routine by using a quantum random number generator to derive a truly random coordinate to journey to. The phenomenon has taken the world by storm and there are millions of Randonauts exploring their surroundings in nearly every country. + +
+ +Venturing outside of day-to-day routines with positive, sincere intentions lead to meaningful, mind-bending experiences and a deeper understanding of the interconnectivity within the universe. Randonautica presents an adventurous opportunity to do this by generating truly random locations sourced with quantum entropy all the while testing your ability to influence matter using thoughts, energy, technology and the world just outside your doorstep. + +Randonautica is on a mission to serve curiosity seekers around the globe by sincerely exploring the world they never knew existed. By doing so, Randonauts are able to open their minds to endless possibilities within the multiverse and automatically become a crucial part of a phenomenon pioneering the entry into Mind Matter Interaction (MMI) for the betterment of humanity. + +![Randonautica Discover](/images/rando_discover.jpg) + +​The app is developed by a [small international team](https://www.randonautica.com/team) consisting of three software engineers from Pakistan, a designer from New England, a Canadian support agent, a British influencer and vlogger, and managed by a serial entrepreneur from the American midwest. It is my job to plan, coordinate, and supervise the development process and communicate across the different fields of expertise. \ No newline at end of file diff --git a/web/content/blog/scope.md b/web/content/blog/scope.md new file mode 100644 index 0000000..a04cda7 --- /dev/null +++ b/web/content/blog/scope.md @@ -0,0 +1,30 @@ +Title: Scope Sessions +Date: 2020-04-14 +Category: cooperation +Summary: Scope Sessions was a monthly artist talk & media salon series + +[scopesessions.org](https://scopesessions.org) + +Scope Sessions was a monthly artist talk & media salon series that ran for almost ten years. It was co-organized by a changing group of artist friends and media arts enthusiasts. Instead of a frontal lecture format it was realized as a meeting point for the creative and the curious, a platform for sharing and learning in an informal setting. + +![Scope](/images/panoramica_scope.jpg) + +Guest artists were invited to present a project, a concept, a process or an experience. The presentations were short, around 40 minutes and unrestricted in form. Each session offered a variety of topics and approaches; Scope Sessions were mainly about exposure, not for the artist, but for the audience. The focus was on intermedia arts and technologies, but the eclectic curation of speakers rotated among the organizers and topics also diverged from the core topic to keep it fresh and interesting for the audience. + +
+ +It started in July 2011 at *Atelier Überall* in cooperation with *VisualBerlin* and quickly grew in popularity. In 2012 it took place at *NK* and soon moved to *Panke* in Wedding. In 2017 we started organizing also performance nights at *Spektrum*. From 2018 until 2020 we were hosted by *SomoS* gallery in Kreuzberg until February 2020 when the Covid-19 pandemic made it impossible to continue. + +
+ +Among the eclectic selection of over 254 guest speakers were Miller Puckette, Rainer Kohlberger, Selcuk Artut, Tarik Barri, Ali M. Demirel, Darsha Hewitt, Susie Sie, Carla Chan, Robert Seidel, Lucas Guiterres, Defasten, Alona Rodeh, Pierce Warnecke, Transforma, pussykrew, Zan Lyons, Onyx Ashanti, Andreas Nicolas Fischer, MESO, Reynold Reynolds, MFO, Thorsten Fleisch, Peter Kirn, Quadrature. + +
+  +
+ +I was involved in the inception, design, organisation, curation, moderation, web development, and video editing and actively involved from the first to the last edition. + +
+  +
\ No newline at end of file diff --git a/web/content/blog/sensor-watch.md b/web/content/blog/sensor-watch.md new file mode 100644 index 0000000..16d00eb --- /dev/null +++ b/web/content/blog/sensor-watch.md @@ -0,0 +1,22 @@ +Title: Sensor Watch Faces +Date: 2023-03-31 23:00 +Category: code +Summary: Designed and coded some watch faces for the Movement firmware of the Sensor Watch project + +[Sensor Watch](https://www.sensorwatch.net) is a board replacement for the classic *Casio F-91W* wristwatch invented by [Joey Castillo](https://www.joeycastillo.com) at [Oddly Specific Objects](https://www.oddlyspecificobjects.com). It is powered by a Microchip SAM L22 microcontroller with built-in segment LCD controller. Sensor Watch ships with a build of the Movement community firmware that manages the display of different screens of content on the watch. These screens are called watch faces. They can be passive displays of information like a clock or a calendar, or they can be fully interactive user interfaces like the Preferences face, which allows the user to customize Movement’s behavior. + +![F-91w](/images/f91w.jpg) + +I contributed the following watch faces to the project: + +* [PLANETARY HOURS](https://github.com/joeycastillo/Sensor-Watch/blob/main/movement/watch_faces/complication/planetary_hours_face.h) Displays the next planetary hours and their rulers +* [PLANETARY TIME](https://github.com/joeycastillo/Sensor-Watch/blob/main/movement/watch_faces/complication/planetary_time_face.h) Displays the current planetary time together with their ruler +* [DUAL TIMER](https://github.com/joeycastillo/Sensor-Watch/blob/main/movement/watch_faces/complication/dual_timer_face.h) dual chronograph for timing two simultaneous events + + + +* [TOSS UP](https://github.com/joeycastillo/Sensor-Watch/blob/main/movement/watch_faces/complication/toss_up_face.h) games of chance or divination using coins or dice. +* [GEOMANCY](https://github.com/joeycastillo/Sensor-Watch/blob/main/movement/watch_faces/complication/geomancy_face.h) I Ching and Geomancy divination +* [RANDONAUT](https://github.com/joeycastillo/Sensor-Watch/blob/main/movement/watch_faces/complication/randonaut_face.h) Generate random location coordinate + + \ No newline at end of file diff --git a/web/content/blog/shechina-ex-machina.md b/web/content/blog/shechina-ex-machina.md new file mode 100644 index 0000000..aadeb3e --- /dev/null +++ b/web/content/blog/shechina-ex-machina.md @@ -0,0 +1,24 @@ +Title: Shechina Ex Machina +Date: 2012-11-11 07:11 +Category: installation +Slug: shechina-ex-machina +Summary: installation about an exiled spirit manifesting herself in a piece of obsolete technology, presented at p a t c h : audio_visual_lab in Kraków + +שכינה מתוך המכונה / Shechina ex machina is an artistic installation about an exiled spirit manifesting herself in a piece of obsolete technology, desperately trying to reach man who stays preoccupied with postmodern capitalist shenanigans. + +According to jewish teachings, Shechina is the feminine majestic presence or manifestation of God which has descended to dwell among men. As the Israelites became exiled the Shechina came with them. Her manifestations remind men to constantly improve themselves and humankind and therefore seek reunification with God. + +The installation was presented at [p a t c h : audio_visual_lab](http://patchlab.pl) in Kraków in 2012. + +![](/images/177016_197704830367064_1922593328_o.png "177016_197704830367064_1922593328_o") + +![](/images/665198_197699897034224_337639898_o.png "665198_197699897034224_337639898_o") + +![](/images/679873_197706323700248_2103233284_o.png "679873_197706323700248_2103233284_o") + +![](/images/177016_197704833700397_1305549512_o.png "177016_197704833700397_1305549512_o") + +![](/images/665198_197699883700892_1858072692_o.png "665198_197699883700892_1858072692_o") + +![](/images/flux.jpg "OLYMPUS DIGITAL CAMERA") (photo © Peter Kirn) + diff --git a/web/content/blog/telepong.md b/web/content/blog/telepong.md new file mode 100644 index 0000000..f039b97 --- /dev/null +++ b/web/content/blog/telepong.md @@ -0,0 +1,27 @@ +Title: Telepong Touchcube +Date: 2015-05-20 22:00 +Category: installation +Slug: telepong-touchcube +Summary: 8bit style interactive Pong game inside a plexiglass cube as an installation for Electronic Beats Festival Cologne + +[Skudi Optics & Eventdesign](http://skudi-eventdesign.de) has 1 cubic meter sized white cubes made of plexiglass that are usually rented out to events as simple light objects branded with adhesive foil. I suggested to them that we can try to transform one of their cubes into an interactive multitouch object to use for simple games. After some research I came up with a concept for the technical solution with infrared LED spotlights and a modified PS2 webcam. The limitation was that the cube should stay intact - which meant that the top surface would stay 1cm thick diffuse plexiglass. This affected the touch recognition as well as limited the type of graphics to be projected. Everything would end up very blurry. + +Peter Kurzweg of Skudi worked on modifying the cube to host the short-throw-video-projector, cameras, LED spots and cables and keep the sides illuminatable without interfering with the projection. I hired [Peter Kolski](http://www.bildpeter.de/creative-coding-berlin/) to program a simple pong based game in openFrameworks, using TUIO protocol signals for control. [Tlalit Segal Raayoni](http://tlal.it) did the 8bit style design of the game so it would look cool even on the blurry surface. The prototype of this installation ran successfully at the [Electronic Beats Festival]({filename}eb.md) Cologne in May 2015 and was embraced by the audience who used the pong game intuitively during the concert breaks. + +![pong](/images/pong_01.jpg) + +![pong](/images/pong_02.jpg) + +![pong](/images/pong_03.jpg) + +

Making Of

+ +![pong](/images/pong_04.jpg) + +![pong](/images/pong_05.jpg) + +![pong](/images/pong_06.jpg) + +![pong](/images/pong_07.jpg) + +![pong](/images/pong_08.jpg) \ No newline at end of file diff --git a/web/content/blog/the-city-zen.md b/web/content/blog/the-city-zen.md new file mode 100644 index 0000000..4726942 --- /dev/null +++ b/web/content/blog/the-city-zen.md @@ -0,0 +1,27 @@ +Title: The City Zen +Date: 2010-06-12 11:06 +Category: performance +Slug: the-city-zen +Summary: Live Cinema + stage performance together with the übermutanty collective. + +Live Cinema + stage performance together with the übermutanty collective: Dr. Bronkenstein (Agnieszka K. Bronowska – paintings, drawings, photos, visuals, choerography, dance, writing) and Dangerous Dave (Dave A. Evans – music composing, mixing, editing, and playing, photography). + +performed + +* March 20, 2010 - B-Seite Festival Mannheim, DE +* May 29, 2010 - Live Performers Meeting, Roma, IT +* June 12, 2010 - visualberlinFestival, Berlin, DE +  +
+  +
+  +
+  +
+  +
+  +
    +  + \ No newline at end of file diff --git a/web/content/blog/visualberlin.md b/web/content/blog/visualberlin.md new file mode 100644 index 0000000..f25f326 --- /dev/null +++ b/web/content/blog/visualberlin.md @@ -0,0 +1,32 @@ +Title: Visual Berlin e.V. +Date: 2012-07-11 +Category: cooperation +Summary: VisualBerlin is a video art association that offered a platform for live video performers + +[visualberlin.org](http://visualberlin.org) + +VisualBerlin is a video art association that offers a platform for live video performers seeking cooperative projects and mutual exchange. It has been mostly active between 2006 and 2012. The Videokunst-Club VisualBerlin e.V. was founded in 2005 and still exists and is a non-profit organization. Its members have participated in numerous festivals and events around the globe and has organized several video performance festivals in Berlin. + +The club aims to spread information about the projected image as used in a live performance setting and all of its relative forms. It also provides the opportunity for combining the ideas, knowledge and creativity of its members to realize complex projects. The association operates in the tradition of the worldwide VJ network AVIT and strives for representing these ideals and philosophy in Germany and beyond. + + + +My involvement with VisualBerlin was its inception and foundation as an official association and I served as elected member of the management board from the beginning until 2012. + +![AVIT>C23](/images/avitc23_dsc05925.jpg) + +In 2006 I help organize the 3 days *AVIT>C23* festival with over 80 invited audiovisual artists that ran alongside the 23rd Chaos Communication Congress. + +![microavit01](/images/2596535049_ed93668c3e.jpg) +  +![microavit02](/images/2597369410_b39aa88dc7.jpg) + +In 2008 I co-organized another edition called *μ:avit* in collaboration with the DMY Design festival. + +
+ +As head of coordination I managed the organization of another 3 days VJ and video-arts festival with many international artists in 4 venues across Berlin, most notably as the first big event that ever took place in the turbine hall of Tresor. + +
+  +
\ No newline at end of file diff --git a/web/content/images/10535_159099994181_153556764181_2604721_7191175_n.jpg b/web/content/images/10535_159099994181_153556764181_2604721_7191175_n.jpg new file mode 100644 index 0000000..b06eef5 Binary files /dev/null and b/web/content/images/10535_159099994181_153556764181_2604721_7191175_n.jpg differ diff --git a/web/content/images/10535_159099999181_153556764181_2604722_6708666_n.jpg b/web/content/images/10535_159099999181_153556764181_2604722_6708666_n.jpg new file mode 100644 index 0000000..cc00a6a Binary files /dev/null and b/web/content/images/10535_159099999181_153556764181_2604722_6708666_n.jpg differ diff --git a/web/content/images/10535_159100004181_153556764181_2604723_859779_n.jpg b/web/content/images/10535_159100004181_153556764181_2604723_859779_n.jpg new file mode 100644 index 0000000..a870662 Binary files /dev/null and b/web/content/images/10535_159100004181_153556764181_2604723_859779_n.jpg differ diff --git a/web/content/images/10535_159100009181_153556764181_2604724_4475484_n.jpg b/web/content/images/10535_159100009181_153556764181_2604724_4475484_n.jpg new file mode 100644 index 0000000..405c305 Binary files /dev/null and b/web/content/images/10535_159100009181_153556764181_2604724_4475484_n.jpg differ diff --git a/web/content/images/10535_159100014181_153556764181_2604725_8061373_n.jpg b/web/content/images/10535_159100014181_153556764181_2604725_8061373_n.jpg new file mode 100644 index 0000000..7b53626 Binary files /dev/null and b/web/content/images/10535_159100014181_153556764181_2604725_8061373_n.jpg differ diff --git a/web/content/images/10535_159100969181_153556764181_2604731_4058289_n.jpg b/web/content/images/10535_159100969181_153556764181_2604731_4058289_n.jpg new file mode 100644 index 0000000..bd2636c Binary files /dev/null and b/web/content/images/10535_159100969181_153556764181_2604731_4058289_n.jpg differ diff --git a/web/content/images/10535_159100984181_153556764181_2604732_7399244_n.jpg b/web/content/images/10535_159100984181_153556764181_2604732_7399244_n.jpg new file mode 100644 index 0000000..b8bcd44 Binary files /dev/null and b/web/content/images/10535_159100984181_153556764181_2604732_7399244_n.jpg differ diff --git a/web/content/images/10535_159100994181_153556764181_2604733_6961590_n.jpg b/web/content/images/10535_159100994181_153556764181_2604733_6961590_n.jpg new file mode 100644 index 0000000..ff949c6 Binary files /dev/null and b/web/content/images/10535_159100994181_153556764181_2604733_6961590_n.jpg differ diff --git a/web/content/images/10535_159100999181_153556764181_2604734_5768778_n.jpg b/web/content/images/10535_159100999181_153556764181_2604734_5768778_n.jpg new file mode 100644 index 0000000..47a0f42 Binary files /dev/null and b/web/content/images/10535_159100999181_153556764181_2604734_5768778_n.jpg differ diff --git a/web/content/images/10535_159101004181_153556764181_2604735_7041999_n.jpg b/web/content/images/10535_159101004181_153556764181_2604735_7041999_n.jpg new file mode 100644 index 0000000..49af0bb Binary files /dev/null and b/web/content/images/10535_159101004181_153556764181_2604735_7041999_n.jpg differ diff --git a/web/content/images/10535_159101584181_153556764181_2604738_1651084_n.jpg b/web/content/images/10535_159101584181_153556764181_2604738_1651084_n.jpg new file mode 100644 index 0000000..f925e53 Binary files /dev/null and b/web/content/images/10535_159101584181_153556764181_2604738_1651084_n.jpg differ diff --git a/web/content/images/10535_159101589181_153556764181_2604739_1864823_n.jpg b/web/content/images/10535_159101589181_153556764181_2604739_1864823_n.jpg new file mode 100644 index 0000000..74dc27d Binary files /dev/null and b/web/content/images/10535_159101589181_153556764181_2604739_1864823_n.jpg differ diff --git a/web/content/images/177016_197704830367064_1922593328_o.png b/web/content/images/177016_197704830367064_1922593328_o.png new file mode 100644 index 0000000..d7d6a3f Binary files /dev/null and b/web/content/images/177016_197704830367064_1922593328_o.png differ diff --git a/web/content/images/177016_197704833700397_1305549512_o.png b/web/content/images/177016_197704833700397_1305549512_o.png new file mode 100644 index 0000000..8fb1433 Binary files /dev/null and b/web/content/images/177016_197704833700397_1305549512_o.png differ diff --git a/web/content/images/2596535049_ed93668c3e.jpg b/web/content/images/2596535049_ed93668c3e.jpg new file mode 100644 index 0000000..5cad216 Binary files /dev/null and b/web/content/images/2596535049_ed93668c3e.jpg differ diff --git a/web/content/images/2597369410_b39aa88dc7.jpg b/web/content/images/2597369410_b39aa88dc7.jpg new file mode 100644 index 0000000..99cfeff Binary files /dev/null and b/web/content/images/2597369410_b39aa88dc7.jpg differ diff --git a/web/content/images/32229_127122107321117_100000699868082_173611_4407089_n.jpg b/web/content/images/32229_127122107321117_100000699868082_173611_4407089_n.jpg new file mode 100644 index 0000000..b45a85d Binary files /dev/null and b/web/content/images/32229_127122107321117_100000699868082_173611_4407089_n.jpg differ diff --git a/web/content/images/4572097074_c05d5e9dd8.jpg b/web/content/images/4572097074_c05d5e9dd8.jpg new file mode 100644 index 0000000..8c0642c Binary files /dev/null and b/web/content/images/4572097074_c05d5e9dd8.jpg differ diff --git a/web/content/images/4690742038_461554b204_b.jpg b/web/content/images/4690742038_461554b204_b.jpg new file mode 100644 index 0000000..9d35475 Binary files /dev/null and b/web/content/images/4690742038_461554b204_b.jpg differ diff --git a/web/content/images/4697749735_7a5cd94f4f_b.jpg b/web/content/images/4697749735_7a5cd94f4f_b.jpg new file mode 100644 index 0000000..406e9df Binary files /dev/null and b/web/content/images/4697749735_7a5cd94f4f_b.jpg differ diff --git a/web/content/images/4711820592_162d272be8_b.jpg b/web/content/images/4711820592_162d272be8_b.jpg new file mode 100644 index 0000000..04fe2b8 Binary files /dev/null and b/web/content/images/4711820592_162d272be8_b.jpg differ diff --git a/web/content/images/665198_197699883700892_1858072692_o.png b/web/content/images/665198_197699883700892_1858072692_o.png new file mode 100644 index 0000000..aad9460 Binary files /dev/null and b/web/content/images/665198_197699883700892_1858072692_o.png differ diff --git a/web/content/images/665198_197699897034224_337639898_o.png b/web/content/images/665198_197699897034224_337639898_o.png new file mode 100644 index 0000000..9cc37d6 Binary files /dev/null and b/web/content/images/665198_197699897034224_337639898_o.png differ diff --git a/web/content/images/679873_197706323700248_2103233284_o.png b/web/content/images/679873_197706323700248_2103233284_o.png new file mode 100644 index 0000000..208db06 Binary files /dev/null and b/web/content/images/679873_197706323700248_2103233284_o.png differ diff --git a/web/content/images/886178_603842469702741_442050298_o.jpg b/web/content/images/886178_603842469702741_442050298_o.jpg new file mode 100644 index 0000000..6f82dac Binary files /dev/null and b/web/content/images/886178_603842469702741_442050298_o.jpg differ diff --git a/web/content/images/adapter_02_conv.jpg b/web/content/images/adapter_02_conv.jpg new file mode 100644 index 0000000..a08d147 Binary files /dev/null and b/web/content/images/adapter_02_conv.jpg differ diff --git a/web/content/images/adapter_03_conv.jpg b/web/content/images/adapter_03_conv.jpg new file mode 100644 index 0000000..b96000b Binary files /dev/null and b/web/content/images/adapter_03_conv.jpg differ diff --git a/web/content/images/adapter_04_conv.jpg b/web/content/images/adapter_04_conv.jpg new file mode 100644 index 0000000..ff155c2 Binary files /dev/null and b/web/content/images/adapter_04_conv.jpg differ diff --git a/web/content/images/adapter_05_conv.jpg b/web/content/images/adapter_05_conv.jpg new file mode 100644 index 0000000..1261c18 Binary files /dev/null and b/web/content/images/adapter_05_conv.jpg differ diff --git a/web/content/images/adapter_06_conv.jpg b/web/content/images/adapter_06_conv.jpg new file mode 100644 index 0000000..2a3d8f1 Binary files /dev/null and b/web/content/images/adapter_06_conv.jpg differ diff --git a/web/content/images/adapter_07_conv.jpg b/web/content/images/adapter_07_conv.jpg new file mode 100644 index 0000000..5c80192 Binary files /dev/null and b/web/content/images/adapter_07_conv.jpg differ diff --git a/web/content/images/adapter_08_conv.jpg b/web/content/images/adapter_08_conv.jpg new file mode 100644 index 0000000..6fa65da Binary files /dev/null and b/web/content/images/adapter_08_conv.jpg differ diff --git a/web/content/images/adapter_09_conv.jpg b/web/content/images/adapter_09_conv.jpg new file mode 100644 index 0000000..70e9c64 Binary files /dev/null and b/web/content/images/adapter_09_conv.jpg differ diff --git a/web/content/images/avitc23_dsc05925.jpg b/web/content/images/avitc23_dsc05925.jpg new file mode 100644 index 0000000..44e9f14 Binary files /dev/null and b/web/content/images/avitc23_dsc05925.jpg differ diff --git a/web/content/images/cassette.jpg b/web/content/images/cassette.jpg new file mode 100644 index 0000000..2be2604 Binary files /dev/null and b/web/content/images/cassette.jpg differ diff --git a/web/content/images/cineparadiso.jpg b/web/content/images/cineparadiso.jpg new file mode 100644 index 0000000..9a0fa58 Binary files /dev/null and b/web/content/images/cineparadiso.jpg differ diff --git a/web/content/images/clujo_2016_01.jpg b/web/content/images/clujo_2016_01.jpg new file mode 100644 index 0000000..d21b9d9 Binary files /dev/null and b/web/content/images/clujo_2016_01.jpg differ diff --git a/web/content/images/clujo_2016_02.jpg b/web/content/images/clujo_2016_02.jpg new file mode 100644 index 0000000..ef6ceab Binary files /dev/null and b/web/content/images/clujo_2016_02.jpg differ diff --git a/web/content/images/clujo_2016_03.jpg b/web/content/images/clujo_2016_03.jpg new file mode 100644 index 0000000..59bf315 Binary files /dev/null and b/web/content/images/clujo_2016_03.jpg differ diff --git a/web/content/images/clujo_2016_04.jpg b/web/content/images/clujo_2016_04.jpg new file mode 100644 index 0000000..b27b412 Binary files /dev/null and b/web/content/images/clujo_2016_04.jpg differ diff --git a/web/content/images/clujo_2016_05.jpg b/web/content/images/clujo_2016_05.jpg new file mode 100644 index 0000000..c8f66f7 Binary files /dev/null and b/web/content/images/clujo_2016_05.jpg differ diff --git a/web/content/images/clujo_2016_06.jpg b/web/content/images/clujo_2016_06.jpg new file mode 100644 index 0000000..ccd39a9 Binary files /dev/null and b/web/content/images/clujo_2016_06.jpg differ diff --git a/web/content/images/clujo_2016_07.jpg b/web/content/images/clujo_2016_07.jpg new file mode 100644 index 0000000..535bc9b Binary files /dev/null and b/web/content/images/clujo_2016_07.jpg differ diff --git a/web/content/images/crystal.jpg b/web/content/images/crystal.jpg new file mode 100644 index 0000000..8abcefd Binary files /dev/null and b/web/content/images/crystal.jpg differ diff --git a/web/content/images/eb-DSC01459.jpg b/web/content/images/eb-DSC01459.jpg new file mode 100644 index 0000000..0bd1c0a Binary files /dev/null and b/web/content/images/eb-DSC01459.jpg differ diff --git a/web/content/images/eb-dresden.jpg b/web/content/images/eb-dresden.jpg new file mode 100644 index 0000000..2d8c0d2 Binary files /dev/null and b/web/content/images/eb-dresden.jpg differ diff --git a/web/content/images/eb-vienna.jpg b/web/content/images/eb-vienna.jpg new file mode 100644 index 0000000..22c7b1a Binary files /dev/null and b/web/content/images/eb-vienna.jpg differ diff --git a/web/content/images/eb_14_3.jpg b/web/content/images/eb_14_3.jpg new file mode 100644 index 0000000..e3482c2 Binary files /dev/null and b/web/content/images/eb_14_3.jpg differ diff --git a/web/content/images/eb_14_4.jpg b/web/content/images/eb_14_4.jpg new file mode 100644 index 0000000..6f1f524 Binary files /dev/null and b/web/content/images/eb_14_4.jpg differ diff --git a/web/content/images/f91w.jpg b/web/content/images/f91w.jpg new file mode 100644 index 0000000..fe23894 Binary files /dev/null and b/web/content/images/f91w.jpg differ diff --git a/web/content/images/flux_04_fotochristiankleiner.jpg b/web/content/images/flux_04_fotochristiankleiner.jpg new file mode 100644 index 0000000..68b1236 Binary files /dev/null and b/web/content/images/flux_04_fotochristiankleiner.jpg differ diff --git a/web/content/images/flux_06_fotochristiankleiner.jpg b/web/content/images/flux_06_fotochristiankleiner.jpg new file mode 100644 index 0000000..07930b1 Binary files /dev/null and b/web/content/images/flux_06_fotochristiankleiner.jpg differ diff --git a/web/content/images/flux_07_fotochristiankleiner.jpg b/web/content/images/flux_07_fotochristiankleiner.jpg new file mode 100644 index 0000000..6459d91 Binary files /dev/null and b/web/content/images/flux_07_fotochristiankleiner.jpg differ diff --git a/web/content/images/flux_08_fotochristiankleiner.jpg b/web/content/images/flux_08_fotochristiankleiner.jpg new file mode 100644 index 0000000..98bc618 Binary files /dev/null and b/web/content/images/flux_08_fotochristiankleiner.jpg differ diff --git a/web/content/images/flux_10_fotochristiankleiner.jpg b/web/content/images/flux_10_fotochristiankleiner.jpg new file mode 100644 index 0000000..aeaf650 Binary files /dev/null and b/web/content/images/flux_10_fotochristiankleiner.jpg differ diff --git a/web/content/images/flux_13_fotochristiankleiner.jpg b/web/content/images/flux_13_fotochristiankleiner.jpg new file mode 100644 index 0000000..3c19b8d Binary files /dev/null and b/web/content/images/flux_13_fotochristiankleiner.jpg differ diff --git a/web/content/images/google play.webp b/web/content/images/google play.webp new file mode 100644 index 0000000..857e5f6 Binary files /dev/null and b/web/content/images/google play.webp differ diff --git a/web/content/images/ingress.jpg b/web/content/images/ingress.jpg new file mode 100644 index 0000000..26c7db4 Binary files /dev/null and b/web/content/images/ingress.jpg differ diff --git a/web/content/images/iphone-app-store-google-play-android-png.webp b/web/content/images/iphone-app-store-google-play-android-png.webp new file mode 100644 index 0000000..9b3441d Binary files /dev/null and b/web/content/images/iphone-app-store-google-play-android-png.webp differ diff --git a/web/content/images/moam_1.jpg b/web/content/images/moam_1.jpg new file mode 100644 index 0000000..01e67bc Binary files /dev/null and b/web/content/images/moam_1.jpg differ diff --git a/web/content/images/occulture.jpg b/web/content/images/occulture.jpg new file mode 100644 index 0000000..68c1b4b Binary files /dev/null and b/web/content/images/occulture.jpg differ diff --git a/web/content/images/ori_01.jpg b/web/content/images/ori_01.jpg new file mode 100644 index 0000000..a6732d6 Binary files /dev/null and b/web/content/images/ori_01.jpg differ diff --git a/web/content/images/ori_02.jpg b/web/content/images/ori_02.jpg new file mode 100644 index 0000000..d451404 Binary files /dev/null and b/web/content/images/ori_02.jpg differ diff --git a/web/content/images/ori_03.jpg b/web/content/images/ori_03.jpg new file mode 100644 index 0000000..7553205 Binary files /dev/null and b/web/content/images/ori_03.jpg differ diff --git a/web/content/images/ori_04.jpg b/web/content/images/ori_04.jpg new file mode 100644 index 0000000..626f0f7 Binary files /dev/null and b/web/content/images/ori_04.jpg differ diff --git a/web/content/images/ori_05.jpg b/web/content/images/ori_05.jpg new file mode 100644 index 0000000..667c252 Binary files /dev/null and b/web/content/images/ori_05.jpg differ diff --git a/web/content/images/panoramica_scope.jpg b/web/content/images/panoramica_scope.jpg new file mode 100644 index 0000000..35b10dc Binary files /dev/null and b/web/content/images/panoramica_scope.jpg differ diff --git a/web/content/images/pcb.png b/web/content/images/pcb.png new file mode 100644 index 0000000..a7ea0d1 Binary files /dev/null and b/web/content/images/pcb.png differ diff --git a/web/content/images/pointy.jpg b/web/content/images/pointy.jpg new file mode 100644 index 0000000..79ce802 Binary files /dev/null and b/web/content/images/pointy.jpg differ diff --git a/web/content/images/pong_01.jpg b/web/content/images/pong_01.jpg new file mode 100644 index 0000000..50dd42e Binary files /dev/null and b/web/content/images/pong_01.jpg differ diff --git a/web/content/images/pong_02.jpg b/web/content/images/pong_02.jpg new file mode 100644 index 0000000..28d0a7d Binary files /dev/null and b/web/content/images/pong_02.jpg differ diff --git a/web/content/images/pong_03.jpg b/web/content/images/pong_03.jpg new file mode 100644 index 0000000..5651f4f Binary files /dev/null and b/web/content/images/pong_03.jpg differ diff --git a/web/content/images/pong_04.jpg b/web/content/images/pong_04.jpg new file mode 100644 index 0000000..b87ffa0 Binary files /dev/null and b/web/content/images/pong_04.jpg differ diff --git a/web/content/images/pong_05.jpg b/web/content/images/pong_05.jpg new file mode 100644 index 0000000..937f30c Binary files /dev/null and b/web/content/images/pong_05.jpg differ diff --git a/web/content/images/pong_06.jpg b/web/content/images/pong_06.jpg new file mode 100644 index 0000000..ec75143 Binary files /dev/null and b/web/content/images/pong_06.jpg differ diff --git a/web/content/images/pong_07.jpg b/web/content/images/pong_07.jpg new file mode 100644 index 0000000..7b36321 Binary files /dev/null and b/web/content/images/pong_07.jpg differ diff --git a/web/content/images/pong_08.jpg b/web/content/images/pong_08.jpg new file mode 100644 index 0000000..771488c Binary files /dev/null and b/web/content/images/pong_08.jpg differ diff --git a/web/content/images/psithemius.jpg b/web/content/images/psithemius.jpg new file mode 100644 index 0000000..c4d26e2 Binary files /dev/null and b/web/content/images/psithemius.jpg differ diff --git a/web/content/images/psithemius_glow.jpg b/web/content/images/psithemius_glow.jpg new file mode 100644 index 0000000..f058e61 Binary files /dev/null and b/web/content/images/psithemius_glow.jpg differ diff --git a/web/content/images/rando_discover.jpg b/web/content/images/rando_discover.jpg new file mode 100644 index 0000000..e3f6a59 Binary files /dev/null and b/web/content/images/rando_discover.jpg differ diff --git a/web/content/images/rando_home.jpg b/web/content/images/rando_home.jpg new file mode 100644 index 0000000..b24b2f5 Binary files /dev/null and b/web/content/images/rando_home.jpg differ diff --git a/web/content/images/rando_point.jpg b/web/content/images/rando_point.jpg new file mode 100644 index 0000000..e6d225a Binary files /dev/null and b/web/content/images/rando_point.jpg differ diff --git a/web/content/images/ritual.jpg b/web/content/images/ritual.jpg new file mode 100644 index 0000000..a311056 Binary files /dev/null and b/web/content/images/ritual.jpg differ diff --git a/web/content/images/scope_2018_01.jpg b/web/content/images/scope_2018_01.jpg new file mode 100644 index 0000000..ccfaa5b Binary files /dev/null and b/web/content/images/scope_2018_01.jpg differ diff --git a/web/content/images/scope_2018_02.jpg b/web/content/images/scope_2018_02.jpg new file mode 100644 index 0000000..8b48341 Binary files /dev/null and b/web/content/images/scope_2018_02.jpg differ diff --git a/web/content/images/scope_2018_03.jpg b/web/content/images/scope_2018_03.jpg new file mode 100644 index 0000000..6062608 Binary files /dev/null and b/web/content/images/scope_2018_03.jpg differ diff --git a/web/content/images/scope_2018_04.jpg b/web/content/images/scope_2018_04.jpg new file mode 100644 index 0000000..05b4c48 Binary files /dev/null and b/web/content/images/scope_2018_04.jpg differ diff --git a/web/content/images/scope_2018_05.jpg b/web/content/images/scope_2018_05.jpg new file mode 100644 index 0000000..8abd489 Binary files /dev/null and b/web/content/images/scope_2018_05.jpg differ diff --git a/web/content/images/slide_02.jpg b/web/content/images/slide_02.jpg new file mode 100644 index 0000000..6f883ba Binary files /dev/null and b/web/content/images/slide_02.jpg differ diff --git a/web/content/images/slide_03.jpg b/web/content/images/slide_03.jpg new file mode 100644 index 0000000..567af3c Binary files /dev/null and b/web/content/images/slide_03.jpg differ diff --git a/web/content/images/slide_07.jpg b/web/content/images/slide_07.jpg new file mode 100644 index 0000000..049bfe7 Binary files /dev/null and b/web/content/images/slide_07.jpg differ diff --git a/web/content/images/slide_10.jpg b/web/content/images/slide_10.jpg new file mode 100644 index 0000000..2d28745 Binary files /dev/null and b/web/content/images/slide_10.jpg differ diff --git a/web/content/images/slide_19.jpg b/web/content/images/slide_19.jpg new file mode 100644 index 0000000..f0f9289 Binary files /dev/null and b/web/content/images/slide_19.jpg differ diff --git a/web/content/images/slide_21.jpg b/web/content/images/slide_21.jpg new file mode 100644 index 0000000..9203b8a Binary files /dev/null and b/web/content/images/slide_21.jpg differ diff --git a/web/content/images/small1.png b/web/content/images/small1.png new file mode 100644 index 0000000..65cecb8 Binary files /dev/null and b/web/content/images/small1.png differ diff --git a/web/content/images/sp404.jpg b/web/content/images/sp404.jpg new file mode 100644 index 0000000..fc3ecec Binary files /dev/null and b/web/content/images/sp404.jpg differ diff --git a/web/content/images/sphere.jpg b/web/content/images/sphere.jpg new file mode 100644 index 0000000..cab2c08 Binary files /dev/null and b/web/content/images/sphere.jpg differ diff --git a/web/content/images/supermicro.jpg b/web/content/images/supermicro.jpg new file mode 100644 index 0000000..b484754 Binary files /dev/null and b/web/content/images/supermicro.jpg differ diff --git a/web/content/images/t5_0.jpg b/web/content/images/t5_0.jpg new file mode 100644 index 0000000..676a2ca Binary files /dev/null and b/web/content/images/t5_0.jpg differ diff --git a/web/content/images/t5_1.jpg b/web/content/images/t5_1.jpg new file mode 100644 index 0000000..2049046 Binary files /dev/null and b/web/content/images/t5_1.jpg differ diff --git a/web/content/images/t5_2.jpg b/web/content/images/t5_2.jpg new file mode 100644 index 0000000..9d2a8f5 Binary files /dev/null and b/web/content/images/t5_2.jpg differ diff --git a/web/content/images/t5_3.jpg b/web/content/images/t5_3.jpg new file mode 100644 index 0000000..a738b48 Binary files /dev/null and b/web/content/images/t5_3.jpg differ diff --git a/web/content/images/t5_4.jpg b/web/content/images/t5_4.jpg new file mode 100644 index 0000000..e8c9252 Binary files /dev/null and b/web/content/images/t5_4.jpg differ diff --git a/web/content/images/t5_workshop.jpg b/web/content/images/t5_workshop.jpg new file mode 100644 index 0000000..d76321e Binary files /dev/null and b/web/content/images/t5_workshop.jpg differ diff --git a/web/content/images/tirana_05.jpg b/web/content/images/tirana_05.jpg new file mode 100644 index 0000000..b39b8cc Binary files /dev/null and b/web/content/images/tirana_05.jpg differ diff --git a/web/content/images/trithemius_bot.png b/web/content/images/trithemius_bot.png new file mode 100644 index 0000000..e71c147 Binary files /dev/null and b/web/content/images/trithemius_bot.png differ diff --git a/web/content/images/void.gif b/web/content/images/void.gif new file mode 100644 index 0000000..7951534 Binary files /dev/null and b/web/content/images/void.gif differ diff --git a/web/content/pages/404.md b/web/content/pages/404.md new file mode 100644 index 0000000..1bc5134 --- /dev/null +++ b/web/content/pages/404.md @@ -0,0 +1,11 @@ +Title: 404 +Save_as: 404.html +Template: 404 + +Windows + +An exception 404 has occurred. The page could not be found. It may be possible to continue normally. + +* Press any key to attempt to continue. +* Press CTRL+ALT+DEL to restart your computer. You will + lose any unsaved information in all applications. \ No newline at end of file diff --git a/web/content/pages/bio.md b/web/content/pages/bio.md new file mode 100644 index 0000000..d624833 --- /dev/null +++ b/web/content/pages/bio.md @@ -0,0 +1,84 @@ +Title: Curriculum Vitae +Date: 2014-03-14 11:04 +Slug: cv + +### Professional Fields + +* planning and organisation of events +* video-animation, video-production, post-production, video-art, live-video performance +* screen-design, GUI-design +* cultural management +* project management +* development of custom multimedia applications and installations +* software development in python / C / C++ / JavaScript / Max/MSP +* teaching of IT related topics +* bartending + +### Artistic Research + +* photography +* live cinema +* ambient field recordings +* audiovisual dance performance +* video-animation, video-production, post-production, video-art, live-video +* creative coding +* node based graphical programming +* hardware controllers +* PCB design +* development of custom multimedia applications and installations + +### Professional Career + +* since 2020 project manager, developer, and consultant at Randonauts LLC +* 2006 - 2020 working as a freelance media artist +* 2013 - 2015 manager of kopiloten coworking space +* 2011 - 2013 coop culture & media office with Silke Müller as “kopiloten” +* 2010 - 2012 bartender at café & bar “Salon Schmück” +* 2005 - 2012 founding member of the management board of VC VisualBerlin e.V. +* 2009 - 2010 Lessing Gymnasium Berlin supervision of a group of students who form a „student company“ specialized on IT support +* 2007 - 2008 freelancer at GP. Gemeinschaftspraxis für Gestaltung +* 2007 multimedia programming for DEON GbR +* 2006 - 2007 freelance Flash work for Ableton AG +* 2004 - 2006 Ableton AG, Berlin, web-administration, graphic-design, Flash animations +* 2005 freelance web development work for Educational Design GmbH +* 2005 lectures and workshops for students on VJing, JuKuFa Brandenburg +* 2005 Fachhochschule Brandenburg Max/Jitter workshop for students +* 2005 Hochschule für Gestaltung Karlsruhe Max/Jitter workshop for students +* 2003-2004 eedo GmbH, Potsdam, content-management, Flash animations +* 2003 Labor Limbach, Heidelberg, inventory & logistics management +* 2003 freelance web developer for ‘freedom2speak’ film project, Berlinale Film Fest. +* 2002-2003 garderobe23, Berlin, internship web-development, Max/MSP programming and live-video +* 2000-2001 Viviance GmbH, Potsdam, content-management, LaTeX scripting, graphic-design, Flash animations +* 2000 AV Media GmbH, Heidelberg, internship video-production, post-production, multimedia-design +* 1999-2000 geriatric hospital Bethanien, Heidelberg, social service as nurse in rehabilitation ward, temporary work in accounting department + +### Artistic Career + +* since 1998 media artist +* 2011 - 2020 co-curator of the [Scope Sessions](http://scopesessions.org) +* 2003 - 2020 VJ / live video performer +* 2009 - 2014 technical consultant and assistant of audiovisual events at Collegium Hungaricum +* 2011 - 2012 assistant of the management of the video-arts association VisualBerlin e.V. +* 2005 – 2011 member of the management board of VisualBerlin e.V. +* 2010 head coordinator of the visualberlinFestival 2010 +* 2010 - 2011 member of the interdisciplinary art collective Fax Nylon Opium Radikalisten +* 2010 member of the live cinema and arts collective übermutanty +* 2009 member of the audiovisual dance performance collective Instant Delay +* 2008 co-organiser of the µ:avit VJ festival +* 2006 co-organiser of the AVIT>C23 VJ festival +* 2005 co-founder of VisualBerlin e.V. +* 2005 - 2008 member of the VJ and Live Cinema collective =ff= + +### Education + +* 2000-2009 studies of computer sciences with focus on digital media, Fachhochschule Brandenburg, Brandenburg an der Havel +* 1990-1999 private Gymnasium Englisches Institut Heidelberg, A-Levels (Abitur): 2,3 +* 1996-1997 Northwest High School, Justin, TX, USA +* 1994-1996 Jugendkunstschule Heidelberg +* 1986-1990 Eichendorff Grundschule, Heidelberg + +### Language Skills + +* German (native speaker) +* English (fluent) +* French (basic) \ No newline at end of file diff --git a/web/content/pages/connect.md b/web/content/pages/connect.md new file mode 100644 index 0000000..311e997 --- /dev/null +++ b/web/content/pages/connect.md @@ -0,0 +1,12 @@ +Title: Connect +Save_as: connect.html + +- Email: +- Mastodon: [@randogoth](https://universeodon.com/@randogoth) +- GitHub: [@randogoth](https://github.com/randogoth) +- Telegram: [@lastfluxunit](https://t.me/lastfluxunit) +- Discord: [NN_Solex#1613](https://discordapp.com/users/380023043050962954) +- Instagram: [@lastfluxunit](https://instagram.com/lastfluxunit) +- Facebook: [flux.tobias.raayoni.last](https://fb.com/flux.tobias.raayoni.last/) +- Flickr: [@kflux](https://www.flickr.com/photos/kflux) +- LinkedIn: [@lastfluxunit](https://www.linkedin.com/in/lastfluxunit/) \ No newline at end of file diff --git a/web/content/pages/current.md b/web/content/pages/current.md new file mode 100644 index 0000000..eeba008 --- /dev/null +++ b/web/content/pages/current.md @@ -0,0 +1,8 @@ +Title: +Slug: current +Date: 2023-04-27 19:00 +Save_as: current.html + +Currently creating a project called *Numinous Field Communication* that involves using NFC tags as medium for non-linear fiction and location-based storytelling. + +Following a recent obsession about digital Casio watches I have contributed some [watch faces]({filename}../blog/sensor-watch.md) to the awesome [Sensor Watch](https://sensorwatch.net) project and am designing mods and a custom NFC tag circuit board for my *Casio AE-1200 World Time* watch. \ No newline at end of file diff --git a/web/content/pages/home.md b/web/content/pages/home.md new file mode 100644 index 0000000..eeedf05 --- /dev/null +++ b/web/content/pages/home.md @@ -0,0 +1,26 @@ +Title: +URL: +Slug: home +Lang: English +Save_as: index.html + +Tobias Raayoni Last // טוביאס רעיוני לאסט + +- Artist & Creator +- Currently based in Ein Hod / עין הוד (IL) +- Roaming the borderlands of art and technology, magic and engineering +- Project Manager of the random journey adventure app [Randonautica]({filename}../blog/randonautica.md) + +My artistic practice spans various disciplines, including [live video performance]({filename}../blog/kiritanflux.md), installations, [ambient sound]({filename}../blog/crystal-canyons.md) work, and the creation of code and [electronic devices]({filename}../blog/psithemius.md). + +----- + +PLACENESS & TECHNOMANCY + +At the core of my creative process has always been the exploration of the intricate interplay between "*placeness*" and "*temporality*." I use *place* as a fundamental agent to inform and shape the content and form of my work, usually by drawing upon the highly subjective concepts of *psychogeography* and the *spirit of place*. + +In recent years I have started to incorporate *magical thinking* into my work, especially the more technical pieces. Through earnest and rigorous research in fields like ancient Greco-Egyptian sorcery, modern Chaos Magic, and other questionable practices I explore the boundaries between the material and immaterial and allow my artistic practice to expand into the spiritual. + +CURATORSHIP & COLLABORATION + +Besides creating and performing art myself I love collaboration, discussion and exchange with other artists. It led me to co-founding and managing an [artist association]({filename}../blog/visualberlin.md), several festivals, and a popular [monthly artist talk series]({filename}../blog/scope.md). \ No newline at end of file diff --git a/web/mc-pelican/LICENSE b/web/mc-pelican/LICENSE new file mode 100644 index 0000000..e7015e6 --- /dev/null +++ b/web/mc-pelican/LICENSE @@ -0,0 +1,14 @@ +Copyright (c) 2015 Michael Cardell Widerkrantz + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE +AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL +DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR +PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. diff --git a/web/mc-pelican/Makefile b/web/mc-pelican/Makefile new file mode 100644 index 0000000..b059125 --- /dev/null +++ b/web/mc-pelican/Makefile @@ -0,0 +1,16 @@ +VERSION=20150208 +DIST=mc-pelican-$(VERSION) +DISTFILES=README.txt LICENSE Makefile static templates + +$(DIST).tar.bz2: + mkdir $(DIST) + cp -r $(DISTFILES) $(DIST)/ + tar cf $(DIST).tar --exclude .git $(DIST) + bzip2 -9 $(DIST).tar + $(RM) -rf $(DIST) + +dist: $(DIST).tar.bz2 + +clean: + $(RM) -f $(DIST).tar.bz2 + diff --git a/web/mc-pelican/README.txt b/web/mc-pelican/README.txt new file mode 100644 index 0000000..6b836c5 --- /dev/null +++ b/web/mc-pelican/README.txt @@ -0,0 +1,28 @@ +A minimalist theme for the Pelican static blog generator: + + http://blog.getpelican.com/ + +It's based on the built-in simple theme with some small changes to the +templates and some very minimalist CSS. + +Install like this: + + # pelican-themes -i mc-pelican + +Then, in your pelicanconf.py: + + THEME = 'mc-pelican' + +You add menu items with MENUITEMS like this: + +MENUITEMS = ( + ('Homepage', '/mc/'), + ('About MC', '/mc/bio.html'), + ('Contact', '/mc/contact.html'), + ('Archives', '{0}/archives.html'.format(SITEURL)), ) + +If you want a blog description in the footer of all pages, define +DESCRIPTION. + +Happy blogging, +MC. diff --git a/web/mc-pelican/static/clacon2.woff2 b/web/mc-pelican/static/clacon2.woff2 new file mode 100644 index 0000000..cf23294 Binary files /dev/null and b/web/mc-pelican/static/clacon2.woff2 differ diff --git a/web/mc-pelican/static/local.css b/web/mc-pelican/static/local.css new file mode 100644 index 0000000..34a430b --- /dev/null +++ b/web/mc-pelican/static/local.css @@ -0,0 +1,284 @@ +@font-face { + font-family: 'Classic Console Neue'; + src: local('Classic Console Neue'), local('ClassicConsoleNeue'), + url('clacon2.woff2') format('woff2') +} + +/* CSS Reset */ +html { + margin: 0; + padding: 0; + text-align: left; + text-rendering: optimizeLegibility; +} + +/* HTML5 tag defaults. */ +header, footer, aside, nav, article +{ + display: block; +} + +h1, h2, h3, h4, h5 { + font-weight: normal; + text-align: left; + font-size: 1em; + text-transform: uppercase; +} + +body { + font-family: 'Classic Console Neue'; + padding: 1em; + font-size: 1.4em; + line-height: 1.2em; + text-align: left; + background: #090A0E; + color: #bbb; + height: 100vh; + overflow-x: hidden; + overflow-y: auto; + perspective: 2px; + margin: auto; + max-width: 40em; +} + +ul, ul li { + margin:0; + padding:0; + list-style:none +} + +ul li::before { + content: '*\00a0'; +} + +/* Use a thin border around all images. */ +img +{ + border: 1px solid; + max-width: 40em; + width: 100%; +} + +/* Navigation bar. */ +nav +{ + padding-bottom: 1ex; + margin-bottom: 4em; +} + +nav::after { + clear:left; +} + +nav ul +{ + padding: 0; + margin-left: 0; + list-style: none; +} + +nav ul li +{ + display: inline; + float: left; + margin-right: .4em; /* How far between items. */ + margin-top: .3em; +} + +nav li::before { + content: none; +} + +nav ul li a +{ + display: inline; + margin: 0; +} + +/* + * Use a border around tables, but don't draw lines around individual + * cells. + */ +table +{ + border-style: solid; + border-collapse: collapse; + border-width: thin; + font-size: 100%; +} + +th, td +{ + border-style: solid; + border-width: thin; +} + +a { + background-color: #bbb; + color:#090A0E; + padding: 0.2em 0.3em 0em 0.3em; +} + +a.translation { + background-color: #333; +} + +/* for unvisited links: blue */ +a:link +{ + text-decoration: none; +} + +/* for visited links: purple */ +a:visited +{ + text-decoration: none; +} + +/* when mouse is over link or the link is active*/ +a:hover, a:active +{ + text-decoration: none; +} + +/* Very clean ruler with no shadows. */ +hr +{ + border: none; +} + +@media screen and (min-width: 941px) { + hr::after { + content: '--------------------------------------------------------------------------------'; + } +} + +@media screen and (max-width: 940px) { + hr { + border-top: 2px dashed #bbb; + } +} + +.hentry::after { + content: '\00a0' +} + +abbr { + float: left; + display: inline; + text-decoration: none; + padding: 0; +} + +.hentry .published::before { + content: '*'; +} + +.hentry .published::after { + content: '>\00a0'; +} + +.hentry .entry-summary p { + margin: 0; + margin-left: 7.5em; +} + +.hentry h2 { + margin: 0; +} + +header h2 a { + background: none; + color: #bbb; + text-transform: uppercase; + padding: 0; +} + +.post-info abbr { + float: none; +} + +.author { + font-style: normal; + padding: 0; +} + +.post-info { + color: #555; +} + +.author a { + padding: 0; + background: none; + color: #555; +} + +@keyframes cursor-blink { + 0% { + opacity: 0; + } +} + +#root { + display: block; + margin-top: 2em; +} + +[contenteditable="true"]:active, +[contenteditable="true"]:focus{ + border:none; + outline:none; + caret-color: transparent; +} + +[contenteditable="true"]:active:after, +[contenteditable="true"]:focus:after { + content: "\02588"; + animation: cursor-blink 1.5s steps(2) infinite; +} + +.para { + border: 1px solid; + max-width: 40em; + display: block; + background-attachment: fixed; + background-position: center; + background-size: contain; +} + +iframe { + border: 1px solid; + aspect-ratio: 16 / 9; + width: 100%; +} + +blockquote { + border: 1px solid; + margin: 0; + padding-left: 1em; + background: #222; +} + +em, strong { + font-style: normal; + color: white; +} + +.overlay { + height: 100%; + width: 100%; + position: fixed; + z-index: 1; + left: 0; + overflow-x: hidden; + pointer-events: none; +} + +.vignette { + background-image: radial-gradient(ellipse at center, rgba(0,0,0,0) 50%, rgba(0,0,0,0.25) 100%); +} + +.scanline { + background-image: linear-gradient(0deg, rgba(0,0,0,0) 25%, rgba(0,0,0,0.33) 25%, rgba(0,0,0,0.33) 50%, rgba(0,0,0,0) 50%, rgba(0,0,0,0) 75%, rgba(0,0,0,0.33) 75%, rgba(0,0,0,0.33) 100%); + background-size: 4px 4px; +} \ No newline at end of file diff --git a/web/mc-pelican/static/pygments.css b/web/mc-pelican/static/pygments.css new file mode 100644 index 0000000..4c93ce1 --- /dev/null +++ b/web/mc-pelican/static/pygments.css @@ -0,0 +1,62 @@ +/* Syntax highlighting. */ +.highlight .hll { background-color: #ffffcc } +.highlight .c { color: #60a0b0; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #007020; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #007020 } /* Comment.Preproc */ +.highlight .c1 { color: #60a0b0; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #808080 } /* Generic.Output */ +.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0040D0 } /* Generic.Traceback */ +.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #007020 } /* Keyword.Pseudo */ +.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #902000 } /* Keyword.Type */ +.highlight .m { color: #40a070 } /* Literal.Number */ +.highlight .s { color: #4070a0 } /* Literal.String */ +.highlight .na { color: #4070a0 } /* Name.Attribute */ +.highlight .nb { color: #007020 } /* Name.Builtin */ +.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ +.highlight .no { color: #60add5 } /* Name.Constant */ +.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #007020 } /* Name.Exception */ +.highlight .nf { color: #06287e } /* Name.Function */ +.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ +.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #bb60d5 } /* Name.Variable */ +.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mf { color: #40a070 } /* Literal.Number.Float */ +.highlight .mh { color: #40a070 } /* Literal.Number.Hex */ +.highlight .mi { color: #40a070 } /* Literal.Number.Integer */ +.highlight .mo { color: #40a070 } /* Literal.Number.Oct */ +.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ +.highlight .sc { color: #4070a0 } /* Literal.String.Char */ +.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #4070a0 } /* Literal.String.Double */ +.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ +.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ +.highlight .sx { color: #c65d09 } /* Literal.String.Other */ +.highlight .sr { color: #235388 } /* Literal.String.Regex */ +.highlight .s1 { color: #4070a0 } /* Literal.String.Single */ +.highlight .ss { color: #517918 } /* Literal.String.Symbol */ +.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ +.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ +.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ +.highlight .il { color: #40a070 } /* Literal.Number.Integer.Long */ diff --git a/web/mc-pelican/static/script.js b/web/mc-pelican/static/script.js new file mode 100644 index 0000000..b35890e --- /dev/null +++ b/web/mc-pelican/static/script.js @@ -0,0 +1,137 @@ +const randomColor = Math.floor(Math.random()*16777215).toString(16); +document.querySelector('#blog-title').firstElementChild.style.backgroundColor = '#' + randomColor; + +let scrollHeight = Math.max( + document.body.scrollHeight, document.documentElement.scrollHeight, + document.body.offsetHeight, document.documentElement.offsetHeight, + document.body.clientHeight, document.documentElement.clientHeight +); + +let paras = document.getElementsByClassName("para"); +for (let i = 0; i < paras.length; i++) { + var imageSrc = paras[i].style.backgroundImage.replace(/url\((['"])?(.*?)\1\)/gi, '$2').split(',')[0]; + var image = new Image(); + image.src = imageSrc; + paras[i].setAttribute("offset", paras[i].getBoundingClientRect().bottom - image.height * 0.5); +} +window.addEventListener('scroll', () => { + let { scrollY } = window; + if ( screen.width > screen.height ) { + for (let i = 0; i < paras.length; i++) { + paras[i].style.backgroundPositionY = paras[i].getAttribute("offset") * 0.1 + -0.1 * scrollY + 'px'; + } + } +}); + +//components +//console component +class Console{ + comps=[]; + input_received=false; + blocking_interval=null; + text_color="#bbb"; + constructor(root){ + this.elem=document.createElement("span"); + this.elem.className="console"; + root.appendChild(this.elem); + this.resetTextColor(); + } + appendComponent(comp){ + this.comps.push(comp); + this.elem.appendChild(comp.elem); + } + writeLine(txt){ + let text=new Text(txt,this.text_color); + this.appendComponent(text); + } + async readLine(txt){ + let text=new Text(txt,this.text_color); + this.appendComponent(text); + let input=new Input(this.text_color); + this.appendComponent(input); + input.elem.focus({ preventScroll: true}); + return new Promise(resolve=>{ + this.blocking_interval=setInterval(()=>{ + if(this.input_received){ + this.input_received=false; + clearInterval(this.blocking_interval); + resolve(input.elem.innerText); + } + },500); + }) + } + setTextColor(color){ + this.text_color=color; + } + resetTextColor(){ + this.text_color="#bbb"; + } + //helpers + get lastComp(){return this.comps[this.comps.length-1]}; + } + //text component + class Text{ + constructor(txt,color){ + this.elem=document.createElement("span"); + this.elem.className="text"; + this.elem.style.color=color; + this.elem.innerText=txt; + } + } + //input component + class Input{ + constructor(color){ + this.elem=document.createElement("span"); + this.elem.style.color=color; + this.elem.contentEditable=true; + this.elem.addEventListener('keydown',function(e){ + let key=e.key; + if(key=="Enter"){ + e.preventDefault(); + cmd.input_received=true; + cmd.lastComp.elem.contentEditable=false; + cmd.lastComp.elem.style.borderWidth="0px"; + } + }); + } +} + +/************************************/ +let root=document.getElementById("root"); + +let cmd=new Console(root); +let prompt = "C:\\>" +async function execute(){ + let command= await cmd.readLine(prompt); + if ( command == "projects" ) window.location = "/current.html"; + else if ( command == "blog" ) window.location = "/blog"; + else if ( command == "archive" ) window.location = "/archive"; + else if ( command == "dir" ) window.location = "/archive"; + else if ( command == "home" ) window.location = "/"; + else if ( command == "connect" ) window.location = "/connect.html"; + else if ( command == "reboot" ) location.reload(); + else if ( command == "a:" ) { + prompt = "A:\\>"; + cmd.writeLine("\n"); + cmd=new Console(root); + execute(); + } + else if ( command == "b:" ) { + prompt = "B:\\>"; + cmd.writeLine("\n"); + cmd=new Console(root); + execute(); + } + else if ( command == "c:" ) { + prompt = "C:\\>"; + cmd.writeLine("\n"); + cmd=new Console(root); + execute(); + } + else { + cmd.writeLine("\nSyntax error\n"); + cmd=new Console(root); + execute(); + } +} +execute(); \ No newline at end of file diff --git a/web/mc-pelican/templates/404.html b/web/mc-pelican/templates/404.html new file mode 100644 index 0000000..0d694fb --- /dev/null +++ b/web/mc-pelican/templates/404.html @@ -0,0 +1,39 @@ + + + + 404 + + + + + + +
+
Windows
+

An exception 404 has occurred. The page could not be found. It may be possible to continue normally.

+
    +
  • Press the backspace key to attempt to continue.
  • +
  • Press CTRL+ALT+DEL to restart your computer. You will
    + lose any unsaved information in all applications.
  • +
+
+ + \ No newline at end of file diff --git a/web/mc-pelican/templates/archives.html b/web/mc-pelican/templates/archives.html new file mode 100644 index 0000000..44a8fed --- /dev/null +++ b/web/mc-pelican/templates/archives.html @@ -0,0 +1,22 @@ +{% extends "base.html" %} +{% block content %} +
+{% block content_title %} +{% endblock %} + +{% for article in dates if article.category != 'blog' %} + + +{% endfor %} + +{% include 'pagination.html' %} +
+{% endblock content %} diff --git a/web/mc-pelican/templates/archives.map b/web/mc-pelican/templates/archives.map new file mode 100644 index 0000000..05cc1a2 --- /dev/null +++ b/web/mc-pelican/templates/archives.map @@ -0,0 +1,118 @@ + + + + + + + + {{ SITENAME }} + + + + + + + + + + +
+ + + diff --git a/web/mc-pelican/templates/article.html b/web/mc-pelican/templates/article.html new file mode 100644 index 0000000..c1e9cc0 --- /dev/null +++ b/web/mc-pelican/templates/article.html @@ -0,0 +1,48 @@ +{% extends "base.html" %} +{% block head %} + {{ super() }} + {% for keyword in article.keywords %} + + {% endfor %} + + {% for description in article.description %} + + {% endfor %} + + {% for tag in article.tags %} + + {% endfor %} + +{% endblock %} + +{% block content %} +
+
+

+ {{ article.title }}

+ {% import 'translations.html' as translations with context %} + {{ translations.translations_for(article) }} +
+
+ + {{ article.locale_date }} + + {% if article.modified %} + + {{ article.locale_modified }} + + {% endif %} + {% if article.authors %} +
+ by {% for author in article.authors %} + {{ author }} + {% endfor %} +
+ {% endif %} +
+
+ {{ article.content }} +
+
+{% endblock %} diff --git a/web/mc-pelican/templates/author.html b/web/mc-pelican/templates/author.html new file mode 100644 index 0000000..e9f7870 --- /dev/null +++ b/web/mc-pelican/templates/author.html @@ -0,0 +1,7 @@ +{% extends "index.html" %} + +{% block title %}{{ SITENAME }} - Articles by {{ author }}{% endblock %} +{% block content_title %} +

Articles by {{ author }}

+{% endblock %} + diff --git a/web/mc-pelican/templates/authors.html b/web/mc-pelican/templates/authors.html new file mode 100644 index 0000000..4914904 --- /dev/null +++ b/web/mc-pelican/templates/authors.html @@ -0,0 +1,13 @@ +{% extends "base.html" %} + +{% block title %}{{ SITENAME }} - Authors{% endblock %} + +{% block content %} +

Authors on {{ SITENAME }}

+ +
    + {%- for author, articles in authors|sort %} +
  • {{ author }} ({{ articles|count }})
  • + {% endfor %} +
+{% endblock %} diff --git a/web/mc-pelican/templates/base.html b/web/mc-pelican/templates/base.html new file mode 100644 index 0000000..23f04d5 --- /dev/null +++ b/web/mc-pelican/templates/base.html @@ -0,0 +1,79 @@ + + + + {% block head %} + {% block title %}{{ SITENAME }}{% endblock title %} + + + {% if FEED_ALL_ATOM %} + + {% endif %} + {% if FEED_ALL_RSS %} + + {% endif %} + {% if FEED_ATOM %} + + {% endif %} + {% if FEED_RSS %} + + {% endif %} + {% if CATEGORY_FEED_ATOM and category %} + + {% endif %} + {% if CATEGORY_FEED_RSS and category %} + + {% endif %} + {% if TAG_FEED_ATOM and tag %} + + {% endif %} + {% if TAG_FEED_RSS and tag %} + + {% endif %} + + + {% endblock head %} + + + + + + {% block content %} + {% endblock %} + + {% if DESCRIPTION %} +
+
+ {{ DESCRIPTION }} +
+ {% endif %} + + {% if JS_OVERRIDE %} + + {% for js in JS_OVERRIDE %} + + {% endfor %} + {% endif %} + + diff --git a/web/mc-pelican/templates/categories.html b/web/mc-pelican/templates/categories.html new file mode 100644 index 0000000..e29be0c --- /dev/null +++ b/web/mc-pelican/templates/categories.html @@ -0,0 +1,8 @@ +{% extends "base.html" %} +{% block content %} +
    +{% for category, articles in categories %} +
  • {{ category }}
  • +{% endfor %} +
+{% endblock %} diff --git a/web/mc-pelican/templates/category.html b/web/mc-pelican/templates/category.html new file mode 100644 index 0000000..f64ed15 --- /dev/null +++ b/web/mc-pelican/templates/category.html @@ -0,0 +1,5 @@ +{% extends "index.html" %} +{% block content_title %} +

{{ category }}

+{% endblock %} + diff --git a/web/mc-pelican/templates/index.html b/web/mc-pelican/templates/index.html new file mode 100644 index 0000000..1ce8d56 --- /dev/null +++ b/web/mc-pelican/templates/index.html @@ -0,0 +1,22 @@ +{% extends "base.html" %} +{% block content %} +
+{% block content_title %} +{% endblock %} + +{% for article in articles_page.object_list %} + + +{% endfor %} + +{% include 'pagination.html' %} +
+{% endblock content %} diff --git a/web/mc-pelican/templates/page.html b/web/mc-pelican/templates/page.html new file mode 100644 index 0000000..5ceb779 --- /dev/null +++ b/web/mc-pelican/templates/page.html @@ -0,0 +1,15 @@ +{% extends "base.html" %} +{% block title %}{{ page.title }}{%endblock%} +{% block content %} +

{{ page.title }}

+ {% import 'translations.html' as translations with context %} + {{ translations.translations_for(page) }} + + {{ page.content }} + + {% if page.modified %} +

+ Last updated: {{ page.locale_modified }} +

+ {% endif %} +{% endblock %} diff --git a/web/mc-pelican/templates/pagination.html b/web/mc-pelican/templates/pagination.html new file mode 100644 index 0000000..4219a5c --- /dev/null +++ b/web/mc-pelican/templates/pagination.html @@ -0,0 +1,11 @@ +{% if DEFAULT_PAGINATION %} +

+ {% if articles_page.has_previous() %} + « + {% endif %} + Page {{ articles_page.number }} / {{ articles_paginator.num_pages }} + {% if articles_page.has_next() %} + » + {% endif %} +

+{% endif %} diff --git a/web/mc-pelican/templates/period_archives.html b/web/mc-pelican/templates/period_archives.html new file mode 100644 index 0000000..d930dbb --- /dev/null +++ b/web/mc-pelican/templates/period_archives.html @@ -0,0 +1,11 @@ +{% extends "base.html" %} +{% block content %} +

Archives for {{ period | reverse | join(' ') }}

+ +
+{% for article in dates %} +
{{ article.locale_date }}
+
{{ article.title }}
+{% endfor %} +
+{% endblock %} diff --git a/web/mc-pelican/templates/tag.html b/web/mc-pelican/templates/tag.html new file mode 100644 index 0000000..e69de29 diff --git a/web/mc-pelican/templates/tags.html b/web/mc-pelican/templates/tags.html new file mode 100644 index 0000000..b5d1482 --- /dev/null +++ b/web/mc-pelican/templates/tags.html @@ -0,0 +1,10 @@ +{% extends "base.html" %} + +{% block title %}{{ SITENAME }} - Tags{% endblock %} + +{% block content %} +

Tags for {{ SITENAME }}

+ {%- for tag, articles in tags|sort %} +
  • {{ tag }} ({{ articles|count }})
  • + {% endfor %} +{% endblock %} diff --git a/web/mc-pelican/templates/translations.html b/web/mc-pelican/templates/translations.html new file mode 100644 index 0000000..6bd6c7d --- /dev/null +++ b/web/mc-pelican/templates/translations.html @@ -0,0 +1,8 @@ +{% macro translations_for(article) %} +{% if article.translations %} +{% for translation in article.translations %} +{{ translation.lang }} +{% endfor %} +{% endif %} +{% endmacro %} + diff --git a/web/pelican-plugins b/web/pelican-plugins new file mode 160000 index 0000000..324ab67 --- /dev/null +++ b/web/pelican-plugins @@ -0,0 +1 @@ +Subproject commit 324ab678f8d0bc88c348addfb05a7a2a89007314 diff --git a/web/pelicanconf.py b/web/pelicanconf.py new file mode 100644 index 0000000..d76a8fb --- /dev/null +++ b/web/pelicanconf.py @@ -0,0 +1,59 @@ +# Disable Setext Headers Monkey Patch +from markdown import blockprocessors as bp +class NoProcessing(bp.BlockProcessor): + def test(self, parent, block): + return False +bp.SetextHeaderProcessor = NoProcessing + +AUTHOR = 'Tobias' +SITENAME = 'Tobias Raayoni Last' + +THEME = 'mc-pelican' +PLUGIN_PATHS = ['pelican-plugins'] +TIMEZONE = 'Asia/Jerusalem' + +DEFAULT_LANG = 'English' + +# 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 + +DEFAULT_PAGINATION = False + +# Uncomment following line if you want document-relative URLs when developing +#RELATIVE_URLS = True + +JS_OVERRIDE = ['theme/script.js'] + +MARKDOWN = { + 'extension_configs': { + 'markdown.extensions.tables':{}, + 'markdown.extensions.footnotes':{}, + 'markdown.extensions.nl2br':{}, + } +} + +ARTICLE_URL = "{category}/{slug}.html" +ARTICLE_SAVE_AS = "{category}/{slug}.html" +INDEX_SAVE_AS = "archive/all.html" +ARCHIVES_SAVE_AS = 'archive/index.html' + +PATH = 'content' +ARTICLE_PATHS = ['blog',] +PAGE_PATHS = ['pages',] + +MENUITEMS = [('Current', '/current.html'), ('Archive', '/archive/'), ('Blog', '/blog/'), ('Connect', '/connect.html'), ('CV', '/pages/cv.html')] +SUMMARY_MAX_LENGTH = 0 +DEFAULT_DATE_FORMAT = '%Y-%m-%d' + +DEFAULT_CATEGORY = 'blog' +CATEGORIES_SAVE_AS = 'categories/index.html' +CATEGORY_URL = '{slug}/index.html' +CATEGORY_SAVE_AS = '{slug}/index.html' + +DELETE_OUTPUT_DIRECTORY = True + +PLUGINS = ['geoblog'] \ No newline at end of file diff --git a/web/publishconf.py b/web/publishconf.py new file mode 100644 index 0000000..be3909b --- /dev/null +++ b/web/publishconf.py @@ -0,0 +1,21 @@ +# 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 = '' +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 = "" \ No newline at end of file diff --git a/web/tasks.py b/web/tasks.py new file mode 100644 index 0000000..ba03676 --- /dev/null +++ b/web/tasks.py @@ -0,0 +1,143 @@ +# -*- coding: utf-8 -*- + +import os +import shlex +import shutil +import sys +import datetime + +from invoke import task +from invoke.main import program +from invoke.util import cd +from pelican import main as pelican_main +from pelican.server import ComplexHTTPRequestHandler, RootedHTTPServer +from pelican.settings import DEFAULT_CONFIG, get_settings_from_file + +OPEN_BROWSER_ON_SERVE = True +SETTINGS_FILE_BASE = 'pelicanconf.py' +SETTINGS = {} +SETTINGS.update(DEFAULT_CONFIG) +LOCAL_SETTINGS = get_settings_from_file(SETTINGS_FILE_BASE) +SETTINGS.update(LOCAL_SETTINGS) + +CONFIG = { + 'settings_base': SETTINGS_FILE_BASE, + 'settings_publish': 'publishconf.py', + # Output path. Can be absolute or relative to tasks.py. Default: 'output' + 'deploy_path': SETTINGS['OUTPUT_PATH'], + # Remote server configuration + 'ssh_user': 'root', + 'ssh_host': 'localhost', + 'ssh_port': '22', + 'ssh_path': '/var/www', + # Host and port for `serve` + 'host': 'localhost', + '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""" + pelican_run('-s {settings_base}'.format(**CONFIG)) + +@task +def rebuild(c): + """`build` with the delete switch""" + pelican_run('-d -s {settings_base}'.format(**CONFIG)) + +@task +def regenerate(c): + """Automatically regenerate site upon file modification""" + pelican_run('-r -s {settings_base}'.format(**CONFIG)) + +@task +def serve(c): + """Serve site at http://$HOST:$PORT/ (default is localhost:8000)""" + + class AddressReuseTCPServer(RootedHTTPServer): + allow_reuse_address = True + + server = AddressReuseTCPServer( + CONFIG['deploy_path'], + (CONFIG['host'], CONFIG['port']), + ComplexHTTPRequestHandler) + + if OPEN_BROWSER_ON_SERVE: + # Open site in default browser + import webbrowser + webbrowser.open("http://{host}:{port}".format(**CONFIG)) + + sys.stderr.write('Serving at {host}:{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""" + pelican_run('-s {settings_publish}'.format(**CONFIG)) + +@task +def livereload(c): + """Automatically reload browser tab upon file modification.""" + from livereload import Server + + def cached_build(): + cmd = '-s {settings_base} -e CACHE_CONTENT=true LOAD_CONTENT_CACHE=true' + pelican_run(cmd.format(**CONFIG)) + + cached_build() + server = Server() + theme_path = SETTINGS['THEME'] + watched_globs = [ + CONFIG['settings_base'], + '{}/templates/**/*.html'.format(theme_path), + ] + + content_file_extensions = ['.md', '.rst'] + for extension in content_file_extensions: + content_glob = '{0}/**/*{1}'.format(SETTINGS['PATH'], extension) + watched_globs.append(content_glob) + + static_file_extensions = ['.css', '.js'] + for extension in static_file_extensions: + static_file_glob = '{0}/static/**/*{1}'.format(theme_path, extension) + watched_globs.append(static_file_glob) + + for glob in watched_globs: + server.watch(glob, cached_build) + + if OPEN_BROWSER_ON_SERVE: + # Open site in default browser + import webbrowser + webbrowser.open("http://{host}:{port}".format(**CONFIG)) + + server.serve(host=CONFIG['host'], port=CONFIG['port'], root=CONFIG['deploy_path']) + + +@task +def publish(c): + """Publish to production via rsync""" + pelican_run('-s {settings_publish}'.format(**CONFIG)) + c.run( + 'rsync --delete --exclude ".DS_Store" -pthrvz -c ' + '-e "ssh -p {ssh_port}" ' + '{} {ssh_user}@{ssh_host}:{ssh_path}'.format( + CONFIG['deploy_path'].rstrip('/') + '/', + **CONFIG)) + + +def pelican_run(cmd): + cmd += ' ' + program.core.remainder # allows to pass-through args to pelican + pelican_main(shlex.split(cmd)) \ No newline at end of file