/* ==========================================================================
   Parsons Fine Art Advisory
   Design system derived from the "Siena" landing page.
   Ground and accent colours sampled from the hero drawing.
   ========================================================================== */

:root{
  /* Height of the fixed mobile action bar. Zero wherever the bar is hidden;
     the mobile block below raises it so full-height sections can subtract it
     and stop exactly at the bar rather than running underneath it. */
  --actionbar-h: 0px;

  /* Ground — the paper of the drawing, lightened for reading */
  --paper:       #efe5d4;
  --paper-warm:  #e7dac4;
  --paper-deep:  #ddcdb2;
  --night:       #2f2016;   /* chocolate — the dark ground for footer, CTA bands, action bar */
  --night-soft:  #3b2a1e;
  --night-line:  rgba(255,255,255,.16);

  /* Ink — sampled from the graphite */
  --ink:         #211b14;
  --ink-soft:    #4a4136;
  --ink-mute:    #6d6153;

  /* Accent — burnt sienna, after the pencilled colour notes */
  --siena:       #8a4b2a;
  --siena-lift:  #a35c36;

  --rule:        rgba(33,27,20,.16);
  --rule-strong: rgba(33,27,20,.34);
  --rule-light:  rgba(255,255,255,.28);

  --serif: "Cormorant","Cormorant Garamond",Georgia,"Times New Roman",serif;
  --sans:  "Montserrat",-apple-system,BlinkMacSystemFont,"Helvetica Neue",Arial,sans-serif;

  --gut: 52px;         /* desktop page gutter — matches the landing rail */
  --measure: 34rem;    /* prose measure */
}

*,*::before,*::after{box-sizing:border-box;margin:0;padding:0;}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%;}
@media (prefers-reduced-motion: reduce){
  html{scroll-behavior:auto;}
  *,*::before,*::after{animation-duration:.01ms !important;transition-duration:.01ms !important;}
}

body{
  font-family:var(--sans);
  font-weight:400;
  font-size:16.5px;
  line-height:1.75;
  color:var(--ink);
  background:var(--paper);
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
}

img{max-width:100%;height:auto;display:block;}
a{color:inherit;}

/* --------------------------------------------------------------- type ---- */

.serif{font-family:var(--serif);}

h1,h2,h3,h4{font-family:var(--serif);font-weight:300;line-height:1.14;letter-spacing:.02em;}

.display{
  font-family:var(--serif);
  font-size:clamp(34px,4.4vw,58px);
  font-weight:300;
  letter-spacing:.06em;
  line-height:1.08;
}

h1,.h1{font-size:clamp(31px,3.7vw,47px);letter-spacing:.035em;}
h2,.h2{font-size:clamp(24px,2.5vw,33px);letter-spacing:.03em;}
h3,.h3{font-size:clamp(20px,1.7vw,24px);font-weight:400;letter-spacing:.03em;}

.eyebrow{
  font-family:var(--sans);
  font-size:11px;
  font-weight:500;
  letter-spacing:.26em;
  text-transform:uppercase;
  color:var(--siena);
}

.lede{
  font-size:clamp(17px,1.35vw,19.5px);
  line-height:1.7;
  font-weight:300;
  color:var(--ink-soft);
  max-width:38rem;
}

p{max-width:var(--measure);}
p + p{margin-top:1.1em;}
.wide p{max-width:none;}

strong,b{font-weight:500;color:var(--ink);}
em{font-style:italic;}

/* Hairline rule — the landing page signature */
/* Role line under a name — serif, so it does not compete with the sans eyebrow
   sitting directly above the heading. */
.role-line{
  font-family:var(--serif);font-size:19px;font-weight:400;
  letter-spacing:.03em;line-height:1.4;color:var(--ink-soft);
  margin-top:12px;
}
.hairline{width:70px;height:1px;background:var(--rule-strong);margin:28px 0;}
.hairline.light{background:rgba(255,255,255,.85);}
.hairline.center{margin-left:auto;margin-right:auto;}

.section-rule{border:0;border-top:1px solid var(--rule);margin:0;}

/* -------------------------------------------------------------- layout ---- */

.wrap{max-width:1240px;margin:0 auto;padding:0 var(--gut);}
.narrow{max-width:820px;}

section{padding:clamp(56px,7vw,104px) 0;}
section.tight{padding:clamp(40px,4.5vw,64px) 0;}

.band-warm{background:var(--paper-warm);}
.band-deep{background:var(--paper-deep);}
.band-night{background:var(--night);color:rgba(255,255,255,.86);}
.band-night h1,.band-night h2,.band-night h3{color:#fff;}
.band-night .eyebrow{color:#c98f63;}
.band-night a{color:#fff;}

.cols{display:grid;gap:clamp(32px,4vw,64px);}
.cols-2{grid-template-columns:repeat(2,minmax(0,1fr));}
.cols-3{grid-template-columns:repeat(3,minmax(0,1fr));}
.cols-side{grid-template-columns:minmax(0,1fr) minmax(0,1.55fr);}
@media(max-width:860px){
  .cols-2,.cols-3,.cols-side{grid-template-columns:1fr;}
}

.stack-lg > * + *{margin-top:clamp(28px,3vw,44px);}
.stack-md > * + *{margin-top:20px;}
.stack-sm > * + *{margin-top:10px;}

/* -------------------------------------------------------------- header ---- */

.rail{
  position:sticky;top:0;z-index:60;
  background:var(--paper);
  border-bottom:1px solid var(--rule);
  transition:background .3s ease,border-color .3s ease,color .3s ease;
}

/* Home page: the rail floats over the drawing until you scroll past it. */
.rail.over{
  position:fixed;top:0;left:0;right:0;
  background:transparent;border-bottom-color:transparent;color:#fff;
}
.rail.over .brand .sub{opacity:.9;}
.rail.over .nav a[aria-current="page"]{color:#fff;border-bottom-color:rgba(255,255,255,.8);}
.rail.over .nav a:hover{color:#fff;opacity:1;}
.rail.over .nav-toggle{border-color:rgba(255,255,255,.6);}
.rail.over.scrolled{
  background:var(--paper);border-bottom-color:var(--rule);color:var(--ink);
}
.rail.over.scrolled .nav a[aria-current="page"]{color:var(--siena);border-bottom-color:var(--siena);}
.rail.over.scrolled .nav a:hover{color:var(--siena);}
.rail.over.scrolled .nav-toggle{border-color:var(--rule-strong);}
@media(max-width:900px){
  /* an open menu always needs the solid ground behind it */
  .rail.over:has(.nav.open){background:var(--paper);color:var(--ink);border-bottom-color:var(--rule);}
  .rail.over:has(.nav.open) .nav-toggle{border-color:var(--rule-strong);}
}
.rail-inner{
  display:flex;align-items:flex-start;justify-content:space-between;gap:24px;
  padding:26px var(--gut);
  max-width:1240px;margin:0 auto;
}
.brand{display:flex;flex-direction:column;align-items:flex-start;text-decoration:none;color:inherit;}
.brand .mark{
  font-family:var(--serif);font-size:26px;letter-spacing:.40em;font-weight:400;
  text-transform:uppercase;line-height:1;display:inline-block;
}
.brand .sub{
  font-size:10px;letter-spacing:.28em;text-transform:uppercase;font-weight:400;
  opacity:.85;margin-top:9px;display:inline-block;white-space:nowrap;
}

.nav{
  font-size:12px;letter-spacing:.24em;text-transform:uppercase;
  display:flex;gap:34px;font-weight:400;padding-top:9px;
}
.nav a{text-decoration:none;opacity:.86;transition:opacity .2s,color .2s;padding-bottom:2px;}
.nav a:hover{opacity:1;color:var(--siena);}
.nav a[aria-current="page"]{opacity:1;color:var(--siena);border-bottom:1px solid var(--siena);}

.nav-toggle{
  display:none;background:none;border:1px solid var(--rule-strong);
  font-family:var(--sans);font-size:10px;letter-spacing:.22em;text-transform:uppercase;
  padding:9px 14px;cursor:pointer;color:inherit;
}

@media(max-width:900px){
  :root{--gut:24px;}
  .rail-inner{padding:20px var(--gut);align-items:center;}
  .nav-toggle{display:block;}
  .nav{
    display:none;position:absolute;left:0;right:0;top:100%;
    background:var(--paper);border-bottom:1px solid var(--rule);
    flex-direction:column;gap:0;padding:6px 0;
  }
  .nav.open{display:flex;}
  .nav a{padding:15px var(--gut);border-top:1px solid var(--rule);}
  .brand .mark{font-size:21px;letter-spacing:.34em;}
  .brand .sub{font-size:9px;letter-spacing:.24em;margin-top:7px;}
}

/* ----------------------------------------------------------- home hero ---- */

.hero-home{
  position:relative;
  min-height:calc(100vh - var(--actionbar-h));
  min-height:calc(100svh - var(--actionbar-h));
  background-image:var(--hero-fallback,none);background-color:#2f2016;
  background-size:cover;
  background-position:center 34%;
  display:flex;align-items:flex-end;
  color:#fff;
}
.hero-home::after{
  content:"";position:absolute;inset:0;
  background:
    linear-gradient(to right, rgba(20,13,6,.62) 0%, rgba(20,13,6,.40) 34%, rgba(20,13,6,.06) 62%, rgba(20,13,6,0) 100%),
    linear-gradient(to bottom, rgba(12,9,5,.34) 0%, rgba(12,9,5,0) 26%, rgba(12,9,5,0) 62%, rgba(12,9,5,.52) 100%);
}
.hero-home .hero-body{position:relative;z-index:2;padding:0 0 clamp(64px,9vh,120px);max-width:730px;}
.hero-home .sub{
  margin-top:30px;font-size:clamp(15px,1.2vw,17.5px);line-height:1.65;
  font-weight:300;letter-spacing:.02em;max-width:480px;color:rgba(255,255,255,.95);
}
.hero-home .credit{
  position:absolute;right:var(--gut);bottom:18px;z-index:2;
  font-size:10px;letter-spacing:.14em;text-transform:uppercase;
  color:rgba(46,31,17,.52);max-width:42%;text-align:right;line-height:1.5;
}
@media(max-width:720px){
  /* The drawing runs the full height of the screen and stops at the top edge
     of the action bar. padding-top only clears the floating rail if the copy
     ever grows past the viewport; the body itself is bottom-aligned. */
  .hero-home{padding-top:96px;background-position:center 28%;}
  .hero-home .credit{display:none;}
  .hero-home .hero-body{padding-bottom:56px;}
  /* Narrow viewports lose the horizontal scrim, so weight it vertically instead. */
  .hero-home::after{
    background:linear-gradient(to bottom,
      rgba(12,9,5,.46) 0%, rgba(12,9,5,.12) 20%,
      rgba(20,13,6,.44) 52%, rgba(20,13,6,.76) 100%);
  }
}

/* ------------------------------------------------------------- the work --- */
/* Full-bleed dark band on the landing page. The bust is a real <img> rather
   than a background so it carries alt text and can be art-directed with
   srcset; the ground is baked into the file at the same chocolate as --night,
   so the rectangle has no visible edge. The scrim sits between the picture and
   the copy, which is what lets the text sit over the image and still read. */

.work-band{
  position:relative;
  background:var(--night);
  color:rgba(255,255,255,.86);
  overflow:hidden;
  min-height:min(1000px,100vh);
  display:flex;align-items:center;
  padding:clamp(72px,8vw,120px) 0;
}
.work-band h2{color:#fff;}
.work-band .eyebrow{color:#c98f63;}

/* The bust is cropped so its right edge IS the tip of the nose. This rail
   repeats the header's geometry exactly — max-width 1240, gutter var(--gut) —
   so positioning the picture against the rail's right padding lands the nose
   on the final T of CONTACT at every width. The extra 2.9px cancels the
   trailing letter-space that sits after that T. */
.work-art-rail{
  position:absolute;z-index:1;pointer-events:none;
  top:0;bottom:0;left:0;right:0;
  max-width:1240px;margin:0 auto;
}
.work-art{
  position:absolute;z-index:1;
  top:clamp(16px,2.5vh,44px);bottom:0;right:calc(var(--gut) + 2.9px);
  display:block;pointer-events:none;
}
.work-art img{
  height:100%;width:auto;max-width:none;
  object-fit:contain;object-position:right bottom;
}

.work-band::after{
  content:"";position:absolute;inset:0;z-index:2;pointer-events:none;
  background:linear-gradient(to right,
    rgba(47,32,22,.98) 0%,
    rgba(47,32,22,.94) 34%,
    rgba(47,32,22,.62) 58%,
    rgba(47,32,22,.12) 80%,
    rgba(47,32,22,0)  100%);
}

.work-inner{position:relative;z-index:3;width:100%;}
.work-copy{max-width:640px;}
.work-copy h2{
  font-size:clamp(30px,3vw,44px);
  line-height:1.1;letter-spacing:.03em;margin-top:18px;
  max-width:13em; /* keeps the second line clear of the bust at 1300–1500px */
}
.work-copy h2 + p{margin-top:clamp(28px,3.2vw,42px);}
/* The sale figure is the proof in the story, so it is set as a figure rather
   than as running text: display serif, brighter than the body, and locked to
   line-height 1 so the paragraph's leading does not open around it. */
.work-copy .figure{
  font-family:var(--serif);
  font-size:1.62em;font-weight:400;
  letter-spacing:.03em;line-height:1;
  color:#fff;white-space:nowrap;
}
.work-copy p{
  max-width:33rem;
  font-size:clamp(15.5px,1.15vw,17px);
  line-height:1.78;font-weight:300;
  color:rgba(255,255,255,.84);
}
.work-copy .textlink{
  color:#e3b183;border-bottom-color:rgba(227,177,131,.55);
}
/* Between 901 and 1180 the bust and the column are close enough that a full
   measure runs into the sitter's face; pull the copy back instead. */
@media(min-width:901px) and (max-width:1180px){
  .work-copy{max-width:58%;}
  .work-copy p{max-width:29rem;}
}

/* Museum-label credit: artist in caps, sitter in the display italic, medium
   and date back down in caps. */
.work-caption{
  position:absolute;z-index:3;right:var(--gut);bottom:22px;
  max-width:46%;text-align:right;
}
.work-caption span{display:block;}
.work-caption .c-artist{
  font-size:10px;letter-spacing:.2em;text-transform:uppercase;
  color:rgba(255,255,255,.6);line-height:1.5;
}
.work-caption .c-title{
  font-family:var(--serif);font-style:italic;font-weight:400;
  font-size:16px;letter-spacing:.02em;line-height:1.35;
  color:rgba(255,255,255,.76);margin-top:5px;
}
.work-caption .c-med{
  font-size:9.5px;letter-spacing:.18em;text-transform:uppercase;
  color:rgba(255,255,255,.42);margin-top:7px;line-height:1.5;
}

/* Under 900px the bust stops being a backdrop and becomes the opening image:
   a scrim heavy enough to carry text over a narrow column would flatten the
   marble to a smudge, so the picture stacks above the copy at full strength. */
@media(max-width:900px){
  .work-band{display:block;min-height:auto;padding:clamp(52px,9vw,78px) 0 clamp(58px,10vw,88px);}
  .work-art-rail{position:static;max-width:none;margin:0;}
  .work-art{
    position:relative;top:auto;bottom:auto;right:auto;
    height:min(48vh,430px);width:max-content;max-width:100%;
    margin:0 auto clamp(34px,7vw,54px);
  }
  .work-art img{height:100%;margin:0 auto;}
  .work-band::after{display:none;}
  .work-copy{max-width:none;}
  .work-copy p{max-width:none;}
  .work-caption{
    position:static;max-width:none;text-align:center;
    margin:-26px auto clamp(30px,6vw,44px);
  }
}

/* Interior page head */
.page-head{padding:clamp(48px,6vw,84px) 0 clamp(34px,4vw,52px);}
.page-head .lede{margin-top:22px;}

/* About — portrait beside the page head. Text keeps its measure; the
   portrait sits in the column that was empty. Stacks under the text on
   narrow screens. Added 4 Sept 2026. */
.page-head.with-portrait .wrap{
  display:grid;grid-template-columns:minmax(0,1.5fr) minmax(240px,.9fr);
  gap:clamp(32px,5vw,72px);align-items:end;
}
.page-head.with-portrait .head-text{min-width:0;}
.portrait{margin:0;max-width:380px;justify-self:end;width:100%;}
.portrait img{display:block;width:100%;height:auto;background:#fff;
  border:1px solid var(--rule);padding:6px;box-sizing:border-box;}
.portrait figcaption{
  font-family:var(--sans);font-size:11px;letter-spacing:.18em;
  text-transform:uppercase;color:var(--ink-mute);margin-top:12px;
}
@media(max-width:860px){
  .page-head.with-portrait .wrap{grid-template-columns:1fr;gap:28px;}
  .portrait{max-width:220px;justify-self:start;order:-1;}
}

/* --------------------------------------------------------------- cards ---- */

/* Borders live on the cards, not on grid gaps, so a trailing empty cell in an
   odd-numbered grid stays paper rather than showing the rule colour. */
.card-grid{display:grid;border-top:1px solid var(--rule);border-left:1px solid var(--rule);}
.card-grid .card{border-right:1px solid var(--rule);border-bottom:1px solid var(--rule);}
.card-grid.three{grid-template-columns:repeat(3,minmax(0,1fr));}
.card-grid.two{grid-template-columns:repeat(2,minmax(0,1fr));}
@media(max-width:900px){.card-grid.three{grid-template-columns:repeat(2,minmax(0,1fr));}}
@media(max-width:620px){.card-grid.three,.card-grid.two{grid-template-columns:1fr;}}

.card{
  background:var(--paper);
  padding:30px 28px 32px;
  text-decoration:none;color:inherit;
  display:flex;flex-direction:column;gap:11px;
  transition:background .22s;
}
a.card:hover{background:var(--paper-warm);}
a.card:hover .card-title{color:var(--siena);}
.card-title{font-family:var(--serif);font-size:22px;font-weight:400;letter-spacing:.02em;line-height:1.2;transition:color .22s;}
.card-note{font-size:14.5px;line-height:1.65;color:var(--ink-mute);max-width:none;}
.card-value{
  font-size:10.5px;letter-spacing:.2em;text-transform:uppercase;
  color:var(--siena);margin-top:auto;padding-top:12px;
}
a.card.ask{background:var(--paper-warm);}
a.card.ask:hover{background:var(--paper-deep);}

/* ------------------------------------------------------------ key facts --- */

.facts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;background:var(--rule);border-block:1px solid var(--rule);}
@media(max-width:760px){.facts{grid-template-columns:1fr;}}

.fact{
  background:var(--paper);
  padding:38px 30px 34px;
  position:relative;
  overflow:hidden;
  transition:background .5s ease;
}
/* A siena hairline draws itself across the top of each panel as it arrives. */
.fact::before{
  content:"";position:absolute;top:0;left:0;height:2px;width:100%;
  background:var(--siena);
  transform:scaleX(0);transform-origin:left center;
  transition:transform .9s cubic-bezier(.22,.61,.36,1);
}
.fact.is-in::before{transform:scaleX(1);}
.fact:nth-child(2)::before{transition-delay:.12s;}
.fact:nth-child(3)::before{transition-delay:.24s;}
.fact:hover{background:var(--paper-warm);}

.fact .n{
  font-family:var(--serif);
  font-size:clamp(38px,4.6vw,60px);
  font-weight:300;line-height:1;
  letter-spacing:.01em;
  color:var(--siena);
  /* tabular figures so the count-up cannot make the line jitter as digits change */
  font-variant-numeric:tabular-nums;
  font-feature-settings:"tnum" 1;
}
.fact .t{
  margin-top:16px;
  font-size:14.5px;line-height:1.65;
  color:var(--ink-soft);max-width:none;
}

/* "Daily" is a word, not a number, so it gets its own arrival: a wipe up from
   behind the baseline rather than a count. */
.fact .n-word{
  display:inline-block;
  transform:translateY(105%);
  transition:transform .85s cubic-bezier(.22,.61,.36,1);
}
.fact.is-in .n-word{transform:translateY(0);}
.fact:nth-child(3) .n-word{transition-delay:.30s;}

@media(prefers-reduced-motion:reduce){
  .fact::before{transform:scaleX(1);transition:none;}
  .fact .n-word{transform:none;transition:none;}
}

/* --------------------------------------------------------------- lists ---- */

ul.plain,ol.plain{list-style:none;max-width:var(--measure);}
ul.plain li,ol.plain li{position:relative;padding-left:22px;margin-bottom:11px;line-height:1.7;}
ul.plain li::before{
  content:"";position:absolute;left:0;top:.72em;
  width:9px;height:1px;background:var(--siena);
}
ol.checklist{counter-reset:step;list-style:none;max-width:var(--measure);}
ol.checklist li{counter-increment:step;position:relative;padding-left:44px;margin-bottom:22px;}
ol.checklist li::before{
  content:counter(step,decimal-leading-zero);
  position:absolute;left:0;top:.05em;
  font-family:var(--serif);font-size:19px;color:var(--siena);letter-spacing:.06em;
}
ol.checklist li h3{margin-bottom:4px;}

/* --------------------------------------------------------------- table ---- */

.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;}
table{width:100%;border-collapse:collapse;font-size:15px;min-width:460px;}
caption{
  text-align:left;font-size:11px;letter-spacing:.22em;text-transform:uppercase;
  color:var(--ink-mute);padding-bottom:14px;
}
th,td{text-align:left;padding:15px 20px 15px 0;border-bottom:1px solid var(--rule);vertical-align:top;line-height:1.6;}
thead th{
  font-family:var(--sans);font-size:10.5px;font-weight:500;letter-spacing:.2em;
  text-transform:uppercase;color:var(--ink-mute);border-bottom:1px solid var(--rule-strong);
  padding-bottom:11px;
}
td.rate{font-family:var(--serif);font-size:21px;color:var(--siena);white-space:nowrap;letter-spacing:.02em;}
tbody tr:last-child td{border-bottom:0;}

/* ------------------------------------------------------------- callout ---- */

.callout{
  border-left:2px solid var(--siena);
  padding:6px 0 6px 26px;
  max-width:38rem;
}
.callout p{max-width:none;}
.callout .label{
  font-size:10.5px;letter-spacing:.22em;text-transform:uppercase;
  color:var(--siena);margin-bottom:9px;
}

.pull{
  font-family:var(--serif);
  font-size:clamp(22px,2.4vw,30px);
  font-weight:300;line-height:1.34;letter-spacing:.02em;
  color:var(--ink);max-width:32rem;
}
.pull cite{display:block;margin-top:18px;font-family:var(--sans);font-size:12px;
  letter-spacing:.18em;text-transform:uppercase;font-style:normal;color:var(--ink-mute);}

/* ----------------------------------------------------------------- faq ---- */

.faq{border-top:1px solid var(--rule);max-width:44rem;}
.faq details{border-bottom:1px solid var(--rule);}
.faq summary{
  cursor:pointer;list-style:none;padding:20px 40px 20px 0;position:relative;
  font-family:var(--serif);font-size:20px;font-weight:400;line-height:1.35;letter-spacing:.02em;
}
.faq summary::-webkit-details-marker{display:none;}
.faq summary::after{
  content:"+";position:absolute;right:6px;top:19px;
  font-family:var(--sans);font-weight:300;font-size:20px;color:var(--siena);
  transition:transform .2s;
}
.faq details[open] summary::after{content:"–";}
.faq summary:hover{color:var(--siena);}
.faq .answer{padding:0 40px 24px 0;}
.faq .answer p{max-width:none;font-size:15.5px;}

/* ------------------------------------------------------------- buttons ---- */

.btn{
  display:inline-block;text-decoration:none;
  font-family:var(--sans);font-size:11px;font-weight:500;letter-spacing:.22em;text-transform:uppercase;
  padding:16px 30px;border:1px solid var(--ink);color:var(--ink);background:none;
  transition:background .22s,color .22s,border-color .22s;cursor:pointer;
}
.btn:hover{background:var(--ink);color:var(--paper);}
.btn.solid{background:var(--siena);border-color:var(--siena);color:#fff;}
.btn.solid:hover{background:var(--siena-lift);border-color:var(--siena-lift);}
.btn.light{border-color:rgba(255,255,255,.7);color:#fff;}
.btn.light:hover{background:#fff;color:var(--ink);}

.btn-row{display:flex;flex-wrap:wrap;gap:14px;align-items:center;}

.textlink{
  text-decoration:none;border-bottom:1px solid var(--siena);
  color:var(--siena);padding-bottom:1px;transition:opacity .2s;
}
.textlink:hover{opacity:.72;}

/* inline prose links */
.prose a:not(.btn):not(.textlink):not(.card){
  color:var(--siena);text-decoration:none;border-bottom:1px solid rgba(138,75,42,.4);
}
.prose a:not(.btn):not(.textlink):not(.card):hover{border-bottom-color:var(--siena);}

/* ---------------------------------------------------------------- form ---- */

.form{max-width:640px;}
.field{margin-bottom:26px;}
.field label{
  display:block;font-size:10.5px;letter-spacing:.2em;text-transform:uppercase;
  color:var(--ink-mute);margin-bottom:9px;
}
.field .hint{font-size:13px;color:var(--ink-mute);margin-top:7px;line-height:1.55;max-width:none;}
input[type=text],input[type=email],input[type=tel],input[type=number],select,textarea{
  width:100%;font-family:var(--sans);font-size:15.5px;color:var(--ink);
  background:rgba(255,255,255,.42);
  border:1px solid var(--rule-strong);border-radius:0;
  padding:13px 15px;line-height:1.5;
}
input:focus,select:focus,textarea:focus{
  outline:2px solid var(--siena);outline-offset:1px;background:#fff;
}
textarea{min-height:150px;resize:vertical;}
select{appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--siena) 50%),linear-gradient(135deg,var(--siena) 50%,transparent 50%);
  background-position:calc(100% - 19px) 21px,calc(100% - 13px) 21px;background-size:6px 6px;background-repeat:no-repeat;}
.field-row{display:grid;grid-template-columns:1fr 1fr;gap:20px;}
@media(max-width:620px){.field-row{grid-template-columns:1fr;}}
.radio-row{display:flex;gap:26px;flex-wrap:wrap;}
.radio-row label{display:flex;align-items:center;gap:9px;text-transform:none;letter-spacing:0;
  font-size:15px;color:var(--ink);margin:0;}
input[type=radio],input[type=checkbox]{width:auto;accent-color:var(--siena);}

/* -------------------------------------------------------------- footer ---- */

.foot{background:var(--night);color:rgba(255,255,255,.72);padding:clamp(52px,6vw,78px) 0 34px;}
.foot a{color:rgba(255,255,255,.72);text-decoration:none;transition:color .2s;}
.foot a:hover{color:#fff;}
.foot .brand{color:#fff;}
.foot .brand .sub{opacity:.7;}
.foot-grid{display:grid;grid-template-columns:1.3fr 1fr 1fr;gap:44px;}
@media(max-width:860px){.foot-grid{grid-template-columns:1fr 1fr;gap:36px;}}
@media(max-width:560px){.foot-grid{grid-template-columns:1fr;}}
.foot h4{
  font-family:var(--sans);font-size:10.5px;font-weight:500;letter-spacing:.22em;
  text-transform:uppercase;color:rgba(255,255,255,.5);margin-bottom:16px;
}
.foot ul{list-style:none;}
.foot li{margin-bottom:9px;font-size:14.5px;}
.foot .contact-line{font-size:14.5px;line-height:1.8;margin-top:22px;color:rgba(255,255,255,.8);max-width:none;}
.foot-base{
  margin-top:clamp(40px,5vw,60px);padding-top:24px;
  border-top:1px solid rgba(255,255,255,.18);
  display:flex;justify-content:space-between;gap:20px;flex-wrap:wrap;
  font-size:11.5px;letter-spacing:.06em;color:rgba(255,255,255,.5);
}
.foot-base .tri{text-transform:uppercase;letter-spacing:.2em;}
.foot .disclaimer{
  margin-top:26px;font-size:12px;line-height:1.7;color:rgba(255,255,255,.56);max-width:52rem;
}

/* ------------------------------------------------------------ utilities --- */

.skip{
  position:absolute;left:-9999px;top:0;background:var(--siena);color:#fff;
  padding:12px 20px;z-index:200;font-size:12px;letter-spacing:.18em;text-transform:uppercase;
}
.skip:focus{left:0;}

.crumbs{font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-mute);padding-top:26px;}
.crumbs a{text-decoration:none;color:var(--ink-mute);}
.crumbs a:hover{color:var(--siena);}
.crumbs span{margin:0 9px;opacity:.5;}

.note{font-size:13.5px;line-height:1.7;color:var(--ink-mute);max-width:40rem;}
.center{text-align:center;}
.center p,.center .lede{margin-left:auto;margin-right:auto;}
.mt-0{margin-top:0;}

:focus-visible{outline:2px solid var(--siena);outline-offset:3px;}

@media print{
  .rail,.foot,.btn{display:none;}
  body{background:#fff;color:#000;}
}

/* Plate + casebook rules restored 4 Sept 2026 from the 21 Aug source, for casebook.html. */
/* --------------------------------------------------------------- plate ----
   The annotated catalogue plate. An object presented the way a catalogue
   presents it — plate number, caption, provenance — with the points of
   identification marked on the object itself, the way a condition report
   marks them.

   Three pieces sit over the picture:
     .plate-marks  an inline <svg> sharing the picture's viewBox, so its leader
                   lines land on the same points of the object at every size.
                   Decorative and aria-hidden. Each leader is stroked twice, a
                   dark line under a light one, because this object is pale
                   marble on a dark ground and a single stroke disappears into
                   one or the other.
     .plate-pin    real <button>s placed by percentage, so they travel with the
                   picture and are reachable by keyboard, which an <svg> shape
                   would not be.
     .plate-notes  the notes, stacked in ONE grid cell. The block is therefore
                   always as tall as its tallest note, and changing note can
                   never shift the page. No magic min-height to keep in tune.

   Motion is opacity and transform only. The pin's filled state is an inner
   disc that scales up rather than a background that changes size, for the same
   reason. The numeral's colour does change, which is paint, not layout.
   -------------------------------------------------------------------------- */

.plate{
  margin:0;
  scroll-margin-top:110px;
  max-width:clamp(230px,24vw,290px);
}

.plate-num{
  font-family:var(--sans);
  font-size:10.5px;
  letter-spacing:.24em;
  text-transform:uppercase;
  color:var(--siena);
  margin-bottom:12px;
}

.plate-fig{
  position:relative;
  background:var(--paper-deep);
  border:1px solid var(--rule);
}
.plate-fig img{width:100%;display:block;}

.plate-marks{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  pointer-events:none;
}
.plate-marks .lead-under{stroke:rgba(0,0,0,.5);stroke-width:3;}
.plate-marks .lead{stroke:rgba(255,255,255,.72);stroke-width:1;}

/* ---- the pins ---- */

.plate-pin{
  position:absolute;
  transform:translate(-50%,-50%);
  width:26px;height:26px;
  padding:0;
  border:1px solid var(--night);
  border-radius:50%;
  background:var(--paper);
  cursor:pointer;
  display:grid;
  place-items:center;
  isolation:isolate;
}
.plate-pin .pin-dot{
  position:absolute;
  inset:2px;
  border-radius:50%;
  background:var(--siena);
  transform:scale(0);
  transition:transform .34s cubic-bezier(.22,.61,.36,1);
  z-index:-1;
}
.plate-pin .pin-num{
  font-family:var(--sans);
  font-size:11px;
  font-weight:500;
  line-height:1;
  color:var(--ink);
  transition:color .2s ease;
}
.plate-pin:hover .pin-dot,
.plate-pin:focus-visible .pin-dot,
.plate-pin.is-on .pin-dot{transform:scale(1);}
.plate-pin:hover .pin-num,
.plate-pin:focus-visible .pin-num,
.plate-pin.is-on .pin-num{color:#fff;}

/* ---- the note, and the caption below it ---- */

.plate-notes{
  display:grid;
  margin-top:16px;
  padding:14px 0;
  border-top:1px solid var(--rule);
  border-bottom:1px solid var(--rule);
}
.plate-note{
  grid-area:1/1;
  font-size:14px;
  line-height:1.65;
  color:var(--ink-soft);
  opacity:0;
  transition:opacity .3s ease;
}
.plate-note.is-shown{opacity:1;}
.plate-note.plate-prompt{color:var(--ink-mute);font-style:italic;}
.plate-note b{font-weight:500;color:var(--ink);font-style:normal;}

.plate-cap{
  margin-top:18px;
  font-size:13.5px;
  line-height:1.6;
  color:var(--ink-soft);
}
.plate-cap .maker{
  font-family:var(--serif);
  font-size:19px;
  line-height:1.25;
  color:var(--ink);
  display:block;
  margin-bottom:6px;
}
/* Turns "3/8" into a real fraction where the face has the feature, and leaves
   it as plain digits where it does not. Wrap ONLY the fraction: the feature
   applies to the whole run, so including the whole number superscripts it too
   and "11 3/8" sets as a raised 11 beside the fraction.

   Not scoped to the plate — dimensions appear in running prose as well. */
.dim{font-variant-numeric:diagonal-fractions;}
.plate-cap .title{font-family:var(--serif);font-style:italic;color:var(--ink);}
.plate-cap .insc{font-family:var(--serif);font-style:italic;}
.plate-prov{
  display:block;
  margin-top:12px;
  font-size:12.5px;
  line-height:1.6;
  color:var(--ink-mute);
}
.plate-prov .lbl{
  font-family:var(--sans);
  font-size:10px;
  letter-spacing:.2em;
  text-transform:uppercase;
  color:var(--ink-soft);
  display:block;
  margin-bottom:3px;
}

/* On a wide screen the plate can keep pace with the reading, so the object
   stays beside the account of it instead of scrolling away in the first
   paragraph. The header is sticky at 0, so this clears it.

   The height gate is load-bearing, not fussiness. A sticky element pinned by
   its TOP that is taller than the viewport can never have its bottom scrolled
   into view — the caption and provenance would become unreadable on any short
   screen. So the plate only sticks where there is demonstrably room for all of
   it, and simply scrolls with the column everywhere else. 1260px is the plate
   at its tallest (about 1115px) plus the 104px offset plus room to breathe;
   if the caption grows, re-measure and raise it. */
@media(min-width:861px) and (min-height:1260px){
  .plate-mount{position:sticky;top:104px;}
}

/* On a phone the column collapses, so the plate is full width and the pins
   want a finger rather than a cursor. */
@media(max-width:860px){
  .plate{max-width:none;margin-bottom:34px;}
  .plate-pin{width:34px;height:34px;}
  .plate-pin .pin-num{font-size:12.5px;}

  /* The pin reads at 34px but has to be 44px to a thumb, which is this site's
     standard everywhere else. Growing the drawn circle to 44 would put a heavy
     dot on a small picture, so the target is extended past the artwork instead. */
  .plate-pin::after{content:'';position:absolute;inset:-5px;border-radius:50%;}
}

/* ------------------------------------------------------------- casebook ---- */

/* THE RECORD. A definition list, set as label/value pairs on a wide screen and
   stacked on a phone. <dl> with each pair wrapped in a <div> so the grid has
   something to lay out — dt/dd cannot be grid items of the same row otherwise. */
.record{margin-top:26px;border-top:1px solid var(--rule);}
.record > div{
  display:grid;
  grid-template-columns:minmax(0,9.5rem) minmax(0,1fr);
  gap:6px 28px;
  padding:11px 0;
  border-bottom:1px solid var(--rule);
}
.record dt{
  font-family:var(--sans);
  font-size:10.5px;letter-spacing:.18em;text-transform:uppercase;
  color:var(--ink-mute);
  padding-top:3px;
}
.record dd{font-size:14.5px;line-height:1.6;}
@media(max-width:640px){
  .record > div{grid-template-columns:1fr;gap:3px;}
}

/* A COMPARANDUM — two figures that only mean anything read together, so they
   share one grid and one baseline. Used for the Benson: the panel as it is now
   beside the 1938 plate that fixes it in the literature.

   align-items:end keeps the captions on a common line when the two photographs
   are different shapes, which they always are — an archive plate and a modern
   record shot are never the same crop. */
.plate-pair{
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:clamp(18px,3vw,38px);
  align-items:end;
}
@media(max-width:560px){.plate-pair{grid-template-columns:1fr;}}
.plate-pair figure{margin:0;}
.plate-pair .fig-ground{background:var(--paper-deep);border:1px solid var(--rule);}
.plate-pair img{width:100%;display:block;}
.plate-pair figcaption{margin-top:10px;font-size:12.5px;line-height:1.55;color:var(--ink-mute);}
.plate-pair .fig-n{
  font-family:var(--sans);
  font-size:10px;letter-spacing:.2em;text-transform:uppercase;
  color:var(--siena);display:block;margin-bottom:3px;
}

/* A picture photographed in its frame sits on the paper ground rather than the
   dark one. The frame supplies its own edge, so a second one fights it. */
.plate--framed .plate-fig{background:var(--paper);}

/* ==========================================================================
   MOBILE
   Everything below is the small-screen pass: responsive hero art, stacked
   tables, 44px touch targets, iOS-safe form sizing, tightened rhythm, and a
   persistent call/quote bar.
   ========================================================================== */

/* ------------------------------------------------- responsive hero art ---- */
/* Small viewport does NOT mean few pixels. A 393pt phone at DPR 3 paints 1179
   physical pixels across, and because the hero is background-size:cover on a
   tall portrait box the binding constraint is height: about 1680 physical
   pixels. Serving a 720px image there upscales it ~2.6x, which is exactly what
   soft, mushy hero art looks like.

   Two mutually exclusive breakpoints, one image-set() each, so the browser
   selects by device pixel ratio and fetches exactly one file. */

@media(min-width:901px){
  .hero-home{
    background-image:url('../assets/hero-1600.jpg');
    background-image:-webkit-image-set(
      url('../assets/hero-1600.jpg') 1x,
      url('../assets/hero-2100.jpg') 2x);
    background-image:image-set(
      url('../assets/hero-1600.webp') type('image/webp') 1x,
      url('../assets/hero-2100.webp') type('image/webp') 2x,
      url('../assets/hero-1600.jpg')  type('image/jpeg') 1x,
      url('../assets/hero-2100.jpg')  type('image/jpeg') 2x);
  }
}

@media(max-width:900px){
  .hero-home{
    background-image:url('../assets/hero-1100.jpg');
    background-image:-webkit-image-set(
      url('../assets/hero-1100.jpg') 1x,
      url('../assets/hero-1600.jpg') 2x,
      url('../assets/hero-2100.jpg') 3x);
    background-image:image-set(
      url('../assets/hero-1100.webp') type('image/webp') 1x,
      url('../assets/hero-1600.webp') type('image/webp') 2x,
      url('../assets/hero-2100.webp') type('image/webp') 3x,
      url('../assets/hero-1100.jpg')  type('image/jpeg') 1x,
      url('../assets/hero-1600.jpg')  type('image/jpeg') 2x,
      url('../assets/hero-2100.jpg')  type('image/jpeg') 3x);
  }
}

/* --------------------------------------------------- stacked data tables -- */
/* Under 700px every table becomes a stack of labelled rows. The labels come
   from data-label attributes written at build time, so this needs no JS. */

@media(max-width:700px){
  .table-wrap{overflow:visible;}
  table{min-width:0;display:block;}
  thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;}
  tbody,tr,td{display:block;width:100%;}
  caption{display:block;padding-bottom:16px;}

  tbody tr{
    border:1px solid var(--rule);
    background:rgba(255,255,255,.28);
    padding:6px 18px 12px;
    margin-bottom:14px;
  }
  tbody tr:last-child{margin-bottom:0;}

  td{border-bottom:1px solid var(--rule);padding:13px 0;}
  tr td:last-child{border-bottom:0;}

  td[data-label]::before{
    content:attr(data-label);
    display:block;
    font-size:10px;letter-spacing:.2em;text-transform:uppercase;
    color:var(--ink-mute);margin-bottom:6px;
  }
  td.rate{font-size:26px;}
  td .note{display:block;margin-top:4px;}
}

/* ------------------------------------------------------- touch targets ---- */

@media(max-width:900px){
  a,button,summary,label{-webkit-tap-highlight-color:rgba(138,75,42,.18);}

  .nav-toggle{padding:14px 18px;font-size:11px;}

  /* Footer link lists were 12–16px tall. Give every one a real target. */
  .foot li{margin-bottom:0;}
  .foot li a{display:block;padding:12px 0;min-height:44px;line-height:1.5;}
  .foot ul{border-top:1px solid rgba(255,255,255,.12);}
  .foot li{border-bottom:1px solid rgba(255,255,255,.12);}
  .foot .contact-line a{display:inline-block;padding:9px 0;min-height:38px;}

  .textlink{display:inline-block;padding:10px 0;}
  .crumbs a{display:inline-block;padding:8px 0;}

  input[type=radio],input[type=checkbox]{width:22px;height:22px;}
  .radio-row label{padding:10px 0;min-height:44px;}
  .radio-row{gap:18px;}

  .btn{padding:17px 26px;width:100%;text-align:center;}
  .btn-row{gap:12px;}
  .btn-row .btn{flex:1 1 100%;}
}

/* --------------------------------------------------------- readability ---- */

@media(max-width:900px){
  body{font-size:17px;line-height:1.7;}
  .note,.card-note,.fact .t,.faq .answer p{font-size:15.5px;line-height:1.65;}
  .field .hint{font-size:14px;}
  .eyebrow,.card-value,.callout .label,.field label{font-size:11.5px;letter-spacing:.2em;}
  .foot li{font-size:15.5px;}
  .foot .contact-line{font-size:15.5px;}
  .foot .disclaimer{font-size:13.5px;line-height:1.7;}
  .foot-base{font-size:12.5px;}
  .foot-base .tri{font-size:12px;}
  caption{font-size:11.5px;}

  /* Long single-word URLs and object titles should never force a scrollbar. */
  h1,h2,h3,p,li,td{overflow-wrap:break-word;}
}

/* Prevent iOS zooming the page when a field takes focus (needs >=16px). */
@media(max-width:900px){
  input[type=text],input[type=email],input[type=tel],input[type=number],
  select,textarea{font-size:16px;padding:15px 15px;}
  textarea{min-height:170px;}
  .field{margin-bottom:22px;}
}

/* ------------------------------------------------------------- rhythm ---- */
/* Desktop's generous spacing turns into a lot of scrolling on a phone. */

@media(max-width:760px){
  section{padding:clamp(40px,9vw,58px) 0;}
  section.tight{padding:clamp(30px,6vw,40px) 0;}
  .page-head{padding:34px 0 26px;}
  .cols{gap:26px;}
  .stack-lg > * + *{margin-top:26px;}
  .hairline{margin:22px 0;}
  h2[style*="margin-bottom"]{margin-bottom:16px !important;}
  .card{padding:24px 22px 26px;}
  .fact{padding:24px 22px;}
  .facts{border-inline:1px solid var(--rule);}
  .callout{padding-left:20px;}
  .pull{font-size:22px;}
  ol.checklist li{padding-left:38px;margin-bottom:26px;}

  /* The eyebrow column of the two-column sections reads as a section label */
  .cols-side > div:first-child{margin-bottom:-8px;}
}

/* ------------------------------------------------------ mobile actionbar -- */

.actionbar{display:none;}

@media(max-width:760px){
  /* The bar is visible from here down, so full-height sections must account
     for it. 56px is the a-element min-height set below. */
  :root{--actionbar-h:calc(56px + env(safe-area-inset-bottom));}

  .actionbar{
    display:flex;
    position:fixed;left:0;right:0;bottom:0;z-index:70;
    background:var(--night);
    border-top:1px solid rgba(255,255,255,.16);
    padding-bottom:env(safe-area-inset-bottom);
  }
  .actionbar a{
    flex:1;text-decoration:none;text-align:center;
    padding:17px 8px;min-height:56px;
    font-size:11px;letter-spacing:.2em;text-transform:uppercase;
    color:#fff;display:flex;align-items:center;justify-content:center;
  }
  .actionbar a + a{border-left:1px solid rgba(255,255,255,.16);}
  .actionbar a.primary{background:var(--siena);}
  .actionbar a:active{opacity:.85;}

  /* Keep the bar from covering the last of the footer. */
  body.has-actionbar{padding-bottom:calc(56px + env(safe-area-inset-bottom));}
}

/* ------------------------------------------------------- small phones ----- */

@media(max-width:400px){
  :root{--gut:20px;}
  .brand .mark{font-size:19px;letter-spacing:.30em;}
  .brand .sub{font-size:8.5px;letter-spacing:.2em;}
  .hero-home .sub{font-size:15px;}
  .faq summary{font-size:18px;padding-right:34px;}
  td.rate{font-size:23px;}
}

/* --------------------------------------------------------- landscape ------ */

@media(max-height:520px) and (orientation:landscape){
  /* Bar is hidden here, so the reservation goes back to zero. A full-height
     hero on a 520px-tall screen would bury the copy, so it reverts to auto. */
  :root{--actionbar-h:0px;}
  .hero-home{min-height:auto;padding-top:96px;}
  .hero-home .hero-body{padding-bottom:40px;}
  .actionbar{display:none;}
  body.has-actionbar{padding-bottom:0;}
}

/* A couple of targets still landed just under 44px in testing. */
@media(max-width:900px){
  .nav-toggle{padding:16px 20px;}
  .crumbs{padding-top:18px;}
  .crumbs a{padding:11px 0;}
  .brand{padding:2px 0;}
}

/* Geographic line inside the hero H1 — visible, small, above the display line. */
.h1-geo{
  display:block;
  font-family:var(--sans);
  font-size:clamp(10.5px,1.05vw,12.5px);
  font-weight:500;
  letter-spacing:.26em;
  text-transform:uppercase;
  line-height:1.5;
  margin-bottom:18px;
  opacity:.92;
}
@media(max-width:600px){ .h1-geo{letter-spacing:.2em;margin-bottom:14px;} }

/* ==========================================================================
   Scroll reveals
   --------------------------------------------------------------------------
   Blocks fade and lift into place as they enter the viewport. Only opacity and
   transform are animated, so the compositor handles it and layout never moves:
   CLS stays at zero.

   The hiding rule is scoped to html.js, set by a one-line inline script in the
   head so it applies before first paint and nothing flashes. That same inline
   script sets a 2.5s failsafe (html.reveal-all) so a failed site.js can never
   leave the page invisible.

   Nothing above the fold is in this list — not .hero-home, not .page-head —
   because hiding the LCP element to fade it in would make LCP worse.

   KEEP THIS SELECTOR LIST IN SYNC with the one in js/site.js.
   ========================================================================== */

/* :where() is load-bearing. Written plainly, `html.js .cols-side > div + div`
   scores (0,2,3) and outranks `html.js .is-in` at (0,2,1), so those blocks got
   the is-in class and stayed invisible anyway. :where() contributes zero
   specificity, which puts every hiding rule at (0,1,1) and lets the reveal
   win. Add new selectors INSIDE the :where(), never beside it. */
html.js :where(
  .work-copy,
  .work-caption,
  .cols-side > div + div,
  .cols-2 > div,
  .callout,
  .card,
  .faq,
  .table-wrap,
  .fact
){
  opacity:0;
  transform:translateY(20px);
  transition:opacity .7s cubic-bezier(.22,.61,.36,1),
             transform .7s cubic-bezier(.22,.61,.36,1);
}

html.reveal-all :where(
  .work-copy,
  .work-caption,
  .cols-side > div + div,
  .cols-2 > div,
  .callout,
  .card,
  .faq,
  .table-wrap,
  .fact
),
html.js .is-in{
  opacity:1;
  transform:none;
}

/* Cards and paired columns arrive in sequence rather than as a block. */
html.js .card:nth-child(2),
html.js .cols-2 > div:nth-child(2){transition-delay:.09s;}
html.js .card:nth-child(3){transition-delay:.18s;}
html.js .card:nth-child(4){transition-delay:.27s;}

/* The caption is a footnote to the picture, so it follows it in. */
html.js .work-caption{transition-delay:.16s;}

@media(prefers-reduced-motion:reduce){
  html.js .work-copy,
  html.js .work-caption,
  html.js .cols-side > div + div,
  html.js .cols-2 > div,
  html.js .callout,
  html.js .card,
  html.js .faq,
  html.js .table-wrap{
    opacity:1;
    transform:none;
    transition:none;
  }
}


/* ----------------------------------------------- opening-block reveals ----
   Removed 4 Sept 2026. The hero copy and every page's h1/eyebrow/lede used to
   start at opacity 0 and fade in as an entrance. In practice the first screen
   sat blank for several seconds on a normal connection, which read as a
   broken page rather than an entrance. Above-the-fold content now renders
   immediately; scroll reveals further down the page are unchanged.
   The previous rules are in archive/pages/css__site.2026-09-04.css.
   -------------------------------------------------------------------------- */

/* ------------------------------------------------------- headline lines ---
   Each line sits in its own clipping box and rises into it, so the words are
   uncovered rather than faded. The <i> is the moving part; the <span> is the
   mask. Both are display:block, so the h2 keeps its normal line box and the
   heading occupies exactly the same space whether or not it has animated —
   nothing reflows.
   -------------------------------------------------------------------------- */
h2.lines .ln{
  display:block;
  overflow:hidden;
}
h2.lines .ln > i{
  display:block;
  font-style:inherit;
}
html.js h2.lines .ln > i{
  transform:translateY(105%);
  transition:transform .95s cubic-bezier(.19,.85,.3,1);
}
html.js .work-copy.is-in h2.lines .ln > i,
html.reveal-all h2.lines .ln > i{
  transform:translateY(0);
}
/* The second line follows the first rather than arriving with it. */
html.js h2.lines .ln:nth-child(2) > i{transition-delay:.13s;}

@media(prefers-reduced-motion:reduce){
  html.js h2.lines .ln > i{transform:none;transition:none;}
}



/* ------------------------------------------- hero CTA on small screens ----
   The fixed action bar already carries "Request a quote", so the hero's copy
   of it is redundant on a phone — two identical calls to action a thumb apart.
   Hidden at exactly the breakpoint where the bar appears, and restored in
   landscape where the bar is hidden again.
   -------------------------------------------------------------------------- */
@media(max-width:760px){
  .hero-home .btn-row a[href="/contact"]{display:none;}
}
@media(max-height:520px) and (orientation:landscape){
  .hero-home .btn-row a[href="/contact"]{display:inline-block;}
}

