/* Beancat landing. Weekly register for the page (beancat-brand-kit), Studio register
   (the shipped web app, dark) inside every product shot. */

/* Brand fonts (SIL OFL 1.1), Latin subsets from beancat-brand-kit/fonts (Libre Franklin from Google
   Fonts until the kit has it); DM Sans is the app's UI face. */
@font-face {
  font-family: "Libre Franklin";
  font-style: normal;
  font-weight: 400 900;
  font-display: swap;
  src: url("assets/fonts/libre-franklin-latin.woff2") format("woff2");
}
@font-face {
  font-family: "Unbounded";
  font-style: normal;
  font-weight: 400 900;
  font-display: swap;
  src: url("assets/fonts/unbounded-latin.woff2") format("woff2");
}
@font-face {
  font-family: "Onest";
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url("assets/fonts/onest-latin.woff2") format("woff2");
}
@font-face {
  font-family: "DotGothic16";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("assets/fonts/dotgothic16-latin.woff2") format("woff2");
}
@font-face {
  font-family: "DM Sans";
  font-style: normal;
  font-weight: 100 1000;
  font-display: swap;
  src: url("assets/fonts/dm-sans-variable.woff2") format("woff2");
}

:root {
  --paper: #f4eee2;
  --paper-deep: #e9e3d8;
  --ink: #15161b;
  --ink-soft: #636261;
  --rule: #d8cfbf;
  --blue: #0554f4;
  --blue-700: #0849cd;
  --blue-300: #82aafa;
  --white: #ffffff;

  --display: "Libre Franklin", "Franklin Gothic Medium", "Helvetica Neue", Arial, sans-serif;
  --wordmark: "Unbounded", "Arial Black", system-ui, sans-serif;
  --body: "Onest", system-ui, -apple-system, "Segoe UI", sans-serif;
  --label: "DotGothic16", ui-monospace, monospace;

  --page: 80rem;
  --nav-h: 4.25rem;
  --vp-top: clamp(4.5rem, 9vw, 8rem);
  --rule-gap: clamp(1.75rem, 4vw, 3rem);
  --gutter: clamp(1rem, 4vw, 3.5rem);
  --shadow: 0.625rem 0.625rem 0 var(--ink);
  --shadow-sm: 0.3125rem 0.3125rem 0 var(--ink);

  /* Studio: apps/web theme (surface + primary ramps, dark mode) */
  --app-bg: #0b1017;
  --app-s1: #141a23;
  --app-s2: #202a37;
  --app-text: #eff2f7;
  --app-muted: #9ca7b7;
  --app-border: rgb(205 212 223 / 0.16);
  --app-border-strong: rgb(156 167 183 / 0.38);
  --app-primary: #8db5ff;
  --app-sans: "DM Sans", system-ui, sans-serif;
  --app-mono: ui-monospace, "SF Mono", Menlo, monospace;
  --t-think: #f59e0b;
  --t-look: #06b6d4;
  --t-ready: #64748b;
  --t-paint: #d946ef;
}

*,
*::before,
*::after {
  box-sizing: border-box;
}
/* The page is laid out for a laptop screen and grows with bigger ones: 1rem is 16px (the browser's
   default) up to 1600 × 880 and scales with whichever of width or height is tighter beyond that, up
   to 1.5× (a 1440p monitor), so the page keeps its laptop proportions instead of shrinking into a
   wide field of paper. Page sizes are in rem so they all follow; the demos scale to their frames. */
html {
  font-size: clamp(100%, min(1vw, 1.82vh), 150%);
  scroll-behavior: smooth;
  -webkit-text-size-adjust: 100%;
}
/* The paper: a faint pen-drawn hatch net (manga kake-ami) over the grain of the stock. Both tiles
   are drawn at 2x for retina and are seamless; the nav takes the grain alone. */
body {
  margin: 0;
  background:
    url("assets/paper/hatching.webp") 0 0 / 50rem,
    url("assets/paper/grain.webp") 0 0 / 24rem,
    var(--paper);
  color: var(--ink);
  font: 400 1.0625rem / 1.55 var(--body);
}
img {
  display: block;
  max-width: 100%;
}
a {
  color: inherit;
}
button,
textarea {
  font: inherit;
  color: inherit;
}
::selection {
  background: var(--blue);
  color: var(--white);
}
:focus-visible {
  outline: 0.1875rem solid var(--blue);
  outline-offset: 0.25rem;
}

.wrap {
  max-width: calc(var(--page) + 2 * var(--gutter));
  margin: 0 auto;
  padding: 0 var(--gutter);
}

/* ---------- Type ---------- */
.h-display,
.h-section {
  margin: 0;
  font-family: var(--display);
  font-weight: 800;
  letter-spacing: -0.03em;
  line-height: 1.04;
  text-wrap: balance;
}
.h-display {
  font-size: clamp(2.6rem, 1.3rem + 3.6vw, 4.9rem);
}
.h-section {
  font-size: clamp(1.75rem, 1rem + 1.7vw, 2.5rem);
}
.h-display span,
.h-section span {
  display: block;
  color: var(--blue);
  margin-top: 0.06em;
}
/* A phrase that moves to the next line whole instead of breaking; it only wraps inside when it can't fit a line. */
.h-display .phrase,
.h-section .phrase {
  display: inline-block;
  margin: 0;
}
.tag {
  font-family: var(--label);
  font-size: 0.8125rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--blue);
}

/* ---------- Buttons ---------- */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font: 700 1rem / 1 var(--display);
  letter-spacing: -0.01em;
  padding: 1em 1.45em;
  background: var(--blue);
  color: var(--white);
  border: 0.1875rem solid var(--ink);
  box-shadow: var(--shadow-sm);
  text-decoration: none;
  cursor: pointer;
  white-space: nowrap;
  transition:
    transform 120ms ease,
    box-shadow 120ms ease,
    background-color 120ms ease;
}
.btn:hover {
  background: var(--blue-700);
  transform: translate(-0.125rem, -0.125rem);
  box-shadow: 0.4375rem 0.4375rem 0 var(--ink);
}
.btn:active {
  transform: translate(0.1875rem, 0.1875rem);
  box-shadow: 0.125rem 0.125rem 0 var(--ink);
}
.btn--sm {
  font-size: 0.875rem;
  padding: 0.78em 1.1em;
}

/* ---------- Nav ---------- */
.skip-link {
  position: absolute;
  left: 1rem;
  top: -100px;
  z-index: 30;
  background: var(--ink);
  color: var(--paper);
  padding: 0.625rem 0.875rem;
  font-weight: 600;
  text-decoration: none;
}
.skip-link:focus {
  top: 0.75rem;
}

.nav {
  position: sticky;
  top: 0;
  z-index: 20;
  background:
    url("assets/paper/grain.webp") 0 0 / 24rem,
    var(--paper);
  border-bottom: 0.125rem solid var(--ink);
}
.nav .wrap {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: var(--nav-h);
}
.nav__brand img {
  height: 1.75rem;
  width: auto;
}
.nav__right {
  display: flex;
  align-items: center;
  gap: 1.5rem;
}
.nav__signin {
  font-weight: 600;
  text-decoration: none;
  white-space: nowrap;
}
.nav__signin:hover {
  color: var(--blue);
}

/* ---------- Hero ---------- */
/* Fills the first screen at every size, so the next section always starts below the fold. The
   content sits a touch above center (more padding below than above). */
.hero {
  display: flex;
  align-items: center;
  min-height: calc(100vh - var(--nav-h) - 0.125rem);
  /* biome-ignore lint/suspicious/noDuplicateProperties: 100vh above is the fallback where svh is unsupported. */
  min-height: calc(100svh - var(--nav-h) - 0.125rem);
  padding: clamp(1.5rem, 3vw, 2.5rem) 0 clamp(2rem, 4.5vw, 4rem);
}
.hero .wrap {
  width: 100%;
  display: grid;
  grid-template-columns: minmax(23.75rem, 5fr) minmax(0, 8fr);
  gap: clamp(2rem, 5vw, 4.5rem);
  align-items: center;
}
/* The headline is sized to its own column (container units) so "Without juggling" always fits one
   line: ~54px beside the demo on a laptop, above the section headlines; at most 3.08rem stacked.
   × 1.282: Unbounded 800 (-0.045em) set that phrase 1.282 times as wide as Libre Franklin 800
   (-0.03em) does, so this keeps it filling the column. */
.hero__copy {
  display: grid;
  gap: 1.25rem;
  align-content: start;
  container-type: inline-size;
}
.hero .h-display {
  font-size: 2.25rem;
  /* biome-ignore lint/suspicious/noDuplicateProperties: 2.25rem above is the fallback without container units. */
  font-size: clamp(1.75rem, calc(9.8cqi * 1.282), calc(3.4rem * 1.282));
}
.hero__eyebrow {
  justify-self: start;
}
.hero__cta {
  justify-self: start;
  margin-top: 0.5rem;
}
/* Beside the copy, the demo never runs past the first screen: on short windows it narrows to the
   height left (less the paddings, its border and shadow), keeping to the right edge. */
.hero .demo--hero {
  justify-self: end;
  width: clamp(
    60%,
    calc(
      (
        100svh -
        var(--nav-h) -
        0.125rem -
        clamp(1.5rem, 3vw, 2.5rem) -
        clamp(2rem, 4.5vw, 4rem) -
        1.125rem
      ) *
      860 / 592
    ),
    100%
  );
}
/* Stacked on narrow screens and on tall portrait ones (an iPad Pro would squeeze the demo beside the copy). */
@media (max-width: 1000px), (orientation: portrait) {
  .hero .wrap {
    grid-template-columns: 1fr;
  }
  .hero .h-display {
    font-size: clamp(1.75rem, calc(9.8cqi * 1.282), calc(2.4rem * 1.282));
  }
  .hero .demo--hero {
    width: auto;
    justify-self: stretch;
  }
}

/* ---------- Placeholder for an animation still to be produced ---------- */
.placeholder {
  position: relative;
  aspect-ratio: 16 / 10;
  background: var(--ink);
  color: var(--paper);
  border: 4px solid var(--ink);
  box-shadow: 10px 10px 0 var(--blue);
  padding: clamp(20px, 2.6vw, 36px);
  display: grid;
  align-content: start;
  gap: 14px;
  overflow: hidden;
}
.placeholder::after {
  content: "";
  position: absolute;
  inset: 12px;
  border: 1px dashed rgb(244 238 226 / 0.25);
  pointer-events: none;
}
.placeholder .tag {
  color: var(--blue-300);
}
.placeholder h3 {
  margin: 0;
  font: 700 clamp(1.05rem, 0.9rem + 0.6vw, 1.4rem) / 1.2 var(--display);
  letter-spacing: -0.01em;
}
.placeholder ol {
  margin: 0;
  padding-left: 1.2em;
  display: grid;
  gap: 6px;
  font-size: 0.92rem;
  line-height: 1.45;
  color: #d9d4ca;
}
.placeholder ol b {
  color: var(--paper);
  font-weight: 600;
}
@media (max-width: 560px) {
  .placeholder {
    aspect-ratio: auto;
  }
}

/* ---------- Value prop sections ---------- */
.vp {
  padding: var(--vp-top) 0 0;
}
/* The line starts after the tag, so the paper runs on behind the tag without a flat patch. */
.vp__rule {
  display: flex;
  align-items: flex-start;
  gap: 0.875rem;
  height: 0.1875rem;
  margin-bottom: var(--rule-gap);
}
.vp__rule::after {
  content: "";
  flex: 1;
  align-self: stretch;
  background: var(--ink);
}
.vp__rule .tag {
  flex: none;
  margin-top: calc(0.1875rem - 0.8em);
  line-height: 1.5;
}
.vp__head {
  margin-bottom: clamp(2rem, 4vw, 3.5rem);
}
.vp__body {
  display: grid;
  grid-template-columns: minmax(0, 8fr) minmax(0, 4fr);
  gap: clamp(2rem, 5vw, 4.5rem);
  align-items: center;
}
.vp--flip .vp__body {
  grid-template-columns: minmax(0, 4fr) minmax(0, 8fr);
}
.vp--flip .vp__show {
  order: 2;
}
.vp__points {
  display: grid;
  gap: 1.75rem;
  align-content: center;
}
.points {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 1.125rem;
}
.points li {
  display: grid;
  grid-template-columns: 1.375rem 1fr;
  gap: 0.875rem;
  font-size: 1.15rem;
  font-weight: 500;
  line-height: 1.4;
}
.points b {
  font-weight: 700;
}
.bean {
  width: 1.125rem;
  height: 1.25rem;
  margin-top: 0.1875rem;
  color: var(--blue);
  transform: rotate(180deg);
}
.vp__points .btn {
  justify-self: start;
}
@media (max-width: 900px) {
  .vp__body,
  .vp--flip .vp__body {
    grid-template-columns: 1fr;
  }
  .vp--flip .vp__show {
    order: 0;
  }
}

/* ---------- Dollars: a scene's receipt ---------- */
/* One real Atlas scene, itemized: dollars added, every request with its cost, what's left.
   It prints once when it scrolls into view (receipt.js), rising out of the slot header first;
   without JS or with reduced motion it simply sits there, whole. */
.till {
  position: relative;
  width: min(100%, 31.25rem);
  margin: 0 auto;
  padding-bottom: 0.4375rem;
}
.till__slot {
  position: absolute;
  z-index: 2;
  left: -1.25rem;
  right: -1.25rem;
  bottom: 0;
  height: 0.875rem;
  border-radius: 0.4375rem;
  background: var(--ink);
}
.till__feed {
  position: relative;
  overflow: hidden;
  margin-right: -0.75rem;
  padding: 0 0.75rem 0 0;
}
.till__paper {
  position: relative;
}
.till__sheet {
  background: var(--white);
  box-shadow: var(--shadow);
  padding: 2rem 2rem 2.125rem;
  font: 400 0.9375rem / 1.5 var(--label);
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--ink);
}
.till__sheet p {
  margin: 0;
}
.till__head {
  display: grid;
  justify-items: center;
  gap: 0.5rem;
  padding-bottom: 1.125rem;
  border-bottom: 0.125rem dashed var(--ink);
}
.till__head img {
  width: 8rem;
  height: auto;
  margin-bottom: 0.25rem;
}
.till__head p {
  color: var(--blue);
  font-size: 0.8125rem;
  text-align: center;
}
.till__head .till__meta {
  justify-self: stretch;
  display: flex;
  justify-content: space-between;
  margin-top: 0.375rem;
  color: var(--ink-soft);
  font-size: 0.75rem;
}
.till__row,
.till__lines li {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 1rem;
}
.till__row span:last-child,
.till__lines li span:last-child {
  flex: none;
  font-variant-numeric: tabular-nums;
}
.till__row--in {
  padding: 0.875rem 0;
  border-bottom: 0.125rem dashed var(--ink);
  color: var(--blue);
}
.till__lines {
  list-style: none;
  margin: 0;
  padding: 0.75rem 0 0.875rem;
  display: grid;
  gap: 0.375rem;
  border-bottom: 0.125rem dashed var(--ink);
}
.till__lines small {
  display: block;
  margin-top: 1px;
  font-size: 0.75rem;
  color: var(--ink-soft);
  letter-spacing: 0.03em;
}
.till__total {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 1rem;
  padding: 1rem 0 0.5rem;
}
.till__total strong {
  font: 800 1.75rem / 1 var(--display);
  letter-spacing: -0.03em;
  text-transform: none;
  color: var(--ink);
}
@media (max-width: 560px) {
  .till__slot {
    left: -0.625rem;
    right: -0.625rem;
  }
  .till__sheet {
    padding: 1.625rem 1.25rem 1.75rem;
    font-size: 0.8125rem;
  }
}

.section-cta {
  margin-top: clamp(2rem, 4vw, 3rem);
}

/* ---------- Originals (night) ---------- */
.night {
  background: var(--ink);
  color: var(--paper);
  margin-top: clamp(4.5rem, 9vw, 8rem);
  padding: clamp(4.5rem, 9vw, 7.5rem) 0;
}
.night .vp__rule::after {
  background: var(--paper);
}
.night .vp__rule .tag {
  color: var(--blue-300);
}
.night .h-section span {
  color: var(--blue-300);
}
.night .h-section .made {
  color: var(--paper);
}
.wm {
  display: inline;
  font-family: var(--wordmark);
  font-weight: 900;
  letter-spacing: -0.065em;
  text-transform: lowercase;
}
.night .h-section .wm {
  color: var(--blue);
}
.h-section .wm,
.h-display .wm {
  display: inline;
}
.tab {
  background: transparent;
  color: var(--paper);
  border: 2px solid var(--paper);
  padding: 9px 16px;
  font: 700 0.9rem / 1 var(--display);
  letter-spacing: -0.01em;
  cursor: pointer;
}
.tab[aria-selected="true"] {
  background: var(--paper);
  color: var(--ink);
}
[data-panel][hidden] {
  display: none;
}
.night :focus-visible {
  outline-color: var(--blue-300);
}

/* One card per film. Each plays in the cinema below; the play badge shows on hover, or always where
   there's no hover. */
.films {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 1.75rem;
}
.film {
  text-decoration: none;
  display: grid;
  align-content: start;
  background: #252529;
  border: 0.1875rem solid var(--paper);
  box-shadow: 0.625rem 0.625rem 0 var(--blue);
  transition:
    transform 120ms ease,
    box-shadow 120ms ease;
}
.film:hover {
  transform: translate(-0.1875rem, -0.1875rem);
  box-shadow: 0.8125rem 0.8125rem 0 var(--blue);
}
.film:active {
  transform: translate(0.1875rem, 0.1875rem);
  box-shadow: 0.375rem 0.375rem 0 var(--blue);
}
.film__img {
  position: relative;
  aspect-ratio: 16 / 9;
  overflow: hidden;
}
.film__img img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.film__play {
  position: absolute;
  left: 50%;
  top: 50%;
  translate: -50% -50%;
  width: 3.75rem;
  height: 3.75rem;
  display: grid;
  place-items: center;
  background: var(--blue);
  color: var(--white);
  border: 0.1875rem solid var(--paper);
  box-shadow: 0.3125rem 0.3125rem 0 var(--ink);
  transition:
    opacity 120ms ease,
    scale 120ms ease;
}
.film__play svg {
  width: 1.125rem;
  height: 1.3rem;
  margin-left: 0.25rem;
}
@media (hover: hover) {
  .film__play {
    opacity: 0;
    scale: 0.85;
  }
  .film:hover .film__play,
  .film:focus-visible .film__play {
    opacity: 1;
    scale: 1;
  }
}
.film__runtime {
  position: absolute;
  left: 0.75rem;
  bottom: 0.75rem;
  background: var(--paper);
  color: var(--ink);
  font: 700 0.8rem / 1 var(--display);
  padding: 0.4375rem 0.625rem;
  font-variant-numeric: tabular-nums;
}
.film__body {
  padding: 0.875rem 1rem 1.125rem;
  display: grid;
  gap: 0.375rem;
}
.film__body small {
  font-family: var(--label);
  font-size: 0.75rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--blue-300);
}
.film__body h3 {
  margin: 0;
  font: 700 1.05rem / 1.2 var(--display);
  letter-spacing: -0.01em;
}
.night .section-cta .btn {
  box-shadow: 0.3125rem 0.3125rem 0 var(--blue);
  border-color: var(--paper);
}
@media (max-width: 860px) {
  .films {
    grid-template-columns: 1fr;
  }
}

/* The cinema: a film playing over the dimmed page, the screen shaped to it. A vertical film gets a
   tall screen as high as the window allows with the details beside it (below it on phones); a
   landscape film gets a wide screen with the details below. The dialog fills the window, so the dark
   around the room is the dialog itself and clicking it closes the cinema. */
.cinema {
  --pad: clamp(1rem, 3vw, 2.5rem);
  /* Room above the screen for the close button. */
  --top: calc(var(--pad) + 3.75rem);
  width: 100%;
  height: 100%;
  max-width: none;
  max-height: none;
  margin: 0;
  padding: var(--top) var(--pad) var(--pad);
  border: 0;
  background: transparent;
  color: var(--paper);
  overflow: auto;
}
.cinema[open] {
  display: grid;
  place-items: center;
}
.cinema::backdrop {
  background: rgb(21 22 27 / 0.94);
}
html:has(.cinema[open]) {
  overflow: hidden;
}
.cinema__room {
  display: grid;
  grid-template-columns: auto minmax(0, 24rem);
  gap: clamp(1.5rem, 3vw, 3rem);
  align-items: end;
}
.cinema__screen {
  position: relative;
  box-sizing: content-box;
  aspect-ratio: 9 / 16;
  /* The window's height less the paddings and the screen's border and shadow. */
  height: min(calc(100svh - var(--top) - var(--pad) - 1rem), 64rem);
  background: #000;
  border: 0.1875rem solid var(--paper);
  box-shadow: 0.625rem 0.625rem 0 var(--blue);
}
.cinema__screen iframe {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border: 0;
}
.cinema[data-shape="wide"] .cinema__room {
  grid-template-columns: minmax(0, 1fr);
}
.cinema[data-shape="wide"] .cinema__screen {
  aspect-ratio: 16 / 9;
  height: auto;
  width: min(
    calc(100vw - 2 * var(--pad) - 1rem),
    calc((100svh - var(--top) - var(--pad) - 11rem) * 16 / 9),
    90rem
  );
}
.cinema__info {
  display: grid;
  gap: 0.5rem;
  justify-items: start;
  padding-bottom: 0.625rem;
}
.cinema__info > * {
  margin: 0;
}
.cinema__info small {
  font-family: var(--label);
  font-size: 0.8125rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--blue-300);
}
.cinema__info h3 {
  font: 800 clamp(1.5rem, 1rem + 1.4vw, 2.4rem) / 1.1 var(--display);
  letter-spacing: -0.03em;
  text-wrap: balance;
}
.cinema__info p {
  max-width: 40ch;
  color: #cfc9be;
  font-size: 1.1rem;
  line-height: 1.45;
}
.cinema__yt {
  margin-top: 0.25rem;
  font-size: 0.9rem;
  font-weight: 600;
  color: #cfc9be;
  text-underline-offset: 0.2em;
}
.cinema__yt:hover {
  color: var(--paper);
}
.cinema__next {
  margin-top: clamp(1rem, 3vh, 2.5rem);
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 0.125rem 1.25rem;
  align-items: center;
  min-width: min(100%, 16rem);
  padding: 0.75rem 1rem;
  text-align: left;
  background: transparent;
  border: 0.125rem solid rgb(244 238 226 / 0.45);
  cursor: pointer;
  transition: border-color 120ms ease;
}
.cinema__next[hidden] {
  display: none;
}
.cinema__next:hover {
  border-color: var(--paper);
}
.cinema__next small {
  grid-column: 1;
  font-size: 0.6875rem;
}
.cinema__next-title {
  grid-column: 1;
  font: 700 1rem / 1.2 var(--display);
  letter-spacing: -0.01em;
}
.cinema__next span {
  grid-column: 2;
  grid-row: 1 / span 2;
  font: 700 1.25rem / 1 var(--display);
}
.cinema__close {
  position: fixed;
  top: var(--pad);
  right: var(--pad);
  z-index: 1;
  display: inline-flex;
  align-items: center;
  gap: 0.625rem;
  padding: 0.75rem 1rem;
  font: 700 0.9rem / 1 var(--display);
  letter-spacing: -0.01em;
  background: var(--paper);
  color: var(--ink);
  border: 0.1875rem solid var(--paper);
  box-shadow: 0.3125rem 0.3125rem 0 var(--blue);
  cursor: pointer;
}
.cinema__close:hover {
  background: var(--white);
}
.cinema__close svg {
  width: 0.875rem;
  height: 0.875rem;
}
.cinema[open] .cinema__room {
  animation: cinema-in 260ms cubic-bezier(0.2, 0.8, 0.2, 1);
}
.cinema[open]::backdrop {
  animation: cinema-dim 200ms ease-out;
}
@keyframes cinema-in {
  from {
    opacity: 0;
    translate: 0 1.25rem;
  }
}
@keyframes cinema-dim {
  from {
    opacity: 0;
  }
}
/* Phones: the screen as wide as the window, the details below it. */
@media (max-width: 700px) {
  .cinema__room {
    grid-template-columns: minmax(0, 1fr);
    gap: 1.25rem;
  }
  .cinema__screen {
    justify-self: center;
    height: min(
      calc(100svh - var(--top) - var(--pad) - 9rem),
      calc((100vw - 2 * var(--pad) - 1rem) * 16 / 9)
    );
  }
  .cinema__info p {
    font-size: 1rem;
  }
  .cinema__next {
    margin-top: 0.75rem;
  }
}

/* ---------- Closing ---------- */
.closing {
  background: var(--blue);
  color: var(--white);
  border-top: 0.25rem solid var(--ink);
  border-bottom: 0.25rem solid var(--ink);
  margin-top: clamp(4.5rem, 9vw, 8rem);
}
.night + .closing {
  margin-top: 0;
}
.closing .wrap {
  display: grid;
  gap: clamp(2rem, 4vw, 3rem);
  justify-items: start;
  padding-top: clamp(4rem, 8vw, 7rem);
  padding-bottom: clamp(4rem, 8vw, 7rem);
}
.closing h2 span {
  display: block;
}
.closing h2 .wm {
  display: inline;
}
.closing h2 {
  margin: 0;
  font: 800 clamp(2.1rem, 1rem + 3.2vw, 4rem) / 1.04 var(--display);
  letter-spacing: -0.03em;
  text-shadow: 0.3125rem 0.3125rem 0 var(--ink);
  text-wrap: balance;
}
.closing .btn {
  background: var(--white);
  color: var(--ink);
}
.closing .btn:hover {
  background: var(--paper);
}
.closing :focus-visible {
  outline-color: #0ae8e8;
}

/* ---------- Footer ---------- */
.footer {
  padding: 2.25rem 0 3rem;
}
.footer .wrap {
  display: flex;
  flex-wrap: wrap;
  gap: 1.125rem 2.25rem;
  align-items: center;
  justify-content: space-between;
}
.footer img {
  height: 1.5rem;
}
.footer nav {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem 1.375rem;
  font-weight: 600;
  font-size: 0.95rem;
}
.footer nav a {
  text-decoration: none;
}
.footer nav a:hover {
  color: var(--blue);
}
.footer small {
  color: var(--ink-soft);
  font-size: 0.9rem;
}

/* ---------- Phones ---------- */
@media (max-width: 560px) {
  body {
    font-size: 1rem;
  }
  .nav .wrap {
    gap: 0.75rem;
  }
  .nav__brand img {
    height: 1.1875rem;
  }
  .nav__right {
    gap: 0.75rem;
  }
  .nav .btn--sm {
    padding: 0.7em 0.85em;
    font-size: 0.8rem;
  }
  .points li {
    font-size: 1.05rem;
  }
}
@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }
  .btn,
  .film,
  .film__play,
  .cinema__next {
    transition: none;
  }
  .cinema[open] .cinema__room,
  .cinema[open]::backdrop {
    animation: none;
  }
}
