/* ─────────────────────────────────────────────────────────────
   London X (OFC) — Alexfolio structure, measured off the live
   Framer demo at td-alexfolio.framer.website on 2026-09-06.
   Tokens below are the demo's own computed values, not guesses.
   The single deliberate deviation is the catalogue ledger.
   ───────────────────────────────────────────────────────────── */
:root{
  --paper:#EBEAEA;        /* rgb(235,234,234) — demo body surface */
  --ink:#000000;
  --ink-2:#151414;        /* dark section */
  --ink-3:#121111;        /* card art well */
  --muted:#4F4A4A;
  --dim:#C4BFBF;
  --white:#FFFFFF;
  --signal:#E8461C;       /* demo runs #FF442B; ours is the jacket orange */
  --gutter:clamp(20px,3.4vw,48px);
  --bar:96px;
  --hair:1px solid rgba(0,0,0,.14);
  --hair-dk:1px solid rgba(255,255,255,.14);
}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{
  background:var(--paper);color:var(--ink);
  font-family:"Inter",system-ui,sans-serif;font-optical-sizing:auto;
  font-size:18px;line-height:1.45;letter-spacing:normal;
  -webkit-font-smoothing:antialiased;overflow-x:hidden;
}
a{color:inherit;text-decoration:none}
img{display:block;max-width:100%;height:auto}
ul{list-style:none}
::selection{background:var(--signal);color:var(--white)}

/* ── shared ─────────────────────────────────────────────── */
.block{width:100%;padding-inline:var(--gutter)}
.tag{
  position:sticky;top:0;z-index:30;background:var(--paper);
  font-family:"DM Mono",ui-monospace,monospace;font-size:14px;font-weight:500;
  letter-spacing:.01em;color:var(--signal);
  padding:26px 0;display:flex;gap:14px;align-items:baseline;
}
.tag span{opacity:.85}
.tag.sticky{position:sticky;top:0;z-index:30;background:var(--paper);width:100%}
.tag.sticky.invert{background:var(--ink-2)}
.lede{font-size:18px;color:var(--muted);max-width:62ch}

/* ── top bar ────────────────────────────────────────────── */
.topbar{
  position:absolute;inset:0 0 auto 0;z-index:60;height:var(--bar);
  display:flex;align-items:center;justify-content:space-between;
  padding-inline:var(--gutter);pointer-events:none;
  font-size:18px;color:var(--ink);
}
.topbar a{pointer-events:auto}
.topnav{display:flex;gap:clamp(28px,9vw,140px);padding-right:2px}
.topnav a{position:relative}
.topnav a::after{
  content:"";position:absolute;left:0;right:0;bottom:-4px;height:1px;
  background:currentColor;transform:scaleX(0);transform-origin:left;
  transition:transform .38s cubic-bezier(.22,1,.36,1);
}
.topnav a:hover::after{transform:scaleX(1)}

/* ── hero ───────────────────────────────────────────────── */
.hero{
  position:relative;height:100svh;min-height:620px;overflow:hidden;
  display:grid;place-items:center;
}
.hero-band{
  position:absolute;inset:0;display:grid;place-items:center;
  z-index:1;pointer-events:none;overflow:hidden;
}
/* the over-band is clipped to the cutout's own alpha, so the light
   copy of the name only exists where the portrait exists — the way
   the Framer original layers it. */
.hero-band.over{
  z-index:3;color:rgba(0,0,0,.20);
  -webkit-mask-image:url(/img/hero-cut.webp);mask-image:url(/img/hero-cut.webp);
  -webkit-mask-size:auto 86%;mask-size:auto 86%;
  -webkit-mask-position:center bottom;mask-position:center bottom;
  -webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;
}
.band-track{
  display:flex;width:max-content;
  animation:slide 34s linear infinite;
  font-family:"Inter",sans-serif;font-weight:500;
  font-size:clamp(76px,19.4vw,280px);line-height:.86;
  letter-spacing:-.04em;white-space:nowrap;
}
@keyframes slide{from{transform:translate3d(0,0,0)}to{transform:translate3d(-50%,0,0)}}
.hero-cut{
  position:relative;z-index:2;height:86%;width:auto;max-width:none;
  object-fit:contain;object-position:bottom center;
  align-self:end;filter:contrast(1.04);
}
.hero-social{
  position:absolute;left:var(--gutter);bottom:44px;z-index:4;
  display:grid;gap:14px;font-size:18px;
}
.hero-social a{display:flex;align-items:center;gap:12px}
.hero-social .dot{
  width:9px;height:9px;border-radius:50%;border:1.5px solid var(--ink);
  display:inline-block;transition:background .3s;
}
.hero-social a:hover .dot{background:var(--signal);border-color:var(--signal)}
.hero-role{
  position:absolute;right:var(--gutter);bottom:36px;z-index:4;text-align:right;
  font-size:clamp(34px,5vw,72px);font-weight:600;line-height:1.02;letter-spacing:-.04em;
}

/* ── intro ──────────────────────────────────────────────── */
.intro-body{padding:clamp(60px,10vw,150px) 0 clamp(90px,13vw,190px);text-align:center}
.xl{
  font-size:clamp(28px,4.45vw,64px);font-weight:600;line-height:1.14;
  letter-spacing:-.033em;max-width:20ch;margin-inline:auto;
}
.reveal span{transition:color .28s linear;color:var(--dim)}
.reveal span.on{color:var(--ink)}
.intro-body .lede{margin:clamp(32px,4vw,56px) auto 0;text-align:center}
.cta{
  display:inline-grid;overflow:hidden;height:1.35em;margin-top:clamp(38px,5vw,64px);
  font-size:18px;font-weight:600;border-bottom:2px solid var(--ink);
}
.cta span{grid-area:1/1;transition:translate .42s cubic-bezier(.22,1,.36,1)}
.cta span:last-child{translate:0 100%;color:var(--signal)}
.cta:hover span:first-child{translate:0 -100%}
.cta:hover span:last-child{translate:0 0}

/* ── proof (services shape) ─────────────────────────────── */
.proof{padding-bottom:clamp(80px,10vw,160px)}
.svc{
  display:grid;grid-template-columns:minmax(300px,32%) 1fr;
  gap:clamp(24px,4vw,64px);align-items:start;
  padding-block:clamp(40px,6vw,90px) clamp(70px,11vw,170px);
}
.svc-num{position:sticky;top:var(--bar);height:min-content}
.svc-num span{
  display:block;font-family:"DM Mono",monospace;font-weight:300;
  font-size:clamp(96px,17.5vw,252px);line-height:1;letter-spacing:-.02em;
  color:transparent;-webkit-text-stroke:1.25px var(--ink);
}
.svc-body h2{
  font-size:clamp(38px,5vw,72px);font-weight:600;line-height:1.02;letter-spacing:-.04em;
  margin-bottom:.35em;
}
.rows{margin-top:clamp(38px,5vw,72px);border-top:var(--hair)}
.rows li{
  display:flex;justify-content:space-between;align-items:baseline;gap:24px;
  padding:20px 24px;border-bottom:var(--hair);
  transition:background .3s,padding-left .3s;
}
.rows li:hover{background:rgba(0,0,0,.035);padding-left:34px}
.rows li>span{font-size:18px;display:block}
.rows li>em{font-family:"DM Mono",monospace;font-style:normal;color:var(--muted);white-space:nowrap}
.rows .cat{
  display:block;font-family:"DM Mono",monospace;font-style:normal;
  font-size:13px;color:var(--muted);margin-top:5px;letter-spacing:.02em;
}

/* ── records (stacking cards) ───────────────────────────── */
.records{background:var(--ink-2);color:var(--white);padding:0 var(--gutter) clamp(40px,6vw,90px)}
.records .tag{color:var(--signal)}
.card{
  position:sticky;top:calc(var(--bar) - 26px);
  display:grid;grid-template-columns:1.72fr 1fr;gap:8px;
  background:var(--white);color:var(--ink);border-radius:18px;padding:8px;
  margin-bottom:clamp(140px,36vh,380px);
  box-shadow:0 -18px 40px rgba(0,0,0,.35);
}
.card-art{
  border-radius:12px;overflow:hidden;background:var(--ink-3);aspect-ratio:5/4;
  display:grid;place-items:center;
}
.card-art img{width:auto;height:100%;max-width:100%;object-fit:contain}
.card-copy{
  display:flex;flex-direction:column;
  padding:clamp(22px,2.4vw,38px) clamp(20px,2.2vw,34px) clamp(18px,2vw,28px);
}
.year{font-family:"DM Mono",monospace;font-size:16px;letter-spacing:.06em;color:var(--muted)}
.card-copy h2{
  font-size:clamp(32px,3.6vw,58px);font-weight:600;line-height:1.02;letter-spacing:-.04em;
  margin:.22em 0 .55em;
}
.card-copy>p:not(.year){font-size:17px;color:var(--muted);line-height:1.5}
.tags{margin-top:auto;padding-top:26px}
.tags li{padding:14px 0;border-top:var(--hair);font-size:17px}

/* ── support (testimonial shape) ────────────────────────── */
.support-body{
  padding:clamp(70px,10vw,150px) 0 clamp(80px,11vw,170px);
  display:grid;grid-template-columns:130px 1fr;gap:clamp(20px,3vw,56px);
}
.count{font-family:"DM Mono",monospace;font-size:14px;letter-spacing:.02em}
.count b{color:var(--signal);font-weight:500}
.count span{color:var(--muted)}
.support blockquote.xl{max-width:24ch;margin-inline:0;text-align:left}
.attr{
  grid-column:2;font-family:"DM Mono",monospace;font-size:14px;color:var(--muted);
  margin-top:clamp(28px,4vw,54px);display:flex;gap:14px;align-items:baseline;
}
.attr span{color:var(--signal)}
.attr em{font-style:normal;margin-left:auto}

/* ── ledger — the one deliberate deviation ──────────────── */
.ledger{
  border-block:var(--hair);overflow:hidden;
  padding-block:26px;background:var(--paper);
}
.ledger-track{display:flex;width:max-content;animation:slide 46s linear infinite}
.ledger-set{display:flex;align-items:baseline}
.ledger-set span{
  display:flex;align-items:baseline;gap:10px;padding-inline:clamp(20px,2.4vw,38px);
  font-family:"DM Mono",monospace;font-size:15px;letter-spacing:.02em;white-space:nowrap;
  border-right:var(--hair);
}
.ledger-set b{font-weight:400;font-size:12px;color:var(--signal);letter-spacing:.08em}

/* ── footer ─────────────────────────────────────────────── */
footer{background:var(--ink-2);color:var(--white);overflow:hidden}
.foot-band{padding-top:clamp(40px,5vw,70px)}
.foot-band .band-track{animation-duration:26s;font-size:clamp(64px,15vw,220px)}
.foot-grid{
  display:grid;grid-template-columns:1fr 1fr;gap:clamp(30px,5vw,80px);
  padding:clamp(46px,6vw,90px) var(--gutter) clamp(40px,5vw,70px);
}
.k{font-family:"DM Mono",monospace;font-size:13px;letter-spacing:.12em;
  text-transform:uppercase;color:var(--signal);margin-top:26px}
.k:first-child{margin-top:0}
.v{font-size:clamp(20px,2.1vw,30px);font-weight:600;letter-spacing:-.02em;margin-top:6px}
.v a:hover{color:var(--signal)}
.note{margin-top:30px;font-size:16px;color:var(--dim);max-width:52ch}
.foot-links li a{
  display:flex;justify-content:space-between;align-items:center;gap:20px;
  padding:17px 0;border-bottom:var(--hair-dk);font-size:17px;
  transition:padding-left .3s,color .3s;
}
.foot-links li:first-child a{border-top:var(--hair-dk)}
.foot-links li a:hover{padding-left:14px;color:var(--signal)}
.foot-links em{font-style:normal;opacity:.5}
.foot-rule{
  display:flex;justify-content:space-between;gap:20px;flex-wrap:wrap;
  padding:22px var(--gutter);border-top:var(--hair-dk);
  font-family:"DM Mono",monospace;font-size:12px;letter-spacing:.06em;color:var(--dim);
}

/* ── responsive ─────────────────────────────────────────── */
@media (max-width:900px){
  body{font-size:17px}
  :root{--bar:72px}
  .topnav{gap:22px;font-size:15px}
  .mark{font-size:15px}
  .hero-role{font-size:clamp(26px,7.4vw,44px);bottom:96px}
  .hero-social{font-size:15px;gap:10px;bottom:32px}
  .hero-cut{height:76%;width:auto;max-width:none}
  .hero-band.over{-webkit-mask-size:auto 76%;mask-size:auto 76%}
  .svc{grid-template-columns:1fr;gap:0}
  .svc-num{position:static}
  .svc-num span{font-size:clamp(88px,26vw,160px)}
  .rows li{padding-inline:0}
  .rows li:hover{padding-left:10px}
  .card{grid-template-columns:1fr;top:24px;margin-bottom:clamp(90px,22vh,220px)}
  .card-art{aspect-ratio:1/1}
  .support-body{grid-template-columns:1fr}
  .support .attr{grid-column:1}
  .foot-grid{grid-template-columns:1fr}
}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  .band-track,.ledger-track{animation:none}
  .reveal span{color:var(--ink)}
}
