:root{
  --black:#000000;
  --white:#FFFFFF;
  --soft:rgba(255,255,255,.74);
  --quiet:rgba(255,255,255,.5);
  --line:rgba(255,255,255,.16);
  --green:#00BF0C;
  --blue:#004CE2;
  --red:#DE0346;
  --grad-h:linear-gradient(90deg,var(--green) 0%,var(--blue) 50%,var(--red) 100%);
  --grad-v:linear-gradient(180deg,var(--green) 0%,var(--blue) 55%,var(--red) 100%);
  --font:"proxima-nova",Arial,Helvetica,sans-serif;
  --measure:34rem;
  box-sizing:border-box;
  padding-top:env(safe-area-inset-top,0px);
  padding-bottom:env(safe-area-inset-bottom,0px);
  background:var(--black);
}
/* WiC is black in every theme: the stand, the counter and the app are all dark. */
@media (prefers-color-scheme: light){:root:not([data-theme="light"]){--black:#000000;--white:#FFFFFF}}
:root[data-theme="dark"]{--black:#000000;--white:#FFFFFF}
html{scroll-padding-top:env(safe-area-inset-top,0px);scroll-behavior:smooth;-webkit-text-size-adjust:100%}
*,*::before,*::after{box-sizing:inherit}
body{margin:0;background:var(--black);color:var(--white);font-family:var(--font);font-weight:400;
  font-size:clamp(1.0625rem,.98rem + .35vw,1.25rem);line-height:1.55;overflow-x:hidden;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
img{max-width:100%;display:block}
a{color:inherit}
:focus-visible{outline:2px solid var(--white);outline-offset:4px;border-radius:4px}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* ---------- Opening screen: the counter, brought to life ---------- */
.opening{position:relative;min-height:100svh;display:flex;flex-direction:column;align-items:center;
  text-align:center;padding:clamp(2.5rem,7vh,5rem) 1.5rem 0;isolation:isolate}
.lockup{display:flex;flex-direction:column;align-items:center;gap:0;
  margin-bottom:clamp(2.5rem,7vh,4.5rem)}
.lockup{--lw:clamp(132px,22vw,240px)}
.lockup svg{width:var(--lw);height:auto;display:block}
/* Tagline sits under the mark as on the counter: from the foot of the W's left leg to the C's outer edge. */
.tagline{display:block;align-self:flex-start;width:calc(var(--lw) * .8417);margin-left:calc(var(--lw) * .1317);
  margin-top:calc(var(--lw) * .0852 - .2em);font-weight:500;font-size:calc(var(--lw) * .076);line-height:1.2;
  white-space:nowrap;text-align:left;overflow:visible}
.headline{font-weight:600;font-size:clamp(2.6rem,1.4rem + 4.6vw,5.5rem);line-height:1.02;
  letter-spacing:-.022em;margin:0 0 clamp(1rem,2.4vh,1.5rem);max-width:14ch}
.perch{display:inline-block;width:.62em;height:.8em;vertical-align:baseline}
.lede{color:var(--soft);max-width:var(--measure);margin:0 0 clamp(1.75rem,4vh,2.5rem)}
.btn{appearance:none;border:0;cursor:pointer;font:inherit;font-weight:600;font-size:1.0625rem;
  color:var(--white);background:var(--grad-h);border-radius:999px;padding:1.05rem 2.1rem;
  text-decoration:none;display:inline-flex;align-items:center;justify-content:center;min-height:52px;
  text-shadow:0 1px 2px rgba(0,0,0,.35);transition:filter .2s ease, transform .2s ease}
.btn:hover{filter:brightness(1.08)}
.btn:active{transform:translateY(1px)}
.motif{--motif:url("/assets/motif-mask.webp")}
.motif i{position:absolute;z-index:-1;display:block;background:var(--grad-v);
  -webkit-mask-image:var(--motif);mask-image:var(--motif);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}
.motif i::after{content:"";position:absolute;inset:0}
/* Wide screens: the motif rises up both sides, as on the stand's back wall. */
.motif .l,.motif .r{bottom:0;height:88%;width:clamp(150px,21vw,380px);-webkit-mask-size:auto 100%;mask-size:auto 100%}
.motif .l{left:0;-webkit-mask-position:left top;mask-position:left top}
.motif .r{right:0;-webkit-mask-position:right top;mask-position:right top}
.motif .l::after{background:linear-gradient(90deg,transparent 40%,var(--black)),linear-gradient(180deg,transparent 78%,var(--black))}
.motif .r::after{background:linear-gradient(270deg,transparent 40%,var(--black)),linear-gradient(180deg,transparent 78%,var(--black))}
.motif .c{display:none}
/* Phones: the motif rises from the bottom, as on the stand's counter. */
@media (max-width:900px){
  .motif .l,.motif .r{display:none}
  .motif .c{display:block;left:0;right:0;bottom:0;height:clamp(230px,40svh,400px);
    -webkit-mask-size:cover;mask-size:cover;-webkit-mask-position:center top;mask-position:center top}
  .opening{padding-bottom:calc(clamp(230px,40svh,400px) * .72)}
}
@media (min-width:901px){.opening{justify-content:center;padding-bottom:clamp(2.5rem,7vh,5rem)}}

/* One orchestrated moment: the motif rises, then the words arrive. */
@media (prefers-reduced-motion: no-preference){
  .motif i{animation:rise 1.8s cubic-bezier(.2,.7,.1,1) both .15s}
  .lockup{animation:arrive 1.1s ease both .55s}
  .headline{animation:arrive 1.1s ease both .85s}
  .lede,.opening .btn{animation:arrive 1s ease both 1.1s}
}
@keyframes rise{from{transform:translateY(42%);opacity:0}to{transform:none;opacity:1}}
@keyframes arrive{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}

/* ---------- Durban FilmMart ---------- */
.dfm{position:relative;text-align:center;padding-bottom:clamp(4rem,10vh,7rem)}
.frame{position:relative;width:100%;aspect-ratio:2.225/1;max-height:88svh;overflow:hidden}
.frame img{width:100%;height:100%;object-fit:cover;object-position:62% 50%}
.frame::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(180deg,var(--black) 0%,rgba(0,0,0,0) 22%,rgba(0,0,0,0) 72%,var(--black) 100%)}
@media (max-width:720px){.frame{aspect-ratio:4/3.4}}
.copy{max-width:var(--measure);margin:0 auto;padding:0 1.5rem}
.dfm .copy{padding-top:clamp(1.5rem,4vh,2.5rem)}
h2{font-weight:600;font-size:clamp(1.9rem,1.1rem + 3vw,3.25rem);line-height:1.08;letter-spacing:-.018em;
  margin:0 0 1.1rem}
.copy p{color:var(--soft);margin:0 0 1.25rem}
.dfm-logo{width:clamp(120px,14vw,170px);height:auto;margin:clamp(2rem,5vh,3rem) auto 0}
.scan{display:inline-block;margin-top:.75rem;padding-top:1.25rem;font-weight:500;color:var(--white);
  border-top:2px solid;border-image:var(--grad-h) 1}

/* ---------- More ways to watch + sign-up ---------- */
.later{text-align:center;padding:clamp(3rem,8vh,5rem) 0 clamp(4rem,10vh,6rem)}
.family{list-style:none;display:grid;grid-template-columns:repeat(3,1fr);column-gap:9%;align-items:center;
  width:min(var(--famw,26rem),calc(100% - 3rem));padding:0;margin:2.25rem auto clamp(3rem,7vh,4.5rem)}
.family li{min-width:0}
.family img{width:100%;height:auto;display:block}
.invite{color:var(--white);font-weight:500;margin:0 auto 1.5rem;max-width:30rem}
form{max-width:calc(30rem + 3rem);margin:0 auto;padding:0 1.5rem}
.field{display:flex;gap:.6rem;flex-wrap:wrap}
label.visible{display:block;text-align:left;font-weight:500;font-size:.95rem;color:var(--soft);margin:0 0 .5rem .25rem}
input[type=email]{flex:1 1 15rem;min-width:0;min-height:52px;font:inherit;font-size:1.0625rem;color:var(--white);
  background:rgba(255,255,255,.06);border:1px solid var(--line);border-radius:999px;padding:.9rem 1.35rem}
input[type=email]::placeholder{color:var(--quiet)}
input[type=email]:focus{outline:none;border-color:var(--white)}
input[aria-invalid=true]{border-color:var(--red)}
form .btn{flex:0 0 auto}
@media (max-width:560px){form .btn{flex:1 1 100%}}
.msg{min-height:1.6em;margin:.85rem 0 0;text-align:left;padding-left:.25rem;font-size:.95rem}
.msg.err{color:#FF6B8E}
.done{display:none;font-weight:600;font-size:1.25rem}
.done p{margin:.25rem 0 0;font-weight:400;font-size:1rem;color:var(--soft)}
form.sent .fields{display:none}
form.sent .done{display:block}
.pending{display:inline-block;margin-top:1.1rem;font-size:.85rem;color:var(--quiet);
  border:1px dashed rgba(255,255,255,.3);border-radius:8px;padding:.45rem .8rem}

/* ---------- Footer ---------- */
footer{border-top:1px solid var(--line);padding:2rem 1.5rem 2.5rem;display:flex;flex-wrap:wrap;gap:.75rem 2rem;
  justify-content:center;align-items:center;font-size:.9rem;color:var(--quiet)}
footer .pending{margin:0}

/* ---------- The butterfly ---------- */
.flier{position:absolute;left:0;top:0;width:60px;z-index:20;pointer-events:none;transform-origin:50% 60%;
  will-change:transform,opacity;opacity:0}
.flier img{width:100%;height:auto;transform-origin:62% 50%}
.flier.flap img{animation:flap .22s ease-in-out infinite alternate}
@keyframes flap{from{transform:scaleX(1) skewY(0)}to{transform:scaleX(.55) skewY(-6deg)}}
@media (prefers-reduced-motion: reduce){.flier{display:none}}
