﻿@charset "utf-8";
/* CSS Document */


/*
  fonts
  reset
  background video
  scenes (viewport/track/scene)
  challenge overlay
  general
  borders
  rain
  film grain
  shade
  countdown
  menu
  top panel
  newsletter form
  social icons
  contact
  site loader
*/


/* fonts (selfhosted, siehe css/fonts/) */
@font-face {
    font-family: 'LeagueGothicRegular';
    src: url('fonts/leaguegothic-regular/leaguegothic-regular-webfont.woff') format('woff'),
         url('fonts/leaguegothic-regular/leaguegothic-regular-webfont.ttf') format('truetype');
    font-weight: normal;
    font-style: normal;
    font-display: swap;
}

@font-face {
    font-family: 'BigNoodleTitlingOblique';
    src: url('fonts/bignoodletitling-oblique/bignoodletitling-oblique-webfont.woff') format('woff'),
         url('fonts/bignoodletitling-oblique/bignoodletitling-oblique-webfont.ttf') format('truetype');
    font-weight: normal;
    font-style: normal;
    font-display: swap;
}


/* reset */
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}

html, body {
height: 100%;
}

body {
line-height: 1;
}

article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {
display: block;
}

ol, ul {
list-style: none;
}

blockquote, q {
quotes: none;
}

blockquote:before, blockquote:after, q:before, q:after {
content: '';
content: none;
}

table {
border-collapse: collapse;
border-spacing: 0;
}

/* keep focus invisible for mouse users, but never suppress it for keyboard
   navigation -- the challenge overlay relies on a visible focus outline */
*:focus:not(:focus-visible) {
outline: none;
}

*:focus-visible {
outline: 2px solid #fff;
outline-offset: 2px;
}


/* background video */
img { border: none; }

.bg-video__poster,
.bg-video__poster-img,
.bg-video__clip {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
}

.bg-video__poster {
display: block;
z-index: 0;
}

.bg-video__clip {
z-index: 1;
}


/* scenes (viewport/track/scene) */
:root {
--scene-transition-duration: 900ms;
--scene-transition-ease: cubic-bezier(0.77, 0, 0.175, 1);
}

#viewport {
position: fixed;
inset: 0;
overflow: hidden;
/* NOT a negative z-index: empirically, a deeply-negative z-index on a
   position:fixed element got skipped entirely during hit-testing in Chrome
   (elementFromPoint fell through to <body>) even though it rendered and
   reported correct computed styles/rect -- see the DevTools investigation
   in this file's history. Nothing needs #viewport to be negative anymore
   (video+text now share it); the chrome UI (menu 1002, subscribe 999+,
   social/contact 1) already all use explicit positive z-index and paint
   above it regardless of #viewport's own value. */
z-index: 0;
}

/* Each .scene stacks, low to high: .scene__bg (video/picture, z-index 0),
   .rain/.film-grain/.borders/.shade (z-index 1), .scene__content (z-index 2).
   These have to be direct children of .scene (not shared/global elements
   outside #track) because #track always has a live `transform` (the paging
   animation) and is therefore its own stacking context -- a shared layer
   outside #track could never be reliably ordered between a scene's video and
   its text, only "entirely above" or "entirely below" the whole scene. */

/* #track only ever gets a transform (never its own height/overflow) -- if it
   clips its own content, the clip window moves along with the content and
   everything after the first scene change is permanently blank. */
#track {
transition: transform var(--scene-transition-duration) var(--scene-transition-ease);
will-change: transform;
}

.scene {
position: relative;
width: 100%;
height: 100vh;
/* mobile browsers size 100vh to the "large" viewport (address bar hidden);
   with the bar shown, .scene__intro's bottom-anchored text ends up lower
   than the actually-visible screen and gets covered by the fixed footer
   chrome (menu/imprint). 100dvh tracks the real, currently-visible viewport
   -- kept after the 100vh fallback so unsupporting browsers still get a
   full-height scene. */
height: 100dvh;
overflow: hidden;
}

.scene__bg {
position: absolute;
inset: 0;
z-index: 0;
background: #000;
}

.scene__bg::after {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(180deg, rgba(0,0,0,.25) 0%, rgba(0,0,0,.55) 100%);
}

.scene__placeholder {
position: absolute;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(135deg, #1f2937, #0f172a);
color: rgba(255,255,255,.5);
font-size: 13px;
letter-spacing: .1em;
text-transform: uppercase;
}

.scene__content {
position: relative;
z-index: 2;
height: 100%;
}

.scene__intro {
opacity: 0;
transform: translateY(30px);
transition: opacity .8s ease, transform .8s ease;
}

.scene.is-active .scene__intro {
opacity: 1;
transform: none;
}

@media (prefers-reduced-motion: reduce) {
  :root { --scene-transition-duration: 1ms; }
  .scene__intro { transition-duration: 1ms !important; }
}

@media (max-width: 767px) {
  /* fewer simultaneous animations on small viewports */
  .scene__intro { transition-duration: .3s; }
}

.scene__status {
font-family: 'LeagueGothicRegular';
font-size: 21px;
color: #fff;
text-transform: uppercase;
margin-top: 10px;
}


/* general */
body {
font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 12px;
line-height: 1.5;
font-style: normal;
font-weight: normal;
text-align: left;
color: #fff;
background: #000;
 -webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
-webkit-text-size-adjust: 100%;
   -moz-text-size-adjust: 100%;
    -ms-text-size-adjust: 100%;
width: 100%;
height: 100%;
overflow: hidden;
}

.scene__intro {
position: absolute;
width: 80%;
/* leaves clearance for the fixed corner chrome (social icons top-left,
   subscribe top-right, mail bottom-left, menu bottom-right) at any viewport
   size -- see the responsive rules in media.css */
max-width: 640px;
left: 100px;
bottom: 86px;
}

.scene__author,
.scene__title,
.scene__countdown-wrapper {
font-family: 'BigNoodleTitlingOblique';
font-size: 23px;
line-height: 1.5;
font-style: normal;
font-weight: 400;
letter-spacing: normal;
color: #fff;
text-shadow: 1px 1px 2px #000;
}

.scene__author {
width: auto;
margin: 0;
padding: 0;
color: #a81c1b;
}

.scene__title {
font-family: 'LeagueGothicRegular';
font-size: 195px;
font-weight: normal;
font-style: normal;
letter-spacing: normal;
line-height: 1;
 -webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
-webkit-text-size-adjust: 100%;
   -moz-text-size-adjust: 100%;
    -ms-text-size-adjust: 100%;
color: #fff;
margin: 1px 0 1px -7px;
padding: 0;
text-transform: none;
}

a {
color: #a81c1b;
text-decoration: none;
}

a:hover {
color: #fff;
text-decoration: none;
}

p a {
color: #a81c1b;
font-weight: bold;
text-decoration: none;
}

p a:hover {
color: #000;
text-decoration: none;
transition: color 0.5s;
}

::-moz-selection { background: #555; color: #fff;      /* Firefox */ }
     ::selection { background: #555; color: #fff;      /* Safari */  }


/* challenge overlay -- a self-contained full-viewport "app" that slides in from
   the left over the scene (Instagram-Stories/visionOS-demo style), not a dialog.
   Internally it is a horizontal-only swipe viewport (.overlay-track/.overlay-slide),
   never vertically scrollable -- long copy must be written to fit, not scroll. */
:root {
--overlay-duration: 300ms;
--overlay-ease: cubic-bezier(.16, 1, .3, 1);
}

.overlay {
position: fixed;
inset: 0;
/* belt-and-suspenders alongside the .scene fix above: an explicit height
   wins over the implicit height inset:0 would otherwise derive, so this
   still tracks the visible viewport even if a browser's fixed-position
   containing block doesn't already account for a shown/hidden address bar. */
height: 100vh;
height: 100dvh;
z-index: 1001;
overflow: hidden;
background: #000;
color: #fff;
transform: translateX(-100%);
transition: transform var(--overlay-duration) var(--overlay-ease);
}

.overlay.is-open {
transform: translateX(0);
}

.overlay[hidden] {
display: none;
}

.overlay-track {
position: relative;
height: 100%;
display: flex;
touch-action: none;
transition: transform var(--overlay-duration) var(--overlay-ease), opacity 150ms ease;
}

.overlay-track.is-dragging,
.overlay-track.is-instant {
transition: none;
}

.overlay-slide {
flex: 0 0 100vw;
width: 100vw;
height: 100%;
position: relative;
overflow: hidden;
background: #000;
/* .slide-stats puts its own padding directly on this element (the other
   page types only pad an inner wrapper) -- without border-box, that
   padding was added on top of the explicit 100vw, inflating the slide
   past the viewport and shifting its (correctly centered-within-itself)
   content visibly off to the right. */
box-sizing: border-box;
}

/* keeps the bottom dot indicator legible over any slide content (bright
   photo, video, or plain black) -- without this, low-opacity bars on a
   pale placeholder image are effectively invisible */
.overlay-scrim {
position: absolute;
left: 0;
right: 0;
bottom: 0;
height: 140px;
z-index: 1;
background: linear-gradient(180deg, rgba(0,0,0,0) 0%, rgba(0,0,0,.65) 100%);
pointer-events: none;
}

/* page indicator: minimal segmented bars, bottom-center, no numbers/labels */
.overlay-dots {
position: absolute;
left: 0;
right: 0;
bottom: 24px;
z-index: 2;
display: flex;
justify-content: center;
gap: 6px;
pointer-events: none;
}

.overlay-dot {
width: 28px;
height: 3px;
border-radius: 2px;
background: rgba(255, 255, 255, .3);
transition: background-color .2s ease;
}

.overlay-dot.is-active {
background: #fff;
}

.overlay-close {
position: absolute;
top: 20px;
right: 20px;
z-index: 3;
width: 44px;
height: 44px;
min-width: 44px;
min-height: 44px;
border-radius: 50%;
border: 1px solid rgba(255, 255, 255, .6);
background: rgba(0, 0, 0, .35);
color: #fff;
cursor: pointer;
}

.overlay-close:hover {
background: rgba(0, 0, 0, .6);
border-color: #fff;
}

.overlay-close::before,
.overlay-close::after {
content: "";
position: absolute;
top: 50%;
left: 50%;
width: 16px;
height: 2px;
background: currentColor;
border-radius: 1px;
}

.overlay-close::before {
transform: translate(-50%, -50%) rotate(45deg);
}

.overlay-close::after {
transform: translate(-50%, -50%) rotate(-45deg);
}

/* -- slide types -- */

.overlay-slide__media,
.overlay-slide__media video,
.overlay-slide__media img {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
object-fit: cover;
}

.overlay-slide__caption {
position: absolute;
left: 24px;
bottom: 24px;
z-index: 1;
max-width: 60%;
font-size: 13px;
letter-spacing: .04em;
text-shadow: 1px 1px 3px rgba(0, 0, 0, .8);
}

/* hero-video / hero-image: fullbleed media, optional caption, nothing else */
.slide-hero-video .overlay-slide__media::after,
.slide-hero-image .overlay-slide__media::after {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(180deg, rgba(0,0,0,0) 60%, rgba(0,0,0,.55) 100%);
}

/* editorial: big headline + text, optional image filling the rest of the frame */
.slide-editorial {
display: flex;
flex-direction: column;
height: 100%;
}

.slide-editorial .overlay-slide__image {
position: relative;
flex: 0 0 42%;
overflow: hidden;
}

.slide-editorial .overlay-slide__image img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}

.slide-editorial .overlay-slide__body {
flex: 1 1 auto;
min-height: 0;
overflow: hidden;
padding: 40px 80px;
display: flex;
flex-direction: column;
justify-content: center;
}

.overlay-slide__eyebrow {
font-family: 'BigNoodleTitlingOblique';
font-size: 21px;
color: #a81c1b;
text-transform: uppercase;
margin-bottom: 10px;
}

.overlay-slide__title {
font-family: 'LeagueGothicRegular';
font-size: 64px;
line-height: 1;
text-transform: uppercase;
margin-bottom: 16px;
}

.overlay-slide__text {
max-width: 640px;
line-height: 1.6;
font-size: 15px;
}

.overlay-slide__text p {
margin: 0 0 12px;
}

.overlay-slide__text strong {
font-weight: 700;
}

/* split: desktop = one page, 2-col grid; mobile = built as two separate slides
   re-using .split-media/.split-text standalone (see js/overlay.js) */
.slide-split {
display: grid;
grid-template-columns: 1fr 1fr;
height: 100%;
}

.split-media {
position: relative;
height: 100%;
overflow: hidden;
}

.split-media img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}

.split-text {
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
padding: 60px 70px;
overflow: hidden;
}

/* log-entry: desktop = one page, list | media grid; mobile = two slides,
   re-using .log-entry-list/.log-entry-media standalone */
.slide-log-entry {
display: grid;
grid-template-columns: 1fr 1fr;
height: 100%;
}

.log-entry-list {
height: 100%;
overflow: hidden;
padding: 60px 70px;
display: flex;
flex-direction: column;
justify-content: center;
}

.log-entry-list ul {
margin-top: 16px;
}

.log-entry-list li {
position: relative;
padding-left: 18px;
margin-bottom: 10px;
line-height: 1.5;
font-size: 15px;
}

.log-entry-list li::before {
content: '';
position: absolute;
left: 0;
top: 8px;
width: 8px;
height: 8px;
background: #a81c1b;
}

.log-entry-media {
height: 100%;
overflow: hidden;
padding: 40px;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 12px;
align-content: center;
}

.log-entry-media img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
background: #111;
}

/* stats: big numbers, no chart library -- large value + label tiles */
.slide-stats {
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 40px;
text-align: center;
}

.slide-stats .overlay-slide__title {
font-size: 40px;
margin-bottom: 30px;
}

.overlay-stats-grid {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 50px;
}

.overlay-stat {
min-width: 120px;
}

.overlay-stat__value {
font-family: 'LeagueGothicRegular';
font-size: 90px;
line-height: 1;
color: #fff;
}

.overlay-stat__label {
margin-top: 6px;
font-size: 13px;
letter-spacing: .08em;
text-transform: uppercase;
color: rgba(255, 255, 255, .7);
}

.overlay-slide__note {
margin-top: 30px;
font-size: 14px;
color: rgba(255, 255, 255, .7);
}

@media (prefers-reduced-motion: reduce) {
  :root { --overlay-duration: 1ms; }
}



/* borders */
.borders {
position: absolute;
inset: 0;
border: 50px solid rgba(0, 0, 0, 0.5);
z-index: 1;
pointer-events: none;
}

.borders, .borders:after, .borders::before {
-webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
   -moz-box-sizing: border-box; /* Firefox, other Gecko */
        box-sizing: border-box; /* Opera/IE 8+ */
}


/* rain */
.rain {
position: absolute;
inset: 0;
overflow: hidden;
background: url(../assets/images/rain.gif) repeat top left;
        opacity: 0.4;
   -moz-opacity: 0.4;
-webkit-opacity: 0.4;
filter: alpha(opacity=40);
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)";
z-index: 1;
pointer-events: none;
}


/* film grain */
.film-grain {
position: absolute;
inset: 0;
overflow: hidden;
background: url(../assets/images/film-grain.gif) repeat top left;
        opacity: 0.1;
   -moz-opacity: 0.1;
-webkit-opacity: 0.1;
filter: alpha(opacity=10);
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)";
z-index: 1;
pointer-events: none;
}


/* shade */
.shade {
position: absolute;
inset: 0;
overflow: hidden;
z-index: 1;
pointer-events: none;
/* IE9 SVG, needs conditional override of 'filter' to 'none' */
background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwLjY1Ii8+CiAgICA8c3RvcCBvZmZzZXQ9IjUwJSIgc3RvcC1jb2xvcj0iIzAwMDAwMCIgc3RvcC1vcGFjaXR5PSIwIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiIHN0b3Atb3BhY2l0eT0iMCIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+);
background: -moz-linear-gradient(left,  rgba(0,0,0,0.65) 0%, rgba(0,0,0,0) 50%, rgba(0,0,0,0) 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, right top, color-stop(0%,rgba(0,0,0,0.65)), color-stop(50%,rgba(0,0,0,0)), color-stop(100%,rgba(0,0,0,0))); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(left,  rgba(0,0,0,0.65) 0%,rgba(0,0,0,0) 50%,rgba(0,0,0,0) 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(left,  rgba(0,0,0,0.65) 0%,rgba(0,0,0,0) 50%,rgba(0,0,0,0) 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(left,  rgba(0,0,0,0.65) 0%,rgba(0,0,0,0) 50%,rgba(0,0,0,0) 100%); /* IE10+ */
background: linear-gradient(to right,  rgba(0,0,0,0.65) 0%,rgba(0,0,0,0) 50%,rgba(0,0,0,0) 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#a6000000', endColorstr='#00000000',GradientType=1 ); /* IE6-8 */
}


/* countdown */
.scene__countdown-wrapper {
position: relative;
display: inline;
margin: 0;
padding: 0;
float: none;
}

.scene__countdown {
margin: 0;
padding: 0;
}

ul.scene__countdown li {
display: inline-block;
width: 80px;
text-align: left;
}

ul.scene__countdown li span {
font-family: 'LeagueGothicRegular';
font-size: 40px;
font-style: normal;
font-weight: normal;
color: #fff;
height: 40px;
line-height: 1;
margin: 0;
padding: 0;
position: relative;
}

ul.scene__countdown li span::before {
content: '';
width: 100%;
height: 1px;
position: absolute;
}

ul.scene__countdown li p.timeRefDays,
ul.scene__countdown li p.timeRefHours,
ul.scene__countdown li p.timeRefMinutes,
ul.scene__countdown li p.timeRefSeconds {
font-family: 'LeagueGothicRegular';
color: #fff;
text-transform: uppercase;
font-size: 21px;
margin: -4px 0 0 0;
padding: 0 0 5px 0;
}

ul.scene__countdown li p.timeRefSeconds {
color: #a81c1b;
}


/* menu */
.menu-mobile button {
font: inherit;
border: 0;
cursor: pointer;
box-sizing: content-box;
}

.menu-mobile button.menu-trigger {
background: url(../assets/images/menu-mobile-trigger.png);
background-position: 0 0;
width: 50px;
height: 25px;
margin: 0;
padding: 0;
-webkit-transition: background-position 0.3s ease;
   -moz-transition: background-position 0.3s ease;
     -o-transition: background-position 0.3s ease;
        transition: background-position 0.3s ease;
text-indent: -10000px;
}

.menu-mobile button.menu-trigger:hover,
.menu-mobile.is-open button.menu-trigger {
background-position: 50px 0;
}

.menu-mobile {
font-family: 'LeagueGothicRegular';
font-size: 21px;
font-style: normal;
font-weight: normal;
 -webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
-webkit-text-size-adjust: 100%;
   -moz-text-size-adjust: 100%;
    -ms-text-size-adjust: 100%;
width: auto;
bottom: 5px;
right: 20px;
padding: 0;
position: fixed;
z-index: 1002;
}

/* imprint has no Challenge/Log/Result menu of its own -- showing this menu
   over it let you pick one of those and land on the challenge that happens
   to be loaded in the background, which isn't meaningful navigation there */
.menu-mobile.is-hidden {
display: none;
}

.menu-mobile button.menu {
color: #000;
font-weight: normal;
background: #fff;
}

.menu-mobile button.menu:hover,
.menu-mobile button.menu.active {
color: #fff;
background: #000;
}

.menu-mobile ul, li {
margin: 0;
padding: 0;
}

.menu-mobile .lifting {
margin: 0 0 7px 0;
height: 20px;
}

.menu-mobile .lifting-first {
margin: 0 0 12px 0;
height: 20px;
}

.menu-mobile li {
position: relative;
margin: 7px 0 0 0;
padding: 0 0 10px 0;
background: none;
float: right;
text-transform: uppercase;
height: 20px;
}

.menu-mobile li button.menu {
padding: 0 7px 7px 7px;
text-decoration: none;
-webkit-transition: 0.2s ease-in;
   -moz-transition: 0.2s ease-in;
        transition: 0.2s ease-in;
float: right;
text-transform: uppercase;
white-space: nowrap;
height: 20px;
}

.menu-mobile li ul {
display: none;
right: 0;
position: absolute;
bottom: 100%;
background: none;
}

/* true mouse hover only (desktop) -- on touch, some mobile browsers keep a
   tapped element's :hover state "stuck" until the next tap elsewhere on the
   page, which would otherwise re-show this submenu right after JS closes it
   (closeMenu() removing .is-open) when a menu button is tapped. Touch always
   goes through .is-open below instead. */
@media (hover: hover) and (pointer: fine) {
.menu-mobile li:hover ul {
display: block;
width: auto;
}
}

.menu-mobile.is-open li ul {
display: block;
width: auto;
}

/* menu nudge -- brush-drawn arrow, shown once via js/main.js idle timer.
   Rendered as a CSS mask (assets/icons/menu-nudge-arrow.svg, filled white so
   the default luminance mask reads it as "visible") instead of an inline
   <path>, so its color is this element's plain background-color -- swap that
   one value if the tone ever needs adjusting. The asset's own drawn direction
   points down-left; rotate(45deg) scaleX(-1) below flips/turns it to aim at
   .menu-mobile's fixed bottom-right spot (picked empirically by rendering a
   grid of candidate transforms, not computed from the path geometry -- see
   [[project-oliver-gets-smart-de-menu-nudge]]). Hidden state is opacity 0;
   both reveal and dismissal are a quick fade (no stroke-draw effect possible
   on a filled mask shape, unlike the old inline-path version). */
.menu-nudge {
position: fixed;
right: 6px;
bottom: 44px;
width: 84px;
height: 35px;
z-index: 1003;
pointer-events: none;
opacity: 0;
background-color: #fdfbf6;
-webkit-mask-image: url(../assets/icons/menu-nudge-arrow.svg);
mask-image: url(../assets/icons/menu-nudge-arrow.svg);
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
-webkit-mask-size: contain;
mask-size: contain;
transform: rotate(45deg) scaleX(-1);
filter: drop-shadow(0 1px 3px rgba(0, 0, 0, .7));
transition: opacity 0.6s ease;
}

.menu-nudge.is-visible {
opacity: 1;
}

.menu-nudge.is-gone {
opacity: 0;
}


/* top panel */
#top-panel-container {
position: fixed;
width: 100%;
top: 0;
margin-left: auto;
margin-right: auto;
z-index: 999;
}

.panel-button {
position: absolute;
width: auto;
height: 15px;
top: 15px;
right: 20px;
background: none;
display: visible;
cursor: pointer;
z-index: 1000;
}

.panel-button a {
position: relative;
font-family: 'LeagueGothicRegular';
font-size: 16px;
font-style: normal;
font-weight: normal;
text-transform: uppercase;
text-decoration: none;
color: #fff;
}

.panel-button a:hover {
color: #fff;
}

#close-button {
display: none;
}

#top-panel {
position: absolute;
width: 100%;
left: 0;
z-index: 999;
}

#panel {
position: relative;
width: 100%;
overflow: hidden;
margin-left: auto;
margin-right: auto;
z-index: 1000;
}

#panel-contents {
position: absolute;
width: 100%;
height: 100%;
overflow: hidden;
background: #000;
z-index: 0;
}


/* newsletter form */
#subscribe-wrapper {
position: absolute;
width: 225px;
height: 55px;
top: 14px;
left: 18px;
z-index: 2;
}

#newsletter {
width: auto;
height: 50px;
padding: 2px 0 0 0;
}

.newsletter {
position: relative;
clear: both;
width: auto;
border: none;
background: none;
margin: 0;
padding: 0;
overflow: hidden;
}

#subscribe .mail {
display: none;
visibility: hidden;
}

#subscribe input#subscribeemail {
width: 140px;
height: 28px;
padding: 0 5px 0 5px;
border: 1px solid #fff;
font-size: 12px;
float: left;
margin: 4px 0 5px 2px;
}

#subscribe input {
color: #000;
text-align: left;
border: 1px solid #fff;
background: #fff;
}

/* honeypot spam trap (see subscribe.php) -- must stay reachable/fillable by
   simple bots (not display:none/visibility:hidden, some bots skip those) but
   invisible and unreachable for real visitors */
.subscribe-hp {
position: absolute;
left: -9999px;
top: -9999px;
width: 1px;
height: 1px;
overflow: hidden;
}

#subscribe input:focus, #subscribe textarea:focus {
color: #fff;
background: #000;
}

#subscribe input#submit {
font-family: 'LeagueGothicRegular';
font-size: 16px;
font-style: normal;
font-weight: normal;
text-transform: uppercase;
text-align: center;
position: relative;
width: 65px;
height: 30px;
line-height: 30px;
float: right;
margin: 4px 2px 5px 0;
padding: 0;
color: #fff;
background: #000;
cursor: pointer;
}

.subscribesuccess {
font-family: 'LeagueGothicRegular';
font-size: 16px;
font-style: normal;
font-weight: normal;
text-transform: uppercase;
text-align: left;
color: #fff;
width: auto;
height: auto;
margin: 0;
padding: 0;
}

#subscribe .subscribeerror {
font-size: 10px;
text-transform: uppercase;
text-align: left;
color: #fff;
display: block;
margin-left: 2px;
}


/* social icons */
.social-icons-wrapper {
position: fixed;
width: 200px;
left: 15px;
top: 13px;
margin: 0;
padding: 0;
color: #000;
z-index: 1;
}

.social-icons-wrapper ul {
float: left;
margin: 0;
padding: 0;
list-style-type: none;
}

.social-icons-wrapper ul li {
display: inline;
padding: 0 0 5px 0;
}

ul.social-icons {
margin: 0;
padding: 0;
}

ul.social-icons a img {
width: 16px;
height: 16px;
padding: 5px 5px 0 5px;
        opacity: 1;
   -moz-opacity: 1;
-webkit-opacity: 1;
filter: alpha(opacity=100);
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
-webkit-transition: all 0.4s linear;
   -moz-transition: all 0.4s linear;
     -o-transition: all 0.4s linear;
        transition: all 0.4s linear;
}

ul.social-icons a img:hover {
padding: 5px 5px 0 5px;
        opacity: 0.5;
   -moz-opacity: 0.5;
-webkit-opacity: 0.5;
filter: alpha(opacity=50);
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
}


/* contact */
.contact {
position: fixed;
font-size: 16px;
font-style: normal;
font-weight: 400;
color: #fff;
text-transform: uppercase;
width: auto;
height: 28px;
left: 20px;
bottom: 16px;
overflow: hidden;
background: none;
z-index: 1;
}

.contact a {
font-family: 'LeagueGothicRegular';
color: #555;
text-decoration: none;
outline: none;
}

.contact a:hover {
color: #fff;
}

ul.email-us li {
position: absolute;
left: 0;
bottom: 3px;
display: block;
}

ul.email-us li a span {
display: none;
}

a.envelope:link, a.envelope:visited {
display: block;
width: 25px;
height: 17px;
background: url(../assets/images/email-us.png) no-repeat left top;
}

a.envelope:hover {
background-position: left bottom;
}

.address {
margin: 6px 0 0 36px;
padding: 0;
}


/* site loader */
.loader {
position: absolute;
width: 100%;
height: 100%;
overflow: hidden;
background: #fff url(../assets/images/site-loader.gif) no-repeat center center;
z-index: 10000;
pointer-events: none;
}