From aaaad946a744d36b7f966372d8e489fb45e037b5 Mon Sep 17 00:00:00 2001
From: Silvan Kisseleff <silvan.kisseleff@gmail.com>
Date: Wed, 18 Sep 2024 15:57:10 +0200
Subject: [PATCH 1/2] added initial documentation template

---
 .gitignore                      |   3 +
 docs/README.md                  |  13 ++++
 docs/base/businessplan.typ      |  70 +++++++++++++++++++
 docs/base/thesis.typ            | 116 ++++++++++++++++++++++++++++++++
 docs/images/info_icon.svg       |   1 +
 docs/images/logo-ost-de.svg     |  42 ++++++++++++
 docs/images/logo-ost-en.svg     |  61 +++++++++++++++++
 docs/images/warning_icon.svg    |   1 +
 docs/main/businessplan.typ      |  90 +++++++++++++++++++++++++
 docs/main/thesis.typ            |  88 ++++++++++++++++++++++++
 docs/titlepage/businessplan.typ |  61 +++++++++++++++++
 docs/titlepage/thesis.typ       |  89 ++++++++++++++++++++++++
 docs/utils/boxes.typ            |  70 +++++++++++++++++++
 docs/utils/colors.typ           |  32 +++++++++
 docs/utils/utils.typ            |  47 +++++++++++++
 15 files changed, 784 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 docs/README.md
 create mode 100644 docs/base/businessplan.typ
 create mode 100644 docs/base/thesis.typ
 create mode 100644 docs/images/info_icon.svg
 create mode 100644 docs/images/logo-ost-de.svg
 create mode 100644 docs/images/logo-ost-en.svg
 create mode 100644 docs/images/warning_icon.svg
 create mode 100644 docs/main/businessplan.typ
 create mode 100644 docs/main/thesis.typ
 create mode 100644 docs/titlepage/businessplan.typ
 create mode 100644 docs/titlepage/thesis.typ
 create mode 100644 docs/utils/boxes.typ
 create mode 100644 docs/utils/colors.typ
 create mode 100644 docs/utils/utils.typ

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..50dd742
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+# Ignore generated PDFs
+/docs/out
+/docs/*.pdf
\ No newline at end of file
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 0000000..524fab4
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,13 @@
+# Typst Template
+
+This project is in an early phase of development and not considered "production ready".
+
+Typically this project would be added as a git submodule of a typst project.
+
+To use the template refer to the examples in the **main** directory and make sure to adjust the import paths accordingly.
+
+If you would like to build the sample documents you may use this command:
+
+```sh
+typst compile main/thesis.typ --root ./
+```
\ No newline at end of file
diff --git a/docs/base/businessplan.typ b/docs/base/businessplan.typ
new file mode 100644
index 0000000..04cf015
--- /dev/null
+++ b/docs/base/businessplan.typ
@@ -0,0 +1,70 @@
+#import "../utils/utils.typ": *
+
+#let conf(
+  title: none,
+  type: none,
+  semester: none,
+  authors: (),
+  version: none,
+  doc,
+) = {
+  set text(font: "Open Sans", size: 11pt)
+
+  // general page settings
+  set page(paper: "a4", margin: (x: 1.5cm, top: 8em))
+
+  // page styling preamble
+  set page(header: [
+    #columns(2)[
+      #v(1.5em)#align(left + horizon, title)
+      #colbreak()
+      #align(right + horizon, image("../images/logo-ost-de.svg", height: 3em))
+    ]
+    #line(length: 100%, stroke: 0.5pt)
+  ], footer: [
+    #line(length: 100%, stroke: 0.5pt)
+    #columns(2)[
+      #align(left + horizon, [
+        Version: #version
+      ])
+      #colbreak()
+      #align(right + horizon, [
+        #counter(page).display("I") \
+        OST RJ
+      ])
+    ]
+  ])
+
+  // Table of Contents
+  show outline.entry.where(level: 1): h => {
+    v(15pt, weak: true)
+    strong(h)
+  }
+  outline(title: [Inhaltsverzeichnis], indent: auto)
+
+  // styling of document main content
+  set page(footer: [
+    #line(length: 100%, stroke: 0.5pt)
+    #columns(2)[
+      #align(left + horizon, [
+        #type - #semester
+      ])
+      #colbreak()
+      #align(right + horizon, [
+        Seite: #counter(page).display("1 / 1", both: true) \
+        OST RJ
+      ])
+    ]
+  ])
+
+  // reset page numebring to 1 for main content
+  counter(page).update(1)
+
+  set heading(numbering: "1.1")
+  set par(justify: true)
+
+  pagebreak(weak: true)
+
+  doc
+}
+
diff --git a/docs/base/thesis.typ b/docs/base/thesis.typ
new file mode 100644
index 0000000..59771c7
--- /dev/null
+++ b/docs/base/thesis.typ
@@ -0,0 +1,116 @@
+#import "../utils/utils.typ": *
+
+#let conf(
+  title: none,
+  type: none,
+  authors: (),
+  abstract: [],
+  mgmt_summary: [],
+  version: none,
+  doc
+) = {
+  set text(
+    font: "Open Sans",
+    fill: ost_black,
+    size: 11pt,
+  )
+ 
+  // general page settings
+  set page(
+    paper: "a4",
+    margin: (x: 1.5cm, top: 8em),
+  )
+
+  // page styling preamble
+  set page(
+    header: [
+      #columns(3)[
+        #v(1.5em)#align(left + horizon, type) 
+        #colbreak()
+        #v(1.5em)#align(center + horizon, title) 
+        #colbreak()
+        #align(right + horizon, image("../images/logo-ost-en.svg", height: 3em))
+      ]
+      #line(length: 100%, stroke: 0.5pt)
+    ],
+    footer: [
+      #line(length: 100%, stroke: 0.5pt)
+      #columns(2)[
+        #align(left + horizon, [
+            Authors: #get_author_name_list(authors: authors) \
+            Version: #version
+          ]
+        )
+        #colbreak()
+        #align(right + horizon, [
+            #counter(page).display(
+              "I",
+            ) \
+            OST RJ
+          ]
+        )
+      ]
+    ],
+  )
+  
+
+  // document preamble
+
+  // Abstract
+  set align(center)
+  v(30%)
+  par(justify: false)[
+    #abstract
+  ]
+
+  pagebreak(weak: true)
+
+  // Management Summary
+  set align(left)
+  set par(justify: true)
+  [
+    #mgmt_summary
+  ]
+
+  pagebreak(weak: true)
+
+  // Table of Contents
+  show outline.entry.where(
+    level: 1
+    ): h => {
+      v(15pt, weak: true)
+      strong(h)
+  }
+  outline(title: [Table of Contents], indent: auto)
+  
+  // styling of document main content
+  set page(
+    footer: [
+      #line(length: 100%, stroke: 0.5pt)
+      #columns(2)[
+        #align(left + horizon, [
+            Authors: #get_author_name_list(authors: authors) \
+            Version: #version
+          ]
+        )
+        #colbreak()
+        #align(right + horizon, [
+            Page: #counter(page).display(
+              "1 / 1",
+              both: true,
+            ) \
+            OST RJ
+          ]
+        )
+      ]
+    ],
+  )
+
+  // reset page numebring to 1 for main content
+  counter(page).update(1)
+  
+  set heading(numbering: "1.1")
+  set par(justify: true)
+  doc
+}
+
diff --git a/docs/images/info_icon.svg b/docs/images/info_icon.svg
new file mode 100644
index 0000000..1eb021f
--- /dev/null
+++ b/docs/images/info_icon.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" fill="white"><path d="M440-280h80v-240h-80v240Zm40-320q17 0 28.5-11.5T520-640q0-17-11.5-28.5T480-680q-17 0-28.5 11.5T440-640q0 17 11.5 28.5T480-600Zm0 520q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z"/></svg>
\ No newline at end of file
diff --git a/docs/images/logo-ost-de.svg b/docs/images/logo-ost-de.svg
new file mode 100644
index 0000000..40330b5
--- /dev/null
+++ b/docs/images/logo-ost-de.svg
@@ -0,0 +1,42 @@
+<svg id="Gruppe_1232" data-name="Gruppe 1232" xmlns="http://www.w3.org/2000/svg" width="135" height="60" viewBox="0 0 135 60">
+  <g id="Gruppe_38" data-name="Gruppe 38" transform="translate(66.969 18.494)">
+    <path id="Pfad_76" data-name="Pfad 76" d="M114.524,191.263a8.781,8.781,0,1,0,8.781,8.66A8.628,8.628,0,0,0,114.524,191.263Zm0,14.943a5.99,5.99,0,0,1-5.8-6.283,5.8,5.8,0,1,1,11.595,0A5.99,5.99,0,0,1,114.524,206.206Z" transform="translate(-105.743 -191.263)" fill="#191919"/>
+    <path id="Pfad_77" data-name="Pfad 77" d="M144.189,198.818c-1.741-.72-3.244-1.342-3.244-2.728,0-1.245,1.168-2.184,2.717-2.184a6.3,6.3,0,0,1,3.772,1.436l1.244-2.334a7.4,7.4,0,0,0-4.991-1.745c-3.223,0-5.652,2.1-5.652,4.876,0,2.919,2.551,4.02,4.8,4.99,1.783.769,3.323,1.432,3.323,2.846,0,1.525-1.316,2.207-2.62,2.207a6.881,6.881,0,0,1-4.275-1.758l-1.559,2.16a8.372,8.372,0,0,0,5.786,2.242c3.27,0,5.555-2.025,5.555-4.924C149.047,200.827,146.467,199.76,144.189,198.818Z" transform="translate(-117.023 -191.263)" fill="#191919"/>
+    <path id="Pfad_78" data-name="Pfad 78" d="M171.311,191.712H160.3v2.377h4.148v14.6h2.693v-14.6h4.172Z" transform="translate(-124.996 -191.421)" fill="#191919"/>
+  </g>
+  <g id="Gruppe_39" data-name="Gruppe 39">
+    <path id="Pfad_79" data-name="Pfad 79" d="M49.28,170.831a27.513,27.513,0,1,0-.076,38.814c4.981-4.982,13.67-11.86,13.67-19.445C62.874,182.653,54.216,175.806,49.28,170.831ZM47.9,205.812a21.941,21.941,0,0,1-15.555,6.453c-.681,0-1.355-.036-2.021-.1-.339-.031-.676-.071-1.01-.117-.665.092-1.338.157-2.021.188-.335.015-.672.025-1.011.025a22.011,22.011,0,0,1,0-44.021c.338,0,.674.011,1.008.026.683.031,1.357.1,2.022.188q.5-.07,1.01-.117c.667-.061,1.34-.1,2.022-.1a21.94,21.94,0,0,1,15.616,6.516c3.949,3.981,10.876,9.458,10.876,15.5C58.832,196.323,51.88,201.826,47.9,205.812Z" transform="translate(-2.25 -162.686)" fill="#191919"/>
+    <path id="Pfad_80" data-name="Pfad 80" d="M62.714,177.791A21.94,21.94,0,0,0,47.1,171.275a16.087,16.087,0,0,0-3.032.214c5.294.484,11.063,2.729,14.607,6.3,3.949,3.981,10.875,9.458,10.875,15.5,0,6.068-6.952,11.571-10.936,15.556-4.059,4.06-9.282,5.758-14.545,6.24a18.7,18.7,0,0,0,3.031.214,21.941,21.941,0,0,0,15.555-6.454c3.985-3.986,10.936-9.489,10.936-15.556C73.589,187.249,66.663,181.771,62.714,177.791Z" transform="translate(-17.007 -165.717)" fill="#8c195f"/>
+    <path id="Pfad_81" data-name="Pfad 81" d="M44.066,171.606a21.963,21.963,0,0,1,12.586,6.3c3.949,3.981,10.875,9.458,10.875,15.5,0,6.068-6.951,11.571-10.936,15.556a21.966,21.966,0,0,1-12.523,6.24h0c5.2-.461,10.57-2.215,14.545-6.24s10.936-9.489,10.936-15.556c0-6.037-6.926-11.515-10.875-15.5-3.545-3.572-9.314-5.817-14.607-6.3" transform="translate(-17.007 -165.833)" fill="#d72864"/>
+    <path id="Pfad_82" data-name="Pfad 82" d="M7.395,193.286c0-11.8,9.484-21.471,23.016-21.8a21.216,21.216,0,0,0-3.03-.214,22.011,22.011,0,0,0,0,44.021,13.131,13.131,0,0,0,3.032-.214C18.786,215.4,7.395,205.083,7.395,193.286Z" transform="translate(-3.352 -165.717)" fill="#8c195f"/>
+    <path id="Pfad_83" data-name="Pfad 83" d="M12.537,193.4a21.984,21.984,0,0,1,18.976-21.8h0c-13.529.326-23.016,10-23.016,21.8s11.375,22.116,23.018,21.8h0A22.04,22.04,0,0,1,12.537,193.4Z" transform="translate(-4.455 -165.833)" fill="#d72864"/>
+  </g>
+  <g id="Gruppe_40" data-name="Gruppe 40" transform="translate(68.052 42.542)">
+    <path id="Pfad_84" data-name="Pfad 84" d="M107.412,232.063c0-1.958,1.085-3.39,3.044-3.39,1.941,0,2.872,1.433,2.872,3.255,0,2.14-1.04,3.535-3,3.535C108.342,235.463,107.412,234.031,107.412,232.063Zm5.287-.045c0-1.813-.911-2.81-2.261-2.81-1.367,0-2.388,1.006-2.388,2.855s.948,2.865,2.315,2.865S112.7,233.967,112.7,232.018Z" transform="translate(-107.412 -228.51)" fill="#191919"/>
+    <path id="Pfad_85" data-name="Pfad 85" d="M121.414,233.095l-.6.072c-.109-.608-.283-.952-1.048-.952-.812,0-1,.354-1,.753,0,.544.409.67,1.112.843.857.208,1.622.39,1.622,1.4,0,.8-.6,1.323-1.723,1.323-1.021,0-1.668-.39-1.8-1.4l.583-.1a1.081,1.081,0,0,0,1.249.979c.611,0,1.076-.182,1.076-.771,0-.544-.383-.653-1.057-.825-.775-.2-1.687-.318-1.687-1.378,0-.9.775-1.332,1.649-1.332A1.423,1.423,0,0,1,121.414,233.095Z" transform="translate(-111.091 -229.578)" fill="#191919"/>
+    <path id="Pfad_86" data-name="Pfad 86" d="M127.308,235.514a2.166,2.166,0,0,1-1.057.29,1.079,1.079,0,0,1-1.24-1.242V231.57h-.729v-.507h.729v-1.333l.611-.091v1.423h1.3v.507h-1.3v2.91c0,.526.109.825.72.825a1.84,1.84,0,0,0,.83-.236Z" transform="translate(-113.292 -228.851)" fill="#191919"/>
+    <path id="Pfad_87" data-name="Pfad 87" d="M133.243,233.095l-.6.072c-.109-.608-.282-.952-1.048-.952-.811,0-1,.354-1,.753,0,.544.41.67,1.112.843.857.208,1.622.39,1.622,1.4,0,.8-.6,1.323-1.723,1.323-1.021,0-1.668-.39-1.8-1.4l.583-.1a1.081,1.081,0,0,0,1.249.979c.611,0,1.076-.182,1.076-.771,0-.544-.383-.653-1.057-.825-.775-.2-1.687-.318-1.687-1.378,0-.9.775-1.332,1.649-1.332A1.423,1.423,0,0,1,133.243,233.095Z" transform="translate(-115.214 -229.578)" fill="#191919"/>
+    <path id="Pfad_88" data-name="Pfad 88" d="M136.713,234.137c0-1.622.821-2.438,2.206-2.438a1.557,1.557,0,0,1,1.7,1.55l-.61.082c-.082-.744-.429-1.106-1.14-1.106-.729,0-1.513.4-1.513,1.831,0,1.523.748,1.93,1.5,1.93a1.106,1.106,0,0,0,1.231-1.024l.575.118a1.7,1.7,0,0,1-1.841,1.45C137.278,236.531,136.713,235.533,136.713,234.137Z" transform="translate(-117.625 -229.578)" fill="#191919"/>
+    <path id="Pfad_89" data-name="Pfad 89" d="M148.5,235.265h-.61V232.2c0-.707-.246-1.125-.967-1.125a2.657,2.657,0,0,0-1.549.662v3.526h-.61v-6.844h.61V231.2a2.89,2.89,0,0,1,1.713-.662c.993,0,1.413.553,1.413,1.6Z" transform="translate(-120.431 -228.421)" fill="#191919"/>
+    <path id="Pfad_90" data-name="Pfad 90" d="M153.258,236.471l-1.5-4.632h.629l1.24,4.016,1.1-4.016h.666l1.085,4,1.231-4h.584l-1.468,4.632h-.739l-1.048-3.952-1.057,3.952Z" transform="translate(-122.871 -229.627)" fill="#191919"/>
+    <path id="Pfad_91" data-name="Pfad 91" d="M162.753,234.11a2.1,2.1,0,0,1,2.16-2.411c1.276,0,1.8.861,1.8,1.967-.008.182-.018.372-.045.562H163.4c.037,1.387.684,1.758,1.5,1.758a1.033,1.033,0,0,0,1.176-.879l.575.109a1.677,1.677,0,0,1-1.8,1.314C163.227,236.531,162.753,235.388,162.753,234.11Zm3.318-.371c.018-.952-.347-1.514-1.212-1.514a1.412,1.412,0,0,0-1.449,1.514Z" transform="translate(-126.701 -229.578)" fill="#191919"/>
+    <path id="Pfad_92" data-name="Pfad 92" d="M171.168,229.578a.481.481,0,1,1,.492-.481A.443.443,0,0,1,171.168,229.578Zm.292,5.756h-.611V230.7h.611Z" transform="translate(-129.463 -228.49)" fill="#191919"/>
+    <path id="Pfad_93" data-name="Pfad 93" d="M174.286,235.964h2.908v.507h-3.619v-.426l2.808-3.7h-2.762v-.507H177.1v.436Z" transform="translate(-130.473 -229.627)" fill="#191919"/>
+    <path id="Pfad_94" data-name="Pfad 94" d="M180.126,234.11a2.1,2.1,0,0,1,2.16-2.411c1.276,0,1.8.861,1.8,1.967-.008.182-.018.372-.045.562h-3.264c.037,1.387.684,1.758,1.5,1.758a1.033,1.033,0,0,0,1.176-.879l.575.109a1.677,1.677,0,0,1-1.8,1.314C180.6,236.531,180.126,235.388,180.126,234.11Zm3.318-.371c.018-.952-.347-1.514-1.212-1.514a1.412,1.412,0,0,0-1.449,1.514Z" transform="translate(-132.756 -229.578)" fill="#191919"/>
+    <path id="Pfad_95" data-name="Pfad 95" d="M190.6,232.334a2.128,2.128,0,0,0-1.677.535v3.554h-.611v-4.632h.5l.055.644a1.728,1.728,0,0,1,1.586-.735h.146Z" transform="translate(-135.611 -229.577)" fill="#191919"/>
+    <path id="Pfad_96" data-name="Pfad 96" d="M108.722,251.651h-.611v-6.563h3.728v.525h-3.117v2.557h2.889v.535h-2.889Z" transform="translate(-107.656 -234.302)" fill="#191919"/>
+    <path id="Pfad_97" data-name="Pfad 97" d="M118.23,251.911c0,.254.046.363.282.363a.978.978,0,0,0,.283-.054l.037.39a1.17,1.17,0,0,1-.556.126.549.549,0,0,1-.6-.58,2.121,2.121,0,0,1-1.55.607,1.2,1.2,0,0,1-1.376-1.25c0-1.314,1.2-1.559,2.261-1.559.264,0,.428.008.61.018v-.463c0-.707-.2-1.088-1.011-1.088-.739,0-.994.291-1.094.834l-.574-.1c.146-.861.711-1.224,1.7-1.224,1.112,0,1.586.435,1.586,1.586Zm-.6-1.45a4.542,4.542,0,0,0-.574-.027c-.638,0-1.668.045-1.668.988,0,.453.164.852.883.852a1.909,1.909,0,0,0,1.358-.635Z" transform="translate(-109.969 -235.305)" fill="#191919"/>
+    <path id="Pfad_98" data-name="Pfad 98" d="M122.083,250.37c0-1.623.821-2.438,2.206-2.438a1.557,1.557,0,0,1,1.7,1.55l-.61.082c-.081-.743-.428-1.106-1.139-1.106-.729,0-1.513.4-1.513,1.831,0,1.523.748,1.931,1.5,1.931a1.106,1.106,0,0,0,1.231-1.024l.575.117a1.7,1.7,0,0,1-1.841,1.45C122.648,252.763,122.083,251.766,122.083,250.37Z" transform="translate(-112.526 -235.305)" fill="#191919"/>
+    <path id="Pfad_99" data-name="Pfad 99" d="M133.871,251.5h-.61v-3.064c0-.707-.246-1.124-.967-1.124a2.661,2.661,0,0,0-1.549.662V251.5h-.61v-6.844h.61v2.783a2.894,2.894,0,0,1,1.713-.661c.994,0,1.413.553,1.413,1.6Z" transform="translate(-115.332 -234.149)" fill="#191919"/>
+    <path id="Pfad_100" data-name="Pfad 100" d="M142.074,251.5h-.61v-3.064c0-.707-.246-1.124-.967-1.124a2.661,2.661,0,0,0-1.549.662V251.5h-.61v-6.844h.61v2.783a2.894,2.894,0,0,1,1.713-.661c.994,0,1.413.553,1.413,1.6Z" transform="translate(-118.191 -234.149)" fill="#191919"/>
+    <path id="Pfad_101" data-name="Pfad 101" d="M146.051,250.361a2.126,2.126,0,0,1,2.215-2.429c1.422,0,2.014.934,2.014,2.312,0,1.523-.611,2.519-2.132,2.519C146.571,252.763,146.051,251.721,146.051,250.361Zm3.591-.063c0-1.378-.519-1.841-1.412-1.841-.921,0-1.549.562-1.549,1.868s.5,1.922,1.513,1.922C149.086,252.247,149.642,251.7,149.642,250.3Z" transform="translate(-120.88 -235.305)" fill="#191919"/>
+    <path id="Pfad_102" data-name="Pfad 102" d="M154.143,250.37c0-1.623.82-2.438,2.205-2.438a1.558,1.558,0,0,1,1.7,1.55l-.61.082c-.082-.743-.429-1.106-1.14-1.106-.729,0-1.513.4-1.513,1.831,0,1.523.748,1.931,1.5,1.931a1.106,1.106,0,0,0,1.231-1.024l.574.117a1.7,1.7,0,0,1-1.841,1.45C154.708,252.763,154.143,251.766,154.143,250.37Z" transform="translate(-123.7 -235.305)" fill="#191919"/>
+    <path id="Pfad_103" data-name="Pfad 103" d="M165.929,251.5h-.611v-3.064c0-.707-.246-1.124-.966-1.124a2.657,2.657,0,0,0-1.549.662V251.5h-.611v-6.844h.611v2.783a2.892,2.892,0,0,1,1.713-.661c.993,0,1.413.553,1.413,1.6Z" transform="translate(-126.506 -234.149)" fill="#191919"/>
+    <path id="Pfad_104" data-name="Pfad 104" d="M173.226,249.328l-.6.072c-.109-.607-.283-.952-1.048-.952-.811,0-1,.353-1,.753,0,.544.41.671,1.112.843.857.209,1.622.39,1.622,1.4,0,.8-.6,1.323-1.722,1.323-1.021,0-1.668-.389-1.805-1.4l.584-.1a1.08,1.08,0,0,0,1.249.979c.61,0,1.076-.181,1.076-.77,0-.544-.383-.653-1.057-.825-.775-.2-1.687-.317-1.687-1.378,0-.9.775-1.332,1.649-1.332A1.422,1.422,0,0,1,173.226,249.328Z" transform="translate(-129.15 -235.305)" fill="#191919"/>
+    <path id="Pfad_105" data-name="Pfad 105" d="M176.7,250.37c0-1.623.821-2.438,2.206-2.438a1.558,1.558,0,0,1,1.7,1.55l-.61.082c-.082-.743-.429-1.106-1.14-1.106-.729,0-1.513.4-1.513,1.831,0,1.523.747,1.931,1.5,1.931a1.105,1.105,0,0,0,1.23-1.024l.575.117a1.7,1.7,0,0,1-1.841,1.45C177.26,252.763,176.7,251.766,176.7,250.37Z" transform="translate(-131.561 -235.305)" fill="#191919"/>
+    <path id="Pfad_106" data-name="Pfad 106" d="M188.483,251.5h-.61v-3.064c0-.707-.246-1.124-.966-1.124a2.657,2.657,0,0,0-1.549.662V251.5h-.611v-6.844h.611v2.783a2.89,2.89,0,0,1,1.713-.661c.994,0,1.413.553,1.413,1.6Z" transform="translate(-134.367 -234.149)" fill="#191919"/>
+    <path id="Pfad_107" data-name="Pfad 107" d="M192.935,248.072h.61v3.064c0,.707.219,1.123.939,1.123a2.659,2.659,0,0,0,1.55-.661v-3.526h.611V252.7h-.538l-.036-.58a3.009,3.009,0,0,1-1.75.671c-.994,0-1.386-.553-1.386-1.6Z" transform="translate(-137.221 -235.355)" fill="#191919"/>
+    <path id="Pfad_108" data-name="Pfad 108" d="M201.764,251.5h-.611v-6.844h.611Z" transform="translate(-140.085 -234.149)" fill="#191919"/>
+    <path id="Pfad_109" data-name="Pfad 109" d="M204.106,250.343a2.1,2.1,0,0,1,2.161-2.411c1.276,0,1.8.861,1.8,1.967-.009.181-.018.371-.046.562h-3.263c.036,1.387.683,1.759,1.5,1.759a1.033,1.033,0,0,0,1.175-.88l.575.109a1.676,1.676,0,0,1-1.8,1.314C204.58,252.763,204.106,251.621,204.106,250.343Zm3.318-.371c.019-.953-.346-1.514-1.212-1.514a1.413,1.413,0,0,0-1.449,1.514Z" transform="translate(-141.115 -235.305)" fill="#191919"/>
+  </g>
+</svg>
diff --git a/docs/images/logo-ost-en.svg b/docs/images/logo-ost-en.svg
new file mode 100644
index 0000000..06435a0
--- /dev/null
+++ b/docs/images/logo-ost-en.svg
@@ -0,0 +1,61 @@
+<svg id="Gruppe_1240" data-name="Gruppe 1240" xmlns="http://www.w3.org/2000/svg" width="190" height="62" viewBox="0 0 190 62">
+  <g id="Gruppe_1237" data-name="Gruppe 1237" transform="translate(66.772 18.435)">
+    <path id="Pfad_706" data-name="Pfad 706" d="M82.79,31.576a8.754,8.754,0,1,0,8.755,8.634A8.6,8.6,0,0,0,82.79,31.576Zm0,14.9a5.97,5.97,0,0,1-5.78-6.262,5.785,5.785,0,1,1,11.56,0A5.971,5.971,0,0,1,82.79,46.472Z" transform="translate(-74.036 -31.576)" fill="#191919"/>
+    <path id="Pfad_707" data-name="Pfad 707" d="M98.614,39.108c-1.735-.718-3.234-1.339-3.234-2.719,0-1.241,1.165-2.178,2.709-2.178a6.286,6.286,0,0,1,3.761,1.432l1.24-2.327a7.385,7.385,0,0,0-4.977-1.74c-3.213,0-5.635,2.09-5.635,4.86,0,2.911,2.544,4.008,4.789,4.975,1.777.766,3.313,1.427,3.313,2.835,0,1.521-1.311,2.2-2.611,2.2A6.858,6.858,0,0,1,93.706,44.7l-1.555,2.153a8.344,8.344,0,0,0,5.768,2.236c3.261,0,5.538-2.018,5.538-4.908C103.457,41.111,100.885,40.046,98.614,39.108Z" transform="translate(-71.529 -31.576)" fill="#191919"/>
+    <path id="Pfad_708" data-name="Pfad 708" d="M115.935,31.831h-10.98V34.2h4.136V48.759h2.685V34.2h4.16Z" transform="translate(-69.758 -31.541)" fill="#191919"/>
+  </g>
+  <g id="Gruppe_1238" data-name="Gruppe 1238" transform="translate(0)">
+    <path id="Pfad_709" data-name="Pfad 709" d="M62.272,23.5A27.426,27.426,0,1,0,62.2,62.192c4.967-4.966,13.63-11.823,13.63-19.385C75.825,35.284,67.193,28.46,62.272,23.5ZM60.891,58.371A21.876,21.876,0,0,1,45.383,64.8c-.68,0-1.35-.035-2.014-.1-.339-.031-.674-.071-1.009-.116-.663.091-1.334.156-2.014.187-.335.016-.669.026-1.007.026a21.941,21.941,0,1,1,0-43.882c.337,0,.672.01,1,.025.682.031,1.354.1,2.017.188.334-.047.668-.087,1.006-.117.665-.06,1.336-.1,2.016-.1a21.874,21.874,0,0,1,15.57,6.5C64.89,31.385,71.8,36.845,71.8,42.863,71.8,48.913,64.865,54.4,60.891,58.371Z" transform="translate(-15.381 -15.381)" fill="#191919"/>
+    <path id="Pfad_710" data-name="Pfad 710" d="M22.951,42.164a21.915,21.915,0,0,1,18.92-21.728h0C28.382,20.76,18.922,30.4,18.922,42.164S30.263,64.211,41.871,63.892h0A21.971,21.971,0,0,1,22.951,42.164Z" transform="translate(-14.891 -14.682)" fill="#d72864"/>
+    <path id="Pfad_711" data-name="Pfad 711" d="M53.584,57.7c-4.047,4.047-9.255,5.74-14.5,6.22.335.047.669.087,1.009.117.664.061,1.334.1,2.014.1A21.876,21.876,0,0,0,57.612,57.7c3.974-3.974,10.9-9.458,10.9-15.508,0-6.018-6.905-11.477-10.843-15.445a21.874,21.874,0,0,0-15.57-6.5c-.68,0-1.351.035-2.016.1-.338.031-.673.071-1.006.117,5.278.483,11.03,2.721,14.563,6.282,3.938,3.968,10.843,9.427,10.843,15.445C64.487,48.24,57.557,53.724,53.584,57.7Z" transform="translate(-12.101 -14.708)" fill="#8c195f"/>
+    <path id="Pfad_712" data-name="Pfad 712" d="M19.167,42.19c0-11.76,9.455-21.4,22.949-21.728-.664-.092-1.336-.157-2.017-.188-.332-.015-.667-.025-1-.025a21.941,21.941,0,1,0,0,43.882c.338,0,.673-.01,1.007-.026.68-.031,1.351-.1,2.014-.188C30.525,64.237,19.167,53.95,19.167,42.19Z" transform="translate(-15.136 -14.708)" fill="#8c195f"/>
+    <path id="Pfad_713" data-name="Pfad 713" d="M51.568,57.672a21.9,21.9,0,0,1-12.487,6.22c5.248-.479,10.456-2.173,14.5-6.22,3.973-3.974,10.9-9.458,10.9-15.508,0-6.018-6.905-11.477-10.843-15.445-3.534-3.562-9.286-5.8-14.563-6.282a21.9,21.9,0,0,1,12.548,6.282c3.937,3.968,10.843,9.427,10.843,15.445C62.472,48.214,55.541,53.7,51.568,57.672Z" transform="translate(-12.101 -14.682)" fill="#d72864"/>
+  </g>
+  <g id="Gruppe_1239" data-name="Gruppe 1239" transform="translate(68.262 42.626)">
+    <path id="Pfad_714" data-name="Pfad 714" d="M75.994,59.062h3.2v.528H75.385V53h3.721v.527H75.994v2.45h2.912v.536H75.994Z" transform="translate(-75.339 -52.719)" fill="#191919"/>
+    <path id="Pfad_715" data-name="Pfad 715" d="M83.078,58.619c0,.255.046.364.282.364a.956.956,0,0,0,.282-.055l.035.392a1.155,1.155,0,0,1-.554.127.55.55,0,0,1-.6-.583,2.117,2.117,0,0,1-1.547.609A1.2,1.2,0,0,1,79.6,58.219c0-1.319,1.2-1.565,2.259-1.565.263,0,.428.009.609.017v-.463c0-.71-.2-1.093-1.011-1.093-.737,0-.992.291-1.092.839l-.574-.1c.146-.865.71-1.229,1.7-1.229,1.11,0,1.583.436,1.583,1.592Zm-.6-1.456a4.331,4.331,0,0,0-.574-.027c-.637,0-1.667.046-1.667.991,0,.455.165.856.883.856a1.9,1.9,0,0,0,1.357-.637Z" transform="translate(-74.756 -52.494)" fill="#191919"/>
+    <path id="Pfad_716" data-name="Pfad 716" d="M87.208,56.025l-.6.073c-.109-.61-.283-.955-1.046-.955-.811,0-1,.354-1,.756,0,.545.409.673,1.11.846.855.208,1.62.392,1.62,1.4,0,.8-.6,1.328-1.72,1.328-1.019,0-1.665-.39-1.8-1.41l.583-.1a1.079,1.079,0,0,0,1.247.982c.61,0,1.073-.181,1.073-.773,0-.546-.381-.655-1.055-.829-.773-.2-1.684-.318-1.684-1.383,0-.9.774-1.337,1.647-1.337A1.423,1.423,0,0,1,87.208,56.025Z" transform="translate(-74.179 -52.494)" fill="#191919"/>
+    <path id="Pfad_717" data-name="Pfad 717" d="M90.366,59.345a2.151,2.151,0,0,1-1.055.291c-.828,0-1.239-.372-1.239-1.245v-3h-.727v-.51h.727V53.54l.61-.091v1.429h1.3v.51h-1.3v2.921c0,.528.109.829.718.829a1.848,1.848,0,0,0,.83-.237Z" transform="translate(-73.684 -52.657)" fill="#191919"/>
+    <path id="Pfad_718" data-name="Pfad 718" d="M90.456,57.045c0-1.7.984-2.421,2.157-2.421,1.275,0,1.794.864,1.794,1.975-.009.182-.019.373-.046.565H91.1c.036,1.392.683,1.765,1.492,1.765a1.034,1.034,0,0,0,1.175-.883l.573.109a1.674,1.674,0,0,1-1.793,1.319C90.93,59.474,90.456,58.328,90.456,57.045Zm3.314-.375c.018-.954-.347-1.52-1.21-1.52a1.415,1.415,0,0,0-1.448,1.52Z" transform="translate(-73.254 -52.494)" fill="#191919"/>
+    <path id="Pfad_719" data-name="Pfad 719" d="M97.389,55.26a2.126,2.126,0,0,0-1.676.537v3.569H95.1V54.715h.5l.055.647a1.722,1.722,0,0,1,1.583-.738h.146Z" transform="translate(-72.611 -52.494)" fill="#191919"/>
+    <path id="Pfad_720" data-name="Pfad 720" d="M101.652,59.366h-.61V56.289c0-.71-.246-1.129-.965-1.129a2.658,2.658,0,0,0-1.547.665v3.541H97.92V54.715h.536l.038.582a2.985,2.985,0,0,1,1.747-.673c.992,0,1.41.555,1.41,1.6Z" transform="translate(-72.221 -52.494)" fill="#191919"/>
+    <path id="Pfad_721" data-name="Pfad 721" d="M104.922,54.617c0,1.9,3.642.873,3.642,3.232,0,1.347-1.066,1.865-2.248,1.865a2.027,2.027,0,0,1-2.339-1.828l.61-.091a1.569,1.569,0,0,0,1.729,1.391c.755,0,1.6-.263,1.6-1.254,0-2-3.641-.8-3.641-3.286,0-1.064.9-1.747,2.148-1.747a1.868,1.868,0,0,1,2.1,1.829l-.582.073c-.127-.637-.382-1.356-1.492-1.356C105.314,53.443,104.922,53.962,104.922,54.617Z" transform="translate(-71.383 -52.733)" fill="#191919"/>
+    <path id="Pfad_722" data-name="Pfad 722" d="M110,59.355,108.5,54.7h.627l1.237,4.032,1.1-4.032h.665l1.083,4.014,1.228-4.014h.583l-1.465,4.651h-.737l-1.047-3.969-1.055,3.969Z" transform="translate(-70.756 -52.483)" fill="#191919"/>
+    <path id="Pfad_723" data-name="Pfad 723" d="M115.379,53.829a.482.482,0,1,1,.493-.481A.443.443,0,0,1,115.379,53.829Zm.291,5.78h-.609V54.958h.609Z" transform="translate(-69.873 -52.738)" fill="#191919"/>
+    <path id="Pfad_724" data-name="Pfad 724" d="M119.453,59.345a2.151,2.151,0,0,1-1.055.291c-.829,0-1.239-.372-1.239-1.245v-3h-.729v-.51h.729V53.54l.61-.091v1.429h1.3v.51h-1.3v2.921c0,.528.109.829.719.829a1.847,1.847,0,0,0,.829-.237Z" transform="translate(-69.66 -52.657)" fill="#191919"/>
+    <path id="Pfad_725" data-name="Pfad 725" d="M120.15,58.845h2.9v.51H119.44v-.428l2.8-3.713h-2.758V54.7h3.478v.436Z" transform="translate(-69.243 -52.483)" fill="#191919"/>
+    <path id="Pfad_726" data-name="Pfad 726" d="M123.151,57.045c0-1.7.984-2.421,2.158-2.421,1.274,0,1.793.864,1.793,1.975-.009.182-.019.373-.046.565H123.8c.035,1.392.682,1.765,1.491,1.765a1.033,1.033,0,0,0,1.175-.883l.573.109a1.674,1.674,0,0,1-1.793,1.319C123.625,59.474,123.151,58.328,123.151,57.045Zm3.314-.375c.018-.954-.346-1.52-1.21-1.52a1.415,1.415,0,0,0-1.448,1.52Z" transform="translate(-68.73 -52.494)" fill="#191919"/>
+    <path id="Pfad_727" data-name="Pfad 727" d="M130.084,55.26a2.125,2.125,0,0,0-1.675.537v3.569H127.8V54.715h.5l.055.647a1.724,1.724,0,0,1,1.585-.738h.145Z" transform="translate(-68.086 -52.494)" fill="#191919"/>
+    <path id="Pfad_728" data-name="Pfad 728" d="M131.224,59.625h-.609V52.753h.609Z" transform="translate(-67.697 -52.753)" fill="#191919"/>
+    <path id="Pfad_729" data-name="Pfad 729" d="M135.789,58.619c0,.255.046.364.282.364a.956.956,0,0,0,.282-.055l.035.392a1.155,1.155,0,0,1-.554.127.55.55,0,0,1-.6-.583,2.117,2.117,0,0,1-1.547.609,1.2,1.2,0,0,1-1.375-1.256c0-1.319,1.2-1.565,2.259-1.565.263,0,.428.009.609.017v-.463c0-.71-.2-1.093-1.011-1.093-.737,0-.992.291-1.092.839l-.574-.1c.146-.865.71-1.229,1.7-1.229,1.111,0,1.585.436,1.585,1.592Zm-.6-1.456a4.331,4.331,0,0,0-.574-.027c-.637,0-1.667.046-1.667.991,0,.455.164.856.883.856a1.9,1.9,0,0,0,1.357-.637Z" transform="translate(-67.462 -52.494)" fill="#191919"/>
+    <path id="Pfad_730" data-name="Pfad 730" d="M140.564,59.366h-.61V56.289c0-.71-.246-1.129-.965-1.129a2.658,2.658,0,0,0-1.547.665v3.541h-.609V54.715h.537l.036.582a2.988,2.988,0,0,1,1.747-.673c.992,0,1.41.555,1.41,1.6Z" transform="translate(-66.836 -52.494)" fill="#191919"/>
+    <path id="Pfad_731" data-name="Pfad 731" d="M145.139,59.625h-.518l-.056-.519a2.381,2.381,0,0,1-1.6.627c-1.047,0-1.758-.673-1.758-2.376,0-1.81.911-2.475,1.966-2.475a2.284,2.284,0,0,1,1.357.436V52.753h.609Zm-.609-3.742a2.347,2.347,0,0,0-1.357-.481c-.993,0-1.347.773-1.347,1.984,0,1.274.392,1.847,1.283,1.847a2.064,2.064,0,0,0,1.421-.692Z" transform="translate(-66.231 -52.753)" fill="#191919"/>
+    <path id="Pfad_732" data-name="Pfad 732" d="M79.431,66.623V62.2h.61v4.451c0,1.511-.855,2.248-2.394,2.248-1.638,0-2.3-.8-2.3-2.257V62.2h.609v4.405A1.529,1.529,0,0,0,77.7,68.363C78.811,68.363,79.431,67.935,79.431,66.623Z" transform="translate(-75.345 -51.446)" fill="#191919"/>
+    <path id="Pfad_733" data-name="Pfad 733" d="M84.724,68.566h-.61V65.49c0-.71-.246-1.13-.964-1.13a2.658,2.658,0,0,0-1.548.665v3.541h-.609V63.915h.537l.036.583a2.99,2.99,0,0,1,1.747-.674c.992,0,1.41.555,1.41,1.6Z" transform="translate(-74.564 -51.222)" fill="#191919"/>
+    <path id="Pfad_734" data-name="Pfad 734" d="M85.988,63.03a.483.483,0,1,1,.492-.483A.444.444,0,0,1,85.988,63.03Zm.29,5.779h-.609V64.158h.609Z" transform="translate(-73.94 -51.465)" fill="#191919"/>
+    <path id="Pfad_735" data-name="Pfad 735" d="M88.775,68.555,86.944,63.9h.665l1.52,4.05,1.5-4.05h.61l-1.784,4.651Z" transform="translate(-73.74 -51.211)" fill="#191919"/>
+    <path id="Pfad_736" data-name="Pfad 736" d="M91.16,66.245c0-1.7.984-2.421,2.158-2.421,1.274,0,1.793.865,1.793,1.975-.01.182-.019.373-.046.565H91.807c.036,1.392.683,1.766,1.492,1.766a1.033,1.033,0,0,0,1.175-.882l.573.108a1.675,1.675,0,0,1-1.793,1.32C91.634,68.675,91.16,67.529,91.16,66.245Zm3.314-.372c.018-.956-.347-1.521-1.21-1.521a1.415,1.415,0,0,0-1.448,1.521Z" transform="translate(-73.157 -51.222)" fill="#191919"/>
+    <path id="Pfad_737" data-name="Pfad 737" d="M98.093,64.46A2.12,2.12,0,0,0,96.418,65v3.567h-.61V63.915h.5l.055.645a1.724,1.724,0,0,1,1.583-.736h.146Z" transform="translate(-72.513 -51.222)" fill="#191919"/>
+    <path id="Pfad_738" data-name="Pfad 738" d="M101.632,65.225l-.6.074c-.108-.61-.282-.956-1.046-.956-.809,0-1,.354-1,.756,0,.545.409.673,1.11.846.855.209,1.62.392,1.62,1.4,0,.8-.6,1.328-1.72,1.328-1.019,0-1.667-.392-1.8-1.411l.583-.1a1.079,1.079,0,0,0,1.247.983c.61,0,1.073-.182,1.073-.774,0-.546-.381-.655-1.055-.829-.773-.2-1.684-.318-1.684-1.382,0-.9.773-1.339,1.647-1.339A1.424,1.424,0,0,1,101.632,65.225Z" transform="translate(-72.183 -51.222)" fill="#191919"/>
+    <path id="Pfad_739" data-name="Pfad 739" d="M102.732,63.03a.483.483,0,1,1,.492-.483A.444.444,0,0,1,102.732,63.03Zm.291,5.779h-.61V64.158h.61Z" transform="translate(-71.623 -51.465)" fill="#191919"/>
+    <path id="Pfad_740" data-name="Pfad 740" d="M106.805,68.546a2.158,2.158,0,0,1-1.054.291c-.829,0-1.239-.373-1.239-1.246v-3h-.729v-.51h.729V62.74l.61-.091v1.429h1.3v.51h-1.3v2.922c0,.527.109.828.718.828a1.843,1.843,0,0,0,.829-.237Z" transform="translate(-71.41 -51.384)" fill="#191919"/>
+    <path id="Pfad_741" data-name="Pfad 741" d="M106.594,63.9h.657l1.365,3.932,1.42-3.932h.619c-.574,1.53-1.274,3.368-1.876,4.924-.491,1.328-.828,1.756-1.637,1.756a2.313,2.313,0,0,1-.838-.165l.091-.472a3.045,3.045,0,0,0,.765.137c.436,0,.809-.319,1.146-1.492Z" transform="translate(-71.061 -51.211)" fill="#191919"/>
+    <path id="Pfad_742" data-name="Pfad 742" d="M112.487,66.263c0-1.512.783-2.439,2.213-2.439s2.01.938,2.01,2.321c0,1.53-.609,2.53-2.13,2.53C113.006,68.675,112.487,67.629,112.487,66.263Zm3.587-.064c0-1.383-.519-1.847-1.412-1.847-.919,0-1.547.565-1.547,1.875s.5,1.929,1.511,1.929C115.519,68.156,116.074,67.61,116.074,66.2Z" transform="translate(-70.205 -51.222)" fill="#191919"/>
+    <path id="Pfad_743" data-name="Pfad 743" d="M119.433,62.518a2.21,2.21,0,0,0-.665-.12c-.428,0-.727.191-.727.848v.937h1.319v.51H118.04v4.141h-.61V64.694h-.709v-.51h.709v-.846c0-.965.428-1.457,1.256-1.457a1.937,1.937,0,0,1,.774.146Z" transform="translate(-69.619 -51.491)" fill="#191919"/>
+    <path id="Pfad_744" data-name="Pfad 744" d="M124.324,62.2l2.276,6.59h-.674l-.71-2.121h-2.658l-.709,2.121h-.6l2.24-6.59Zm-.428.5-1.157,3.431h2.3Z" transform="translate(-68.993 -51.446)" fill="#191919"/>
+    <path id="Pfad_745" data-name="Pfad 745" d="M127.031,63.915h.537l.036.565a2.541,2.541,0,0,1,1.675-.656c.973,0,1.684.6,1.684,2.3,0,1.811-.911,2.549-1.966,2.549a2.368,2.368,0,0,1-1.374-.51V70.5h-.592Zm.609,3.686a2.333,2.333,0,0,0,1.357.555c.993,0,1.347-.847,1.347-2.057,0-1.274-.39-1.775-1.219-1.775a2.285,2.285,0,0,0-1.484.692Z" transform="translate(-68.193 -51.222)" fill="#191919"/>
+    <path id="Pfad_746" data-name="Pfad 746" d="M131.647,63.915h.537l.036.565a2.539,2.539,0,0,1,1.675-.656c.973,0,1.684.6,1.684,2.3,0,1.811-.91,2.549-1.966,2.549a2.371,2.371,0,0,1-1.374-.51V70.5h-.592Zm.609,3.686a2.337,2.337,0,0,0,1.357.555c.993,0,1.347-.847,1.347-2.057,0-1.274-.391-1.775-1.219-1.775a2.288,2.288,0,0,0-1.484.692Z" transform="translate(-67.554 -51.222)" fill="#191919"/>
+    <path id="Pfad_747" data-name="Pfad 747" d="M136.873,68.825h-.609V61.953h.609Z" transform="translate(-66.915 -51.481)" fill="#191919"/>
+    <path id="Pfad_748" data-name="Pfad 748" d="M138.538,63.03a.483.483,0,1,1,.493-.483A.444.444,0,0,1,138.538,63.03Zm.291,5.779h-.609V64.158h.609Z" transform="translate(-66.668 -51.465)" fill="#191919"/>
+    <path id="Pfad_749" data-name="Pfad 749" d="M139.855,66.245c0-1.7.985-2.421,2.158-2.421,1.274,0,1.793.865,1.793,1.975-.01.182-.019.373-.046.565H140.5c.035,1.392.682,1.766,1.491,1.766a1.033,1.033,0,0,0,1.175-.882l.573.108a1.674,1.674,0,0,1-1.793,1.32C140.329,68.675,139.855,67.529,139.855,66.245Zm3.314-.372c.018-.956-.346-1.521-1.21-1.521a1.416,1.416,0,0,0-1.448,1.521Z" transform="translate(-66.418 -51.222)" fill="#191919"/>
+    <path id="Pfad_750" data-name="Pfad 750" d="M148.156,68.825h-.518l-.055-.519a2.389,2.389,0,0,1-1.6.628c-1.045,0-1.757-.674-1.757-2.376,0-1.811.911-2.476,1.967-2.476a2.271,2.271,0,0,1,1.356.437V61.953h.61Zm-.61-3.74a2.334,2.334,0,0,0-1.356-.483c-.993,0-1.348.774-1.348,1.984,0,1.274.392,1.847,1.284,1.847a2.068,2.068,0,0,0,1.42-.691Z" transform="translate(-65.814 -51.481)" fill="#191919"/>
+    <path id="Pfad_751" data-name="Pfad 751" d="M151.425,63.817c0,1.9,3.642.874,3.642,3.232,0,1.347-1.066,1.866-2.248,1.866a2.028,2.028,0,0,1-2.339-1.829l.609-.091a1.571,1.571,0,0,0,1.73,1.392c.755,0,1.6-.264,1.6-1.257,0-2-3.641-.8-3.641-3.285,0-1.064.9-1.747,2.148-1.747a1.868,1.868,0,0,1,2.1,1.829l-.582.073c-.127-.636-.383-1.356-1.492-1.356C151.817,62.643,151.425,63.162,151.425,63.817Z" transform="translate(-64.948 -51.461)" fill="#191919"/>
+    <path id="Pfad_752" data-name="Pfad 752" d="M155.367,66.272c0-1.629.82-2.448,2.2-2.448a1.56,1.56,0,0,1,1.693,1.556l-.61.082c-.083-.746-.428-1.11-1.137-1.11-.729,0-1.512.4-1.512,1.838,0,1.53.747,1.939,1.492,1.939a1.1,1.1,0,0,0,1.228-1.028l.574.117a1.7,1.7,0,0,1-1.838,1.457C155.932,68.675,155.367,67.675,155.367,66.272Z" transform="translate(-64.272 -51.222)" fill="#191919"/>
+    <path id="Pfad_753" data-name="Pfad 753" d="M160.275,63.03a.483.483,0,1,1,.492-.483A.444.444,0,0,1,160.275,63.03Zm.291,5.779h-.61V64.158h.61Z" transform="translate(-63.661 -51.465)" fill="#191919"/>
+    <path id="Pfad_754" data-name="Pfad 754" d="M161.591,66.245c0-1.7.984-2.421,2.157-2.421,1.274,0,1.793.865,1.793,1.975-.008.182-.018.373-.046.565h-3.258c.035,1.392.683,1.766,1.492,1.766a1.034,1.034,0,0,0,1.175-.882l.573.108a1.676,1.676,0,0,1-1.793,1.32C162.065,68.675,161.591,67.529,161.591,66.245Zm3.314-.372c.017-.956-.347-1.521-1.211-1.521a1.414,1.414,0,0,0-1.447,1.521Z" transform="translate(-63.41 -51.222)" fill="#191919"/>
+    <path id="Pfad_755" data-name="Pfad 755" d="M169.971,68.566h-.61V65.49c0-.71-.246-1.13-.964-1.13a2.658,2.658,0,0,0-1.548.665v3.541h-.609V63.915h.537l.036.583a2.99,2.99,0,0,1,1.747-.674c.992,0,1.41.555,1.41,1.6Z" transform="translate(-62.767 -51.222)" fill="#191919"/>
+    <path id="Pfad_756" data-name="Pfad 756" d="M170.614,66.272c0-1.629.82-2.448,2.2-2.448a1.56,1.56,0,0,1,1.693,1.556l-.61.082c-.082-.746-.428-1.11-1.137-1.11-.729,0-1.512.4-1.512,1.838,0,1.53.747,1.939,1.492,1.939a1.106,1.106,0,0,0,1.229-1.028l.573.117a1.7,1.7,0,0,1-1.838,1.457C171.179,68.675,170.614,67.675,170.614,66.272Z" transform="translate(-62.162 -51.222)" fill="#191919"/>
+    <path id="Pfad_757" data-name="Pfad 757" d="M174.9,66.245c0-1.7.984-2.421,2.158-2.421,1.274,0,1.793.865,1.793,1.975-.01.182-.019.373-.046.565H175.55c.035,1.392.682,1.766,1.491,1.766a1.033,1.033,0,0,0,1.175-.882l.573.108A1.675,1.675,0,0,1,177,68.675C175.376,68.675,174.9,67.529,174.9,66.245Zm3.314-.372c.018-.956-.346-1.521-1.21-1.521a1.415,1.415,0,0,0-1.448,1.521Z" transform="translate(-61.568 -51.222)" fill="#191919"/>
+    <path id="Pfad_758" data-name="Pfad 758" d="M182.632,65.225l-.6.074c-.108-.61-.282-.956-1.046-.956-.809,0-1,.354-1,.756,0,.545.409.673,1.11.846.855.209,1.62.392,1.62,1.4,0,.8-.6,1.328-1.72,1.328-1.019,0-1.667-.392-1.8-1.411l.583-.1a1.079,1.079,0,0,0,1.247.983c.61,0,1.073-.182,1.073-.774,0-.546-.381-.655-1.055-.829-.773-.2-1.684-.318-1.684-1.382,0-.9.773-1.339,1.647-1.339A1.425,1.425,0,0,1,182.632,65.225Z" transform="translate(-60.975 -51.222)" fill="#191919"/>
+  </g>
+</svg>
diff --git a/docs/images/warning_icon.svg b/docs/images/warning_icon.svg
new file mode 100644
index 0000000..13d24bf
--- /dev/null
+++ b/docs/images/warning_icon.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24" fill="white"><path d="m40-120 440-760 440 760H40Zm138-80h604L480-720 178-200Zm302-40q17 0 28.5-11.5T520-280q0-17-11.5-28.5T480-320q-17 0-28.5 11.5T440-280q0 17 11.5 28.5T480-240Zm-40-120h80v-200h-80v200Zm40-100Z"/></svg>
\ No newline at end of file
diff --git a/docs/main/businessplan.typ b/docs/main/businessplan.typ
new file mode 100644
index 0000000..5562ceb
--- /dev/null
+++ b/docs/main/businessplan.typ
@@ -0,0 +1,90 @@
+#import "../base/businessplan.typ": conf
+#import "../titlepage/businessplan.typ": get_title_page
+
+#let title = "Business tbd"
+#let subtitle = "Busness idea tbd"
+#let type = "Businessplanning"
+#let semester = "semester"
+#let authors = (
+  (
+    name: "Markus Muster",
+    email: "markus.muster@email.ch",
+  ),
+  (
+    name: "Hans Müller",
+    email: "hans.mueller@email.ch",
+  ),
+)
+#let people = (
+  (
+    name: "Test Advisor",
+    email: "test.advisor@email.ch",
+    role: "Advisor"
+  ),
+)
+
+#let version = "0.1.0"
+
+#get_title_page(
+  title: title,
+  subtitle: subtitle,
+  type: type,
+  semester: semester,
+  authors: authors,
+  version: version,
+)
+
+#show: doc => conf(
+  title: title,
+  type: type,
+  semester: semester,
+  authors: authors,
+  version: version,
+  doc
+)
+
+/* 
+Include all subfiles (each file should only contain one chapter)
+
+#include "sections/01_zusammenfassung.typ"
+#pagebreak()
+
+#include "sections/02_ausgangslage.typ"
+#pagebreak()
+
+#include "sections/03_zukunft.typ"
+#pagebreak()
+
+#include "sections/04_produkte_dienstleistungen.typ"
+#pagebreak()
+
+#include "sections/05_zielgebiet.typ"
+#pagebreak()
+
+#include "sections/06_konkurrenz.typ"
+#pagebreak()
+
+#include "sections/07_marketing.typ"
+#pagebreak()
+
+#include "sections/08_leistungserstellung.typ"
+#pagebreak()
+
+#include "sections/09_organisation.typ"
+#pagebreak()
+
+#include "sections/10_chancen_risiken.typ"
+#pagebreak()
+
+#include "sections/11_umsetzungsplan.typ"
+#pagebreak()
+
+#include "sections/12_finanzen.typ"
+#pagebreak()
+
+#set heading(level: 1, numbering: none)
+
+#include "sections/13_anhang.typ"
+#pagebreak()
+
+*/
\ No newline at end of file
diff --git a/docs/main/thesis.typ b/docs/main/thesis.typ
new file mode 100644
index 0000000..db4244b
--- /dev/null
+++ b/docs/main/thesis.typ
@@ -0,0 +1,88 @@
+#import "../base/thesis.typ": *
+#import "../titlepage/thesis.typ": get_title_page
+
+#let title = "Rapid Prototyping in Typescript"
+#let subtitle = "Thesis Subtitle"
+#let type = "Semester Thesis"
+#let semester = "HS 2024"
+#let authors = (
+  (
+    name: "Isaia Brassel",
+    email: "isaia.brassel@ost.ch",
+    matriculation_number: 1111111
+  ),
+  (
+    name: "Silvan Kisseleff",
+    email: "silvan.kisseleff@ost.ch",
+    matriculation_number: 22222222
+  ),
+)
+#let people = (
+  (
+    name: "Olaf Zimmermann",
+    email: "olaf.zimmermann@ost.ch",
+    role: "Advisor"
+  ),
+  (
+    name: "Fritz Bauer",
+    email: "fritz.bauer@ost.ch",
+    role: "Co-Advisor"
+  ),
+  (
+    name: "Jakop Locher",
+    email: "jakobg@locher.org",
+    role: "External Partner"
+  ),
+)
+#let abstract = lorem(100) // {include "path/to/abstract"}
+
+#let mgmt_summary = lorem(100) // {include "path/to/mgmt/summary"}
+
+#let version = "0.1.0"
+
+#get_title_page(
+  title: title,
+  subtitle: subtitle,
+  type: type,
+  semester: semester,
+  authors: authors,
+  people: people,
+  version: version,
+)
+
+#show: doc => conf(
+  title: title,
+  type: type,
+  authors: authors,
+  abstract: abstract,
+  mgmt_summary: mgmt_summary,
+  version: version,
+  doc
+)
+
+
+#create_part(name: "Technical Report ")
+ 
+= Foo
+Bar World Adss
+
+/*  
+#include "technical_report/background.typ"
+#include "technical_report/domain_analysis.typ"
+#include "technical_report/requirements/requirements.typ"
+
+#create_part(name: "Project Documentation")
+
+#include "project_management/project_proposal.typ"
+#include "project_management/project_plan/risk_assessment.typ"
+#include "project_management/project_plan/long_term_plan.typ"
+
+#create_part(name: "Meetings")
+
+#include "project_management/meetings/kick_off_meeting.typ"
+#include "project_management/meetings/meeting_01.typ"
+#include "project_management/meetings/meeting_02.typ"
+#include "project_management/meetings/meeting_03.typ"
+
+#create_part(name: "Appendix")
+*/
\ No newline at end of file
diff --git a/docs/titlepage/businessplan.typ b/docs/titlepage/businessplan.typ
new file mode 100644
index 0000000..adba8ce
--- /dev/null
+++ b/docs/titlepage/businessplan.typ
@@ -0,0 +1,61 @@
+#let get_title_page(
+  title: none,
+  subtitle: none,
+  type: none,
+  semester: none,
+  authors: (),
+  lecturer: none,
+  version: none,
+) = {
+  set align(center)
+
+  set text(font: "Open Sans")
+
+  set page(paper: "a4", margin: (x: 1.5cm, top: 3em), footer: [
+    #set text(size: 12pt)
+    #align(center + horizon, [
+      Datum: #datetime.today().display() / Version: #version
+    ])
+  ])
+
+  set text(size: 30pt)
+
+  image("../images/logo-ost-de.svg", height: 10%)
+
+  v(2em)
+
+  title
+
+  linebreak()
+
+  set text(size: 18pt)
+  subtitle
+
+  linebreak()
+  v(3em)
+
+  set text(size: 16pt)
+  [#type - #semester]
+
+  set text(size: 12pt)
+
+  linebreak()
+  v(5em)
+
+  [*Autoren*]
+  let count = authors.len()
+  let ncols = calc.min(count, 2)
+  grid(columns: (1fr,) * ncols, row-gutter: 24pt, ..authors.map(author => [
+    #author.name \
+    #link("mailto:" + author.email) \
+  ]))
+
+  v(5em)
+  
+  [*Dozent*]
+  linebreak()
+  lecturer.name
+  linebreak()
+  link("mailto:" + lecturer.email)
+
+}
diff --git a/docs/titlepage/thesis.typ b/docs/titlepage/thesis.typ
new file mode 100644
index 0000000..c882ca4
--- /dev/null
+++ b/docs/titlepage/thesis.typ
@@ -0,0 +1,89 @@
+#import "../utils/utils.typ": *
+
+#let get_title_page(
+  title: none,
+  subtitle: none,
+  type: none,
+  semester: none,
+  authors: (),
+  people: (),
+  department: "Computer Science",
+  field: "Software Engineering",
+  version: none,
+) = {
+  set align(center)
+
+  set text(font: "Open Sans", fill: ost_black,)
+  
+  set page(
+    paper: "a4",
+    margin: (x: 1.5cm, top: 3em),
+    footer: [
+      #set text(size: 12pt)
+      #align(center + horizon, [
+          Version: #version \
+          Date: #datetime.today().display()
+        ]
+      )
+    ],
+  )
+  
+  set text(size: 30pt)
+
+
+  image("../images/logo-ost-en.svg", height: 10%)
+  
+  v(2em)
+  
+  title
+
+  linebreak()
+
+  set text(size: 18pt)
+  subtitle
+
+  linebreak()
+  v(1em)
+  
+  [#type - #semester]
+  
+  set text(size: 12pt)
+
+  linebreak()
+  v(3em)
+  
+  [
+    *Department:* #department \
+    *Field of Study:* #field
+  ]
+
+  v(5em)
+
+  [*Authors*]
+  let count = authors.len()
+  let ncols = calc.min(count, 3)
+  grid(
+    columns: (1fr,) * ncols,
+    row-gutter: 24pt,
+    ..authors.map(author => [
+      #author.name \
+      #link("mailto:" + author.email) \
+      Matriculation: #author.matriculation_number \
+    ]),
+  )
+  
+  v(3em)
+
+  [*Involved People*]
+  let count = people.len()
+  let ncols = calc.min(count, 3)
+  grid(
+    columns: (1fr,) * ncols,
+    row-gutter: 24pt,
+    ..people.map(person => [
+      #person.name \
+      #link("mailto:" + person.email) \
+      #person.role \
+    ]),
+  )
+}
diff --git a/docs/utils/boxes.typ b/docs/utils/boxes.typ
new file mode 100644
index 0000000..983ac29
--- /dev/null
+++ b/docs/utils/boxes.typ
@@ -0,0 +1,70 @@
+#import "colors.typ": *
+
+/*
+* Boxes
+*/
+
+#let create_box(
+  title: "",
+  content: "",
+  banner_color: "",
+  content_color: "",
+  icon: "",
+) = {
+  set block(spacing: 0em)
+  set text(
+    size: 14pt,
+    weight: "bold",
+    fill: (rgb("#ffffff")),
+  )
+  block(
+    width: 100%,
+    inset: 5pt,
+    height: auto,
+    fill: banner_color,
+    grid(
+      columns: (20pt, 1fr),
+      rows: 18pt,
+      [#align(left + horizon, image("../images/" + icon, height: 18pt))],
+      [#align(left+horizon, title)],
+    )
+  )
+  set text(
+    size: 11pt,
+    weight: "regular",
+    fill: (ost_black),
+  )
+  block(
+    width: 100%,
+    inset: 8pt,
+    height: auto,
+    fill: content_color,
+    content,
+  )
+}
+
+#let info_box(
+  title: "Information",
+  content: "",
+) = {
+  create_box(
+    title: title,
+    content: content,
+    banner_color: ost_blue,
+    content_color: extra_light_blue,
+    icon: "info_icon.svg",
+  )
+}
+
+#let warn_box(
+  title: "Warning",
+  content: "",
+) = {
+  create_box(
+    title: title,
+    content: content,
+    banner_color: ost_red,
+    content_color: extra_light_red,
+    icon: "warning_icon.svg",
+  )
+}
diff --git a/docs/utils/colors.typ b/docs/utils/colors.typ
new file mode 100644
index 0000000..2326006
--- /dev/null
+++ b/docs/utils/colors.typ
@@ -0,0 +1,32 @@
+/*
+* Color Definition
+*/
+
+// Primary OST Colors
+#let ost_black = rgb("#191919")
+#let ost_blackberry = rgb("#8c195f")
+#let ost_raspberry = rgb("#d72864")
+
+// Secondary OST Colors
+#let ost_light_pink = rgb("#f087b0")
+#let ost_gray = rgb("#878786")
+#let ost_light_gray = rgb("#c6c6c5")
+#let ost_dark_red = rgb("#c32e15")
+#let ost_red = rgb("#e84d0e")
+#let ost_light_red = rgb("#f39a8b")
+#let ost_dark_orange = rgb("#d18e00")
+#let ost_orange = rgb("#fbb900")
+#let ost_light_orange = rgb("fcd6ae")
+#let ost_dark_green = rgb("#007e6b")
+#let ost_green = rgb("#1cae8d")
+#let ost_light_green = rgb("#a7d5c2")
+#let ost_dark_blue = rgb("#0072af")
+#let ost_blue = rgb("#0085cd")
+#let ost_light_blue = rgb("#5fbfed")
+#let ost_dark_purple = rgb("#6b3881")
+#let ost_purple = rgb("#945fa4")
+#let ost_light_purple = rgb("#d0a9d0")
+
+// Extra colors
+#let extra_light_red = rgb("#ffc6c6")
+#let extra_light_blue = rgb("#c5effa")
diff --git a/docs/utils/utils.typ b/docs/utils/utils.typ
new file mode 100644
index 0000000..d2475d8
--- /dev/null
+++ b/docs/utils/utils.typ
@@ -0,0 +1,47 @@
+#import "colors.typ": *
+#import "boxes.typ": *
+
+/*
+* Global Scope Variables
+*/
+
+#let part_counter = counter("part")
+
+/*
+* Helper Functions
+*/
+
+#let get_author_name_list(
+    authors: (),
+) = {
+  let remaining = authors.len()
+  for author in authors {
+    remaining = remaining - 1
+    [
+      #if remaining > 0 [
+        #author.name,
+      ] else [
+        #author.name
+      ]
+    ]
+  }
+}
+
+/*
+* Part
+*/
+
+#let create_part(
+   name: "Test",
+) = {
+   part_counter.step()
+   counter(heading).update(0)
+   set page(header: [], footer: [], margin: auto)
+   set align(center + horizon)
+   set text(size: 22pt, weight: "bold")
+   [
+     Part #part_counter.display("I") \
+     #name
+   ]
+}
+
-- 
GitLab


From 17d811637d9d0eb3fb22aeca6754860c19ee3ccf Mon Sep 17 00:00:00 2001
From: Silvan Kisseleff <silvan.kisseleff@gmail.com>
Date: Wed, 18 Sep 2024 16:08:49 +0200
Subject: [PATCH 2/2] add ci/cd pipeline for docs

---
 .gitlab-ci.yml | 14 ++++++++++++++
 docs/README.md | 13 ++++---------
 2 files changed, 18 insertions(+), 9 deletions(-)
 create mode 100644 .gitlab-ci.yml

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..c9bd453
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,14 @@
+stages:
+  - build
+
+# only builds the docs on tagged commits
+build_doc:
+  stage: build
+  rules:
+    - if: $CI_COMMIT_TAG != null
+  script:
+    - cd docs
+    - typst compile main/thesis.typ out/thesis.pdf --root ./
+  artifacts:
+    paths:
+      - docs/out/thesis.pdf
diff --git a/docs/README.md b/docs/README.md
index 524fab4..48a7873 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -1,13 +1,8 @@
-# Typst Template
+# Documentation
 
-This project is in an early phase of development and not considered "production ready".
-
-Typically this project would be added as a git submodule of a typst project.
-
-To use the template refer to the examples in the **main** directory and make sure to adjust the import paths accordingly.
-
-If you would like to build the sample documents you may use this command:
+This directory holds the documentation of our semester thesis.
+The documentation will be automatically build on our CI/CD pipeline but if you wish to build it locally you can use the following command in a terminal in this current directory.
 
 ```sh
-typst compile main/thesis.typ --root ./
+typst compile main/thesis.typ out/thesis.pdf --root ./
 ```
\ No newline at end of file
-- 
GitLab