:root{color-scheme:dark;--sans:'Albert Sans',Arial,Helvetica,sans-serif;--night:#081510;--fir:#10291f;--silver:#bec8cd;--snow:#edf1ef;--muted:#a3b5ab;--ease:cubic-bezier(.2,.75,.15,1)}
@font-face{font-family:'Avant Garde Dunes';src:url('fonts/avantgarde-bk.woff') format('woff');font-weight:400;font-display:swap}
@font-face{font-family:'Avant Garde Dunes';src:url('fonts/avantgarde-xlt.woff') format('woff');font-weight:300;font-display:swap}
*{box-sizing:border-box}
body{margin:0;background:var(--night);color:var(--snow);font-family:var(--sans);-webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none}
a:focus-visible{outline:2px solid var(--snow);outline-offset:6px}
::selection{background:#7f9b8d;color:var(--night)}
.skip{position:fixed;top:-100px;left:20px;z-index:10;padding:14px;background:var(--snow);color:var(--night)}
.skip:focus{top:12px}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}

/* The way in from the homepage, in three beats (carry.js hands the name and the About word across):
   1. the homepage falls away around the name, which holds still (style.css);
   2. the name grows forward from its own top-left corner while About drops into the line beneath it,
      and the photograph rises out of the dark behind them;
   3. the practices are dealt out from behind About, and Home appears.
   Leaving, this page falls away the same way around the name. */
[data-carry-part]{transform-origin:0 0}
@keyframes recede{to{opacity:0;transform:scale(1.02);filter:blur(12px)}}
body.leaving :is(.backdrop,.shade,.haze,.practices,.plate,.back,.bio,.field){animation:recede .4s cubic-bezier(.4,0,.2,1) forwards!important}

/* The opening: DSC 753 kept close to the original. */
.about-hero{position:relative;height:100svh;min-height:560px;overflow:hidden}
.backdrop{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:52% 42%}
.shade{position:absolute;inset:0;pointer-events:none;background:
  radial-gradient(ellipse 62% 48% at 0% 0%,rgba(8,21,16,.62),rgba(8,21,16,.2) 60%,transparent 80%),
  linear-gradient(0deg,var(--night),transparent 22%)}
/* The name keeps the homepage's corner and line height, so it grows in place rather than sliding. */
.about-head{position:absolute;z-index:2;top:0;left:0;padding:34px 6vw 0}
.about-head h1{display:inline-block;position:relative;z-index:2;margin:0;font:400 clamp(52px,8.4vw,136px)/1 'Avant Garde Dunes','Albert Sans',Arial,sans-serif;letter-spacing:-.035em;white-space:nowrap}
.name{display:inline-block}
/* Beneath the name: About, set as it is on the homepage button, then the practices. */
.subline{display:flex;align-items:center;gap:26px;margin-top:clamp(14px,2.2vh,26px)}
.about-word{position:relative;z-index:2;margin:0;font-size:clamp(18px,1.6vw,23px);font-weight:500;letter-spacing:.04em;color:var(--snow)}
/* A quiet pane of glass behind the name, so it reads against the bright sky: plain rounded corners,
   a whisper of tint, a soft diffuse blur and one faint hairline. It frosts in while the name is still
   travelling: a soft front sweeps across from the left as the blur thickens from clear. */
@property --frost{syntax:'<number>';inherits:false;initial-value:1}
.plate{position:absolute;z-index:-1;inset:-.16em -.3em -.06em;border-radius:.3em;pointer-events:none;
  background:linear-gradient(180deg,rgba(237,241,239,calc(.07 * var(--frost))),rgba(8,21,16,calc(.12 * var(--frost))));
  box-shadow:inset 0 1px 0 rgba(255,255,255,calc(.22 * var(--frost))),0 20px 60px rgba(8,21,16,calc(.12 * var(--frost)));
  -webkit-backdrop-filter:blur(calc(22px * var(--frost))) saturate(calc(100% - 10% * var(--frost)));
  backdrop-filter:blur(calc(22px * var(--frost))) saturate(calc(100% - 10% * var(--frost)));
  -webkit-mask:linear-gradient(90deg,#000 40%,transparent 60%) 0 0/300% 100% no-repeat;
  mask:linear-gradient(90deg,#000 40%,transparent 60%) 0 0/300% 100% no-repeat;
  animation:frost-in 1.7s .3s cubic-bezier(.3,.1,.2,1) both}
@keyframes frost-in{
  from{--frost:0;-webkit-mask-position:100% 0;mask-position:100% 0}
  55%{-webkit-mask-position:0 0;mask-position:0 0}
  to{--frost:1;-webkit-mask-position:0 0;mask-position:0 0}}
html:not(.carried) .plate{animation-delay:.35s}
/* The alternative to the glass (data-legibility="haze" on the hero): no pane, just the sky behind the
   name softened. A band of blur, strongest behind the name and feathered to nothing, turns the fine
   branches to haze; a graduated darkening from the top of the frame, like a photographer's grad
   filter, calms the brightness. Both come in with the name, as the glass did. */
.haze{position:absolute;inset:0 0 auto;height:clamp(300px,50vh,500px);pointer-events:none}
.haze-blur,.haze-grad{position:absolute;inset:0;animation:haze-in 1.5s .2s cubic-bezier(.3,.1,.2,1) both}
.haze-blur{-webkit-backdrop-filter:blur(calc(11px * var(--frost)));backdrop-filter:blur(calc(11px * var(--frost)));
  -webkit-mask:radial-gradient(ellipse 62% 100% at 36% 8%,#000 38%,rgba(0,0,0,.5) 66%,transparent 100%);mask:radial-gradient(ellipse 62% 100% at 36% 8%,#000 38%,rgba(0,0,0,.5) 66%,transparent 100%)}
.haze-grad{background:linear-gradient(180deg,rgba(8,21,16,calc(.4 * var(--frost))),rgba(8,21,16,calc(.16 * var(--frost))) 50%,transparent)}
@keyframes haze-in{from{--frost:0}to{--frost:1}}
html:not(.carried) :is(.haze-blur,.haze-grad){animation-delay:.3s}
[data-legibility="haze"] .plate,[data-legibility="glass"] .haze{display:none}
/* The practices, dealt out one after another from behind About once the name has landed, then
   drifting gently, each to its own slow rhythm. */
.practices{position:relative;z-index:1;display:flex;gap:12px}
.drift{display:block;animation:drift calc(7s + var(--i) * 1.3s) calc(var(--i) * -2.1s) ease-in-out infinite alternate}
.pill{display:inline-flex;padding:12px 22px 12px 25px;font-size:13px;font-weight:500;text-transform:uppercase;letter-spacing:.24em;white-space:nowrap;
  /* Frosted rather than clear: over bright sky the pills need a body of their own to be read. */
  background:radial-gradient(ellipse at 5% 0%,rgba(224,239,229,.12),transparent 60%),linear-gradient(135deg,rgba(33,75,59,.42),rgba(8,21,16,.5));
  -webkit-backdrop-filter:blur(12px) saturate(130%);backdrop-filter:blur(12px) saturate(130%);
  box-shadow:inset 0 1px 1px rgba(255,255,255,.2),inset 0 -1px 1px rgba(216,235,223,.1),0 14px 40px rgba(0,0,0,.28);
  animation:deal .9s calc(.95s + var(--i) * .1s) cubic-bezier(.2,.75,.15,1) both}
html:not(.carried) .pill{animation-delay:calc(.75s + var(--i) * .1s)}
@keyframes deal{from{opacity:0;transform:translateX(calc(-40px - var(--i) * 30px));filter:blur(4px)}}
@keyframes drift{from{transform:translate(0,0)}to{transform:translate(3px,-6px)}}
.back{position:absolute;z-index:2;left:6vw;bottom:34px;font-size:13px;padding:12px 22px 12px 20px}
.back .mark{transform:rotate(135deg) translate(-1px,-1px)}

/* Biography: text beside DSC 744, in the cypress. */
.bio{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);gap:clamp(40px,7vw,110px);align-items:center;max-width:1240px;margin:0 auto;padding:clamp(80px,14vh,160px) 6vw}
.label{margin:0 0 28px;font-size:10px;font-weight:500;text-transform:uppercase;letter-spacing:.3em;color:var(--muted)}
.bio-text p:not(.label){margin:0 0 1.2em;font-size:17px;line-height:1.7;font-weight:300;color:#C8D4CD;max-width:560px}
.bio-text .lede{font-size:clamp(22px,2.1vw,29px);line-height:1.35;letter-spacing:-.02em;color:var(--snow)}
/* Placeholder copy is marked so it cannot go live by accident. */
.placeholder{border-left:1px dashed rgba(190,200,205,.35);padding-left:16px;font-style:italic}
.portrait{margin:0;border-radius:64px 88px 70px 92px / 62px 76px 66px 84px;overflow:hidden;box-shadow:0 0 0 1px rgba(220,234,225,.18),0 40px 90px rgba(0,0,0,.35)}
.portrait img{display:block;width:100%;height:auto}

/* Closing: DSC 287, a small figure in a hillside of grass, rising out of the night. */
.field{position:relative}
.field img{display:block;width:100%;height:auto;-webkit-mask:linear-gradient(transparent,#000 22%);mask:linear-gradient(transparent,#000 22%)}
.field-foot{position:absolute;left:6vw;right:6vw;bottom:33px;display:flex;justify-content:space-between;border-top:1px solid rgba(237,241,239,.35);padding-top:22px;font-size:10px;letter-spacing:.4px;color:var(--snow);text-shadow:0 1px 8px rgba(8,21,16,.6)}

/* The page assembling itself: the photograph rises out of the dark and comes into focus behind the
   travelling name; blocks further down rise out of a blur as they come into view. */
@keyframes surface{from{opacity:0}}
@keyframes focus{from{transform:scale(1.045);filter:blur(16px)}}
@keyframes rise{from{opacity:0;transform:translateY(24px);filter:blur(10px)}}
.backdrop{animation:surface 1.1s .05s cubic-bezier(.3,0,.2,1) both,focus 1.9s .05s var(--ease) both}
.shade{animation:surface 1.1s .05s ease both}
.back{animation:surface .9s 1.2s ease both}
html:not(.carried) .back{animation-delay:.9s}
.rise{animation:rise 1.3s var(--d,0s) var(--ease) both;animation-play-state:paused}
.rise.in{animation-play-state:running}
/* Loaded directly (not carried over from the homepage), the name and About rise into place instead. */
html:not(.carried) :is(.about-word,.about-head .name){animation:rise 1.3s .2s var(--ease) both}

@media(max-width:800px){
  .bio{grid-template-columns:1fr}
  .portrait{max-width:440px;border-radius:40px 56px 44px 60px}
}
@media(max-width:600px){
  .about-head{padding-top:26px}
  .shade{background:radial-gradient(ellipse 130% 34% at 0% 8%,rgba(8,21,16,.6),rgba(8,21,16,.2) 65%,transparent 90%),linear-gradient(0deg,var(--night),transparent 22%)}
  .haze{height:250px}
  .about-head h1{font-size:clamp(40px,12.5vw,64px)}
  .subline{flex-wrap:wrap;gap:12px}
  .pill{font-size:9.5px;padding:8px 11px 8px 13px;letter-spacing:.15em}
  .practices{gap:6px}
  .field-foot{font-size:9px}
}
@media(prefers-reduced-motion:reduce){
  .backdrop,.shade,.back,.rise,.plate,.haze-blur,.haze-grad,.drift,.pill,html:not(.carried) :is(.about-word,.about-head .name){animation:none}
  body.leaving :is(.backdrop,.shade,.haze,.practices,.plate,.back,.bio,.field){animation:none!important;opacity:0}
}
