.lm-partners-note{position:relative;z-index:1;text-align:center;font-size:12px;color:#a3a5a0;margin:16px 24px 24px}
.lm-partner-controls{position:relative;z-index:2;display:flex;justify-content:flex-end;gap:8px;max-width:1300px;margin:auto;padding:0 40px}
.lm-partner-controls button{width:42px;height:42px;border:1px solid #ffffff40;border-radius:50%;background:transparent;color:#fff;font-size:22px;cursor:pointer}
.lm-partner-shell{flex:0 0 min(880px,88vw);scroll-snap-align:start;min-width:0;display:flex}
#partners .Partners-module__Hzpy8G__carousel{cursor:auto}
#partners .Partners-module__Hzpy8G__textCol{display:flex;flex-direction:column;justify-content:space-between;gap:24px;min-width:0;flex:1 1 57%;padding:36px}
#partners .Partners-module__Hzpy8G__quote{font-size:clamp(20px,2.1vw,28px);line-height:1.35;margin:0;letter-spacing:-.035em}
.lm-stars{letter-spacing:4px;color:#847140;font-size:18px}.lm-sample{display:block;margin-top:8px;font-size:11px;color:#696b63}
.lm-partner-visual{position:relative;flex:0 0 40%;min-width:0;overflow:hidden;border-left:1px solid #11111022;background:#eeeede;display:flex;align-items:center;justify-content:center}
.lm-partner-art{display:block;width:100%;height:100%;object-fit:contain;mix-blend-mode:multiply}
.lm-reserved-label{position:absolute;left:10%;right:10%;top:20%;text-align:center;font:700 clamp(14px,1.6vw,21px)/1.2 'Courier New',monospace;letter-spacing:.02em;color:#252720;background:#eeeee0;padding:7px 2px;transform:rotate(-3deg)}
.lm-ticket{display:block;position:relative;width:220px;max-width:100%;aspect-ratio:3/2;transform:rotate(-9deg);color:#451e2c;text-decoration:none;transition:transform .25s ease;flex-shrink:0;margin:0 12px 8px}
.lm-ticket:hover{transform:rotate(-5deg) translateY(-3px)}.lm-ticket img{width:100%;height:100%;object-fit:contain;display:block}.lm-ticket-kicker,.lm-ticket-title,.lm-ticket-serial{position:absolute;text-align:center;left:10%;right:10%;pointer-events:none}.lm-ticket-kicker{top:23%;font:600 10px/1.2 'Courier New',monospace;letter-spacing:.13em}.lm-ticket-title{top:36%;font:900 24px/1.1 'Arial Narrow',Arial,sans-serif;letter-spacing:-.04em}.lm-ticket-serial{top:60%;font:9px/1.2 'Courier New',monospace;letter-spacing:.12em}
#about .Manifesto-module__ciNx7q__annotationText{clip-path:none!important}#about .Manifesto-module__ciNx7q__annotation path{stroke-dashoffset:0!important}#about .Manifesto-module__ciNx7q__annotation{opacity:1!important;visibility:visible!important}
#work,#work *{cursor:auto!important}#work a,#work button{cursor:pointer!important}
.Footer-module__EZoWya__utility{display:flex;align-items:center;justify-content:space-between;gap:20px;flex-wrap:wrap;padding-bottom:24px!important}
.leadmaxxing-legal{display:flex;gap:12px 20px;flex-wrap:wrap;justify-content:flex-end;margin:0;color:#eeeee9;font:400 12px/1.5 Arial,sans-serif}.leadmaxxing-legal a,.leadmaxxing-legal button{color:inherit;text-decoration:underline;text-underline-offset:4px}.leadmaxxing-legal button{border:0;padding:0;background:none;font:inherit;cursor:pointer}
.Hero-module__Z8hQ_W__imageFill,.Hero-module__Z8hQ_W__crowdArt,.Footer-module__EZoWya__sceneImg{filter:none;transform:none}
@media(max-width:767px){.lm-partner-shell{flex-basis:88vw}#partners .Partners-module__Hzpy8G__card{flex-direction:column;width:100%}#partners .Partners-module__Hzpy8G__textCol{padding:28px;min-height:300px}.lm-partner-visual{flex:0 0 280px;height:280px;border-left:0;border-top:1px solid #11111022}.lm-reserved-label{left:20%;right:20%;font-size:18px}.lm-ticket{width:200px}.Footer-module__EZoWya__utility{justify-content:center;gap:12px}.leadmaxxing-legal{justify-content:center;font-size:11px;gap:10px 16px}.lm-partner-controls{padding:0 24px}}
@media(prefers-reduced-motion:reduce){.lm-ticket{transition:none}}
.lm-ticket{aspect-ratio:1549/1015}.lm-ticket-kicker{top:9%;font-size:9px}.lm-ticket-title{top:33%;font-size:23px}.lm-ticket-serial{top:87%;font-size:8px}
.lm-reserved .lm-partner-art{object-fit:fill}.lm-reserved-label{left:30.5%;right:auto;top:41%;width:49%;padding:0;background:none;transform:translateY(-50%) rotate(-18deg);font-size:clamp(12px,1.3vw,18px)}
.Hero-module__Z8hQ_W__crowdArt{clip-path:none;transform:none;background-size:auto 183.71%;background-position:center calc(100% + var(--crowd-h) * .39098)}
@media(max-width:767px){.lm-partner-shell{flex-basis:100%}#partners .Partners-module__Hzpy8G__textCol{padding:24px}.lm-ticket{margin-left:0;margin-right:0}.lm-ticket-title{font-size:20px}}
@media(max-width:380px){.Footer-module__EZoWya__cta{padding-inline:20px}.Footer-module__EZoWya__cta a{max-width:100%;min-width:0;padding-inline:18px;font-size:13px;box-sizing:border-box}}

/* ── Leadmaxxing: hero rocket placement + motion ──────────────────────
   The rocket art is bottom-anchored and sized by --rocket-size, so the
   top of the art = hero height - --rocket-size. The shipped nose values
   put that top ABOVE the CTA row, so the launch-tower mast speared the
   buttons. These values keep the art clear of the CTAs on every
   breakpoint; rocket.js then pins it to the measured CTA bottom. */
.Hero-module__Z8hQ_W__hero{
  --rocket-nose-mobile:calc(6vh + 524px);
}
@media (min-width:768px) and (max-width:1023.98px){
  .Hero-module__Z8hQ_W__hero{ --rocket-nose-mobile:calc(6vh + 377px); }
}
@media (min-width:1024px){
  .Hero-module__Z8hQ_W__hero{
    --rocket-nose-short-boost:0px;
    --rocket-nose-y:calc(7.2vh + 437px);
  }
}

/* Motion: settle into place, then a slow idle drift. The parallax
   transform lives on the parent layer, so animating the image itself
   composes with it instead of fighting it.

   The entrance runs behind the intro preloader on purpose. The preloader
   holds the page for ~2.2s and lifts at ~2.6s; this finishes at ~1.65s, so
   the rocket is already loaded, decoded and settled in place at the moment
   the overlay comes off, rather than arriving afterwards. */
@keyframes lmRocketIn{
  from{ opacity:0; transform:translate3d(0,46px,0) }
  to  { opacity:1; transform:translate3d(0,0,0) }
}
@keyframes lmRocketFloat{
  0%,100%{ transform:translate3d(0,0,0) }
  50%    { transform:translate3d(0,-11px,0) }
}
.Hero-module__Z8hQ_W__imageFill{
  animation:lmRocketIn 1.15s cubic-bezier(.22,1,.36,1) .28s both,
            lmRocketFloat 6.5s ease-in-out 1.6s infinite;
  will-change:transform;
}
@media (prefers-reduced-motion:reduce){
  .Hero-module__Z8hQ_W__imageFill{ animation:none; opacity:1; transform:none }
}

/* The award figure is longer now (1 000 000 €+); keep it on one line. */
.lm-award-number{ white-space:nowrap }

/* Lenis drives programmatic scrolling; the browser must not also animate it. */
html{scroll-behavior:auto}

/* ── "Reserved" partner card ──────────────────────────────────────────
   The shipped rules parked the ticket at the bottom of a space-between
   column, leaving a hole through the middle of the card and pushing the
   title onto one line that overran the ticket's printed frame. This
   restores the reference composition: ticket overhanging the top-left
   corner, invitation centred, CTA beneath.

   The ticket's wording is printed into the artwork itself, so there is
   nothing to position inside it; --tw is the one knob that scales the
   whole piece. */
#partners .lm-partner-shell:has(.lm-reserved),
#partners .Partners-module__Hzpy8G__card:has(.lm-reserved),
#partners .Partners-module__Hzpy8G__card:has(.lm-reserved) .Partners-module__Hzpy8G__textCol{
  overflow:visible;
}
#partners .Partners-module__Hzpy8G__card:has(.lm-reserved) .Partners-module__Hzpy8G__textCol{
  position:relative;
  justify-content:center;
  align-items:flex-start;
  gap:26px;
  padding:74px 46px 54px;
  --tw:236px;
}
#partners .Partners-module__Hzpy8G__card:has(.lm-reserved) .Partners-module__Hzpy8G__quote{
  font-size:clamp(21px,2.1vw,30px);
  max-width:20ch;
  margin:0;
}

.lm-ticket{
  position:absolute;
  top:calc(var(--tw) * -0.085);
  left:calc(var(--tw) * -0.085);
  width:var(--tw);
  margin:0;
  z-index:4;
  transform:rotate(-9deg);
  filter:drop-shadow(0 14px 28px rgba(0,0,0,.32));
  transition:transform .28s cubic-bezier(.22,1,.36,1);
}
.lm-ticket:hover{ transform:rotate(-6deg) translateY(-5px) }

.lm-reserved-cta{
  display:inline-flex; align-items:center; align-self:flex-start;
  background:#111110; color:#f7f6f3;
  border-radius:999px;
  padding:14px 26px;
  font:600 15px/1 var(--font-inter),Arial,sans-serif;
  text-decoration:none; white-space:nowrap;
  transition:transform .22s ease, background .22s ease;
}
.lm-reserved-cta:hover{ transform:translateY(-2px); background:#2c2c28 }

/* Stacked layout: the card is no longer tall enough for centring to clear
   the overhanging ticket, so the column starts below it. The ticket's rotated
   box is about 0.72x its width tall once the negative offset is taken off. */
@media (max-width:767px){
  #partners .Partners-module__Hzpy8G__card:has(.lm-reserved) .Partners-module__Hzpy8G__textCol{
    --tw:176px;
    justify-content:flex-start;
    padding:calc(var(--tw) * 0.72 + 22px) 26px 36px;
    gap:18px;
  }
  .lm-reserved-cta{ padding:12px 22px; font-size:14px }
}

/* ── Manifesto heading ────────────────────────────────────────────────
   The hover-weight phrase carries white-space:nowrap so the variable-font
   sweep stays on one line. "sakramentsky dobre" is 395px at the 41.6px
   size the heading holds below 1024px, but the column is only 278-344px
   wide on a phone, so the phrase was clipped at every mobile width
   (360, 390 and 430 all cut "dobre" off mid-word). The sweep is a pointer
   effect a phone never gets, so the phrase is allowed to wrap there. */
@media (max-width:767px){
  [data-split-segment][data-weight-hover]{ white-space:normal }
}

/* ── Phone tap targets ────────────────────────────────────────────────
   Measured at 390x844: the carousel arrows were 42x42, the language
   switcher 41x32 with 2px between the two, the footer's legal links
   16.5px tall, and the manifesto dome link 43.2px. All below the 44px
   minimum; the language pair was also the only sub-8px adjacency on the
   page, and a mis-tap there sends the reader to the other country. */
@media (max-width:767px){
  .lm-partner-controls button{ width:44px; height:44px }

  nav.leadmaxxing-legal{ flex-wrap:wrap }
  nav.leadmaxxing-legal a{
    display:inline-flex; align-items:center; min-height:44px;
  }

  nav.leadmaxxing-languages{ gap:10px }
  nav.leadmaxxing-languages a{
    display:inline-flex; align-items:center; justify-content:center;
    min-width:44px; min-height:44px; padding:0;
  }

  .Manifesto-module__ciNx7q__domeHit{ min-height:44px }
  .lm-reserved-cta{ padding:15px 22px }
}

/* The toggle narrows to 32px below 380px, which leaves a 36x44 hit area
   on exactly the phones that have the least room to aim. */
@media (max-width:380px){
  .MobileMenu-module__Q5LJxq__toggle{ width:40px }
}

/* Jumping to #work or #about parked the section's heading underneath the
   floating header (heading top 65px, header bottom 78px). */
#work,#about,#partners{ scroll-margin-top:96px }

/* ── Contrast and fit ─────────────────────────────────────────────────
   Measured against the rendered glyphs, not just the declared colours. */

/* "1 000 000 €+" is nowrap so it stays on one line, but at 23px it needs
   137px inside a 133px card at 360, and the award card clips: the "+"
   disappeared entirely. Sized to the viewport below 480 so the figure
   always fits, with ~9px to spare at 360. */
@media (max-width:480px){
  .lm-award-number{ font-size:min(23px, 5.8vw) }
}

/* 4.36:1 at 18px/400 (needs 4.5). */
.lm-stars{ color:#7a6838 }

/* 4.46:1 at 22px/600, which is not large text (that needs 18.66px bold
   or 24px). */
.Manifesto-module__ciNx7q__annotationText{ color:#c8301f }

/* The footer's copyright line sits on a photograph: at 360 the right half
   lands on a bright halftone patch and drops to 2.87:1, with a third of
   its glyph pixels under 4.5. The scrim cannot be relied on, so the ink
   is nearly opaque instead of 64%. */
.Footer-module__EZoWya__legal{ color:#f6f5f2ec }

/* ── Vertical swipes inside the partners carousel ─────────────────────
   Lenis ships `.lenis [data-lenis-prevent-horizontal]{overscroll-behavior:
   contain}`, which contains BOTH axes. The carousel is also a y-axis
   scroll container (overflow: auto hidden) with nothing to scroll, so a
   vertical swipe that starts inside it was swallowed instead of chaining
   to the page: measured 0px of page movement against 285px for the same
   swipe just above or below it. The carousel is 706px tall on an 844px
   viewport, so that dead zone covered 84% of the screen whenever it was
   in view. Containment is kept on the axis it was meant for. */
.lenis [data-lenis-prevent-horizontal]{ overscroll-behavior:contain auto }

/* ── Footer availability line ─────────────────────────────────────────
   The row is a centred flex line, but the text is a growing flex item
   with text-align:center, so once it wraps to two lines on a phone the
   glyphs centre inside the leftover width and the dot is left stranded
   17-36px away, straddling the gap between the two lines. The text hugs
   the dot instead, and the dot rides the first line. */
@media (max-width:767px){
  .Footer-module__EZoWya__status{ align-items:flex-start }
  .Footer-module__EZoWya__statusText{ flex:0 1 auto; text-align:left }
  .Footer-module__EZoWya__statusDot{ margin-top:.42em }
}

/* The reserved card's artwork is now the same kind of black-on-transparent
   ASCII art as the astronaut and satellite cards, so it should be fitted the
   way they are. The shipped rules single the reserved card out with
   object-fit:fill while its siblings get contain, which stretched it; this
   puts all three on the same footing. */
#partners .lm-reserved .lm-partner-art{ object-fit:contain }

/* Keep the premium positioning on two intentional desktop lines. */
@media (min-width:1024px){.Hero-module__Z8hQ_W__quiet{display:block}}
