:root {
  --ink: #0d0d0d;
  --paper: #f2f0eb;
  --dim: rgba(242, 240, 235, 0.62);
  --rule: rgba(242, 240, 235, 0.2);
  --gutter: 28px;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
html { background: var(--ink); color: var(--paper); overscroll-behavior-x: none; }
body {
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-size: 17px;
  line-height: 1.4;
  -webkit-font-smoothing: antialiased;
}
a { color: inherit; text-decoration: none; }
ul { list-style: none; }

.top {
  position: fixed; top: 0; left: 0; right: 0; z-index: 10;
  display: flex; justify-content: space-between; align-items: center;
  padding: 20px var(--gutter);
  font-size: 15px; font-weight: 700;
  color: #fff; text-shadow: 0 1px 12px rgba(0, 0, 0, 0.35);
  background: linear-gradient(rgba(0, 0, 0, 0.32), transparent);
}
.mark svg { display: block; height: 30px; width: auto; filter: drop-shadow(0 1px 10px rgba(0, 0, 0, 0.3)); }
.top nav { display: flex; gap: 26px; }
.top nav a { font-weight: 400; }

/* A frame is one film, edge to edge. */
.frame {
  position: relative; display: block;
  height: 100svh; overflow: hidden;
  background: #000;
  container-type: size;
}
.reel {
  position: absolute; inset: 0;
  background-size: cover; background-position: center;
}
.reel iframe {
  position: absolute; top: 50%; left: 50%;
  /* Cover the frame with the picture itself, pushing any baked-in black bars off-screen. */
  --cover: max(100cqw, 100cqh * var(--ar));
  width: calc(var(--cover) * var(--far) / var(--ar));
  height: calc(var(--cover) / var(--ar));
  transform: translate(-50%, -50%);
  border: 0; pointer-events: none;
}
.frame::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 38%;
  background: linear-gradient(transparent, rgba(0, 0, 0, 0.5));
  pointer-events: none;
}
.caption {
  position: absolute; left: var(--gutter); right: var(--gutter); bottom: 30px; z-index: 1;
}
.caption h2 {
  font-size: clamp(40px, 5.4vw, 80px);
  font-weight: 500; letter-spacing: -0.04em; line-height: 1;
}
/* Film titles are the design: set them the size of the screen. */
.caption h1, .titles {
  font-size: clamp(64px, 12.5vw, 220px);
  font-weight: 500; letter-spacing: -0.05em; line-height: 0.9;
  margin-left: -0.05em;
}
.hero .caption { bottom: 18px; }
.hero .caption p { margin: 0 0 10px; order: -1; }
.hero .caption { display: flex; flex-direction: column; }
.caption p { margin-top: 8px; color: var(--dim); }
.caption .award { margin: 0 0 10px; color: var(--paper); }
a.frame .caption h2 { transition: opacity 250ms; }
a.frame:hover .caption h2 { opacity: 0.75; }

/* Home: one film at a time. */
.marquee { position: relative; height: 100svh; overflow: hidden; background: #000; }
.slot {
  position: absolute; inset: 0; container-type: size;
  opacity: 0; transition: opacity 900ms ease;
}
.slot.on { opacity: 1; }
.marquee::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 45%;
  background: linear-gradient(transparent, rgba(0, 0, 0, 0.55));
  pointer-events: none;
}
.marquee-foot {
  position: absolute; left: 0; right: 0; bottom: 4px; z-index: 2;
  overflow: hidden;
}
.marquee { cursor: pointer; }
.row {
  padding: 0 var(--gutter); margin-bottom: 10px;
}
.note {
  display: none;
  color: var(--dim);
}
.note.on { display: block; }
.note strong { color: var(--paper); font-weight: 500; margin-right: 0.6em; }
.titles {
  display: flex; white-space: nowrap;
  padding: 0 0 0.12em var(--gutter);
  position: relative;
  transition: transform 800ms cubic-bezier(0.6, 0, 0.2, 1);
}
.titles .t { color: var(--paper); opacity: 0.28; transition: opacity 500ms; }
.titles .t.on { opacity: 1; }
.titles .t:hover { opacity: 0.6; }
.titles .t.on:hover { opacity: 1; }
.titles span { opacity: 0.28; padding: 0 0.22em; }

.text {
  padding: 120px var(--gutter) 0;
  max-width: 1100px;
}
.lede {
  font-size: clamp(22px, 2.3vw, 32px);
  line-height: 1.2; letter-spacing: -0.02em;
}
h4 {
  font-size: 15px; font-weight: 700; color: var(--dim);
  margin-bottom: 18px;
}
.link {
  display: inline-block; margin-top: 26px;
  font-weight: 700; border-bottom: 2px solid currentColor; padding-bottom: 2px;
}

/* Film page */
.detail {
  display: grid; grid-template-columns: 1fr 1.4fr; gap: 60px;
  padding: 80px var(--gutter) 120px;
}
.credits div { padding: 14px 0; border-top: 1px solid var(--rule); }
.credits dt { color: var(--dim); font-size: 15px; }
.credits dd { font-size: 22px; letter-spacing: -0.01em; margin-top: 2px; }
.fests ul { border-top: 1px solid var(--rule); }
.fests li {
  display: flex; justify-content: space-between; gap: 20px; flex-wrap: wrap;
  padding: 14px 0; border-bottom: 1px solid var(--rule);
  font-size: 19px;
}
.fests em { font-style: normal; font-weight: 700; }
.next-film { height: 70svh; }

.foot {
  display: flex; justify-content: space-between; gap: 20px; flex-wrap: wrap;
  padding: 120px var(--gutter) 34px;
  font-size: 15px; color: var(--dim);
}

@media (max-width: 720px) {
  :root { --gutter: 16px; }
  .top { padding: 16px var(--gutter); font-size: 14px; }
  .top nav { gap: 16px; }
  .mark svg { height: 27px; }
  .frame { height: 82svh; }
  .caption { bottom: 22px; }
  .marquee { height: 88svh; }
  .caption h1, .titles { font-size: 19vw; }
  /* Home: one film at a time. */
.marquee { position: relative; height: 100svh; overflow: hidden; background: #000; }
.slot {
  position: absolute; inset: 0; container-type: size;
  opacity: 0; transition: opacity 900ms ease;
}
.slot.on { opacity: 1; }
.marquee::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 45%;
  background: linear-gradient(transparent, rgba(0, 0, 0, 0.55));
  pointer-events: none;
}
.marquee-foot {
  position: absolute; left: 0; right: 0; bottom: 4px; z-index: 2;
  overflow: hidden;
}
.marquee { cursor: pointer; }
.row {
  padding: 0 var(--gutter); margin-bottom: 10px;
}
.note {
  display: none;
  color: var(--dim);
}
.note.on { display: block; }
.note strong { color: var(--paper); font-weight: 500; margin-right: 0.6em; }
.titles {
  display: flex; white-space: nowrap;
  padding: 0 0 0.12em var(--gutter);
  position: relative;
  transition: transform 800ms cubic-bezier(0.6, 0, 0.2, 1);
}
.titles .t { color: var(--paper); opacity: 0.28; transition: opacity 500ms; }
.titles .t.on { opacity: 1; }
.titles .t:hover { opacity: 0.6; }
.titles .t.on:hover { opacity: 1; }
.titles span { opacity: 0.28; padding: 0 0.22em; }

.text { padding-top: 80px; }
  .detail { grid-template-columns: 1fr; gap: 50px; padding: 50px var(--gutter) 80px; }
  .fests li { font-size: 17px; flex-direction: column; gap: 2px; }
  .next-film { height: 60svh; }
  .foot { padding-top: 80px; flex-direction: column; gap: 6px; }
}
