/* tame reveal.js */
section {
  min-height: 100vh;
  width: 100vw;
  padding: 0 !important;
}
* {
  line-height: inherit;
}

input {
  font-size: inherit;
}

/* config */
:root {
  --primary: #f8f281;
  --primary-dark: #928c1b;
  --secondary: #bbd6ec;
  --secondary-dark: #3f5d75;
  --secondary-light: #eaf2f9;
  --margin: 0.1;
  &:lang(de) {
    --opening-double-quote: '»';
    --closing-double-quote: '«';
  }
  &:lang(en) {
    --opening-double-quote: '“';
    --closing-double-quote: '”';
  }
}

/* basic layout */
:root {
  --square: 100vw;
  @media (min-aspect-ratio: 1/1) {
    --square: 50vw;
  }
  @media (min-aspect-ratio: 2/1) {
    --square: 100vh;
  }
  overflow: hidden;
}

body {
  font-size: calc(0.035 * var(--square));

  article {
	position: relative;
  }

  .layout-content-and-preview,
  .layout-content-only,
  .layout-preview-only,
  .layout-wide-content {
    display: grid;
    min-height: 100vh;
    max-height: 100vh;
    min-width: 100vw;
    max-width: 100vw;
    overflow: auto;
  }

  .layout-content-and-preview {
    grid-template-rows: var(--square) auto;
    grid-template-columns: auto;
    grid-template-areas:
      "content"
      "preview";
    background: linear-gradient(to bottom,
      var(--background, white) 0%,
      var(--background, white) var(--square),
      var(--secondary) var(--square),
      var(--secondary) var(--square));
    @media (min-aspect-ratio: 1/1) {
      grid-template-rows: auto var(--square) auto;
      grid-template-columns: var(--square) auto;
      grid-template-areas:
        "   .    preview"
        "content preview"
        "   .    preview";
      background: linear-gradient(to right, var(--background, white) 0%, var(--background, white) var(--square), var(--secondary) var(--square), var(--secondary) 100%);
    }
    @media (min-aspect-ratio: 2/1) {
      grid-template-rows: var(--square);
      grid-template-columns: var(--square) auto;
      grid-template-areas:
        "content preview";
    }
  }

  .layout-content-only {
    grid-template-rows: var(--square) auto;
    grid-template-columns: var(--square);
    grid-template-areas:
      "content"
      "   .   ";
    background: linear-gradient(to bottom, var(--background, white) 0%, var(--background, white) var(--square), var(--secondary) var(--square), var(--secondary) 100%);
    @media (min-aspect-ratio: 1/1) {
      grid-template-rows: auto var(--square) auto;
      grid-template-columns: auto var(--square) auto;
      grid-template-areas:
        ".    .    ."
        ". content ."
        ".    .    .";
      background: linear-gradient(to right,
        var(--secondary) 0%,
        var(--secondary) calc((100% - var(--square)) / 2),
        var(--background, white) calc((100% - var(--square)) / 2),
        var(--background, white) calc(100% - (100% - var(--square)) / 2),
        var(--secondary) calc(100% - (100% - var(--square)) / 2),
        var(--secondary) 100%);
    }
  }

  .layout-preview-only {
    grid-template-rows: auto;
    grid-template-columns: auto;
    grid-template-areas: "preview";
    background: var(--secondary);
  }

  .layout-wide-content {
    background: var(--background, white);
    grid-template-rows: min-content auto;
    grid-template-columns: var(--square);
    grid-template-areas:
      "content"
      "   .   ";
    @media (min-aspect-ratio: 1/1) {
      grid-template-rows: auto var(--square) auto;
      grid-template-columns: calc(2 * var(--square));
      grid-template-areas:
        "   .   "
        "content"
        "   .   ";
    }
    @media (min-aspect-ratio: 2/1) {
      grid-template-rows: auto var(--square) auto;
      grid-template-columns: auto calc(2 * var(--square)) auto;
      grid-template-areas:
        ".    .    ."
        ". content ."
        ".    .    .";
      background: linear-gradient(to right,
        var(--secondary) 0%,
        var(--secondary) calc((100% - 2 * var(--square)) / 2),
        var(--background, white) calc((100% - 2 * var(--square)) / 2),
        var(--background, white) calc(100% - (100% - 2 * var(--square)) / 2),
        var(--secondary) calc(100% - (100% - 2 * var(--square)) / 2),
        var(--secondary) 100%);
    }
  }

  .layout-content {
    background: var(--background, white);
    grid-area: content;
    position: relative;

    .chapter-number {
      color: lightgray;
    }

    &.titlepage {
      display: flex;
      flex-direction: column;
      justify-content: flex-end;
      padding-bottom: calc(var(--margin) * var(--square) + 0.5 * 3em);

      &::before {
        content: '';
        position: absolute;
        top: calc(var(--margin) * var(--square));
        right: calc(var(--margin) * var(--square));
        width: calc(.3 * var(--square));
        height: calc(.3 * var(--square));
        background-image: url(../images/logo-fachschaft.jpg);
        background-repeat: no-repeat;
        background-size: contain;
      }
    }
  }

  .layout-preview {
    grid-area: preview;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    background: var(--secondary);
    position: relative;
    figure {
      display: contents;
    }
    img {
      width: auto;
      height: auto;
      max-width: calc(.9 * var(--square));
      max-height: calc(.9 * var(--square));
      box-shadow: .2em .2em .5em 0 rgba(0, 0, 0, .3);
      object-fit: cover;
      margin: calc(.05 * var(--square));
      background-color: white;
      box-sizing: border-box;

      &.thin-padding {
        padding: .5em;
      }

      &.large {
        width: 60%;
        max-width: 100%;
        max-height: 100%;
        box-sizing: border-box;
      }

      &[src$="-crop.svg"] {
        padding: calc(var(--margin) * var(--square));
        object-fit: contain;
        width: calc(0.9 * var(--square));

        &.thin-padding {
          padding: calc(.35 * var(--margin) * var(--square))
        }
      }
      &[src$="-orig.svg"] {
        background: white;
        object-fit: contain;
      }
    }
    figcaption {
      position: absolute;
      background: rgba(0,0,0,.5);
      bottom: 0;
      width: 100%;
      text-align: center;
      color: white;
      padding: .5em;
      box-sizing: border-box;
    }
  }

  .layout-two-columns {
    display: grid;
    min-height: 100vh;
    max-height: 100vh;
    min-width: 100vw;
    max-width: 100vw;
    overflow: auto;
    grid-template-rows: auto auto auto 1fr;
    grid-template-columns: var(--square);
    grid-template-areas:
      "title"
      "column1"
      "column2"
      ".";
    background: var(--secondary);
    @media (min-aspect-ratio: 1/1) {
      grid-template-rows: auto calc(0.18 * var(--square)) calc(0.82 * var(--square)) auto;
      grid-template-columns: var(--square) var(--square);
      grid-template-areas:
        "   .       .   "
        " title   title "
        "column1 column2"
        "   .       .   ";
    }
    @media (min-aspect-ratio: 2/1) {
      grid-template-rows: calc(0.18 * var(--square)) calc(0.82 * var(--square));
      grid-template-columns: auto var(--square) var(--square) auto;
      grid-template-areas:
        ".  title   title  ."
        ". column1 column2 .";
    }

    .layout-title {
      grid-area: title;
      background: var(--secondary);
    }

    .layout-column-one {
      grid-area: column1;
      background: var(--background, white);
    }

    .layout-column-two {
      grid-area: column2;
      background: var(--background, white);
    }
  }

  .layout-two-previews {
    display: grid;
    min-height: 100vh;
    max-height: 100vh;
    min-width: 100vw;
    max-width: 100vw;
    overflow: auto;
    grid-template-rows: auto auto;
    grid-template-columns: auto;
    background: var(--secondary);
    @media (min-aspect-ratio: 1/1) {
      grid-template-rows: 100vh;
      grid-template-columns: 50vw 50vw;
      grid-template-areas:
        "preview preview";
    }
    .layout-preview {
      grid-area: auto;
    }
  }
}

/* content layout */

@font-face {
  font-family: 'Fira Sans';
  src: url('../lib/font/fira-sans/FiraSans-Regular.ttf');
  font-weight: 400;
}
@font-face {
  font-family: 'Fira Sans';
  src: url('../lib/font/fira-sans/FiraSans-Bold.ttf');
  font-weight: 700;
}
@font-face {
  font-family: 'Fira Code';
  src: url('../lib/font/fira-code/FiraCode-Regular.otf');
  font-weight: 400;
}
@font-face {
  font-family: 'Fira Code';
  src: url('../lib/font/fira-code/FiraCode-Bold.otf');
  font-weight: 700;
}
@font-face {
  font-family: 'EB Garamond';
  src: url('../lib/font/eb-garamond/EBGaramond-Regular.ttf');
  font-weight: 400;
}

body {
  font-family: 'Fira Sans';
  margin: 0;
  line-height: 1.2em;
}

.layout-content-and-preview,
.layout-content-only,
.layout-wide-content {
  .layout-content {
    overflow: visible;
    padding: calc(var(--margin) * var(--square));

    *:first-child {
      margin-top: 0;
    }

    .layout-title {
      padding: calc(0.3 * var(--margin) * var(--square)) 0;
      line-height: 1.15em;

      h2 {
        margin: 0;
        line-height: 1.15em;
      }
    }

    ul, ol {
      list-style-type: none;
      padding-left: 0;
      position: relative;
      li::before {
        content: '▪';
        color: var(--secondary);
        position: absolute;
        left: calc(-0.33 * var(--margin) * var(--square));
      }
      ul, ol {
        margin-left: calc(0.33 * var(--margin) * var(--square));
      }
    }
    ol {
      counter-reset: ol-counter;
      li::before {
        counter-increment: ol-counter;
        content: counter(ol-counter) '.';
        color: var(--secondary-dark);
        left: calc(-0.36 * var(--margin) * var(--square));
      }
    }

    pre {
      margin-left: calc(-1 * var(--margin) * var(--square));
      padding-left: calc(var(--margin) * var(--square));
      line-height: 1.2em;
      position: relative;
      overflow: hidden;
      &::before {
        content: attr(data-sourcefile);
        position: absolute;
        text-align: right;
        color: var(--secondary);
        top: .85em;
        width: 100%;
        left: calc(-1 * var(--square) + 1.2 * var(--margin) * var(--square));
        transform-origin: top right;
        transform: rotate(-90deg);
      }
      code {
        padding: .3em 0;
      }
    }

    code {
      font-size: 0.9em;
      font-family: 'Fira Code';
    }
  }
}

.layout-two-columns {
  .layout-title {
    padding: calc(0.3 * var(--margin) * var(--square)) calc(var(--margin) * var(--square));
    h2 {
      line-height: 1.15em;
    }
  }

  .layout-column-one,
  .layout-column-two {
    padding: calc(var(--margin) * var(--square));
    padding-top: calc(var(--margin) * var(--square));

    *:first-child {
      margin-top: 0;
    }

    ul {
      list-style-type: none;
      padding-left: 0;
      position: relative;
      li::before {
        content: '▪';
        color: var(--secondary);
        position: absolute;
        left: calc(-0.33 * var(--margin) * var(--square));
      }
      ul {
        margin-left: calc(0.33 * var(--margin) * var(--square));
      }
    }

    pre {
      margin: 0 calc(-1 * var(--margin) * var(--square));
      line-height: 1.2em;
      position: relative;
      overflow: hidden;
      &::before {
        content: attr(data-sourcefile);
        position: absolute;
        text-align: right;
        color: var(--secondary);
        top: .85em;
        width: 100%;
        left: calc(-1 * var(--square) + 1.2 * var(--margin) * var(--square));
        transform-origin: top right;
        transform: rotate(-90deg);
      }
      code {
        padding: .3em calc(var(--margin) * var(--square));
      }
    }

    code {
      font-size: 0.9em;
      font-family: 'Fira Code';
    }
  }
}

.layout.layout-chapter-heading {
  height: 100vh;
  width: 100vw;
  position: relative;

  .layout-title {
    position: absolute;
    left: 2vw;
    width: calc(100vw - 4vw);
    text-align: center;
    bottom: calc(38.2% - .5em);
  }
}

h1 {
  font-size: 300%;
  max-width: var(--square);
}

:not(.titlepage) > h1 {
  position: absolute;
  bottom: 0;
  left: 0;
  line-height: 115%;
  vertical-align: bottom;
  padding: 0 calc(var(--margin) * var(--square)) .5em;
}

.titlepage > h1 {
  line-height: 100%;
  margin-bottom: 3rem;
}

h2 {
  line-height: 1.2;
}

p[data-category]::before,
h2[data-category]::before,
h3[data-category]::before {
  content: attr(data-category);
  font-size: .7em;
  font-variant: small-caps;
  text-transform: lowercase;
  background: black;
  color: var(--background, white);
  padding: .1em .5em;
  display: inline-block;
  vertical-align: baseline;
  letter-spacing: .1em;
  position: relative;
  margin-left: calc(-1 * var(--margin) * var(--square));
  padding-left: calc(var(--margin) * var(--square));
  margin-right: .5em;
}
h2[data-category=Aufgabe]::before,
h2[data-category=Task]::before {
  content: attr(data-category) ' ' attr(data-task);
}
.layout-content-only h2[data-category=Aufgabe]::after,
.layout-content-only h2[data-category=Task]::after,
.layout-wide-content h2[data-category=Aufgabe]::after,
.layout-wide-content h2[data-category=Task]::after {
  content: attr(data-task);
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  text-indent: calc(-.16 * var(--square));
  font-size: calc(1.2 * var(--square));
  overflow: hidden;
  text-align: right;
  white-space: nowrap;
  direction: rtl;
  word-spacing: 1000%;
  opacity: .2;
  @media (min-aspect-ratio: 1/1) and (max-aspect-ratio: 2/1) {
    --versatz: calc((100vh - var(--square)) / 2);
    top: var(--versatz);
    bottom: calc(-1 * var(--versatz));
  }
}


.layout-content-only h2.task-without-number::after,
.layout-content-only h2.task-without-number::after,
.layout-wide-content h2.task-without-number::after,
.layout-wide-content h2.task-without-number::after {
  display: none;
}

img {
  width: auto;
  max-width: 100%;
}

table {
  font-size: inherit;
  width: calc(var(--square) - var(--margin) * var(--square));
  margin-left: calc(-1 * var(--margin) * var(--square));
  border-spacing: 0;
  tr:nth-child(2n-1) {
    background: var(--secondary);
  }
  tr>*:first-child {
    padding-left: calc(var(--margin) * var(--square));
  }
  th, td {
    text-align: left;
    vertical-align: top;
    padding: .3em;
    padding-left: 0;
  }
  th:last-child, td:last-child {
    padding-right: .1em;
  }
}

.layout-content-only table {
  border-spacing: 0;
  margin-left: 0;
  width: 100%;
  box-sizing: border-box;

  tr>*:first-child {
    padding-left: .3rem;
    padding-right: .3rem;
  }
}

.box /*, blockquote*/ {
  margin-left: calc(-1 * var(--margin) * var(--square));
  padding: .8em .1em .1em calc(var(--margin) * var(--square));
}

.box.warning {
  background: var(--primary);
}



blockquote {
  color: var(--secondary-dark);
  position: relative;
  padding-bottom: 1.8em;
  margin-left: 0;
  margin-right: 0;
  p:first-of-type { /* probably bungle, but works for one <p> inside <blockquote> */
    display: contents;
    &::after {
      content: '\200a' var(--closing-double-quote);
    }
  }
  &::before {
    content: var(--opening-double-quote) '\200a';
    color: var(--secondary-dark);
    position: absolute;
    display: inline-block;
    right: 100%;
  }
  cite {
    position: absolute;
    bottom: 0.6em;
    left: calc(0.4 * var(--square));
    width: calc(0.4 * var(--square));
    &::before {
      content: '— '
    }
  }
}

.layout-content {
  figure {
    margin: 0 1em 1em 0;
  }
}

.bubble {
  display: inline-block;
  position: absolute;
  margin-top: -2em;
  margin-left: -3.8em;
  width: 6em;
  border: .1em solid var(--primary-dark);
  background: var(--primary);
  text-align: center;
  border-radius: 1em;
  &::before {
    content: '';
    width: 0;
    height: 0;
    position: absolute;
    border: .5em solid transparent;
    border-top-color: var(--primary-dark);
    bottom: -1em;
    left: calc(50% - .5em);
  }
  &::after {
    content: '';
    width: 0;
    height: 0;
    position: absolute;
    border: .5em solid transparent;
    border-top-color: var(--primary);
    bottom: -0.87em;
    left: calc(50% - .5em);
  }
}

section>h1, section>h2, section>h3, section>p, section>ul {
  background: transparent
}

/*
 * Keyboard Shortcut Styling
 * =========================
 */
kbd {
  font-family: "Fira Code", monospace;
  font-size: 65%;
  display: inline-block;
  border: 1px solid dimgray;
  border-width: 1px 5px 5px 1px;
  padding: .2rem .5rem;
}

/*
 * Emoji Fonts
 * ============
 */
@font-face {
  font-family: 'Twemoji';
  src: url('../lib/font/twemoji/TwitterColorEmoji-SVGinOT.ttf');
}

.emoji {
  font-family: "Twemoji";
}

/*
 * Links
 * ============
 */
p, li, h2, td, figcaption, div {
  a {
    &:link,
    &:hover,
    &:active,
    &:visited {
      text-decoration: none;
      color: var(--secondary-dark);
      font-weight: bold;
      position: relative;
      z-index: 1;

      &::before {
        content: '';
        position: absolute;
        width: 102%;
        height: 0;
        background-color: var(--secondary-light);
        z-index: -1;
        bottom: -5%;
        left: -1%;
        transition: .2s height ease;
      }
    }

    &:hover::before {
      height: 110%;

    }
  }
}

figcaption a:not(.dark-font) {
  &:link,
  &:hover,
  &:active,
  &:visited {
    color: var(--background, white);

    &::before {
      background-color: var(--secondary-dark);
    }
  }
}


/*
 * Code Listings
 * =============
 */
pre.small-text {
  font-size: 80%;
}

pre.scroll-one-half {
  max-height: calc(.5 * var(--square));
  overflow: auto !important;
}

/*
 * Fragments
 * =========
 */

.fragment {
  opacity: 0;
  transition: .3s opacity ease-in-out;
}

.fragment.visible {
  opacity: 1;
}

/*
 * Topic List
 * ==========
 */
.topic-list {
  box-shadow: 0 0px 50px rgba(0, 0, 0, 0.3);
  z-index: 500;

  .topic-list-search {
    display: block;
    width: 100%;
    border: none;
    padding: .5rem;
    margin-bottom: 1rem;
    border-bottom: 1px solid var(--secondary);
    text-align: center;
  }

  .topic-link {
    font-weight: normal;

    &.active-topic-link {
      font-weight: bold;
    }

    &.not-matching-search-terms {
      opacity: .2;
    }
  }
}

/* 
 * Help Menu
 * ==========
 */

#help-menu-wrapper {
  display: none;
  max-width: 90vw;
  width: 800px;
  height: 80vh;
  box-sizing: border-box;
  padding: 2rem;
  position: fixed;
  left: 50%;
  top: 50%;
  transform: translateX(-50%) translateY(-50%);
  z-index: 500;
  background: var(--background, white);
  box-shadow: 0 0px 50px rgba(0, 0, 0, 0.3);
  opacity: 0;
  transition: .2s opacity ease-in-out;
}

#help-menu-checkbox:checked ~ #help-menu-wrapper {
  opacity: 1;
  display: block;
}

#help-menu-checkbox {
  position: fixed;
  right: 150vw;
}

#help-menu-toggle {
  position: fixed;
  right: 1rem;
  bottom: 1rem;
  width: 3rem;
  height: 3rem;
  color: white;
  background-color: rgba(0, 0, 0, .3);
  transition: .1s background-color ease-in-out;
  display: flex;
  justify-content: center;
  align-items: center;

  &:hover {
    background-color: rgba(0, 0, 0, .5);
  }
}


/* 
 * Extra Content
 * ==============
 */

.extra-content {
  --background: var(--secondary-light)
}
