/* Style for the slides for TPAC 2021, to be used together with the
   Shower script or the b6+ script. For usage instructions, see
   https://www.w3.org/2021/Talks/TPAC/Templates/Overview.html

   TODO: Styles for blockquotes?

   TODO: Provide a fallback for side images for UAs that do not
   implement 'object-fit'?

   Layout of a slide:

   +---------------------------------------+-------+
   |                   2em                 | LOGO  |
   |   +-------------------------------+   |       |
   |   |                               |   |       |  ^
   |   |                               |   |       |  |
   |2em|                               |1em|  3em  | 23em
   |   |                               |   |       |  |
   |   |                               |   |       |  v
   |   +-------------------------------+   |       |
   |                   1em                 |   nr  |
   +---------------------------------------+-------+

   A = 16/9         = aspect ratio
   N = 23           = height in em (i.e., 21 lines + 2 x 1 em padding)
   L = 4            = logo width in em
   H = 86/120.31532 = logo aspect ratio (width/height)
   C = 2            = font size (and logo size) multiplier for cover pages
   w = N*A          = width of slide in em

   Created: 26 June 2021
   Author: Bert Bos <bert@w3.org>
   Copyright © 2021 W3C
*/

@font-face {
  font-family: My Lato;
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url(Lato-Italic.woff2) format("woff2"),
    url(Lato-Italic.woff) format("woff");
  src: local(Lato Italic), local(Lato-Italic),
    url(Lato-Italic.woff2) format("woff2"),
    url(Lato-Italic.woff) format("woff")}

@font-face {
  font-family: My Lato;
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(Lato-Regular.woff2) format("woff2"),
    url(Lato-Regular.woff) format("woff");
  src: local(Lato Regular), local(Lato-Regular),
    url(Lato-Regular.woff2) format("woff2"),
    url(Lato-Regular.woff) format("woff")}

@font-face {
    font-family: My Lato;
    font-style: normal;
    font-weight: bold;
    font-display: swap;
    src: url(Lato-Bold.woff2) format("woff2"),
	 url(Lato-Bold.woff) format("woff");
    src: local(Lato Bold), local(Lato-Bold),
	 url(Lato-Bold.woff2) format("woff2"),
	 url(Lato-Bold.woff) format("woff");
}
@font-face {
    font-family: My Lato;
    font-style: italic;
    font-weight: bold;
    font-display: swap;
    src: url(Lato-BoldItalic.woff2) format("woff2"),
	 url(Lato-BoldItalic.woff) format("woff");
    src: local(Lato Bold Italic), local(Lato-BoldItalic),
	 url(Lato-BoldItalic.woff2) format("woff2"),
	 url(Lato-BoldItalic.woff) format("woff");
}
@font-face {
  font-family: My Montserrat;
  font-style: italic;
  font-weight: 900;
  font-display: swap;
  src: url(Montserrat-BlackItalic.woff) format("woff");
  src: local(Montserrat Black Italic), local(Montserrat-BlackItalic),
       url(Montserrat-BlackItalic.woff) format("woff");
}
@font-face {
  font-family: My Montserrat;
  font-style: normal;
  font-weight: 900;
  font-display: swap;
  src: url(Montserrat-Black.woff) format("woff");
  src: local(Montserrat Black), local(Montserrat-Black),
       url(Montserrat-Black.woff) format("woff");
}

@font-face {
  font-family: My Montserrat;
  font-style: italic;
  font-weight: bold;
  font-display: swap;
  src: url(Montserrat-BoldItalic.woff) format("woff");
  src: local(Montserrat BoldItalic), local(Montserrat-BoldItalic),
       url(Montserrat-BoldItalic.woff) format("woff");
}

@font-face {
  font-family: My Montserrat;
  font-style: normal;
  font-weight: bold;
  font-display: swap;
  src: url(Montserrat-Bold.woff) format("woff");
  src: local(Montserrat Bold), local(Montserrat-Bold),
       url(Montserrat-Bold.woff) format("woff");
}


/* Common layout independent of slide mode */
html {font: 400 1em/1.3 My Lato, Carlito, Calibri, Open Sans, Helvetica Neue,
    Helvetica, Arial, Liberation Sans, sans-serif;
  font-size-adjust: 0.506 /* Lato Regular */; letter-spacing: 0.02em}
body {background: url(linen.png) #595b60; counter-reset: slide; margin: 2em;
  color: white}
b {font-weight: bold}
dt {font-weight: bold}
dd {margin: 0}
h4 {font-size: 1.2em; margin: 0.5em 0}
.slide p, .slide ul, .slide ol, .slide pre, .slide blockquote, .slide li {
  margin: 0.6em 0}
.slide h1, .slide h2, .slide address {margin: 0 0 0.6em 0;
  font: 900 2em/1.1 My Montserrat, Arial Black, Myriad Pro, Roboto, sans-serif;
  font-size-adjust: 0.542}
.slide address {color: hsl(356,67%,40%); font-size: 1.4em}
.slide h3 {font-size: 1.1em; color: hsl(356,67%,40%);
  margin: 0.8em 0 0.48em 0}
.full, .slide {width: 40.889rem; /*= w */ height: 23rem; /*= N */}
.slide {color: hsl(204,67%,19%); box-shadow: 0 0.4em 0.6em #000;
  line-height: 1.6;
  word-break: normal; overflow-wrap: normal; letter-spacing: normal;
  padding: 2em 5em /*= L + 1 */ 1em 2em;
  position: relative;
  box-sizing: border-box; z-index: 0; display: inline-block;
  margin: 4em 2em 0 0; vertical-align: bottom; counter-increment: slide;
  border-radius: 0.5em;
  text-shadow: 0 0 1px hsl(0,0%,98%), 0 0 1px hsl(0,0%,98%),
    0 0 1px hsl(0,0%,98%), 0 0 1px hsl(0,0%,98%);
  background: top right / 4em /*= L */ 100%
    radial-gradient(circle, hsl(205,29%,96%), hsl(205,29%,80%)) no-repeat
    hsl(0,0%,98%)}
.slide:target {outline: lime solid 0.5em; outline-offset: 1em}
.slide h3 a {color: inherit}

/* EM elements get a highlighter-like background */
.slide em {font-style: normal;
  text-shadow: none; background:  hsl(62,100%,50%)}

/* Lists with less indent */
.slide li {margin-left: 1em}
.slide ol, .slide ul {padding: 0}
.slide li ul, .slide li ol, .slide li li {margin-top: 0.1em; margin-bottom: 0.2em}

/* Own counter, because FF & Safari don't apply text-shadow to the default. */
.slide ol {counter-reset: ol; list-style: none}
.slide ol > li {counter-increment: ol}
.slide ol > li::before {/*float: left;*/ display: inline-block; width: 2em;
  margin-left: -2em; text-align: right; content: counter(ol) ".\A0"}
.slide ol > li > p:first-child {display: inline}
.slide ol[start="2"] {counter-reset: ol 1}
.slide ol[start="3"] {counter-reset: ol 2}
.slide ol[start="4"] {counter-reset: ol 3}
.slide ol[start="5"] {counter-reset: ol 4}
.slide ol[start="6"] {counter-reset: ol 5}
.slide ol[start="7"] {counter-reset: ol 6}
.slide ol[start] {counter-reset: ol calc(attr(start integer) - 1)}

/* Slides with an image on the left (.side) or right (.side.right) one third */
.slide.side {padding-left: 12.867em /*= 2 + (w - L - 4) * 30% + 1 */}
.slide.side.right, .slide.side.r {padding-left: 2em;
  padding-right: 15.867em; /*= L + 1 + (w - L - 4) * 30% + 1 */}
.side .side {position: absolute; top: 3em /* top margin + a bit */; left: 2em;
  height: 19em /*= N - 4 */; object-fit: contain;
  width: 9.8667em /*= (w - L - 4) * 30% */}
.side .side.cover {object-fit: cover; top: 0; left: 0; height: 23em /*= N */;
  width: 11.867em /*= (w - L - 4) *30% + 2 */}
.side.right .side, .side.r .side {
  left: 26.022em /*= w - L - 1 - (w - L - 4) * 30% */}
.side.right .side.cover, .side.r .side.cover {
  width: 14.867em /*= L + 1 + (w - L - 4) * 30% */}

/* Slides with a big, square image on the left or right */
.slide.side.big {padding-left: 24em /*= N + 1 */}
.slide.side.right.big, .slide.side.r.big {padding-left: 2em;
  padding-right: 24em /*= N + 1 */}
.side.big .side {top: 2em; left: 2em;
  height: 19em /*= N - 4 */; width: 21em /*= N - 2 */}
.side.big.right .side, .side.big.r .side {left: 17.889em /*= w - N */}
.side.big .side.cover {object-fit: cover; top: 0; left: 0;
  height: 23em /*= N */; width: 23em /*= N */}
.side.big.right .side.cover, .side.big.r .side.cover {
  left: 17.889em /*= w - N */}

/* Cover pages */
.slide.cover {background: 50% 2em / auto 5.3em url(TPAC-2021-slides-cover.svg)
    no-repeat hsl(0,0%,98%);
  text-align: center; padding-right: 2em;
  padding-top: 8.8em /* 2 + 5.3 + 1.5 */}

/* Last page */
.slide.final {background: 50% 16.7em /*= N - 2 - 4.3 */ / auto 4.3em
    url(TPAC-2021-slides-cover.svg) no-repeat hsl(0,0%,98%);
  padding: 50% 12.142em /*= 1 + w - 120% * w + 120% * 70% * N */ 1em 5em;
  padding: 2em 2em 7em}

/* Notes in a smaller font */
.slide .note {font-size: 70%}

/* Miscellaneous styles */
.num {font-variant-numeric: oldstyle-nums tabular-nums diagonal-fractions}
.slide code, .slide pre {font-family: Andale Mono, Courier, monospace;
  text-shadow: none}
.slide code {background: #eee; padding: 0.1em 0.3em; border-radius: 0.3em}
sub, sup {line-height: 0.5}
.slide pre {padding: 0 0.2em; background: black; color: hsl(120,100%,70%);
  text-shadow: none}

/* Explicit placement on a 3x3 grid */
.place {position: absolute; box-sizing: border-box;
  max-width: 25.996%; /*= (w - L - 5) / 3 / w */
  top: 50%; left: 46.332%; /*= (2 + (w - L - 2 - 1)/2) / w */
  transform: translate(-50%, -50%); text-align: center}
.place.t, .place.top {top: 8.6957%; /*= 2/N */ transform: translate(-50%,0)}
.place.b, .place.bottom {top: auto; bottom: 8.6957% /*= 2/N */;
  transform: translate(-50%,0)}
.place.l, .place.left {left: 4.8913%; /*= 2 / w */
  transform: translate(0,-50%); text-align: left}
.place.r, .place.right {left: auto; right: 12.228%; /*= (L + 1)/w */
  transform: translate(0,-50%); text-align: right}
.place.t.l, .place.top.left, .place.t.r, .place.top.right, .place.b.l,
.place.bottom.left, .place.b.r, .place.bottom.right {transform: none}

/* Numbered lines in a PRE */
pre.numbered {padding-left: 2em; overflow-y: hidden; position: relative}
pre.numbered::before {color: #aaa; text-align: right; white-space: pre-line;
  text-shadow: none;
  content: "1\A 2\A 3\A 4\A 5\A 6\A 7\A 8\A 9\A 10\A 11\A 12\A 13\A 14\A 15\A 16\A 17\A 18\A 19\A 20";
  position: absolute; top: 0; left: 0; width: 1.2em; font-family: serif;
  border-right: thin solid; padding-right: 0.2em}

/* White-on-black pages */
.slide.white {color: white; background-color: black;
  text-shadow: 0 0 1px black, 0 0 1px black, 0 0 1px black, 0 0 1px black}
.slide.white address {color: hsl(356,67%,40%)}
.slide.white ul > li::before,
.slide.white code {background: #444}
.slide.white :link {color: inherit; background: hsla(240,100%,20%,0.3)}
.slide.white :visited {color: inherit; background: hsla(270,100%,20%,0.3)}
.slide.white :link, .slide.white :visited {padding: 0.1em 0.3em;
  border-radius: 0.3em}

/* Full-size image overlays */
img.cover, img.fit {position: absolute; z-index: -1; top: 0; left: 0;
  width: 100%; height: 100%; object-fit: cover; padding: 0}
img.fit {object-fit: contain}

/* Slide number in upper right corner, in a white circle. */
.slide::after {content: counter(slide); color: black; position: absolute;
  top: 1em; bottom: 1em; line-height: 1; right: 0; text-shadow: none;
  width: 4em /*= L */;
  top: 0; bottom: 0; padding: 2em 0;
  text-align: center; font: bold 1em/1 My Montserrat, sans-serif;
  background: 50% 1.71em / auto 1.55em no-repeat
    url(data:image/svg+xml,<svg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%202%202%22><circle%20cx=%221%22%20cy=%221%22%20r=%221%22%20fill=%22%23F9F9F9%22/></svg>),
    50% 50% / auto 106% no-repeat url(TPAC-2021-slides-banner.svg)}
.slide.cover::after, .slide.final::after { /* No banner on cover page */
  padding-top: 2.6em; /* Align with the blue band in the cover image */
  background: 50% 2.35em / auto 1.55em no-repeat
    url(data:image/svg+xml,<svg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%202%202%22><circle%20cx=%221%22%20cy=%221%22%20r=%221%22%20fill=%22%23F9F9F9%22/></svg>)}
.slide.clear::after {content: none /* or " " to only omit the slide number */;
  background: none}
.slide.cover.clear::after, .slide.final.clear::after {/*content: none*/}

/* Two columns, and alternate elements in the left and right column */
.slide .columns > * {box-sizing: border-box;
  width: 47.134% /*= (w - L - 4)/2/(w - L - 2) */; float: right}
.slide .columns > *:nth-child(odd) {clear: both; float: left}
.slide .columns {overflow: hidden}
.slide .columns > :nth-child(-n+2),
.slide .columns > :nth-child(-n+2) > :first-child {margin-top: 0}
@supports (display: grid) {
  .slide .columns {overflow: visible; display: grid; grid: "a  b" / 1fr 1fr;
    grid-gap: 0 2em; justify-items: normal}
  .slide .columns > * {width: auto}
}
@supports not (display: grid) {
  /* If grid is not supported and the column is a list, remove the margin */
  .slide .columns > li {margin-left: 0; list-style-position: inside}
}

/* A list as a tree structure with box-drawing characters */
.tree {list-style: none; font: 1em/1 monospace;
  white-space: nowrap; padding: 0.2em 0; overflow: auto}
.tree li::before {content: none}
.tree code {background: none; font-family: My Lato, Carlito, Calibri, Open Sans,
    Helvetica Neue, Helvetica, Arial, Liberation Sans, sans-serif}
.comment .tree code {font-family: serif}

/* A trick that may be useful for Jeff's slides: class "compact" can
   be set on a list or other container and removes the top and bottom
   margin from list items and paragraphs inside that container. */
.compact li, .compact p {margin-top: 0; margin-bottom: 0}

/* Striped tables */
table.striped {border-collapse: collapse; margin-bottom:0.48em; width: 100%}
table.striped td, table.striped th {padding: 0.15em 0.3em; font-size: 0.93em; text-align: left}
table.striped tr:nth-child(2n+2) {background: #EEE; text-shadow: none}

/* Takahashi method (very big text, very few words) */
.shout {font-size: 400%; line-height: 1.1}
p.shout {margin: 0.25em 0}

/* Figures, and images with collapsed descriptions  */
img {max-width: 100%;}
figure {text-align: center; margin: 0.6em 0}
figure img, summary img {display: block; margin: 0.6em auto;
  max-height: 15.6em /*= N - 2 - 1.1 * 2 - 0.6 * 2 - 2 */}
.slide summary {list-style: none} /* Hide the triangle */
.slide summary::-webkit-details-marker {display: none} /* Ditto webkit/blink */
.slide [open] summary img {max-height: 4em}
.slide summary {outline: none}
.slide summary::before {content: "⊖"; float: left; width: 0.9em;
  margin-left: -1.1em; text-align: left; line-height: 0.9}
.slide [open] > summary::before {content: "⊕"}
.slide summary:focus::before {outline: thin solid blue;
  outline: thin solid invert}

/* Notes between the slides */
.comment {background: black; color: white; padding: 1rem 1rem;
  columns: 25em; font-family: Times New Roman, Times, serif;
  margin: 4rem 0 0; widows: 2; orphans: 2;
  column-rule: thin solid; column-gap: 2rem}
.comment :link, .comment :visited {color: inherit; text-decoration: underline}
.comment code {background: #333}
.comment pre {margin-left: 1em; font-family: Helvetica, sans-serif}
.comment :first-child {margin-top: 0}
.comment dd, .comment ul, .comment ol {padding-left: 1em; margin-left: 0}
.comment dd {margin-bottom: 1em}
.comment h1, .comment h2, .comment h3, .comment h4, .comment h5, .comment h6 {
  break-after: avoid}

/* Layout in slide mode (when body has class=full) */
.shower.full {transform: scale(var(--shower-full-scale))} /* For Shower 3.1 */
.full, .full .slide {position: absolute; overflow: hidden}
.full {top: 50%; left: 50%; background: black;
  margin: -11.5em /*= -N/2 */ 0 0 -20.444em /*= -w/2 */}
.full .slide {visibility: hidden; top: 0; left: 0; margin: 0}
.full .slide.active {visibility: visible}
.full .comment {display: none}
.full .slide:target {outline: none}

.full .progress {position: absolute; top: 0; left: 0; height: 1px;
  background: linear-gradient(to right, hsla(0,100%,50%,0),hsla(0,100%,50%,1));
  z-index: 1}
@media not (prefers-reduced-motion: reduce) {
  /* Experimental media query, see
     https://www.w3.org/TR/2020/WD-mediaqueries-5-20200731/ */
  .full .progress {transition: 0.5s}
}

/* Reveal elements one by one */
.full .next:not(.active):not(.visited) {visibility: hidden}

/* Animation of a slowly growing element */
@media not (prefers-reduced-motion: reduce) {
  /* Experimental media query, see
     https://www.w3.org/TR/2020/WD-mediaqueries-5-20200731/ */
  .full .grow {transition: 3s 1s ease-in-out transform;
    position: relative; transform: scale(0.1); transform-origin: 0 50%}
  .active .grow {transform: scale(1)}
}

/* Animate the active element when it appears. By default, the element
   is progressively revealed, starting from the left. Setting
   class=emerge instead causes the element to go from transparent to
   opaque. Class=strong also fades in the element and in addition
   makes its text red as long as it is the active item. And
   class=quick omits the animation. The class can be set on the
   element itself, on the ancestor that has class=incremental or
   class=overlay, or on any ancestor of the elements with class=next.
*/
.incremental .active.strong, .overlay .active.strong,
.incremental.strong .active, .overlay.strong .active,
.strong .next.active, .next.active.strong {color: hsl(356,67%,40%)}
@media not (prefers-reduced-motion: reduce) {
  /* Experimental media query, see
     https://www.w3.org/TR/2020/WD-mediaqueries-5-20200731/ */
  .incremental .active, .overlay .active, .next.active {animation: unfold 1s}
  .incremental .active.emerge, .overlay .active.emerge,
  .incremental.emerge .active, .overlay.emerge .active,
  .emerge .next.active, .next.active.emerge {animation: fade-in 0.5s}
  .incremental .active.quick, .overlay .active.quick,
  .incremental.quick .active, .overlay.quick .active,
  .quick .next.active, .next.active.quick {animation: none}
  .incremental .active.strong, .overlay .active.strong,
  .incremental.strong .active, .overlay.strong .active,
  .strong .next.active, .next.active.strong {animation: fade-in 0.5s}
}

@keyframes unfold {
  from {clip-path: inset(0% 100% 0% -100%)}
  to {clip-path: inset(0% 0% 0% -100%)}
}

/* Transitions between slides */
@media not (prefers-reduced-motion: reduce) {
  /* Experimental media query, see
     https://www.w3.org/TR/2020/WD-mediaqueries-5-20200731/ */

  .full .slide.active ~ .visited {animation: none} /* Moving backwards */

  /* Transition: fade-in */
  .full .slide.fade-in.visited,
  .fade-in .slide.visited {animation: delay 1s 1}
  .full .slide.fade-in + .active:not(.visited),
  .full .slide.fade-in + .comment + .active:not(.visited),
  .fade-in .slide.active:not(.visited) {animation: fade-in 1s 1}
  @keyframes delay {
    from {visibility: visible}
    to {visibility: visible}
  }
  @keyframes fade-in {
    from {opacity: 0}
    to {opacity: 1}
  }

  /* Transition: slide-in */
  .full .slide.slide-in.visited,
  .slide-in .slide.visited {animation: leftout 1s 1}
  .full .slide.slide-in + .active:not(.visited),
  .full .slide.slide-in + .comment + .active:not(.visited),
  .slide-in .slide.active:not(.visited) {animation: leftin 1s 1}
  @keyframes leftout {
    from {transform: translate(0%, 0); visibility: visible}
    to {transform: translate(-100%, 0); visibility: visible}
  }
  @keyframes leftin {
    from {transform: translate(-100%, 0); visibility: visible}
    to {transform: translate(0%, 0); visibility: visible}
  }

  /* Transition: slide-out */
  .full .slide.slide-out.visited,
  .slide-out .slide.visited {animation: leftout 1s 1}
  .full .slide.slide-out + .active:not(.visited),
  .full .slide.slide-out + .comment + .active:not(.visited),
  .slide-out .slide.active:not(.visited) {animation: behind 1s 1}
  @keyframes behind {
    from {z-index: -1}
    to {z-index: -1}
  }

  /* Transition: move-left */
  .full .slide.move-left.visited,
  .move-left .slide.visited {animation: leftout 1s 1}
  .full .slide.move-left + .active:not(.visited),
  .full .slide.move-left + .comment + .active:not(.visited),
  .move-left .slide.active:not(.visited) {animation: rightin 1s 1}
  @keyframes rightin {
    from {transform: translate(100%, 0); visibility: visible}
    to {transform: translate(0%, 0); visibility: visible}
  }

  /* Transition: move-up */
  .full .slide.move-up.visited,
  .move-up .slide.visited {animation: topout ease-in 1s 1}
  .full .slide.move-up + .active:not(.visited),
  .full .slide.move-up + .comment + .active:not(.visited),
  .move-up .slide.active:not(.visited) {animation: behind ease-in 1s 1}
  @keyframes topout {
    from {transform: translate(0, 0%); visibility: visible}
    80% {opacity: 1.0}
    to {transform: translate(0, -110%); visibility: visible; opacity: 0.0}
  }

  /* Transition: flip-up */
  .full {perspective: 1000px; perspective: 1000}
  .full .slide.flip-up.visited,
  .flip-up .slide.visited {animation: turn-down 1s 1 ease-in}
  .full .slide.flip-up + .active:not(.visited),
  .full .slide.flip-up + .comment + .active:not(.visited),
  .flip-up .slide.active:not(.visited) {animation: turn-up 1s 1 ease-out}
  @keyframes turn-down {
    from {transform: rotateX(0deg); visibility: visible}
    50%, to {transform: rotateX(90deg); visibility: hidden}
  }
  @keyframes turn-up {
    from, 50% {transform: rotateX(-90deg); visibility: visible}
    to {transform: rotateX(0deg); visibility: visible}
  }

  /* Transition: flip-left */
  .full .slide.flip-left.visited,
  .flip-left .slide.visited {animation: flip-left1 1s 1 ease-in}
  .full .slide.flip-left + .active:not(.visited),
  .full .slide.flip-left + .comment + .active:not(.visited),
  .flip-left .slide.active:not(.visited) {animation: flip-left2 1s 1 ease-out}
  @keyframes flip-left1 {
    from {transform: rotateY(0deg); visibility: visible}
    50%, to {transform: rotateY(-90deg); visibility: hidden}
  }
  @keyframes flip-left2 {
    from, 50% {transform: rotateY(90deg); visibility: visible}
    to {transform: rotateY(0deg); visibility: visible}
  }

  /* Transition: center-out */
  .full .slide.center-out.visited,
  .center-out .slide.visited {animation: gray 1s 1}
  .full .slide.center-out + .active:not(.visited),
  .full .slide.center-out + .comment + .active:not(.visited),
  .center-out .slide.active:not(.visited) {animation: center-out 1s 1}
  @keyframes gray {
    from, to {opacity: 0.5; visibility: visible}
  }
  @keyframes center-out {
    from {clip-path: circle(0)}
    to {clip-path: circle(100%)}
  }

  /* Transition: wipe-left */
  .full .slide.wipe-left.visited,
  .wipe-left .slide.visited {animation: gray 1s 1}
  .full .slide.wipe-left + .active:not(.visited),
  .full .slide.wipe-left + .comment + .active:not(.visited),
  .wipe-left .slide.active:not(.visited) {animation: rightin 1s 1}

  /* Transition: zigzag-left */
  .full .slide.zigzag-left.visited,
  .zigzag-left .slide.visited {animation: gray 1s 1}
  .full .slide.zigzag-left + .active:not(.visited),
  .full .slide.zigzag-left + .comment + .active:not(.visited),
  .zigzag-left .slide.active:not(.visited) {animation: zigzag-left 1s 1}
  @keyframes zigzag-left {
    from {clip-path:
      polygon(120% 0%, 120% 0%, 100% 30%, 120% 60%, 110% 100%, 120% 100%)}
    to   {clip-path:
      polygon(120% 0%,   0% 0%, -20% 30%,   0% 60%, -10% 100%, 120% 100%)}
  }

  /* Transition: zigzag-right */
  .full .slide.zigzag-right.visited,
  .zigzag-right .slide.visited {animation: gray 1s 1}
  .full .slide.zigzag-right + .active:not(.visited),
  .full .slide.zigzag-right + .comment + .active:not(.visited),
  .zigzag-right .slide.active:not(.visited) {animation: zigzag-right 1s 1}
  @keyframes zigzag-right {
    from {clip-path:
      polygon(-20% 0%,  -20% 0%, 0% 30%,  -20% 60%, -10% 100%, -20% 100%)}
    to   {clip-path:
      polygon(-20% 0%, 100% 0%, 120% 30%, 100% 60%, 110% 100%, -20% 100%)}
  }

  /* Transition: cut-in */
  .full .slide.cut-in.visited,
  .cut-in .slide.visited {animation: gray 1s 1}
  .full .slide.cut-in + .active:not(.visited),
  .full .slide.cut-in + .comment + .active:not(.visited),
  .cut-in .slide.active:not(.visited) {animation: cut-in 1s 1}
  @keyframes cut-in {
    from {transform: translate(-100%, -100%)}
    to {transform: translate(0%, 0%)}
  }

} /* End of @media not (prefers-reduced-motion: reduce) */

/* Shower makes a section with aria-live=assertive, which should be
   spoken, but not displayed. */
[role=region][aria-live=assertive] {position: absolute; top: 0; left: 0;
  clip: rect(0 0 0 0)}

/* Trick: If the viewport is exactly w x h or 1.2w x 1.2h,
   it means the slides are
   being shown inside an iframe of that size. Hide everything except
   the targeted slide in that case and omit the black background,
   which would otherwise be visible around the rounded corner of the
   slide. (When JavaScript is on, adding ?full to the end of the slide
   URL, e.g., ".../myslides.html?full#intro", has a similar effect and
   doesn't require the iframe to be this exact size.) */
@media (min-width: 40.839em /*= w - 0.05 */) and
    (max-width: 40.939em /*= w + 0.05 */) and
    (min-height: 22.95em /*= N - 0.05 */) and
    (max-height: 23.05em /*= N + 0.05 */),
    (min-width: 49.017em /*= 1.2 * w - 0.05 */) and
    (max-width: 49.117em /*= 1.2 * w + 0.05 */) and
    (min-height: 27.55em /*= 1.2 * N - 0.05 */) and
    (max-height: 27.65em /*= 1.2 * N + 0.05 */) {
  html {font-size: calc(100vh / 23)}
  body {margin: 0; overflow: hidden}
  body, .full {background: transparent}
  body > *, .slide {display: none}
  .slide {box-shadow: none; margin: 0}
  .slide:target {display: block}
}

/* class=framed is used to indicate the slides are inside an iframe. */
body.framed {background: transparent}
body.framed .slide {box-shadow: none}
body.framed .progress {display: none}


/* Printing. */
@page {
  margin: 1cm;
  @bottom {content: counter(page)}
}
@media print {
  html {font-size: 10pt}
  body {background: none; color: black; margin: 0; columns: 40.889em /*= w */;
    column-gap: 4em; column-rule: 0.2pt solid}
  .slide {border: 0.2pt solid black; margin: 2em auto; display: block;
    border-radius: 0;
    overflow: hidden; break-inside: avoid; box-shadow: none}
  .comment {background: none; color: black; padding: 0;
    margin: 1rem 1rem 2rem 0}
  .comment code {background: #eee}
  .slide summary::before {content: none}
  .slide details {visibility: hidden}
  .slide summary {visibility: visible}
}

/* Output to PDF (trick).

   To output to PDF, print the slides to PDF while selecting a
   landscape paper size, e.g. A4 landscape or Letter landscape.

   This style sheet assumes that, when the output is in landscape
   mode, the goal is to export one slide per page, without margins,
   and omitting the comments between the slides. (On the other hand,
   to output multiple slides per page and interleave the comments,
   choose a page size in portrait mode.)

   Note: Not all user agents respect the 'size' property to set the
   size of the output. If they don't, there will be some margin
   to the right and below each slide. Prince respects the property.
   E.g, to make myslides.pdf from myslides.html:

     prince --page-size=landscape myslides.html

   W3C team can also use the ",pdfui" tool online.
*/
@media print and (orientation: landscape) {
  html {font-size: 7mm}
  .comment {display: none}
  .slide {margin: 0; page-break-after: always; box-shadow: none; border: none}

  @page {
    size: 286.22mm /*= 7 * w */ 161mm /*= 7 * N */;
    margin: 0;
    @bottom {content: none}
  }
}
@media print and (orientation: landscape) and (min-width: 11in) {
  /* Letter-size paper */
  html {font-size: 0.26902in /*= 11 / w */}
  @page {size: 11in 6.1875in /*= 11 / A */}
}
@media print and (orientation: landscape) and (min-width: 296mm) {
  /* A4-size paper */
  html {font-size: 7.2636mm /*= 297 / w */}
  @page {size: 297mm 167.06mm /*= 297 / A */}
}
