* {padding: 0; margin: 0; box-sizing: border-box;}
html {font-size: 16px; line-height: 2.2; height: 100%; background: #101010;}
h1,h2,h3,strong,b {font-weight: bold;}
body {overflow-y: scroll; height: 100%; color: #101010; font-family: 'Geist', sans-serif;}
body::after {content: ""; position: fixed; left: 0; top: 0; background: #101010; height: 100vh; width: 0.75rem; z-index: 2;}
h1,h2,h3 {line-height: 1.1; margin-bottom: 0.5em; padding-top: 1.5em;}
h2 {font-weight: 500;}
a {color: #101010;}
code {font-family: 'dejavu_sans_monobook', monospace; font-size: 0.85rem; display: inline-block; background: #fafafa; border: 1px solid rgba(0,0,0,0.1); padding: 0rem 0.15rem 0 0.2rem; border-radius: 0.2rem; color: rgba(0,0,0,0.85);}
pre {padding: 1rem 1.25rem 1.15rem; margin-bottom: 1.5rem; background: #fafafa; border: 1px solid rgba(0,0,0,0.1); overflow: auto;}
pre code {font-family: 'dejavu_sans_monobook', monospace; font-size: 0.85rem; line-height: 1.6; display: block; background: none; padding: 0; border: 0;}
img {max-width: 100%; border: 1px solid rgba(0,0,0,0.2); width: 100%; display: block;}
.date:first-child {position: relative; margin-top: 0.75rem; top: 1.75rem; opacity: 0.5; font-size: 0.9rem; font-family: 'dejavu_sans_monobook', monospace;}
.h1 {
    line-height: 1.15;
    font-size: 1.5rem;
    display: flex;
    text-decoration: none;
    font-weight: 700;
    align-items: center;
    margin-right: 2rem;
}
.h1 .logo {display: block; text-align: center; padding: 1.3rem 0.5rem 1.3rem 2.75rem;}
.h1 .logo img {min-width: 2rem; width: 2rem; border: 0;}

.header {position: relative; top: 0; background: white; width: 100%; z-index: 2;}
.header > div {max-width: 80rem; margin: 0 auto; display: flex; justify-content: space-between; align-items: center;}
.header > div > div {display: flex; align-items: center; gap: 2rem; margin-right: 1.25rem;}
.header > div ul {display: flex; gap: 1.5rem;}
.header > div ul li:nth-last-child(1) {display: none;}
.header > div ul li {list-style: none;}
.header > div ul li a {color: rgba(16, 16, 16, 0.5); text-decoration: none; font-size: 1rem;}
.header > div ul li.active > a { font-weight: normal; color: #101010;}
.header > div button {width: 2rem; height: 2rem; border: 0; background: 0; border-radius: 0; cursor: pointer; display: none; position: relative;}
.header > div button span {display: block; height: 2px; background: #101010; margin: 0.5rem 0;}
body.showmenu .header > div button span {position: absolute; transform: rotate(45deg); width: 100%; top: 0.5rem; transform-origin: center center;}
body.showmenu .header > div button span + span {transform: rotate(-45deg);}

.main {display: flex; justify-content: center; background: white;}
.main > .sidebar {margin-left: 0.75rem; min-width: 20rem; padding: 4.25rem 2rem 4.25rem; border-right: 1px solid rgba(0,0,0,0.1);}
.main > .sidebar > div > ul ul {margin-left: 1.4rem;}
.main > .sidebar li {line-height: 1.5; padding: 0; list-style: none;}
.main > .sidebar li a {color: rgba(16, 16, 16, 0.5); text-decoration: none; display: block; line-height: 2;}

ul.nestedmenu {margin-left: 0;}
ul.nestedmenu li {list-style: none;}
ul.nestedmenu li > ul {display: none;}
ul.nestedmenu li > a {color: rgba(16, 16, 16, 0.5);}
ul.nestedmenu li > a::before {content: "•"; display: inline-block; margin-right: 1rem; width: 0.5rem; text-align: center;}
ul.nestedmenu li.haschildren > a::before {content: "›";}
ul.nestedmenu li.haschildren.active > a::before {transform: rotate(90deg);}
ul.nestedmenu li.active > ul {display: block;}
ul.nestedmenu li.active > a {color: #101010; font-weight: normal;}
ul.nestedmenu > li > ul > li:last-child {margin-bottom: 1rem;}

.main > .content {flex-grow: 1; padding: 2rem 2rem 6rem; max-width: 59.25rem;}
.innercontent {max-width: 60rem; display: flex; width: 100%; flex-direction: column; margin: 0 auto;}
.innercontent > .innerinnercontent {max-width: 40rem; margin: 0 auto; width: 100%; line-height: 1.5; font-size: 1.05rem;}
.main > .sidebar + .content > .innercontent > .innerinnercontent {max-width: 45rem;}
.main > .content h1 {font-size: 2.5rem; padding: 0.8em 0 0.5rem;}
.main > .content h2 {font-size: 1.6rem; }
.main > .content h3 {font-size: 1.1rem; line-height: 1.6; padding-top: 1.25rem;}
.main > .content p {margin-bottom: 1.5rem; font-size: 1.05rem;}
.main > .content ol {margin: 0 0 1.5rem 2rem;}
.main > .content ul {margin: 0 0 1.5rem 2rem;}
.main > .content li.active {font-weight: normal;}
.main > .content table {margin-bottom: 1.5rem; max-width: 100%; overflow: auto; display: block; border-collapse: collapse;}
.main > .content table th, 
.main > .content table td {text-align: left; padding: 0.1rem 1.5rem 0.1rem 0; font-size: 0.95rem; white-space: nowrap;}
.main > .content table td {border-top: 1px solid rgba(0,0,0,0.1);}
.main > .content table td a {text-decoration-style: dotted; text-underline-offset: 0.2rem;}
.main > .content blockquote {
    font-style: italic;
    opacity: 0.5;
    border-left: 0.25rem solid rgba(0,0,0,0.2);
    padding-left: 1rem;
}

form {max-width: 33rem;}
form > div {display: flex; flex-direction: column; margin-bottom: 1rem;}
form > div.radio + .radio {bottom: 1rem; position: relative; margin-bottom: 0;}
input:not([type="radio"],[type="checkbox"]), textarea, select {
    border: 1px solid rgba(0,0,0,0.2);
    background: #fafafa;
    display: block;
    resize: none;
    padding: 0.25rem 0.5rem;
    line-height: 1.5;
    font-size: 1rem;
    border-radius: 0;
    -webkit-appearance: none;
    font-family: 'dejavu_sans_monobook', monospace;
    font-size: 0.85rem;
}
input[type="submit"], .button {
    display: inline-block;
    width: auto;
    padding: 0rem 1.25rem;
    height: 2.25rem;
    line-height: 2.25rem;
    color: white;
    background: #101010;
    border: 0;
    font-weight: 600;
    cursor: pointer;
    text-decoration: none;
    font-size: 0.9rem;
    font-family: 'Geist', sans-serif;
}
.button.demo {position: relative; left: 0.75rem; box-shadow: inset 0px 0px 0px 1px #101010; background: transparent; color: #101010;}
label > input {margin-right: 0.5rem;}
form > div > label {margin-bottom: 0.25rem; font-size: 1rem;}


.features, .graphics, .instantpublishing {text-align: center;}

body.home .main, body.home .stats, body.home .features, body.home .instantpublishing {flex-direction: column; align-items: center; display: flex; width: 100%;}
body.home .main > .content {text-align: center; padding-bottom: 4rem;}
body.home .main > .content h1 {font-size: 4rem; line-height: 1.1; margin: 0 0 1.5rem; font-weight: bold;}
body.home .main > .content h1 em {color: #2E3192; font-family: inherit; font-style: normal; font-weight: inherit;}
body.home .main > .stats {border: 1px solid rgba(0,0,0,0.1); background: #fafafa; width: 100%; margin-bottom: 4rem;}
body.home .stats ul {display: grid; grid-template-columns: repeat(auto-fill, minmax(10rem, 1fr)); grid-gap: 1.5rem; justify-content: center; align-items: center; opacity: 1; margin: 2rem 0;} 
body.home .stats ul li {list-style: none; text-align: center; line-height: 1.5;}
body.home .stats ul li > div:nth-child(1) {font-size: 2.3rem; font-weight: 800;}
body.home .stats ul li > div:nth-child(2) {opacity: 0.5; text-transform: uppercase; letter-spacing: 0.1rem; font-size: 0.75rem;}
body.home h2 {font-size: 2.3rem; font-weight: 700;}
body.home .features ul {display: grid; grid-template-columns: repeat(auto-fill, minmax(14rem, 1fr)); grid-gap: 0 2rem; margin: 1rem auto 8rem; opacity: 0.5; width: 100%; font-size: 1.05rem;}
body.home .features li {list-style: none;}

.hero {position: relative; overflow: hidden; line-height: 0;}
.hero > img {border: 0;}
.hero-zoom {
    position: absolute;
    inset: 0;
    transform: scale(1);
    transform-origin: 53% 47%;   /* a little up and to the right of the middle */
    filter: drop-shadow(0 1rem 2rem rgba(0,0,0,0.3));
    animation: hero-zoom .5s 0.25s both;
    will-change: transform;
    --hero-glow: url("data:image/svg+xml,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201200%20800'%20preserveAspectRatio='none'><filter%20id='g'%20x='-20%25'%20y='-20%25'%20width='140%25'%20height='140%25'%20color-interpolation-filters='sRGB'><feGaussianBlur%20stdDeviation='3'/></filter><path%20d='m%20489.6,210.4%20c%204.91148,-3.69888%209.27027,-4.94031%2014.42477,-5.02596%20l%20131.83304,-0.57136%20c%2023.59529,0.86906%2028.52181,17.03351%2028.75988,26.98209%20l%20-0.43593,60.74732%201.41124,-0.0155%20-0.22451,42.84345%20-1.10741,0.019%20-0.57526,38.49468%20c%204.3876,-1.57767%208.05616,-2.09076%2013.07536,-0.57195%201.5335,0.10928%203.11173,0.33361%204.53935,2.74189%205.22677,-2.04987%2011.18425,1.96675%2012.18681,4.27225%203.80276,7.48253%204.60238,15.29633%205.87185,23.0583%20-1.34871,13.62503%20-3.69555,12.00207%20-5.23855,16.74702%20l%203.70397,16.30809%20c%200.87931,5.49269%201.71807,11.00393%20-0.62461,17.97066%20l%20-10.73461,19.59277%20c%20-4.49586,6.58516%20-5.05764,9.16819%20-8.5533,15.0865%20l%20-14.42174,19.42518%200.12052,43.3818%20c%20-0.20345,21.70838%20-16.60247,29.06744%20-29.97396,28.79717%20l%20-128.41059,0.21498%20c%20-6.89515,0.33045%20-14.73306,-3.27405%20-19.10647,-7.76351%20-5.12311,-5.93732%20-6.11128,-9.02597%20-7.34574,-13.19645%20-0.59951,2.26429%20-3.53218,3.25041%20-7.18634,3.76862%20-6.39188,1.57183%20-6.85861,0.93202%20-9.04888,0.50449%20-2.31542,-0.66018%20-5.91187,-4.33939%20-8.83761,-8.20876%20-2.2228,-2.39081%20-3.88601,-7.63476%20-1.94629,-11.9139%201.96493,-3.62219%204.33817,-6.62421%207.13084,-9.6371%20L%20460.8,530.4%20l%204.8,-16.8%204.8,-18.4%20-14.4,-8%20c%20-7.38322,-4.9349%20-13.83511,-11.22367%20-18.94246,-17.69809%20l%20-11.12783,-20.08239%20c%20-0.25967,-6.39895%20-5.13021,-10.82192%203.84296,-24.10474%208.08686,-8.16011%2019.0176,-7.96821%2021.01725,-7.91104%20C%20441.18992,412.13292%20428.4,405.13623%20418.8,396%20c%20-3.5316,-6.0788%20-4.77633,-14.85925%20-7.09941,-22.36576%20-0.59776,-3.33974%20-0.56438,-7.39943%200.18339,-12.27405%20L%20416.4,352.8%20425.39125,345.13746%20435.6,342.4%20l%204.62727,0.24089%205.67229,2.23261%207.7869,2.97728%20-4.68953,-12.91165%20-0.87725,-8.64279%201.4099,-7.29975%204.99921,-9.16545%205.73426,-5.19181%2012.1491,-6.78468%204.74173,-2.71881%20-0.118,-11.55325%201.11912,-0.15664%20-0.0544,-13.32752%20-1.23591,0.11417%200.21684,-13.71718%201.09441,-0.12408%20-0.19328,-21.3505%20C%20476.89646,225.4573%20482.36879,215.14283%20489.6,210.4%20Z'%20fill='none'%20stroke='white'%20stroke-width='7'%20filter='url(%23g)'/></svg>");
    --hero-cutout: url("data:image/svg+xml,<svg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201200%20800'%20preserveAspectRatio='none'><filter%20id='f'%20x='-20%25'%20y='-20%25'%20width='140%25'%20height='140%25'%20color-interpolation-filters='sRGB'><feGaussianBlur%20stdDeviation='0.4'/></filter><path%20d='m%20489.6,210.4%20c%204.91148,-3.69888%209.27027,-4.94031%2014.42477,-5.02596%20l%20131.83304,-0.57136%20c%2023.59529,0.86906%2028.52181,17.03351%2028.75988,26.98209%20l%20-0.43593,60.74732%201.41124,-0.0155%20-0.22451,42.84345%20-1.10741,0.019%20-0.57526,38.49468%20c%204.3876,-1.57767%208.05616,-2.09076%2013.07536,-0.57195%201.5335,0.10928%203.11173,0.33361%204.53935,2.74189%205.22677,-2.04987%2011.18425,1.96675%2012.18681,4.27225%203.80276,7.48253%204.60238,15.29633%205.87185,23.0583%20-1.34871,13.62503%20-3.69555,12.00207%20-5.23855,16.74702%20l%203.70397,16.30809%20c%200.87931,5.49269%201.71807,11.00393%20-0.62461,17.97066%20l%20-10.73461,19.59277%20c%20-4.49586,6.58516%20-5.05764,9.16819%20-8.5533,15.0865%20l%20-14.42174,19.42518%200.12052,43.3818%20c%20-0.20345,21.70838%20-16.60247,29.06744%20-29.97396,28.79717%20l%20-128.41059,0.21498%20c%20-6.89515,0.33045%20-14.73306,-3.27405%20-19.10647,-7.76351%20-5.12311,-5.93732%20-6.11128,-9.02597%20-7.34574,-13.19645%20-0.59951,2.26429%20-3.53218,3.25041%20-7.18634,3.76862%20-6.39188,1.57183%20-6.85861,0.93202%20-9.04888,0.50449%20-2.31542,-0.66018%20-5.91187,-4.33939%20-8.83761,-8.20876%20-2.2228,-2.39081%20-3.88601,-7.63476%20-1.94629,-11.9139%201.96493,-3.62219%204.33817,-6.62421%207.13084,-9.6371%20L%20460.8,530.4%20l%204.8,-16.8%204.8,-18.4%20-14.4,-8%20c%20-7.38322,-4.9349%20-13.83511,-11.22367%20-18.94246,-17.69809%20l%20-11.12783,-20.08239%20c%20-0.25967,-6.39895%20-5.13021,-10.82192%203.84296,-24.10474%208.08686,-8.16011%2019.0176,-7.96821%2021.01725,-7.91104%20C%20441.18992,412.13292%20428.4,405.13623%20418.8,396%20c%20-3.5316,-6.0788%20-4.77633,-14.85925%20-7.09941,-22.36576%20-0.59776,-3.33974%20-0.56438,-7.39943%200.18339,-12.27405%20L%20416.4,352.8%20425.39125,345.13746%20435.6,342.4%20l%204.62727,0.24089%205.67229,2.23261%207.7869,2.97728%20-4.68953,-12.91165%20-0.87725,-8.64279%201.4099,-7.29975%204.99921,-9.16545%205.73426,-5.19181%2012.1491,-6.78468%204.74173,-2.71881%20-0.118,-11.55325%201.11912,-0.15664%20-0.0544,-13.32752%20-1.23591,0.11417%200.21684,-13.71718%201.09441,-0.12408%20-0.19328,-21.3505%20C%20476.89646,225.4573%20482.36879,215.14283%20489.6,210.4%20Z'%20fill='white'%20filter='url(%23f)'/></svg>");
}
/* the cut-out: hand + phone, lifted out of the duplicated photo.
   an svg mask (as a self-contained data uri, so there are no url(#id) references to resolve)
   the outline is the 'cutout' path from design/hero-cutout.svg, in its own 1200x800 space.
   a mask rather than clip-path because clip-path cannot take a path with curves in it. */
/* the cut-out itself. deliberately a loose descendant selector:
   it must keep working whatever wraps the image. */
.hero-zoom img {
    width: 100%;
    height: 100%;
    border: 0;
    -webkit-mask-image: var(--hero-cutout);
    mask-image: var(--hero-cutout);
    -webkit-mask-size: 100% 100%;
    mask-size: 100% 100%;
    -webkit-mask-repeat: no-repeat;
    mask-repeat: no-repeat;
}
/* a glow just inside the outline, so the dark edges of the phone are not cut off so abruptly.
   the cut-out mask is applied to it as well, which is what keeps the blurred stroke inside. */
.hero-zoom::after {
    content: "";
    position: absolute;
    inset: 0;
    opacity: 0.1;
    background-image: var(--hero-glow);
    background-size: 100% 100%;
    background-repeat: no-repeat;
    -webkit-mask-image: var(--hero-cutout);
    mask-image: var(--hero-cutout);
    -webkit-mask-size: 100% 100%;
    mask-size: 100% 100%;
    -webkit-mask-repeat: no-repeat;
    mask-repeat: no-repeat;
}
@keyframes hero-zoom {
    /* linear timing on purpose: the deceleration and the drift are in the values below, so the
       move does not sit on one clean easing curve. front-loaded, most of the scale happens in
       the first tenth and then it glides in - never backwards. */
    0%   {transform: scale(1)      translate(0, 0);}
    100% {transform: scale(1.4)    translate(0, 0);}
}
@media (prefers-reduced-motion: reduce) {
    .hero-zoom {animation: none;}
}

.logos {text-align: center; margin-top: -2.5rem; width: 100%;}
.logos img {height: 3rem; border: 0; object-fit: contain;}
.logos ul {display: flex; gap: 1rem; justify-content: center; flex-wrap: wrap; margin: 1rem 0;}
.logos ul li {list-style: none; width: 4rem;}

.footer {filter: invert(100%); background: #eee; border-top: 5rem solid black; padding: 1.75rem 0 0; font-size: 0.95rem;}
.footer .innercontent {max-width: 80rem; margin: 0 auto; display: flex; gap: 0 4rem; flex-direction: row; flex-wrap: wrap; padding: 1rem 0 2rem;}
.footer .innercontent > div:not(:first-child) {padding-left: 1.75rem;}
.footer .innercontent > div {max-width: 22rem;}
.footer .innercontent > div:first-child p {margin-top: 0.7rem; line-height: 1.5; padding-left: 2.75rem; opacity: 0.5; font-size: 0.9rem;}
.footer .innercontent + .innercontent > div:first-child p {font-size: 0.85rem;}
.footer h3 {margin: 0 0 1.5rem; font-weight: 600;}
.footer ul li {list-style: none; opacity: 0.5;}
.footer ul li a {text-decoration: none;}
.footer .languages ul li.active {opacity: 1;}
.footer > img {filter: invert(100%); right: 7vw; position: absolute; border: 0; aspect-ratio: 1;}
.footer > img:nth-child(1) {margin: -8rem 0 0; width: 11rem;}
.footer > img:nth-child(2) {margin: -15rem 5.25rem 0; width: 6rem;}
.footer > img:nth-child(3) {margin: -19rem 2.75rem 0; width: 3rem;}
.footer > img:nth-child(4) {margin: -20rem 11.75rem 0; width: 2.25rem;}
.footer .innercontent + .innercontent {margin-top: 1rem; padding: 1rem 0 1.5rem;}
.footer .innercontent + .innercontent::before {
    content: "";
    position: absolute;
    left: 0;
    width: 100%;
    border-top: 1px solid rgba(0,0,0,0.05);
    margin-top: -0.7rem;
}

.hidden {display: none;}
.lightbox-image img {display: block;}

@media screen and (max-width: 100rem) {
    .footer > img {display: none;}
}

@media screen and (max-width: 60rem) {
    body::after {width: 0.25rem;}
    .h1 .logo {padding-left: 1.75rem;}
    .main {flex-direction: column-reverse;}
    .main > .sidebar {padding: 0 1.5rem 4rem 1.75rem; border: 0; margin-left: 0rem;}
    .main > .content, body.home .main > * {padding-left: 1.75rem; padding-right: 1.5rem;}
    .main > .content > .innercontent > .innerinnercontent {margin: 0;}
    .footer .innercontent > div:first-child p {padding-left: 1.75rem;}
    .footer img + .innercontent > div:first-child p {padding-bottom: 2rem;}
    body.home .main > .content p br {display: none;}
}

@media screen and (max-width: 45rem) {
    .header > div button {display: block;}
    .header > div ul {
        display: none;
        position: absolute;
        top: 4.3rem;
        background: #eee;
        left: 0;
        width: 100%;
        padding: 1rem 1rem 1.25rem 1.75rem;
    }
    body.showmenu .header > div ul {display: block;}
    .footer .innercontent {flex-direction: column;}
    body.home .main > .content h1 {font-size: 3.5rem; margin: 1.5rem 0;}
    body.home .main > .content h1 img {height: 1.75rem;}
}

@media screen and (max-width: 35rem) {
    .header > div .button {display: none!important;}
    .header > div ul li:nth-last-child(1),
    .header > div ul li:nth-last-child(2) {display: block;}
    body.showmenu .header > div .button {display: block;}
    body.home .main > .content h1 {font-size: 2.75rem;}
    body.home .main > .content h1 img {height: 1.5rem;}
}