/* ============================================================
   8 POINT INTERSECTION — master stylesheet
   ------------------------------------------------------------
   Used by: every page in the site.
   Sections are numbered and labeled; the same numbers are
   referenced in master-guide.html (CSS tab).
   ============================================================ */

/* ---- 1. DESIGN TOKENS (edit brand colors & fonts here) ---- */
:root{
  --ivory:      #f2efe7;   /* page background */
  --paper:      #e9e4d6;   /* cards, collage paper */
  --linen:      #ddd6c4;   /* borders on light */
  --ink:        #1c1913;   /* primary text */
  --ink-soft:   #55503fcc; /* secondary text */
  --charcoal:   #17150f;   /* dark bands, buttons */
  --charcoal-2: #232019;
  --gold:       #8f7549;   /* accent — small doses only */
  --white:      #faf8f2;

  --font-display: "Cormorant Garamond", Georgia, "Times New Roman", serif;
  --font-body:    Georgia, "Times New Roman", serif;
  --font-ui:      "Jost", "Helvetica Neue", Arial, sans-serif;
  --font-script:  "Caveat", "Segoe Script", cursive;

  --max: 1320px;      /* content width */
  --gutter: clamp(20px, 4vw, 56px);
  --radius: 2px;
  --ease: cubic-bezier(.22,.61,.36,1);
}

/* ---- 2. RESET & BASE ---- */
*,*::before,*::after{ box-sizing:border-box; }
html{ scroll-behavior:smooth; }
body{
  margin:0; background:var(--ivory); color:var(--ink);
  font-family:var(--font-body); font-size:16px; line-height:1.65;
  -webkit-font-smoothing:antialiased;
}
img{ max-width:100%; display:block; }
a{ color:inherit; text-decoration:none; }
button{ font:inherit; cursor:pointer; }
h1,h2,h3,h4{ font-family:var(--font-display); font-weight:500; line-height:1.12; margin:0 0 .5em; }
p{ margin:0 0 1em; }
.wrap{ max-width:var(--max); margin:0 auto; padding-left:var(--gutter); padding-right:var(--gutter); }
:focus-visible{ outline:2px solid var(--gold); outline-offset:3px; }
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{ animation:none!important; transition:none!important; }
  html{ scroll-behavior:auto; }
}

/* ---- 3. TYPE UTILITIES ---- */
.eyebrow{
  font-family:var(--font-ui); font-size:11px; letter-spacing:.22em;
  text-transform:uppercase; color:var(--ink); margin:0 0 18px;
}
.eyebrow--soft{ color:var(--ink-soft); }
.display-xl{ font-size:clamp(38px,4.6vw,64px); }
.display-lg{ font-size:clamp(30px,3.4vw,46px); }
.display-md{ font-size:clamp(24px,2.4vw,32px); }
.script{ font-family:var(--font-script); font-size:clamp(20px,2vw,26px); line-height:1.3; }
.lede{ color:var(--ink-soft); font-size:15px; max-width:44ch; }

/* Handwritten underline stroke (hero signature) */
.stroke{ display:block; width:110px; height:8px; margin-top:10px;
  background:currentColor;
  clip-path:polygon(0 55%,8% 30%,30% 60%,55% 25%,78% 65%,100% 35%,100% 75%,70% 95%,40% 70%,12% 92%,0 80%); }

/* ---- 4. BUTTONS & LINKS ---- */
.btn{
  display:inline-block; background:var(--charcoal); color:var(--white);
  font-family:var(--font-ui); font-size:11px; letter-spacing:.2em; text-transform:uppercase;
  padding:16px 30px; border:1px solid var(--charcoal); border-radius:var(--radius);
  transition:background .3s var(--ease), color .3s var(--ease);
}
.btn:hover{ background:transparent; color:var(--ink); }
.btn--ghost{ background:transparent; color:var(--ink); }
.btn--ghost:hover{ background:var(--charcoal); color:var(--white); }
.btn--light{ background:var(--ivory); color:var(--ink); border-color:var(--ivory); }
.btn--light:hover{ background:transparent; color:var(--ivory); }
.textlink{
  font-family:var(--font-ui); font-size:11px; letter-spacing:.2em; text-transform:uppercase;
  display:inline-flex; align-items:center; gap:10px; padding-bottom:6px;
  border-bottom:1px solid var(--ink); transition:gap .3s var(--ease);
}
.textlink::after{ content:"→"; font-family:var(--font-body); }
.textlink:hover{ gap:16px; }
.textlink--light{ color:var(--ivory); border-color:var(--ivory); }

/* ---- 5. ANNOUNCEMENT BAR (all pages) ----
   Permanent as of v5.3.14, and no longer a black band.

   The brief was subtle and elegant, but with presence and in
   proportion. So: the paper tone rather than charcoal, which
   separates it from the ivory page without shouting; the words in
   bold, centred, with generous tracking; hairlines above and below so
   it reads as a considered band rather than a strip left over from a
   sale notice; and a size that grows a little with the viewport so it
   holds the same weight on a phone as on a wide screen.

   The middle dot is set lighter and in gold. Everything else being
   bold, an unbroken run would read as one long phrase rather than the
   two statements it actually is. */
.announce{
  background:var(--paper);
  color:var(--ink);
  /* Bottom hairline only. A rule at the very top edge of the viewport sits
     against the browser chrome and reads as an accident; the tonal step from
     paper to ivory already draws the line at the other end. */
  border-bottom:1px solid var(--linen);
  text-align:center;
  padding:clamp(11px, 1.15vw, 17px) var(--gutter);
}
.announce__line{
  margin:0;
  font-family:var(--font-ui);
  font-weight:600;
  font-size:clamp(9.5px, .34vw + 8.2px, 12px);
  letter-spacing:clamp(.16em, .04vw + .14em, .26em);
  line-height:1.5;
  text-transform:uppercase;
  /* Centred, and never wider than a comfortable measure even on a
     very wide screen — a single line of caps stretched across 1900px
     stops being a statement and becomes a ticker. */
  max-width:96ch;
  margin-inline:auto;
  text-wrap:balance;          /* two tidy lines rather than one orphan */
}
.announce__line i{
  font-style:normal;
  font-weight:400;
  color:var(--gold);
  margin:0 clamp(6px, .6vw, 13px);
}

/* Kept so an older cached page does not show a stray button. */
.announce__close{ display:none; }

/* ---- 6. HEADER / NAVIGATION (all pages) ---- */
.header{
  background:var(--ivory); border-bottom:1px solid var(--linen);
  position:sticky; top:0; z-index:60;
}
.header__inner{
  display:grid; grid-template-columns:auto 1fr auto; align-items:center;
  gap:28px; padding:18px var(--gutter); max-width:var(--max); margin:0 auto;
}
.logo{ line-height:1; }
.logo b{
  display:block; font-family:var(--font-display); font-weight:500;
  font-size:26px; letter-spacing:.08em;
}
.logo span{
  display:block; font-family:var(--font-ui); font-size:9.5px;
  letter-spacing:.42em; text-transform:uppercase; margin-top:3px; color:var(--ink-soft);
}
.nav{ justify-self:center; }
.nav ul{ list-style:none; display:flex; gap:34px; margin:0; padding:0; }
.nav a{
  font-family:var(--font-ui); font-size:11px; letter-spacing:.2em; text-transform:uppercase;
  padding:8px 0; position:relative;
}
.nav a::after{
  content:""; position:absolute; left:0; bottom:2px; height:1px; width:0;
  background:var(--ink); transition:width .3s var(--ease);
}
.nav a:hover::after, .nav a[aria-current="page"]::after{ width:100%; }
/* Dropdown (The Collection) */
.nav .has-drop{ position:relative; }
.drop{
  position:absolute; top:100%; left:50%; transform:translate(-50%,8px);
  background:var(--white); border:1px solid var(--linen); min-width:230px;
  padding:18px 0; opacity:0; visibility:hidden; transition:.25s var(--ease); z-index:70;
}
.has-drop:hover .drop, .has-drop:focus-within .drop{ opacity:1; visibility:visible; transform:translate(-50%,0); }
.drop a{ display:block; padding:9px 26px; letter-spacing:.16em; }
.drop a::after{ display:none; }
.drop a:hover{ background:var(--paper); }
.header__tools{ display:flex; gap:26px; align-items:center; }
.header__tools button, .header__tools a{
  background:none; border:0; font-family:var(--font-ui); font-size:11px;
  letter-spacing:.2em; text-transform:uppercase; color:var(--ink); padding:0;
}
.burger{ display:none; flex-direction:column; gap:5px; }
.burger i{ width:22px; height:1.5px; background:var(--ink); display:block; }

/* Mobile nav panel */
.mobilenav{
  display:none; background:var(--ivory); border-bottom:1px solid var(--linen);
  padding:10px var(--gutter) 26px;
}
.mobilenav.is-open{ display:block; }
.mobilenav a{
  display:block; padding:13px 0; border-bottom:1px solid var(--linen);
  font-family:var(--font-ui); font-size:12px; letter-spacing:.2em; text-transform:uppercase;
}

/* ---- 7. SEARCH OVERLAY (all pages) ---- */
.search-overlay{
  position:fixed; inset:0; background:rgba(23,21,15,.55); z-index:90;
  display:none; align-items:flex-start; justify-content:center; padding-top:16vh;
}
.search-overlay.is-open{ display:flex; }
.search-box{ background:var(--ivory); width:min(680px,90vw); padding:44px 48px; position:relative; }
.search-box input{
  width:100%; background:transparent; border:0; border-bottom:1px solid var(--ink);
  font-family:var(--font-display); font-size:clamp(22px,3vw,34px); padding:8px 0; color:var(--ink);
}
.search-box input:focus{ outline:none; }
.search-box .eyebrow{ margin-bottom:8px; }
.search-close{ position:absolute; top:16px; right:20px; background:none; border:0; font-size:20px; }
.search-results{ margin-top:22px; }
.search-results a{ display:flex; justify-content:space-between; padding:11px 0; border-bottom:1px solid var(--linen); font-size:15px; }
.search-results a:hover{ padding-left:6px; }
.search-results .muted{ color:var(--ink-soft); font-size:12.5px; font-family:var(--font-ui); letter-spacing:.1em; text-transform:uppercase; }

/* ---- 8. CART DRAWER (all pages) ---- */
.cart-drawer{
  position:fixed; top:0; right:0; height:100%; width:min(430px,92vw);
  background:var(--ivory); border-left:1px solid var(--linen); z-index:95;
  transform:translateX(100%); transition:transform .35s var(--ease);
  display:flex; flex-direction:column;
}
.cart-drawer.is-open{ transform:none; }
.cart-drawer__head{
  display:flex; justify-content:space-between; align-items:center;
  padding:22px 26px; border-bottom:1px solid var(--linen);
}
.cart-drawer__head h3{ margin:0; font-size:22px; }
.cart-drawer__body{ flex:1; overflow-y:auto; padding:10px 26px; }
.cart-drawer__foot{ padding:20px 26px 26px; border-top:1px solid var(--linen); }
.cart-line{ display:grid; grid-template-columns:78px 1fr auto; gap:16px; padding:16px 0; border-bottom:1px solid var(--linen); }
.cart-line img{ width:78px; height:100px; object-fit:cover; background:var(--paper); }
.cart-line h4{ font-size:17px; margin:0 0 4px; }
.cart-line .meta{ font-family:var(--font-ui); font-size:11px; letter-spacing:.14em; text-transform:uppercase; color:var(--ink-soft); }
.cart-line .qty{ display:inline-flex; align-items:center; gap:12px; margin-top:10px; border:1px solid var(--linen); padding:3px 10px; }
.cart-line .qty button{ background:none; border:0; font-size:14px; padding:2px 4px; }
.cart-line .remove{ background:none; border:0; font-size:11px; font-family:var(--font-ui); letter-spacing:.14em; text-transform:uppercase; color:var(--ink-soft); text-decoration:underline; margin-top:8px; padding:0; }
.cart-line .price{ font-family:var(--font-ui); font-size:13px; letter-spacing:.06em; }
.cart-total{ display:flex; justify-content:space-between; font-family:var(--font-ui); font-size:12px; letter-spacing:.2em; text-transform:uppercase; margin-bottom:16px; }
.cart-empty{ text-align:center; padding:60px 10px; color:var(--ink-soft); }
.page-scrim{ position:fixed; inset:0; background:rgba(23,21,15,.45); z-index:80; display:none; }
.page-scrim.is-on{ display:block; }
.cart-count{ display:inline-block; min-width:16px; }

/* ---- 9. HERO (index.html) ---- */
.hero{ position:relative; overflow:hidden; background:var(--paper); }
.hero__img{ width:100%; height:clamp(540px,78vh,760px); object-fit:cover; }
.hero__panel{
  position:absolute; inset:0; display:flex; align-items:center;
  max-width:var(--max); margin:0 auto; padding:0 var(--gutter); pointer-events:none;
}
.hero__panel > div{ pointer-events:auto; max-width:430px;
  animation:heroIn 1s var(--ease) both .15s; }
@keyframes heroIn{ from{ opacity:0; transform:translateY(22px);} to{ opacity:1; transform:none;} }
.hero h1{ font-size:clamp(36px,4.4vw,58px); margin-bottom:14px; }
.hero .script{ margin-bottom:30px; }
.hero__actions{ display:flex; align-items:center; gap:28px; flex-wrap:wrap; }
.playlink{ font-family:var(--font-ui); font-size:11px; letter-spacing:.2em; text-transform:uppercase; display:inline-flex; align-items:center; gap:12px; }
.playlink .disc{ width:30px; height:30px; border:1px solid var(--ink); border-radius:50%; display:grid; place-items:center; font-size:10px; }

/* ---- 10. COLLAGE / HOUSE INTRO (index.html) ---- */
.house-intro{ padding:clamp(60px,8vw,110px) 0; }
.house-intro .wrap{ display:grid; grid-template-columns:minmax(280px,380px) 1fr; gap:clamp(36px,5vw,80px); align-items:center; }
.collage{ position:relative; min-height:520px; }
.collage figure{ position:absolute; margin:0; box-shadow:0 18px 40px rgba(23,21,15,.16); background:var(--paper); }
.collage img{ width:100%; height:100%; object-fit:cover; }
.collage .c1{ left:0; top:6%; width:34%; transform:rotate(-2deg); z-index:2; }
.collage .c2{ left:26%; top:0; width:26%; transform:rotate(1.5deg); z-index:3; }
.collage .c3{ left:44%; top:8%; width:30%; z-index:1; }
.collage .c4{ right:6%; top:2%; width:30%; transform:rotate(2deg); z-index:4; padding:26px 22px; }
.collage .c5{ right:0; bottom:0; width:26%; transform:rotate(-1.5deg); z-index:5; }
.collage .pin{ position:absolute; top:-9px; left:50%; transform:translateX(-50%); width:14px; height:14px; border-radius:50%; background:radial-gradient(circle at 35% 30%, #d9c08a, var(--gold)); box-shadow:0 3px 5px rgba(0,0,0,.35); }
.collage .notelist{ list-style:none; margin:0; padding:0; font-family:var(--font-script); font-size:24px; line-height:1.85; color:#3a352c; }
.collage .c4 img{ position:absolute; inset:0; z-index:-1; }

/* ---- 11. COLLECTION CAROUSEL (index.html) ---- */
.collection-row{ padding:clamp(60px,8vw,110px) 0; border-top:1px solid var(--linen); }
.collection-row .wrap{ display:grid; grid-template-columns:minmax(220px,300px) 1fr; gap:clamp(30px,4vw,64px); align-items:start; }
.carousel{ position:relative; }
.carousel__track{
  display:grid; grid-auto-flow:column; grid-auto-columns:minmax(220px,262px);
  gap:26px; overflow-x:auto; scroll-snap-type:x mandatory; scroll-behavior:smooth;
  padding-bottom:8px; scrollbar-width:none;
}
.carousel__track::-webkit-scrollbar{ display:none; }
.card{ scroll-snap-align:start; }
.card a{ display:block; }
.card img{ aspect-ratio:3/4; width:100%; object-fit:cover; background:var(--paper); transition:opacity .35s var(--ease); }
.card a:hover img{ opacity:.86; }
.card__label{ margin-top:14px; font-family:var(--font-ui); font-size:11px; letter-spacing:.2em; text-transform:uppercase; }
.card__sub{ font-size:13px; color:var(--ink-soft); margin-top:4px; }
.carousel__nav{ position:absolute; right:0; top:-58px; display:flex; gap:8px; }
.carousel__nav button{ width:34px; height:34px; border:1px solid var(--ink); background:transparent; border-radius:50%; font-size:13px; transition:.25s; }
.carousel__nav button:hover{ background:var(--charcoal); color:var(--ivory); }

/* ---- 12. STUDIO BAND (index.html) ---- */
.studio-band{ position:relative; color:var(--ivory); }
.studio-band__img{ width:100%; height:clamp(420px,55vh,560px); object-fit:cover; }
.studio-band__panel{
  position:absolute; inset:0; display:flex; align-items:center;
  max-width:var(--max); margin:0 auto; padding:0 var(--gutter);
}
.studio-band__panel > div{ background:var(--charcoal); padding:clamp(30px,4vw,54px); max-width:400px; }
.studio-band .eyebrow{ color:var(--ivory); opacity:.75; }
.studio-band p{ color:#cfc9ba; font-size:14.5px; }

/* ---- 13. FIELD NOTES GRID + NEWSLETTER (index.html & shared) ---- */
.notes-row{ padding:clamp(60px,8vw,110px) 0; }
.notes-row .wrap{ display:grid; grid-template-columns:minmax(200px,250px) 1fr minmax(240px,300px); gap:clamp(28px,4vw,60px); }
.notes-grid{ display:grid; grid-template-columns:repeat(4,1fr); gap:22px; }
.notes-grid img{ aspect-ratio:4/4.6; object-fit:cover; background:var(--paper); transition:opacity .35s; }
.notes-grid a:hover img{ opacity:.86; }
.newsletter h4{ font-size:15px; font-family:var(--font-ui); letter-spacing:.2em; text-transform:uppercase; font-weight:400; margin-bottom:16px; }
.newsletter p{ font-size:13.5px; color:var(--ink-soft); }
.newsletter form{ display:flex; border-bottom:1px solid var(--ink); margin:22px 0 20px; }
.newsletter input{ flex:1; background:none; border:0; padding:10px 0; font-family:var(--font-ui); font-size:12px; letter-spacing:.08em; color:var(--ink); }
.newsletter input:focus{ outline:none; }
.newsletter button{ background:none; border:0; font-size:16px; }
.newsletter .thanks{ display:none; color:var(--gold); font-family:var(--font-ui); font-size:11px; letter-spacing:.16em; text-transform:uppercase; }
.socials{ display:flex; gap:18px; font-family:var(--font-ui); font-size:10.5px; letter-spacing:.16em; text-transform:uppercase; }
.socials a{ border-bottom:1px solid transparent; }
.socials a:hover{ border-color:var(--ink); }

/* ---- 14. FOOTER (all pages) ---- */
.footer{ border-top:1px solid var(--linen); }
.footer .wrap{
  display:flex; flex-wrap:wrap; gap:18px 40px; justify-content:space-between;
  padding-top:26px; padding-bottom:26px;
  font-family:var(--font-ui); font-size:10.5px; letter-spacing:.18em; text-transform:uppercase; color:var(--ink-soft);
}
.footer nav{ display:flex; gap:34px; flex-wrap:wrap; }
.footer a:hover{ color:var(--ink); }

/* ---- 15. PAGE HERO (interior pages) ---- */
.page-hero{ position:relative; background:var(--paper); }
.page-hero img{ width:100%; height:clamp(300px,42vh,440px); object-fit:cover; }
.page-hero__panel{ position:absolute; inset:0; display:flex; align-items:flex-end; max-width:var(--max); margin:0 auto; padding:0 var(--gutter) 44px; }
.page-hero--dark{ color:var(--ivory); }
.page-hero__panel h1{ margin:0; }
.breadcrumbs{ font-family:var(--font-ui); font-size:10.5px; letter-spacing:.18em; text-transform:uppercase; color:var(--ink-soft); padding:18px 0 0; }
.breadcrumbs a:hover{ color:var(--ink); }

/* ---- 16. SHOP GRID & FILTERS (collection.html) ---- */
.shop-toolbar{
  display:flex; flex-wrap:wrap; gap:16px 30px; align-items:center; justify-content:space-between;
  padding:26px 0 8px; border-bottom:1px solid var(--linen); margin-bottom:34px;
}
.filters{ display:flex; gap:10px; flex-wrap:wrap; }
.filters button{
  background:none; border:1px solid transparent; font-family:var(--font-ui);
  font-size:11px; letter-spacing:.18em; text-transform:uppercase; padding:8px 14px; color:var(--ink-soft);
}
.filters button.is-active{ border-color:var(--ink); color:var(--ink); }
.sort{ font-family:var(--font-ui); font-size:11px; letter-spacing:.14em; text-transform:uppercase; }
.sort select{ background:none; border:0; border-bottom:1px solid var(--ink); font:inherit; padding:6px 2px; letter-spacing:.1em; }
.shop-grid{ display:grid; grid-template-columns:repeat(4,1fr); gap:28px 26px; padding-bottom:90px; }
.shop-grid .price{ font-family:var(--font-ui); font-size:12px; letter-spacing:.08em; margin-top:6px; }
.result-count{ font-family:var(--font-ui); font-size:11px; letter-spacing:.16em; text-transform:uppercase; color:var(--ink-soft); }

/* ---- 17. PRODUCT DETAIL (product.html) ---- */
.pdp{ display:grid; grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr); gap:clamp(34px,5vw,80px); padding:44px 0 100px; }
.pdp__gallery{ display:grid; grid-template-columns:86px 1fr; gap:18px; align-items:start; }
.pdp__thumbs{ display:grid; gap:14px; }
.pdp__thumbs img{ aspect-ratio:3/4; object-fit:cover; cursor:pointer; opacity:.6; border:1px solid transparent; }
.pdp__thumbs img.is-active{ opacity:1; border-color:var(--ink); }
.pdp__main img{ width:100%; aspect-ratio:3/4; object-fit:cover; background:var(--paper); }
.pdp__info h1{ font-size:clamp(28px,3vw,40px); }
.pdp__price{ font-family:var(--font-ui); font-size:15px; letter-spacing:.1em; margin:6px 0 24px; }
.pdp__story{ color:var(--ink-soft); font-size:15px; }
.option-label{ font-family:var(--font-ui); font-size:11px; letter-spacing:.2em; text-transform:uppercase; margin:26px 0 12px; display:flex; justify-content:space-between; }
.option-label a{ text-decoration:underline; color:var(--ink-soft); text-transform:none; letter-spacing:.05em; }
.sizes{ display:flex; gap:10px; flex-wrap:wrap; }
.sizes button{ min-width:46px; padding:11px 8px; background:none; border:1px solid var(--linen); font-family:var(--font-ui); font-size:12px; letter-spacing:.08em; }
.sizes button.is-active{ border-color:var(--ink); background:var(--charcoal); color:var(--ivory); }
.pdp__cta{ display:flex; gap:14px; margin-top:30px; }
.pdp__cta .btn{ flex:1; text-align:center; }
.made-note{ font-family:var(--font-ui); font-size:11px; letter-spacing:.14em; text-transform:uppercase; color:var(--gold); margin-top:18px; }
.accordion{ border-top:1px solid var(--linen); margin-top:34px; }
.accordion details{ border-bottom:1px solid var(--linen); }
.accordion summary{
  list-style:none; display:flex; justify-content:space-between; align-items:center;
  padding:18px 0; font-family:var(--font-ui); font-size:11px; letter-spacing:.2em; text-transform:uppercase; cursor:pointer;
}
.accordion summary::-webkit-details-marker{ display:none; }
.accordion summary::after{ content:"+"; font-size:16px; }
.accordion details[open] summary::after{ content:"–"; }
.accordion .acc-body{ padding:0 0 20px; color:var(--ink-soft); font-size:14.5px; }
.related{ border-top:1px solid var(--linen); padding:60px 0 90px; }

/* ---- 18. EDITORIAL / TEXT PAGES (the-house, the-studio, legal) ---- */
.prose{ max-width:720px; margin:0 auto; padding:60px 0 100px; }
.prose h2{ font-size:clamp(24px,2.6vw,34px); margin-top:1.8em; }
.prose .script{ color:var(--gold); }
.two-col{ display:grid; grid-template-columns:1fr 1fr; gap:clamp(30px,5vw,80px); align-items:center; padding:clamp(50px,7vw,100px) 0; }
.two-col img{ width:100%; aspect-ratio:4/5; object-fit:cover; background:var(--paper); }
.steps{ display:grid; grid-template-columns:repeat(4,1fr); gap:26px; padding:0 0 90px; }
.steps figure{ margin:0; }
.steps img{ aspect-ratio:4/3; object-fit:cover; width:100%; background:var(--paper); }
.steps figcaption{ margin-top:14px; }
.steps .num{ font-family:var(--font-display); font-size:26px; color:var(--gold); display:block; }
.steps h3{ font-size:19px; margin:6px 0 6px; }
.steps p{ font-size:13.5px; color:var(--ink-soft); }
.pullquote{
  border-top:1px solid var(--linen); border-bottom:1px solid var(--linen);
  padding:44px 0; margin:50px 0; text-align:center;
}
.pullquote p{ font-family:var(--font-display); font-size:clamp(22px,2.6vw,32px); line-height:1.35; max-width:20em; margin:0 auto; }
.pullquote cite{ display:block; margin-top:16px; font-style:normal; font-family:var(--font-ui); font-size:10.5px; letter-spacing:.22em; text-transform:uppercase; color:var(--ink-soft); }

/* ---- 19. FIELD NOTES LISTING & ARTICLE ---- */
.journal-grid{ display:grid; grid-template-columns:repeat(3,1fr); gap:34px 28px; padding:44px 0 100px; }
.journal-grid img{ aspect-ratio:4/4.6; object-fit:cover; width:100%; background:var(--paper); transition:opacity .35s; }
.journal-grid a:hover img{ opacity:.86; }
.journal-grid h3{ font-size:22px; margin:16px 0 4px; }
.journal-grid .card__sub{ margin-top:0; }
.article{ max-width:680px; margin:0 auto; padding:50px 0 100px; }
.article__meta{ font-family:var(--font-ui); font-size:11px; letter-spacing:.2em; text-transform:uppercase; color:var(--ink-soft); margin-bottom:14px; }
.article h1{ font-size:clamp(30px,3.6vw,46px); }
.article figure{ margin:34px 0; }
.article figcaption{ font-size:12.5px; color:var(--ink-soft); margin-top:10px; font-family:var(--font-ui); letter-spacing:.06em; }

/* ---- 20. ATELIER / CONTACT FORM ---- */
.form-grid{ display:grid; grid-template-columns:1fr 1fr; gap:0 26px; max-width:760px; }
.field{ margin-bottom:26px; }
.field--full{ grid-column:1/-1; }
.field label{ display:block; font-family:var(--font-ui); font-size:11px; letter-spacing:.2em; text-transform:uppercase; margin-bottom:8px; }
.field input, .field select, .field textarea{
  width:100%; background:transparent; border:0; border-bottom:1px solid var(--ink);
  padding:10px 0; font-family:var(--font-body); font-size:15px; color:var(--ink);
}
.field textarea{ min-height:110px; resize:vertical; }
.field input:focus,.field select:focus,.field textarea:focus{ outline:none; border-bottom-color:var(--gold); }
.form-note{ font-size:13px; color:var(--ink-soft); }
.form-success{ display:none; border:1px solid var(--gold); color:var(--gold); padding:18px 22px; font-family:var(--font-ui); font-size:11px; letter-spacing:.16em; text-transform:uppercase; margin-top:10px; }

/* ---- 21. CART PAGE (cart.html) ---- */
.cart-page{ max-width:860px; margin:0 auto; padding:50px 0 100px; }
.cart-page .cart-line{ grid-template-columns:100px 1fr auto; }
.cart-page .cart-line img{ width:100px; height:128px; }
.cart-summary{ margin-top:34px; border-top:1px solid var(--ink); padding-top:22px; display:flex; justify-content:flex-end; }
.cart-summary > div{ width:min(340px,100%); }
.checkout-note{ font-size:13px; color:var(--ink-soft); margin-top:14px; }

/* ---- 22. REVEAL ON SCROLL ---- */
.reveal{ opacity:0; transform:translateY(26px); transition:opacity .8s var(--ease), transform .8s var(--ease); }
.reveal.is-in{ opacity:1; transform:none; }

/* ---- 23. RESPONSIVE ---- */
@media (max-width:1080px){
  .notes-row .wrap{ grid-template-columns:1fr; }
  .notes-grid{ grid-template-columns:repeat(4,1fr); }
  .shop-grid{ grid-template-columns:repeat(3,1fr); }
}
@media (max-width:900px){
  .nav{ display:none; }
  .burger{ display:flex; background:none; border:0; }
  .house-intro .wrap, .collection-row .wrap, .two-col, .pdp{ grid-template-columns:1fr; }
  .collage{ min-height:440px; margin-top:10px; }
  .steps{ grid-template-columns:repeat(2,1fr); }
  .journal-grid{ grid-template-columns:repeat(2,1fr); }
  .shop-grid{ grid-template-columns:repeat(2,1fr); }
  .pdp__gallery{ grid-template-columns:1fr; }
  .pdp__thumbs{ grid-auto-flow:column; grid-auto-columns:70px; order:2; overflow-x:auto; }
  .header__tools .tool-label{ display:none; }
}
@media (max-width:600px){
  .notes-grid{ grid-template-columns:repeat(2,1fr); }
  .steps{ grid-template-columns:1fr; }
  .form-grid{ grid-template-columns:1fr; }
  .shop-grid{ grid-template-columns:1fr 1fr; gap:20px 14px; }
  .hero__img{ height:70vh; }
  .journal-grid{ grid-template-columns:1fr; }
}

/* ---- 24. BACKGROUND MEDIA LAYER (System 1 rendering) ----
   background_media() prints an <img> plus this overlay span so a
   single dark scrim keeps light text readable on photo heroes. */
.bg-overlay{ position:absolute; inset:0; background:rgba(23,21,15,var(--o,0)); z-index:1; pointer-events:none; }
.hero__panel, .studio-band__panel, .page-hero__panel{ z-index:2; }
.page-hero img{ z-index:0; }

/* ============================================================
   25. FLUID SCALING & IMAGE FIT  (responsiveness overhaul)
   ------------------------------------------------------------
   Fixes the "images scale but text/containers don't" mismatch:
   (a) the whole page now scales together on resize AND zoom,
   (b) content images always show in full inside their frames
       (never cropped or partly hidden),
   (c) grids reflow continuously at every width, not only at
       fixed breakpoints.
   ============================================================ */

/* 25a — FLUID ROOT: text scales smoothly with the viewport, the
   same way images do. rem-based sizes below follow this. Browser
   zoom still scales everything on top of this. */
html{ font-size: clamp(14px, 0.3vw + 13px, 17px); }

/* No element may force sideways scrolling at any width. */
html, body{ max-width:100%; overflow-x:hidden; }
h1,h2,h3,h4,p,a,li,button,input,select,textarea,figcaption{ overflow-wrap:break-word; }

/* 25b — Readable text moved from fixed px to rem so it grows and
   shrinks with the screen (this is what was staying static before).
   Small uppercase tracking-labels intentionally stay compact. */
body{ font-size:1rem; }
.lede{ font-size:1.02rem; max-width:46ch; }
.pdp__story{ font-size:1rem; }
.pdp__price{ font-size:.95rem; }
.steps p{ font-size:.9rem; }
.steps h3{ font-size:1.2rem; }
.steps .num{ font-size:1.7rem; }
.journal-grid h3{ font-size:1.4rem; }
.cart-line h4{ font-size:1.05rem; }
.search-results a{ font-size:1rem; }
.field input, .field select, .field textarea{ font-size:1rem; }
.accordion .acc-body{ font-size:.95rem; }
.studio-band p, .newsletter p, .checkout-note, .form-note, .article figcaption{ font-size:.9rem; }

/* 25c — IMAGE FIT: content/product images now scale to fit fully
   inside their frame (object-fit:contain) so nothing is cropped.
   The frame keeps a consistent aspect-ratio, so tiles stay even and
   any spare space shows the brand "paper" tone like a gallery mat.
   Change a frame's --fit to 'cover' if you'd rather it fill+crop. */
.card img,
.pdp__main img,
.pdp__thumbs img,
.notes-grid img,
.journal-grid img,
.steps img,
.two-col img{
  object-fit: var(--fit, contain);
  object-position: center;
  background: var(--paper);
}

/* Full-bleed atmospheric backgrounds are meant to fill their band,
   so heroes/bands keep 'cover' and rely on the focal point. */
.hero__img, .studio-band__img, .page-hero img{ object-fit: cover; }

/* 25d — CONTINUOUS GRIDS: reflow at every width instead of jumping
   only at breakpoints. minmax(min(100%, …)) guarantees a clean
   single column on the narrowest phones with no overflow. */
.shop-grid{    grid-template-columns: repeat(auto-fill, minmax(min(100%, 210px), 1fr)); }
.notes-grid{   grid-template-columns: repeat(auto-fill, minmax(min(100%, 170px), 1fr)); }
.journal-grid{ grid-template-columns: repeat(auto-fill, minmax(min(100%, 250px), 1fr)); }
.steps{        grid-template-columns: repeat(auto-fill, minmax(min(100%, 200px), 1fr)); }

/* 25e — Small-screen polish that follows from the above. */
@media (max-width:520px){
  .hero__img{ height:clamp(420px, 82vh, 620px); }
  .pdp__cta{ flex-direction:column; }
  .shop-toolbar{ gap:14px; }
}

/* ============================================================
   26. CROSS-PLATFORM HARDENING (browser & device compatibility)
   ------------------------------------------------------------
   Additive only — no layout or visual redesign. Smooths over
   known differences between Chrome, Safari (incl. iOS/iPadOS),
   Firefox and Edge across desktop, tablet and phone.
   ============================================================ */

/* Stop iOS/iPadOS from auto-inflating body text in landscape. */
html{ -webkit-text-size-adjust:100%; text-size-adjust:100%; }

/* Remove the grey tap-flash on touch targets. */
body{ -webkit-tap-highlight-color:transparent; }

/* Prevent sideways scroll WITHOUT breaking the sticky header:
   overflow:clip (where supported) does not create a scroll
   container the way overflow:hidden can. Older Safari keeps the
   existing hidden guard from Section 25a. */
@supports (overflow:clip){ html, body{ overflow-x:clip; } }

/* Normalize text controls across engines (removes the iOS inset
   shadow / forced rounding). Left <select> native so it keeps its
   dropdown arrow. */
input[type="text"], input[type="email"], input[type="search"],
input[type="tel"], input[type="number"], textarea{
  -webkit-appearance:none; appearance:none; border-radius:0;
}
button, .btn{ -webkit-appearance:none; appearance:none; }
a, button, .btn, summary, .burger{ touch-action:manipulation; }

/* 16px fields on phones & tablets stop iOS Safari from zooming the
   page when a field is focused (fields are smaller by design on
   desktop, where no zoom occurs). */
@media (max-width:1024px){
  .field input, .field select, .field textarea,
  .newsletter input, .search-box input{ font-size:16px; }
}

/* Momentum scrolling + no scroll-chaining for the touch rails. */
.carousel__track, .pdp__thumbs{
  -webkit-overflow-scrolling:touch; overscroll-behavior-x:contain;
}

/* No-JS / reduced-motion safety: reveal-on-scroll content must
   always be visible (JS already covers browsers without
   IntersectionObserver; this covers JS-off and reduced-motion). */
@media (prefers-reduced-motion: reduce){ .reveal{ opacity:1; transform:none; } }

/* ============================================================
   27. PDP IMAGE ZOOM (product.php main image)
   ------------------------------------------------------------
   Desktop hover magnifier: the main product image scales toward
   the cursor, Amazon-style. Progressive enhancement — main.js
   adds .is-zooming only on hover-capable pointers, so touch
   devices keep native pinch-zoom. --pdp-zoom sets the strength.
   ============================================================ */
.pdp__main{ position:relative; overflow:hidden; --pdp-zoom:2.8; }
@media (hover:hover) and (pointer:fine){
  .pdp__main{ cursor:zoom-in; }
  .pdp__main img{ transition:transform .18s var(--ease); }
  .pdp__main.is-zooming{ cursor:zoom-out; }
  .pdp__main.is-zooming img{ transform:scale(var(--pdp-zoom,2.8)); }
}

/* ============================================================
   28. FIT ENGINE (find your fit, measuring guide, PDP block)
   ------------------------------------------------------------
   Uses the existing palette and type scale only — no new tokens,
   no new fonts. Everything degrades to readable stacked text at
   narrow widths and prints cleanly for the atelier.
   ============================================================ */

/* ---- shared small type ---- */
.fit-how{ display:block; font-family:var(--font-ui); font-size:11.5px; line-height:1.55;
  color:var(--ink-soft); margin-top:6px; letter-spacing:.01em; }
.fit-privacy{ font-family:var(--font-ui); font-size:12px; color:var(--ink-soft);
  letter-spacing:.02em; margin-top:14px; }
.fit-hint{ font-family:var(--font-ui); font-size:13px; color:var(--ink-soft); margin:0 0 18px; }
.opt{ font-family:var(--font-ui); font-size:10.5px; letter-spacing:.16em; text-transform:uppercase;
  color:var(--gold); margin-left:6px; }

/* ---- intro ---- */
.fit-intro{ max-width:70ch; padding:14px 0 34px; }
.fit-context{ font-family:var(--font-ui); font-size:13.5px; color:var(--ink);
  background:var(--paper); border-left:3px solid var(--gold); padding:12px 16px; margin-top:20px; }

/* ---- the form ---- */
.fit-form{ padding-bottom:40px; }
.fit-fieldset{ border:0; border-top:1px solid var(--linen); margin:0 0 30px; padding:26px 0 0; }
.fit-fieldset legend{ font-family:var(--font-ui); font-size:11px; letter-spacing:.2em;
  text-transform:uppercase; color:var(--ink); padding:0 14px 0 0; }
.fit-actions{ display:flex; gap:14px; flex-wrap:wrap; align-items:center; margin-top:8px; }

/* ---- result layout ---- */
.fit-result{ display:grid; grid-template-columns:minmax(280px,420px) 1fr; gap:40px;
  align-items:start; padding:10px 0 50px; }
.fit-result__figure{ background:var(--paper); border:1px solid var(--linen); padding:18px; position:sticky; top:96px; }
.fit-result__figure svg{ display:block; width:100%; height:auto; }
.fit-figure__note{ font-family:var(--font-ui); font-size:11.5px; color:var(--ink-soft);
  text-align:center; margin:12px 0 0; }

/* ---- confidence ---- */
.fit-conf{ border:1px solid var(--linen); background:var(--paper); padding:18px 20px; margin-bottom:24px; }
.fit-conf__bar{ height:5px; background:var(--linen); overflow:hidden; }
.fit-conf__bar span{ display:block; height:100%; background:var(--gold); transition:width .5s var(--ease); }
.fit-conf__read{ display:flex; justify-content:space-between; align-items:baseline; margin-top:12px;
  font-family:var(--font-ui); }
.fit-conf__read strong{ font-size:14px; letter-spacing:.14em; text-transform:uppercase; }
.fit-conf__read span{ font-size:12.5px; color:var(--ink-soft); }
.fit-conf__msg{ margin:10px 0 0; font-size:15px; }
.fit-conf--ok   .fit-conf__bar span{ background:#5b7350; }
.fit-conf--warn .fit-conf__bar span{ background:var(--gold); }
.fit-conf--bad  .fit-conf__bar span{ background:#8a4b32; }

/* ---- alerts and notes ---- */
.fit-alert{ border-left:3px solid #8a4b32; background:#f0e1da; padding:15px 18px; margin-bottom:22px; }
.fit-alert__title{ font-family:var(--font-ui); font-size:12px; letter-spacing:.14em;
  text-transform:uppercase; margin:0 0 8px; color:#7a3f28; }
.fit-alert p{ margin:0 0 8px; font-size:14.5px; }
.fit-alert__foot{ font-size:13.5px; color:var(--ink-soft); }
.fit-notes{ list-style:none; padding:0; margin:0 0 20px; }
.fit-notes li{ font-family:var(--font-ui); font-size:12.5px; color:var(--ink-soft);
  border-left:2px solid var(--gold); padding:5px 0 5px 12px; margin-bottom:6px; }

/* ---- the review table ---- */
.fit-table{ width:100%; border-collapse:collapse; margin-bottom:22px; }
.fit-table th{ font-family:var(--font-ui); font-size:10px; letter-spacing:.16em;
  text-transform:uppercase; color:var(--ink-soft); text-align:left;
  border-bottom:1px solid var(--linen); padding:0 10px 10px 0; font-weight:400; }
.fit-table td{ border-bottom:1px solid var(--linen); padding:14px 10px 14px 0; vertical-align:top; }
.fit-table td:first-child{ width:34%; }
.fit-table label{ font-size:15px; display:block; }
.fit-table input[type=text]{ width:100%; max-width:110px; }
.fit-table .fit-exp{ font-family:var(--font-ui); font-size:13px; color:var(--ink-soft); white-space:nowrap; }
.fit-table tr.is-soft{ background:#faf5e9; }
.fit-table tr.is-hard{ background:#f7ece6; }
.fit-table tr.is-confirmed{ background:#eef1e6; }

.fit-tag{ display:inline-block; font-family:var(--font-ui); font-size:9.5px; letter-spacing:.14em;
  text-transform:uppercase; padding:4px 8px; border-radius:2px; white-space:nowrap; }
.fit-tag--ok{  background:#e4ead9; color:#3f5236; border:1px solid #5b7350; }
.fit-tag--warn{background:var(--paper); color:#6a552e; border:1px solid var(--gold); }
.fit-tag--bad{ background:#f0e1da; color:#7a3f28; border:1px solid #8a4b32; }
.fit-tag--est{ background:transparent; color:var(--ink-soft); border:1px dashed var(--linen); }
.fit-sug{ display:block; font-family:var(--font-ui); font-size:12.5px; margin-top:9px; line-height:1.5; }
.fit-sug em{ display:block; color:var(--ink-soft); font-size:11.5px; font-style:italic; }
.fit-confirm{ display:flex; gap:8px; align-items:flex-start; margin-top:10px;
  font-family:var(--font-ui); font-size:12px; color:var(--ink); cursor:pointer; }
.fit-confirm input{ margin-top:2px; flex:0 0 auto; }

/* ---- recommendation ---- */
.fit-rec{ border:1px solid var(--linen); background:var(--paper); padding:24px 26px; margin:26px 0; }
.fit-rec__size{ font-family:var(--font-display); font-size:clamp(30px,4vw,44px); line-height:1;
  margin:6px 0 10px; }
.fit-rec__msg{ font-size:16px; margin:0 0 14px; }
.fit-rec__detail{ font-size:14.5px; color:var(--ink-soft); margin:0 0 18px; }
.fit-rec__dims{ list-style:none; padding:0; margin:0 0 18px; display:flex; flex-wrap:wrap; gap:10px 22px; }
.fit-rec__dims li{ font-family:var(--font-ui); font-size:12px; letter-spacing:.06em; }
.fit-rec__dims em{ font-style:normal; color:var(--gold); text-transform:uppercase;
  letter-spacing:.14em; font-size:10.5px; margin-left:6px; }
.fit-rec--bespoke{ background:var(--charcoal); border-color:var(--charcoal); color:var(--white); }
.fit-rec--bespoke .fit-rec__msg, .fit-rec--bespoke .fit-rec__detail{ color:#cfc8b6; }
.fit-rec--bespoke .eyebrow{ color:var(--gold); }
.fit-rec--bespoke .btn{ background:var(--ivory); color:var(--charcoal); }

.fit-save{ border-top:1px solid var(--linen); padding-top:22px; margin-top:8px; }
.fit-model{ font-family:var(--font-ui); font-size:11px; color:var(--ink-soft);
  letter-spacing:.04em; margin-top:22px; }

/* ---- product page block ---- */
.pdp-fit{ border-top:1px solid var(--linen); border-bottom:1px solid var(--linen);
  padding:16px 0; margin:20px 0; }
.pdp-fit__lead{ font-size:14.5px; margin:0; }
.pdp-fit__note{ font-family:var(--font-ui); font-size:12.5px; color:var(--ink-soft); margin:8px 0 0; }
.pdp-fit__rec{ display:flex; align-items:baseline; gap:12px; flex-wrap:wrap; }
.pdp-fit__size{ font-family:var(--font-display); font-size:30px; line-height:1; }
.pdp-fit__verdict{ font-family:var(--font-ui); font-size:10.5px; letter-spacing:.16em;
  text-transform:uppercase; color:var(--gold); }
.pdp-fit__msg{ font-size:14.5px; margin:8px 0 0; }
.pdp-fit__dims{ list-style:none; padding:0; margin:10px 0 0; display:flex; flex-wrap:wrap; gap:6px 18px; }
.pdp-fit__dims li{ font-family:var(--font-ui); font-size:11.5px; color:var(--ink-soft); }
.pdp-fit__dims em{ font-style:normal; color:var(--gold); text-transform:uppercase;
  letter-spacing:.12em; font-size:10px; margin-left:5px; }
.pdp-fit__actions{ margin-top:12px; display:flex; gap:14px; flex-wrap:wrap; align-items:center; }
.pdp-fit__clear{ font-family:var(--font-ui); font-size:11.5px; color:var(--ink-soft);
  background:none; border:0; padding:0; text-decoration:underline; cursor:pointer; }
.pdp-fit--bespoke{ background:var(--charcoal); color:var(--white); padding:18px 20px;
  border:0; margin:20px 0; }
.pdp-fit--bespoke .pdp-fit__msg{ color:#cfc8b6; }
.pdp-fit--bespoke .pdp-fit__verdict{ color:var(--gold); }

.spec-table{ width:100%; border-collapse:collapse; margin-top:10px; font-family:var(--font-ui); font-size:12px; }
.spec-table th, .spec-table td{ border:1px solid var(--linen); padding:5px 8px; text-align:left; }
.spec-table th{ background:var(--ivory); font-weight:400; letter-spacing:.1em; text-transform:uppercase; font-size:10px; }

/* ---- measuring guide ---- */
.measuring{ border-top:1px solid var(--linen); padding:64px 0 20px; margin-top:40px; }
.measuring__head{ max-width:70ch; margin-bottom:36px; }
.measuring__body{ display:grid; grid-template-columns:minmax(260px,400px) 1fr; gap:44px; align-items:start; }
.measuring__figure{ background:var(--paper); border:1px solid var(--linen); padding:18px; position:sticky; top:96px; }
.measuring__figure svg{ display:block; width:100%; height:auto; }
.measuring__list{ display:grid; grid-template-columns:repeat(auto-fit,minmax(230px,1fr)); gap:26px 34px; }
.measuring__item h3{ font-family:var(--font-ui); font-size:11px; letter-spacing:.18em;
  text-transform:uppercase; margin:0 0 7px; color:var(--gold); }
.measuring__item p{ font-size:14.5px; margin:0; }
.measuring__cta{ grid-column:1/-1; border-top:1px solid var(--linen); padding-top:24px; }
.measuring__cta p{ font-size:14.5px; margin:0 0 16px; }

/* ---- responsive ---- */
@media (max-width:960px){
  .fit-result{ grid-template-columns:1fr; gap:28px; }
  .fit-result__figure, .measuring__figure{ position:static; max-width:420px; margin:0 auto; }
  .measuring__body{ grid-template-columns:1fr; gap:30px; }
}
@media (max-width:600px){
  .fit-table thead{ position:absolute; left:-9999px; }
  .fit-table tr{ display:block; border-bottom:1px solid var(--linen); padding:14px 0; }
  .fit-table td{ display:block; border:0; padding:4px 0; }
  .fit-table td:first-child{ width:auto; }
  .fit-table .fit-exp::before{ content:'Expected '; font-size:11px; letter-spacing:.1em;
    text-transform:uppercase; color:var(--ink-soft); }
  .fit-table input[type=text]{ max-width:none; }
}

/* ---- print: the atelier's copy ---- */
@media print{
  .site-header, .site-footer, .cart-drawer, .fit-actions, .fit-save,
  .fit-confirm, .breadcrumbs, .pdp-fit__actions{ display:none !important; }
  body{ background:#fff; }
  .fit-result{ grid-template-columns:1fr 1fr; gap:20px; }
  .fit-result__figure, .measuring__figure{ position:static; border:0; background:none; }
  .fit-rec--bespoke{ background:none; color:#000; border:1px solid #000; }
  .fit-rec--bespoke .fit-rec__msg{ color:#000; }
  a[href]::after{ content:''; }
}

/* ---- 28b. womenswear additions: cup reading, alterations, guide groups ---- */
.fit-cup{ border-left:3px solid var(--gold); background:var(--paper); padding:15px 19px; margin-bottom:22px; }
.fit-cup__title{ font-family:var(--font-ui); font-size:11px; letter-spacing:.16em;
  text-transform:uppercase; color:var(--gold); margin:0 0 8px; }
.fit-cup p{ margin:0 0 8px; font-size:14.8px; }
.fit-cup__foot{ font-size:13px; color:var(--ink-soft); font-style:italic; }

.fit-alt{ list-style:none; padding:0; margin:0 0 18px; }
.fit-alt li{ font-family:var(--font-ui); font-size:13px; padding:7px 0 7px 22px;
  position:relative; border-bottom:1px solid var(--linen); }
.fit-alt li:last-child{ border-bottom:0; }
.fit-alt li::before{ position:absolute; left:0; top:7px; font-size:12px; }
.fit-alt li.is-ok::before{ content:'\2713'; color:#5b7350; }
.fit-alt li.is-no::before{ content:'\2717'; color:#8a4b32; }
.fit-rec--bespoke .fit-alt li{ border-bottom-color:#3a352a; color:#cfc8b6; }

.pdp-fit__alt{ list-style:none; padding:0; margin:10px 0 0; }
.pdp-fit__alt li{ font-family:var(--font-ui); font-size:11.5px; color:var(--ink-soft);
  padding:3px 0 3px 18px; position:relative; }
.pdp-fit__alt li::before{ position:absolute; left:0; top:3px; }
.pdp-fit__alt li.is-ok::before{ content:'\2713'; color:#5b7350; }
.pdp-fit__alt li.is-no::before{ content:'\2717'; color:#8a4b32; }
.pdp-fit--bespoke .pdp-fit__alt li{ color:#b9b2a0; }

.measuring__group{ grid-column:1/-1; margin-top:8px; }
.measuring__grouptitle{ font-family:var(--font-ui); font-size:10.5px; letter-spacing:.2em;
  text-transform:uppercase; color:var(--ink); margin:0; padding-bottom:6px;
  border-bottom:1px solid var(--linen); }

/* ============================================================
   29. THE GUIDED TUTORIAL
   ------------------------------------------------------------
   Designed for a phone held in one hand with a tape measure in
   the other: one step per screen, large targets, and the diagram
   above the field so the instruction is read before the answer
   is typed. Without JavaScript every step is simply visible and
   the page is a long illustrated form.
   ============================================================ */

.tour-head{ max-width:66ch; padding:14px 0 26px; }
.tour-head__skip{ margin-top:18px; }
.linkish{ background:none; border:0; padding:0; font-family:var(--font-ui); font-size:12.5px;
  color:var(--ink-soft); text-decoration:underline; cursor:pointer; letter-spacing:.02em; }
.linkish:hover{ color:var(--ink); }

/* progress */
.tour-bar{ position:sticky; top:0; z-index:5; background:var(--ivory);
  padding:12px 0 10px; border-bottom:1px solid var(--linen); margin-bottom:26px; }
.tour-bar__track{ height:3px; background:var(--linen); overflow:hidden; }
.tour-bar__track span{ display:block; height:100%; width:0; background:var(--gold);
  transition:width .4s var(--ease); }
.tour-bar__label{ margin:8px 0 0; font-family:var(--font-ui); font-size:10.5px;
  letter-spacing:.18em; text-transform:uppercase; color:var(--ink-soft); }

/* a step */
.tour-step{ padding:0 0 40px; }
.tour-step__count{ font-family:var(--font-ui); font-size:10.5px; letter-spacing:.2em;
  text-transform:uppercase; color:var(--gold); margin:0 0 8px; }
.tour-step__title{ font-family:var(--font-display); font-weight:500; line-height:1.05;
  font-size:clamp(30px,5vw,46px); margin:0 0 10px; }
.tour-step__lead{ font-size:18px; color:var(--ink); margin:0 0 26px; max-width:52ch; }
.tour-step__body{ display:grid; grid-template-columns:minmax(240px,340px) 1fr; gap:38px; align-items:start; }
.tour-step__figs{ display:grid; gap:14px; }
.tour-step__figs--2{ grid-template-columns:1fr 1fr; }
.tour-step__figs figure{ margin:0; background:var(--paper); border:1px solid var(--linen); padding:10px; }
.tour-step__figs svg{ display:block; width:100%; height:auto; }
.tour-step__text{ max-width:56ch; }
.tour-step__do{ font-size:16px; margin:0 0 20px; }

.tour-step__watch{ border-left:3px solid var(--gold); background:var(--paper);
  padding:14px 18px; margin:0 0 24px; }
.tour-step__watchtitle{ font-family:var(--font-ui); font-size:10.5px; letter-spacing:.18em;
  text-transform:uppercase; color:var(--gold); margin:0 0 7px; }
.tour-step__watch p{ margin:0; font-size:14.8px; }

.tour-step__field{ margin:0 0 18px; }
.tour-step__field label{ display:block; }
.tour-step__unit{ display:block; font-family:var(--font-ui); font-size:11px;
  letter-spacing:.02em; color:var(--ink-soft); text-transform:none; margin-top:3px; }
.tour-step__field input[type=text]{ max-width:190px; font-size:20px; padding:12px 14px; }
.tour-step__tip{ font-family:var(--font-ui); font-size:12.5px; color:var(--ink-soft);
  border-top:1px solid var(--linen); padding-top:14px; margin:0; }

/* per-answer feedback */
.tour-fb{ display:block; margin-top:10px; padding:10px 13px; font-family:var(--font-ui);
  font-size:13px; line-height:1.5; border-left:3px solid var(--gold); background:var(--paper); }
.tour-fb.is-bad{  border-left-color:#8a4b32; background:#f0e1da; color:#6d3722; }
.tour-fb.is-warn{ border-left-color:var(--gold); background:#faf3e4; }
.tour-fb.is-info{ border-left-color:var(--ink-soft); background:var(--paper); color:var(--ink-soft); }

/* the checkpoint after the essential six */
.tour-step--gate .tour-step__body{ grid-template-columns:1fr; }
.tour-gate__actions{ display:flex; gap:14px; flex-wrap:wrap; margin-top:8px; }

/* navigation */
.tour-nav{ display:flex; align-items:center; gap:18px; flex-wrap:wrap;
  border-top:1px solid var(--linen); padding-top:22px; margin-bottom:50px; }
.tour-nav .btn{ min-width:132px; }
.tour-nav #tour-next{ order:3; margin-left:auto; }
.tour-nav #tour-skip{ order:2; }
.tour-nav #tour-back{ order:1; }
.tour-nav .btn:disabled{ opacity:.35; pointer-events:none; }

/* plain mode: the whole form at once */
.fit-tour.is-plain .tour-step{ border-top:1px solid var(--linen); padding-top:26px; }
.fit-tour.is-plain .tour-step__title{ font-size:clamp(22px,3vw,28px); }
.fit-tour.is-plain .tour-step__figs{ max-width:230px; }

@media (max-width:860px){
  .tour-step__body{ grid-template-columns:1fr; gap:22px; }
  .tour-step__figs{ max-width:320px; margin:0 auto; }
  .tour-step__figs--2{ max-width:none; }
  .tour-bar{ padding:10px 0 8px; }
  .tour-nav{ gap:12px; }
  .tour-nav .btn{ min-width:0; flex:1 1 auto; }
  .tour-nav #tour-next{ order:1; flex:1 1 100%; margin-left:0; }
  .tour-nav #tour-back{ order:2; flex:0 0 auto; }
  .tour-nav #tour-skip{ order:3; margin-left:auto; }
}
@media (max-width:520px){
  .tour-step__figs--2{ grid-template-columns:1fr; }
  .tour-step__title{ font-size:28px; }
  .tour-step__lead{ font-size:16.5px; }
}
.measuring__route{ display:flex; gap:18px; align-items:center; flex-wrap:wrap;
  border-top:1px solid var(--linen); border-bottom:1px solid var(--linen);
  padding:20px 0; margin:26px 0 0; }
.measuring__route span{ font-family:var(--font-ui); font-size:13px; color:var(--ink-soft);
  max-width:52ch; line-height:1.6; }

/* ---- 30. THE CUT PLAN (made to order) ---- */
.fit-plan{ border:1px solid var(--linen); background:var(--paper); padding:26px 28px; margin:26px 0; }
.fit-plan__headline{ font-family:var(--font-display); font-size:clamp(22px,3vw,30px);
  line-height:1.18; margin:6px 0 12px; }
.fit-plan__msg{ font-size:15.5px; margin:0 0 20px; }
.fit-plan__label{ font-family:var(--font-ui); font-size:10.5px; letter-spacing:.18em;
  text-transform:uppercase; color:var(--gold); margin:20px 0 8px; }
.fit-plan__blend{ list-style:none; padding:0; margin:0 0 6px; display:flex; flex-wrap:wrap; gap:8px 10px; }
.fit-plan__blend li{ font-family:var(--font-ui); font-size:11.5px; letter-spacing:.06em;
  border:1px solid var(--linen); background:var(--ivory); padding:7px 11px; }
.fit-plan__blend span{ color:var(--ink-soft); text-transform:uppercase; letter-spacing:.14em; font-size:9.5px; }
.fit-plan__blend em{ font-style:normal; font-family:var(--font-display); font-size:16px; margin-left:7px; }
.fit-plan__foot{ font-family:var(--font-ui); font-size:12px; color:var(--ink-soft);
  border-top:1px solid var(--linen); padding-top:14px; margin:20px 0 0; }
.fit-plan--fresh_draft{ background:var(--charcoal); border-color:var(--charcoal); color:var(--white); }
.fit-plan--fresh_draft .fit-plan__msg{ color:#cfc8b6; }
.fit-plan--fresh_draft .eyebrow, .fit-plan--fresh_draft .fit-plan__label{ color:var(--gold); }
.fit-plan--fresh_draft .fit-plan__foot{ color:#b9b2a0; border-top-color:#3a352a; }
.fit-plan--fresh_draft .btn{ background:var(--ivory); color:var(--charcoal); }
.fit-plan--fresh_draft .fit-alt li{ border-bottom-color:#3a352a; color:#cfc8b6; }
.fit-plan--fresh_draft .fit-plan__blend li{ background:transparent; border-color:#3a352a; color:#cfc8b6; }

.fit-alert--ask{ border-left-color:var(--gold); background:#faf3e4; }
.fit-alert--ask .fit-alert__title{ color:#6a552e; }
.fit-alert--ask .fit-confirm{ margin:6px 0 14px; }

.pdp-fit__plan{ font-family:var(--font-display); font-size:19px; line-height:1.25; margin:0 0 6px; }
.pdp-fit__blend{ list-style:none; padding:0; margin:8px 0 0; display:flex; flex-wrap:wrap; gap:6px; }
.pdp-fit__blend li{ font-family:var(--font-ui); font-size:10.5px; letter-spacing:.08em;
  border:1px solid var(--linen); padding:4px 8px; color:var(--ink-soft); }

/* ============================================================
   31. THE PORTAL (accounts, orders, saved measurements)
   ------------------------------------------------------------
   Uses the existing palette and type scale only. Auth pages are
   deliberately narrow and quiet — a sign-in form is not a place
   for the house to perform.
   ============================================================ */

.nav-acct{ margin-right:18px; }

/* ---- auth pages ---- */
.auth-card{ max-width:44ch; margin:10px 0 70px; }
.auth-card--wide{ max-width:66ch; }
.auth-card .display-lg{ margin-bottom:14px; }
.auth-form{ margin-top:26px; }
.auth-form .field{ margin-bottom:20px; }
.auth-actions{ display:flex; gap:18px; align-items:center; flex-wrap:wrap; margin-top:6px; }
.auth-alt{ font-family:var(--font-ui); font-size:13px; color:var(--ink-soft);
  border-top:1px solid var(--linen); padding-top:18px; margin-top:28px; }
.auth-err{ border-left:3px solid #8a4b32; background:#f0e1da; padding:12px 16px;
  font-family:var(--font-ui); font-size:13.5px; color:#6d3722; margin:0 0 20px; }
.auth-ok{ border-left:3px solid #5b7350; background:#e4ead9; padding:12px 16px;
  font-family:var(--font-ui); font-size:13.5px; color:#3f5236; margin:0 0 22px; }

/* ---- account area ---- */
.acct-head{ padding:10px 0 30px; }
.acct-nav{ display:flex; gap:22px; flex-wrap:wrap; align-items:baseline;
  border-top:1px solid var(--linen); border-bottom:1px solid var(--linen);
  padding:14px 0; margin-top:22px; font-family:var(--font-ui); font-size:12px;
  letter-spacing:.12em; text-transform:uppercase; }
.acct-nav a{ color:var(--ink-soft); text-decoration:none; }
.acct-nav a:hover{ color:var(--ink); }
.acct-nav a[aria-current]{ color:var(--ink); border-bottom:1px solid var(--gold); padding-bottom:3px; }
.acct-nav__out{ margin-left:auto; }

.acct-grid{ display:grid; grid-template-columns:repeat(auto-fit,minmax(300px,1fr)); gap:26px;
  margin-bottom:26px; }
.acct-panel{ border:1px solid var(--linen); background:var(--paper); padding:24px 26px; }
.acct-panel__label{ font-family:var(--font-ui); font-size:10.5px; letter-spacing:.18em;
  text-transform:uppercase; color:var(--gold); margin:0 0 14px; }
.acct-panel--danger{ border-color:#c9a596; background:#f7ece6; }
.acct-panel--danger .acct-panel__label{ color:#8a4b32; }
.acct-meta{ font-family:var(--font-ui); font-size:12px; color:var(--ink-soft); margin:10px 0 0; }
.acct-figure{ background:var(--ivory); border:1px solid var(--linen); padding:14px; margin-bottom:14px; }
.acct-figure svg{ display:block; width:100%; height:auto; }
.acct-nudge{ border-left:3px solid var(--gold); background:#faf3e4; padding:12px 16px;
  font-family:var(--font-ui); font-size:13px; margin:0 0 20px; }
.acct-table{ margin-top:6px; }
.acct-table td, .acct-table th{ font-size:13.5px; }
.acct-inline{ display:inline; }
.btn--danger{ background:#8a4b32; }

/* ---- orders ---- */
.acct-orders{ list-style:none; padding:0; margin:0 0 18px; }
.acct-orders li{ display:flex; gap:14px; flex-wrap:wrap; align-items:baseline;
  border-bottom:1px solid var(--linen); padding:10px 0; font-family:var(--font-ui); font-size:12.5px; }
.acct-orders__ref{ letter-spacing:.08em; }
.acct-orders__date{ color:var(--ink-soft); }
.acct-orders__status{ margin-left:auto; text-transform:uppercase; letter-spacing:.14em;
  font-size:10px; color:var(--gold); }

.acct-order{ border:1px solid var(--linen); background:var(--paper); padding:22px 26px; margin-bottom:20px; }
.acct-order__head{ display:flex; justify-content:space-between; align-items:flex-start;
  gap:16px; flex-wrap:wrap; border-bottom:1px solid var(--linen); padding-bottom:14px; margin-bottom:16px; }
.acct-order__ref{ font-family:var(--font-display); font-size:22px; margin:0; letter-spacing:.04em; }
.acct-order__meta{ font-family:var(--font-ui); font-size:12px; color:var(--ink-soft); margin:4px 0 0; }
.acct-order__foot{ font-family:var(--font-ui); font-size:11.5px; color:var(--ink-soft);
  border-top:1px solid var(--linen); padding-top:12px; margin:16px 0 0; }
.acct-status{ font-family:var(--font-ui); font-size:10px; letter-spacing:.16em;
  text-transform:uppercase; padding:5px 10px; border:1px solid var(--gold); color:#6a552e; }
.acct-status--shipped, .acct-status--closed{ border-color:#5b7350; color:#3f5236; }
.acct-status--refunded{ border-color:#8a4b32; color:#7a3f28; }
.acct-items{ list-style:none; padding:0; margin:0; }
.acct-items li{ padding:12px 0; border-bottom:1px solid var(--linen); }
.acct-items li:last-child{ border-bottom:0; }
.acct-items__name{ font-size:16px; margin:0 0 4px; }
.acct-items__cut{ font-family:var(--font-ui); font-size:12px; color:var(--ink-soft); margin:0; }
.acct-items__plan{ font-size:14.5px; margin:6px 0 0; }

/* ---- the offer after a purchase ---- */
.post-order{ border:1px solid var(--linen); background:var(--paper); padding:24px 26px; margin:30px 0; }
.post-order__label{ font-family:var(--font-ui); font-size:10.5px; letter-spacing:.18em;
  text-transform:uppercase; color:var(--gold); margin:0 0 10px; }
.post-order__lead{ font-family:var(--font-display); font-size:clamp(20px,2.6vw,26px);
  line-height:1.2; margin:0 0 12px; }
.post-order__no{ font-family:var(--font-ui); font-size:12.5px; color:var(--ink-soft); margin-left:14px; }

@media (max-width:600px){
  .acct-nav{ gap:14px; font-size:11px; }
  .acct-nav__out{ margin-left:0; }
  .acct-panel{ padding:20px; }
  .post-order__no{ display:block; margin:10px 0 0; }
}

/* ============================================================
   32. THE MEASURING GUIDE — reordered, enlarged, magnifiable
   ------------------------------------------------------------
   The measuring guide is now the first section on the Atelier
   page, because "Size guide" on every product page links to
   #measuring. Three things follow from that.
   ============================================================ */

/* ---- 1. it leads the page now, so it should not look bolted on ----
   .measuring carries a top border and margin from when it followed
   the booking block. Directly after the hero, both read as a seam. */
.page-hero + .measuring{ border-top:0; margin-top:0; padding-top:52px; }

/* The sticky header is 96px. Without this, jumping to #measuring puts
   the heading underneath it — the anchor appears to land in the wrong
   place, which is the commonest and least obvious anchor bug. */
#measuring, #bespoke{ scroll-margin-top:104px; }

/* Bespoke now closes the page instead of opening it, so it needs the
   separating rule that .measuring used to carry. */
.bespoke{ border-top:1px solid var(--linen); margin-top:64px; padding:60px 0 24px; }

/* ---- 2. a larger diagram ----
   Was minmax(260px,400px). The figure is the reference now, not an
   illustration beside the reference. */
.measuring__body{ grid-template-columns:minmax(300px,500px) 1fr; gap:48px; }

/* ---- 3. magnify under the pointer ----
   CSS alone gives a centred zoom on hover, so this works with
   JavaScript switched off. main.js sets --zx / --zy from the cursor
   so the zoom follows it, and adds a click-to-hold for touch and
   keyboard. overflow:hidden is what turns the panel into a window. */
.measuring__figure{
  overflow:hidden;
  cursor:zoom-in;
  padding-bottom:34px;          /* room for the hint strip */
  -webkit-tap-highlight-color:transparent;
}
.measuring__figure svg{
  transform-origin:var(--zx,50%) var(--zy,50%);
  transition:transform .3s cubic-bezier(.2,.7,.3,1);
  will-change:transform;
}
.measuring__figure:hover svg{ transform:scale(2.1); }
.measuring__figure:focus-visible{ outline:2px solid var(--gold); outline-offset:3px; }
.measuring__figure:focus-visible svg{ transform:scale(2.1); }

/* held open by a click or a tap — a little closer, and a little quicker,
   because at that point she has asked for it deliberately */
.measuring__figure.is-zoomed{ cursor:zoom-out; }
.measuring__figure.is-zoomed svg{ transform:scale(2.7); transition-duration:.2s; }

.measuring__zoomhint{
  position:absolute; left:0; right:0; bottom:0; z-index:2;
  margin:0; padding:9px 12px;
  background:rgba(233,228,214,.95);
  border-top:1px solid var(--linen);
  font-family:var(--font-ui); font-size:10px; letter-spacing:.16em;
  text-transform:uppercase; color:var(--ink-soft); text-align:center;
  pointer-events:none;          /* never swallow the click meant for the figure */
}
.measuring__figure.is-zoomed .measuring__zoomhint{ background:rgba(233,228,214,.82); }

/* Touch has no hover, so a stray tap must not leave the diagram stuck
   mid-zoom. There, only the explicit tap-to-hold zooms. */
@media (hover:none){
  .measuring__figure:hover svg{ transform:none; }
  .measuring__figure.is-zoomed svg{ transform:scale(2.4); }
}

@media (prefers-reduced-motion:reduce){
  .measuring__figure svg{ transition:none; }
}

/* Narrow screens: the figure stops being sticky and the two columns
   stack, so give the diagram its full width and drop the magnifier —
   at that size the whole thing is already as large as the screen. */
@media (max-width:900px){
  .measuring__body{ grid-template-columns:1fr; gap:32px; }
  .measuring__figure{ position:static; max-width:460px; }
}
@media (max-width:600px){
  .page-hero + .measuring{ padding-top:38px; }
  .bespoke{ margin-top:44px; padding-top:44px; }
}

/* ============================================================
   33. THE TOUR DIAGRAMS — enlarged, and magnifiable
   ------------------------------------------------------------
   The fifteen guided steps carry the densest drawings on the
   site: a bold tape line, a faint crossed-out wrong position,
   and small caps naming the view. At the old 340px they were
   asking a lot of the eye. Two views side by side in that
   column left each one about 163px wide, which is not a
   diagram so much as a suggestion of one.
   ============================================================ */

/* ---- larger figure column ---- */
.tour-step__body{ grid-template-columns:minmax(300px,420px) 1fr; gap:42px; }

/* A front-and-back pair is a comparison — they have to be seen together, so
   the pair gets a wider column rather than being stacked. :has() is doing the
   work; where it is unsupported the rule above still applies and the pair is
   simply smaller, which is what happened before. */
.tour-step__body:has(.tour-step__figs--2){ grid-template-columns:minmax(300px,560px) 1fr; }
.tour-step__figs--2{ gap:12px; }

/* ---- the magnifier, shared with the Atelier plate ----
   Same mechanics and the same values as section 32, so listing
   .measuring__figure here changes nothing about it. The scales differ
   per figure below, because these drawings are smaller and denser. */
.tour-step__figs figure,
.mhelp__fig,
.fit-result__figure{
  /* v7.3 — .mhelp__fig was in every rule below but not this one, which is the
     rule that actually makes a magnifier: without overflow:hidden the scaled
     drawing simply spills out of its box instead of being framed by it, and
     without position:relative the corner affordance lands somewhere else. So
     the review panels looked as though zoom had not been wired up at all. */
  position:relative;
  overflow:hidden;
  cursor:zoom-in;
  -webkit-tap-highlight-color:transparent;
}
.tour-step__figs figure svg,
.mhelp__fig svg,
.fit-result__figure svg{
  transform-origin:var(--zx,50%) var(--zy,50%);
  transition:transform .3s cubic-bezier(.2,.7,.3,1);
  will-change:transform;
}
.tour-step__figs figure:hover svg,
.mhelp__fig:hover svg{ transform:scale(2.4); }
.tour-step__figs figure.is-zoomed svg,
.mhelp__fig.is-zoomed svg{ transform:scale(3.1); transition-duration:.2s; }
.fit-result__figure:hover svg{ transform:scale(2.1); }
.fit-result__figure.is-zoomed svg{ transform:scale(2.7); transition-duration:.2s; }

.tour-step__figs figure:focus-visible,
.mhelp__fig:focus-visible,
.fit-result__figure:focus-visible{ outline:2px solid var(--gold); outline-offset:3px; }
.tour-step__figs figure:focus-visible svg,
.mhelp__fig:focus-visible svg{ transform:scale(2.4); }
.fit-result__figure:focus-visible svg{ transform:scale(2.1); }

.tour-step__figs figure.is-zoomed,
.mhelp__fig.is-zoomed,
.fit-result__figure.is-zoomed{ cursor:zoom-out; }

/* ---- the affordance ----
   The zoom-in cursor says it on a desktop and says nothing at all on a
   phone, so there is a small corner mark. Drawn in CSS rather than added
   to fifteen steps of markup. */
.tour-step__figs figure::after,
.mhelp__fig::after,
.fit-result__figure::after{
  content:"+";
  position:absolute; right:7px; bottom:7px; z-index:2;
  width:22px; height:22px; line-height:20px; text-align:center;
  font-family:var(--font-ui); font-size:15px;
  color:var(--ink-soft); background:rgba(242,239,231,.92);
  border:1px solid var(--linen); border-radius:2px;
  pointer-events:none;                  /* never eat the click */
  transition:opacity .2s var(--ease), color .2s var(--ease);
  opacity:.72;
}
.tour-step__figs figure:hover::after,
.mhelp__fig:hover::after,
.fit-result__figure:hover::after{ opacity:1; color:var(--gold); }
.tour-step__figs figure.is-zoomed::after,
.mhelp__fig.is-zoomed::after,
.fit-result__figure.is-zoomed::after{ content:"\2212"; opacity:1; color:var(--gold); }

/* ---- touch ----
   No hover, so a stray tap must not leave a diagram stuck mid-zoom.
   There, only the explicit tap-to-hold magnifies. */
@media (hover:none){
  .tour-step__figs figure:hover svg,
  .mhelp__fig:hover svg,
  .fit-result__figure:hover svg{ transform:none; }
  .tour-step__figs figure.is-zoomed svg,
  .mhelp__fig.is-zoomed svg{ transform:scale(2.8); }
  .fit-result__figure.is-zoomed svg{ transform:scale(2.4); }
}

@media (prefers-reduced-motion:reduce){
  .tour-step__figs figure svg,
  .mhelp__fig svg,                 /* v7.3 — was omitted here alone */
  .fit-result__figure svg{ transition:none; }
}

/* ---- narrow screens ----
   The columns stack, so the figure gets the width instead of a share of
   it, and a two-view pair stays side by side because that is the whole
   point of the pair. */
@media (max-width:900px){
  .tour-step__body,
  .tour-step__body:has(.tour-step__figs--2){ grid-template-columns:1fr; gap:28px; }
  .tour-step__figs{ max-width:480px; }
  .tour-step__figs--2{ max-width:100%; }
  .fit-result__figure{ position:static; }
}

/* ============================================================
   34. THE ACCOUNT MENU
   ------------------------------------------------------------
   Sits after Search and Cart in the tools row, with a small
   dropdown so "create an account" is reachable in one move
   rather than by way of the sign-in page.

   It also appears in the mobile drawer, which is the part that
   actually mattered: the drawer is the only navigation on a
   phone, so anything living only in the tools row was not
   reachable there at all.
   ============================================================ */

.acct-menu{ position:relative; }          /* .nav .has-drop does not match here */
.nav-acct{ margin-right:0; }              /* was spacing it before Cart */

/* The tools row sits at the right edge, so a centred dropdown would run off
   the viewport. Anchor this one to its right instead. */
.drop--acct{
  left:auto; right:0;
  /* Sized to its content rather than capped near 200px. "Create an account"
     at 11px with .16em tracking needs about 156px of text plus 26px of
     padding each side — over the old cap, so the words wrapped and read as
     cut off. Also stopped from growing past a narrow viewport. */
  width:max-content; min-width:200px; max-width:calc(100vw - 32px);
  transform:translate(0,8px);
}
.has-drop:hover .drop--acct,
.has-drop:focus-within .drop--acct{ transform:translate(0,0); }

/* The last item is the way out, so it reads as a separate act. */
.drop--acct a:last-child{
  border-top:1px solid var(--linen);
  margin-top:8px; padding-top:14px;
  color:var(--ink-soft);
}

/* ---- the mobile drawer ---- */
.mobilenav__group{
  margin-top:18px; padding-top:6px;
  border-top:2px solid var(--ink);
}
.mobilenav__group button{
  display:block; width:100%; text-align:left;
  background:none; border:0; border-bottom:1px solid var(--linen);
  padding:13px 0; color:var(--ink);
  font-family:var(--font-ui); font-size:12px; letter-spacing:.2em; text-transform:uppercase;
  cursor:pointer;
}
.mobilenav__group a:last-child{ border-bottom:0; }

/* Below 900px the tools row survives but the hover dropdown does not make
   sense on touch — a tap should simply go to the page. The drawer carries
   the full set of links. */
@media (max-width:900px){
  .acct-menu .drop--acct{ display:none; }
}

/* Very narrow: the tools row is three items plus a burger. Tighten the gap
   before anything wraps. */
@media (max-width:600px){
  .header__tools{ gap:16px; }
  .nav-acct{ font-size:10px; }
}

/* ============================================================
   35. PER-LINE MEASUREMENTS IN THE BAG
   ------------------------------------------------------------
   Nothing here comes off a shelf, so a bag line has to say what
   the piece will be CUT TO — not merely which size was chosen.
   The block for that size is the default; anything she sets
   herself is marked as hers.
   ============================================================ */

.mx{ grid-column:1/-1; margin-top:16px; padding-top:16px; border-top:1px solid var(--linen); }
.mx__summary{ font-family:var(--font-ui); font-size:12px; letter-spacing:.04em;
  color:var(--ink-soft); margin:0 0 12px; }
.mx__need{ border-left:3px solid var(--gold); background:var(--paper);
  padding:10px 14px; margin:0 0 12px; font-size:14px; }

.mx__table{ width:100%; border-collapse:collapse; margin:0 0 12px; }
.mx__table th{ text-align:left; font-family:var(--font-ui); font-size:10.5px;
  letter-spacing:.14em; text-transform:uppercase; color:var(--ink-soft);
  font-weight:400; padding:6px 12px 6px 0; border-bottom:1px solid var(--linen); }
.mx__table td{ padding:6px 0; border-bottom:1px solid var(--linen); font-size:14px; }
.mx__val{ font-variant-numeric:tabular-nums; white-space:nowrap; width:5.5em; }

.mx-tag{ font-family:var(--font-ui); font-size:9.5px; letter-spacing:.12em;
  text-transform:uppercase; padding:3px 7px; border:1px solid var(--linen); white-space:nowrap; }
.mx-tag--block{ color:var(--ink-soft); }
.mx-tag--mine{ color:#6a552e; border-color:var(--gold); background:#faf3e4; }
.mx-tag--need{ color:#7a3f28; border-color:#c9a596; background:#f7ece6; }

.mx__actions{ display:flex; gap:18px; flex-wrap:wrap; align-items:baseline; }
.mx__actions .linkish{ font-family:var(--font-ui); font-size:11.5px; letter-spacing:.1em; }

/* ---- the editor ---- */
.mx__edit{ margin-top:16px; padding:18px; background:var(--paper); border:1px solid var(--linen); }
.mx__field{ margin-bottom:14px; }
.mx__field label{ display:block; font-family:var(--font-ui); font-size:10.5px;
  letter-spacing:.14em; text-transform:uppercase; color:var(--ink-soft); }
.mx__field input{
  display:block; width:100%; max-width:150px; margin-top:5px;
  background:var(--ivory); border:1px solid var(--linen); padding:9px 11px;
  font-family:var(--font-body); font-size:16px; color:var(--ink);
}
.mx__field input:focus{ outline:2px solid var(--gold); outline-offset:1px; }
.mx__how{ display:block; font-size:12.5px; color:var(--ink-soft); margin-top:5px; max-width:52ch; }
.mx__note{ font-size:12.5px; color:var(--ink-soft); margin:4px 0 16px; }
.mx__editactions{ display:flex; gap:18px; align-items:center; flex-wrap:wrap; }

/* A line that cannot be cut yet says so before checkout refuses it. */
.cart-line--needs{ border-left:3px solid var(--gold); padding-left:14px; }

/* ---- the drawer states the position and sends her to the bag ---- */
.mx-mini{ font-family:var(--font-ui); font-size:11px; letter-spacing:.04em;
  color:var(--ink-soft); margin:8px 0 0; }
.mx-mini--need{ color:#7a3f28; }
.mx-mini a{ text-decoration:underline; }

@media (max-width:600px){
  .mx__table th{ font-size:10px; padding-right:8px; }
  .mx__table td{ font-size:13.5px; }
  .mx__field input{ max-width:100%; }
  .mx__actions{ gap:12px; }
}

/* ---- 35b. what is being made, on the confirmation page ---- */
.oc-cut{ border:1px solid var(--linen); background:var(--paper); padding:24px 26px; margin:30px 0; }
.oc-cut__label{ font-family:var(--font-ui); font-size:10.5px; letter-spacing:.18em;
  text-transform:uppercase; color:var(--gold); margin:0 0 16px; }
.oc-cut__item{ padding:0 0 18px; }
.oc-cut__item + .oc-cut__item{ border-top:1px solid var(--linen); padding-top:18px; }
.oc-cut__name{ font-size:17px; margin:0 0 4px; }
.oc-cut__qty{ font-family:var(--font-ui); font-size:12px; color:var(--ink-soft); margin-left:6px; }
.oc-cut__summary{ font-family:var(--font-ui); font-size:12px; color:var(--ink-soft); margin:0 0 12px; }
.oc-cut__foot{ font-size:13.5px; border-top:1px solid var(--linen); padding-top:14px; margin:6px 0 0; }
.oc-cut .mx__table{ background:var(--ivory); }

/* ============================================================
   36. THE TOOLS ROW, ALIGNED
   ------------------------------------------------------------
   Search is a <button>, Cart is an <a>, and the account link is
   an <a> nested inside a <div> so it can carry a dropdown. Three
   different elements at three different default line heights,
   which is why the account link sat a shade low and a shade
   right of the other two.

   Fixed by making every item in the row behave the same way:
   one flex line, no baseline dependence, an explicit line-height
   so the cap heights agree, and the wrapper div made a flex box
   of its own so its child is centred rather than sitting on a
   block line box.
   ============================================================ */

.header__tools{
  display:flex;
  align-items:center;          /* was already here — kept explicit */
  gap:26px;
}
.header__tools > *{
  display:flex;
  align-items:center;
  line-height:1;               /* the actual culprit: button and a differed */
}
.header__tools button,
.header__tools a{
  font-family:var(--font-ui); font-size:11px;
  letter-spacing:.2em; text-transform:uppercase; color:var(--ink);
  background:none; border:0; padding:0; margin:0;
  line-height:1;
  text-decoration:none;
  white-space:nowrap;          /* "Sign In" must never wrap mid-row */
}
/* The dropdown is absolutely positioned, so the wrapper contributes only
   the width of the link itself. */
.acct-menu{ position:relative; display:flex; align-items:center; }
.nav-acct{ display:flex; align-items:center; line-height:1; margin:0; }

/* The burger is three stacked bars, so it is the one item that must NOT be
   flattened to a single flex line. */
.header__tools > .burger{ flex-direction:column; gap:5px; line-height:normal; }

/* The cart count sits inside the link; keep it on the same line box. */
.cart-count{ line-height:1; }

/* ---- 36b. READING THE MEASUREMENTS BACK ----
   The confirmation a made-to-order house takes before cutting. The
   checkout button stays shut until every piece has one. */

.mx__check{
  display:flex; align-items:flex-start; gap:11px;
  margin:16px 0 4px; padding:13px 15px;
  border:1px solid var(--linen); background:var(--ivory);
  cursor:pointer; text-transform:none; letter-spacing:0;
  font-family:var(--font-body); font-size:14px; color:var(--ink);
}
.mx__check:hover{ border-color:var(--gold); }
.mx__check.is-on{ border-color:var(--gold); background:#faf3e4; }
.mx__check input{
  width:17px; height:17px; margin:2px 0 0; flex:0 0 auto;
  accent-color:var(--gold); cursor:pointer;
}
.mx__check span{ line-height:1.45; }

.gate-note{
  font-family:var(--font-ui); font-size:11px; letter-spacing:.08em;
  color:#7a3f28; margin:0 0 10px; min-height:1.2em;
}
.btn.is-blocked{ opacity:.42; cursor:not-allowed; }
.btn:disabled{ opacity:.42; cursor:not-allowed; }

@media (max-width:600px){
  .mx__check{ font-size:13.5px; padding:12px 13px; }
}

/* ---- 36c. THE ACCOUNT DROPDOWN, ROOM TO READ ----
   Section 36 flattened every item in the tools row to a single flex line
   with line-height:1, which is right for the row itself and wrong for the
   dropdown hanging beneath it. These put the dropdown back to normal
   typography without disturbing the row. */

.header__tools .drop{
  display:block;               /* not a flex line — it is a list */
  line-height:1.3;
  padding:16px 0;
}
.header__tools .drop a{
  display:block;
  padding:10px 26px;
  line-height:1.3;
  white-space:nowrap;
}

/* On a narrow screen the row itself can run out of room before the burger
   takes over. Let Sign In shorten rather than overflow. */
@media (max-width:760px){
  .header__tools{ gap:18px; }
}

/* ============================================================
   37. MEASUREMENTS, MADE LESS OF AN INTERROGATION  (v5.3.4)
   ------------------------------------------------------------
   Three faults were being fixed here. The bag repeated "our
   block" on every one of a dozen rows, which is a dozen times
   the words for none of the meaning. It showed all of them at
   once, which reads as a form to be filled rather than an
   answer already given. And the measurements arrived as a final
   demand at checkout, having been mentioned nowhere earlier.
   ============================================================ */

/* ---- said once, before the pieces ---- */
.mx-intro{
  border:1px solid var(--linen); background:var(--paper);
  padding:20px 22px; margin:0 0 28px;
}
.mx-intro p{ margin:0 0 10px; font-size:15px; line-height:1.62; }
.mx-intro p:last-child{ margin-bottom:0; }
.mx-intro a{ text-decoration:underline; text-decoration-thickness:1px; text-underline-offset:2px; }

/* ---- the disclosure ---- */
.mx__reveal{ margin:10px 0 4px; }
.mx__reveal > summary{
  cursor:pointer; list-style:none;
  display:inline-flex; align-items:center; gap:9px;
  font-family:var(--font-ui); font-size:10.5px; letter-spacing:.16em; text-transform:uppercase;
  color:var(--gold); padding:6px 0;
}
.mx__reveal > summary::-webkit-details-marker{ display:none; }
.mx__reveal > summary::before{
  content:"+"; display:inline-block; width:14px; text-align:center;
  font-size:13px; letter-spacing:0; color:var(--gold);
}
.mx__reveal[open] > summary::before{ content:"\2212"; }   /* minus */
.mx__reveal > summary:hover{ color:var(--ink); }
.mx__count{
  font-size:10px; letter-spacing:.1em; color:var(--ink-soft);
  border:1px solid var(--linen); border-radius:999px; padding:2px 8px;
}

/* ---- provenance, once ---- */
.mx__prov, .mx-cap{
  font-family:var(--font-body); font-size:13.5px; font-style:italic;
  color:var(--ink-soft); margin:2px 0 10px;
}

/* a row she changed is the only one that needs marking */
.mx__table tr.is-mine th, .mx-table tr.is-mine th{ color:var(--ink); }
.mx__table tr.is-mine .mx__val, .mx-table tr.is-mine .n{ font-weight:500; }

/* ---- the editor, gentler ---- */
.mx__editlede{
  font-size:14px; line-height:1.55; color:var(--ink-soft);
  margin:0 0 16px; padding-bottom:14px; border-bottom:1px solid var(--linen);
}
.mx__howwrap{ margin:4px 0 0; }
.mx__howwrap > summary{
  cursor:pointer; list-style:none;
  font-family:var(--font-ui); font-size:9.5px; letter-spacing:.14em; text-transform:uppercase;
  color:var(--gold); padding:3px 0;
}
.mx__howwrap > summary::-webkit-details-marker{ display:none; }
.mx__howwrap > summary:hover{ color:var(--ink); }
.mx__howwrap .mx__how{ margin:5px 0 0; }

/* ============================================================
   38. THE PIECE, PRESENT WHILE SHE MEASURES  (v5.3.4)
   ------------------------------------------------------------
   Fifteen steps is a long way to go with nothing on screen
   saying what any of it is for.
   ============================================================ */

.fit-piece{
  display:flex; align-items:center; gap:16px;
  border:1px solid var(--linen); background:var(--paper);
  padding:14px 16px; margin:22px 0 0;
}
.fit-piece__img{
  width:58px; height:74px; object-fit:cover; flex:0 0 auto;
  background:var(--ivory); border:1px solid var(--linen);
}
.fit-piece__body{ flex:1 1 auto; min-width:0; }
.fit-piece__eyebrow{
  font-family:var(--font-ui); font-size:9.5px; letter-spacing:.2em; text-transform:uppercase;
  color:var(--gold); margin:0 0 3px;
}
.fit-piece__name{
  font-family:var(--font-display); font-size:19px; line-height:1.2;
  margin:0; color:var(--ink);
}
.fit-piece__note{ font-size:13.5px; color:var(--ink-soft); margin:6px 0 0; line-height:1.5; }
.fit-piece__back{
  flex:0 0 auto; font-family:var(--font-ui); font-size:10px;
  letter-spacing:.16em; text-transform:uppercase; color:var(--ink-soft);
  text-decoration:none; border-bottom:1px solid var(--linen); padding-bottom:2px;
}
.fit-piece__back:hover{ color:var(--ink); border-color:var(--gold); }

/* The copy that rides along through the tour. */
.fit-piece--sticky{
  position:sticky; top:0; z-index:60;
  margin:0 0 20px; background:var(--ivory);
  border-left:0; border-right:0; border-top:0;
  padding:11px 2px;
}
.fit-piece--sticky .fit-piece__img{ width:42px; height:54px; }
.fit-piece--sticky .fit-piece__name{ font-size:16px; }
.fit-piece--bag .fit-piece__body{ padding-left:2px; }

@media (max-width:600px){
  .fit-piece{ gap:12px; padding:12px; }
  .fit-piece__back{ display:none; }
  .fit-piece--sticky .fit-piece__img{ width:36px; height:46px; }
}

/* ============================================================
   39. FINDING YOUR FIT, GIVEN ITS DUE  (v5.3.4)
   ------------------------------------------------------------
   It was a link inside a paragraph. It is the most useful thing
   on a made-to-order product page.
   ============================================================ */

.pdp-fit__cta{
  border:1px solid var(--gold); background:var(--paper);
  padding:20px 22px; margin:16px 0 0;
}
.pdp-fit__ctaLead{
  font-size:15.5px; line-height:1.6; margin:0 0 16px; color:var(--ink);
}
.pdp-fit__cta .btn{ width:100%; text-align:center; }
.pdp-fit__ctaNote{
  font-family:var(--font-ui); font-size:10.5px; letter-spacing:.06em;
  line-height:1.7; color:var(--ink-soft); margin:13px 0 0;
}

/* ============================================================
   40. THE REGISTRATION PAGE  (v5.3.10)
   ------------------------------------------------------------
   A form on its own asks for a commitment and explains nothing.
   The right-hand column carries the measuring plate and what an
   account is actually for, so the ask has an answer beside it.

   The plate is the same drawing as the Atelier's, at the same
   scale, and shares the magnifier from sections 32 and 33.
   ============================================================ */

.reg,
.authcols{
  display:grid;
  grid-template-columns:minmax(0,1fr) minmax(0,1fr);
  gap:clamp(34px,5vw,72px);
  align-items:start;
  padding:10px 0 80px;
}
.reg__form,
.authcols__form{ min-width:0; }
.reg__form .auth-card,
.authcols__form .auth-card{ margin:0; max-width:46ch; }

.reg__side,
.authcols__side{
  min-width:0;
  border-left:1px solid var(--linen);
  padding-left:clamp(24px,3vw,44px);
}

/* ---- the plate ---- */
.reg-figure{
  position:relative; overflow:hidden;
  background:var(--paper); border:1px solid var(--linen);
  padding:18px 18px 34px;
  cursor:zoom-in; -webkit-tap-highlight-color:transparent;
  margin-bottom:26px;
}
.reg-figure svg{
  display:block; width:100%; height:auto;
  transform-origin:var(--zx,50%) var(--zy,50%);
  transition:transform .3s cubic-bezier(.2,.7,.3,1);
  will-change:transform;
}
.reg-figure:hover svg,
.reg-figure:focus-visible svg{ transform:scale(2.1); }
.reg-figure.is-zoomed{ cursor:zoom-out; }
.reg-figure.is-zoomed svg{ transform:scale(2.7); transition-duration:.2s; }
.reg-figure:focus-visible{ outline:2px solid var(--gold); outline-offset:3px; }
.reg-figure__hint{
  position:absolute; left:0; right:0; bottom:0; z-index:2;
  margin:0; padding:9px 12px;
  background:rgba(233,228,214,.95); border-top:1px solid var(--linen);
  font-family:var(--font-ui); font-size:10px; letter-spacing:.16em;
  text-transform:uppercase; color:var(--ink-soft); text-align:center;
  pointer-events:none;
}
@media (hover:none){
  .reg-figure:hover svg{ transform:none; }
  .reg-figure.is-zoomed svg{ transform:scale(2.4); }
}
@media (prefers-reduced-motion:reduce){ .reg-figure svg{ transition:none; } }

/* ---- the words ---- */
.reg__lead{ font-size:15px; line-height:1.62; margin:0 0 26px; }

.reg__setlabel{
  font-family:var(--font-ui); font-size:10px; letter-spacing:.2em;
  text-transform:uppercase; color:var(--gold);
  margin:0 0 12px; padding-bottom:8px; border-bottom:1px solid var(--linen);
}
.reg__setlabel--second{ margin-top:28px; }

.reg__dims{ list-style:none; padding:0; margin:0 0 12px; }
.reg__dims li{
  font-size:14px; line-height:1.5; padding:7px 0;
  border-bottom:1px solid var(--linen);
}
.reg__dims li:last-child{ border-bottom:0; }
.reg__dims em{
  display:block; font-style:normal;
  font-family:var(--font-ui); font-size:9.5px; letter-spacing:.16em;
  text-transform:uppercase; color:var(--ink-soft); margin-bottom:3px;
}
.reg__setfoot{
  font-family:var(--font-ui); font-size:11.5px; line-height:1.65;
  color:var(--ink-soft); margin:10px 0 0;
}

.reg__set{ margin-bottom:34px; }
.reg__benefits{ margin-bottom:28px; }
.reg__list{ list-style:none; padding:0; margin:0; }
.reg__list li{
  font-size:14.5px; line-height:1.58;
  padding:0 0 14px 16px; margin:0 0 14px;
  border-left:2px solid var(--linen);
}
.reg__list li:last-child{ margin-bottom:0; padding-bottom:0; }
.reg__list strong{ font-weight:500; }

.reg__privacy{
  font-family:var(--font-ui); font-size:11.5px; line-height:1.7;
  color:var(--ink-soft); border-top:1px solid var(--linen);
  padding-top:16px; margin:0;
}
.reg__privacy a{ text-decoration:underline; text-underline-offset:2px; }

/* ---- the consent tick ---- */
.reg__consent{
  display:flex; align-items:flex-start; gap:11px;
  margin:6px 0 24px; padding:14px 16px;
  border:1px solid var(--linen); background:var(--paper);
  cursor:pointer; font-family:var(--font-body); font-size:14px;
  line-height:1.5; color:var(--ink);
  text-transform:none; letter-spacing:0;
}
.reg__consent:hover{ border-color:var(--gold); }
.reg__consent input{
  width:17px; height:17px; margin:2px 0 0; flex:0 0 auto;
  accent-color:var(--gold); cursor:pointer;
}

/* ---- one column on the way down ---- */
@media (max-width:1000px){
  .reg, .authcols{ grid-template-columns:1fr; gap:44px; }
  .reg__side, .authcols__side{
    border-left:0; padding-left:0;
    border-top:1px solid var(--linen); padding-top:36px;
  }
  .reg__form .auth-card, .authcols__form .auth-card{ max-width:none; }
  .reg-figure{ max-width:420px; }
}
@media (max-width:600px){
  .reg, .authcols{ padding-bottom:60px; }
  .reg__consent{ font-size:13.5px; padding:12px 13px; }
  .reg__dims li{ font-size:13.5px; }
}

/* ---- 41. PASSWORDS THAT MATCH, AND THE CAPTCHA SLOT  (v5.3.12) ---- */

.field__note{
  display:block; margin-top:6px;
  font-family:var(--font-ui); font-size:11px; letter-spacing:.06em;
  color:#7a3f28;
}
.field input.is-mismatch{ border-bottom-color:#8a4b32; }
.field input.is-mismatch:focus{ border-bottom-color:#8a4b32; }

/* The widget only appears when a provider is configured, so this styles a
   space that is usually empty. */
.bot-widget{ margin:4px 0 22px; }

/* ============================================================
   41. BOT PROTECTION  (v5.3.12)
   ------------------------------------------------------------
   The honeypot needs no CSS: bot_fields() carries its own inline
   positioning, so it stays off screen even if this stylesheet
   fails to load — which is the one moment a trap must not become
   a visible field asking a customer to "leave this blank".

   What is left is the provider's widget, when one is configured.
   ============================================================ */

.bot-widget{ margin:4px 0 22px; }
.bot-widget iframe{ max-width:100%; }
.bot-note{
  font-family:var(--font-ui); font-size:10.5px; line-height:1.7;
  letter-spacing:.04em; color:var(--ink-soft); margin:0 0 20px;
}
.bot-note a{ text-decoration:underline; text-underline-offset:2px; }

/* The live "those do not match yet" hint beside the second password field.
   The markup uses [data-pw-match], so style that rather than inventing a
   class the page does not carry. */
[data-pw-match]{
  display:block; margin-top:6px;
  font-family:var(--font-ui); font-size:11px; line-height:1.5;
  letter-spacing:.04em; color:#8a4b32;
}
[data-pw-match][hidden]{ display:none; }
[data-pw-match].is-ok{ color:#3f5236; }
.field__note{
  display:block; margin-top:6px;
  font-family:var(--font-ui); font-size:11px; line-height:1.5;
  letter-spacing:.04em; color:var(--ink-soft);
}

/* ============================================================
   42. SIGNING IN  (v5.3.15)
   ------------------------------------------------------------
   Two things. The route to creating an account used to be a
   sentence in soft grey with an undecorated link inside it — a
   footnote where a door was needed. And the space to the right
   of a four-field form was empty on a page most people reach
   while expecting to be recognised.
   ============================================================ */

/* ---- the way in for someone who has not been here before ---- */
.auth-new{
  border:1px solid var(--linen);
  background:var(--paper);
  padding:20px 22px;
  margin:30px 0 0;
}
.auth-new__lead{
  font-family:var(--font-ui); font-size:10.5px; letter-spacing:.2em;
  text-transform:uppercase; color:var(--gold);
  margin:0 0 14px;
}
/* .textlink already carries the arrow, the tracking and the underline, so the
   link reads as a link without inventing a second style for it. */
.auth-new .textlink{ margin-bottom:2px; }
.auth-new__note{
  font-size:13.5px; line-height:1.6; color:var(--ink-soft);
  margin:16px 0 0;
}

/* ---- welcome back ---- */
.si__head{
  font-family:var(--font-display); font-weight:500;
  font-size:clamp(24px,2.5vw,33px); line-height:1.16;
  margin:0 0 16px;
}
.si__lead{ font-size:15px; line-height:1.62; margin:0 0 28px; }

.si__list{ list-style:none; padding:0; margin:0 0 28px; }
.si__list li{
  padding:0 0 16px 16px; margin:0 0 16px;
  border-left:2px solid var(--linen);
}
.si__list li:last-child{ margin-bottom:0; padding-bottom:0; }
.si__list strong{
  display:block; font-weight:500; font-size:15px; margin-bottom:4px;
}
.si__list span{
  display:block; font-size:14px; line-height:1.55; color:var(--ink-soft);
}

.si__foot{
  font-family:var(--font-ui); font-size:11.5px; line-height:1.7;
  color:var(--ink-soft);
  border-top:1px solid var(--linen); padding-top:16px; margin:0;
}

@media (max-width:600px){
  .si__head{ font-size:23px; }
  .auth-new{ padding:18px 18px; }
}


/* ============================================================
   43. POLICY PAGES  (v7.0)
   ------------------------------------------------------------
   The terms and the shipping pages are long, and a customer
   arrives at them looking for one specific thing. The section
   headings are set apart so the eye can find the right block
   without reading the paragraph before it — which is the whole
   job of a policy page and the reason the old <font> tags were
   there.
   ============================================================ */
.prose .policy-h{
  font-family:var(--font-display); font-weight:500;
  font-size:clamp(20px,2vw,26px); line-height:1.2;
  color:var(--maroon, #94191B);
  border-top:1px solid var(--linen);
  padding-top:30px; margin:52px 0 6px;
}
.prose .policy-h:first-of-type{ border-top:0; padding-top:0; margin-top:34px; }
.prose h3{
  font-family:var(--font-ui); font-size:11px; letter-spacing:.18em;
  text-transform:uppercase; color:var(--gold);
  font-weight:600; margin:26px 0 6px;
}
.textlink-inline{ border-bottom:1px solid var(--gold); }

/* ============================================================
   43. INSPIRATION · GARMENT · CARE  (v7)
   ------------------------------------------------------------
   Three fields where there was one paragraph. Each carries a
   small gold heading in the house's label style, so a customer
   reading for the story and a customer checking whether she can
   wash it both find their part at a glance.
   ============================================================ */

.pdp__about{ margin:26px 0 32px; }

.pdp__sec{ margin:0 0 24px; }
.pdp__sec:last-child{ margin-bottom:0; }

.pdp__sec h2{
  font-family:var(--font-ui);
  font-size:10.5px; letter-spacing:.22em; text-transform:uppercase;
  font-weight:500; color:var(--gold);
  margin:0 0 9px;
}
.pdp__sec p{
  margin:0; font-size:15px; line-height:1.68; color:var(--ink);
}

/* Care is reference rather than reading, so it sits back a little and is
   separated by a hairline instead of shouting for the same attention. */
.pdp__sec--care{
  border-top:1px solid var(--linen);
  padding-top:20px; margin-top:26px;
}
.pdp__sec--care p{ font-size:14px; color:var(--ink-soft); }

@media (max-width:600px){
  .pdp__sec p{ font-size:14.5px; }
}

/* ============================================================
   44. OPTIONAL MEASUREMENTS, AND WHAT THEY BUY  (v7)
   ------------------------------------------------------------
   The six leg and armhole dimensions are optional. That word on
   its own reads as "unimportant", which is not what it means —
   so each optional step now says what it decides, and what
   skipping it costs. She chooses knowing the trade.
   ============================================================ */

.tour-step__count .opt{
  display:inline-block; margin-left:9px;
  font-family:var(--font-ui); font-size:9.5px; letter-spacing:.18em;
  text-transform:uppercase; color:var(--gold);
  border:1px solid var(--gold); border-radius:2px;
  padding:3px 6px; vertical-align:1px;
}

.tour-step__buys{
  border-left:2px solid var(--gold);
  background:var(--paper);
  padding:14px 16px; margin:0 0 22px;
  font-size:14.5px; line-height:1.62;
}
.tour-step__buysLabel{
  display:block;
  font-family:var(--font-ui); font-size:9.5px; letter-spacing:.2em;
  text-transform:uppercase; color:var(--gold);
  margin-bottom:6px;
}
.tour-step__buysSkip{
  display:block; margin-top:9px;
  font-size:13px; color:var(--ink-soft);
}

@media (max-width:600px){
  .tour-step__buys{ padding:12px 13px; font-size:14px; }
}

/* ============================================================
   45. THE FIT SCALE, DRAWN  (v7)
   ------------------------------------------------------------
   fit_scale() computed a seven-position signed scale from the
   beginning and nothing ever drew it, so a customer read a
   sentence where she could have seen a position.
   ============================================================ */

.fitscale{ margin:22px 0 4px; }
.fitscale--legend{ border-top:1px solid var(--linen); padding-top:18px; }
.fitscale__cap{
  font-family:var(--font-ui); font-size:9.5px; letter-spacing:.2em;
  text-transform:uppercase; color:var(--gold); margin:0 0 10px;
}
.fitscale svg{ display:block; max-width:340px; }
.fitscale__note{
  font-size:13px; line-height:1.6; color:var(--ink-soft); margin:10px 0 0; max-width:52ch;
}
.fitscale__row{ margin:0 0 14px; }
.fitscale__row:last-child{ margin-bottom:0; }

/* ============================================================
   46. THE BRA SIZE PATH  (v7)
   ------------------------------------------------------------
   A second way into the bodice measurements. The tape is the
   accurate answer and stays the recommended one; this is here
   because a woman who does not have a tape to hand should not
   be turned away, and because she certainly knows her bra size.
   It fills the field with a labelled estimate. It never
   overwrites a number she measured.
   ============================================================ */

.brapath{
  border:1px solid var(--linen); background:var(--ivory);
  padding:16px 18px; margin:0 0 22px;
}
.brapath__lead{
  font-family:var(--font-ui); font-size:10px; letter-spacing:.2em;
  text-transform:uppercase; color:var(--gold); margin:0 0 8px;
}
.brapath__body{ font-size:14px; line-height:1.6; color:var(--ink-soft); margin:0 0 14px; }
.brapath__row{ display:flex; gap:12px; align-items:flex-end; flex-wrap:wrap; }
.brapath__f{ display:block; }
.brapath__f span{
  display:block; font-family:var(--font-ui); font-size:9.5px; letter-spacing:.16em;
  text-transform:uppercase; color:var(--ink-soft); margin-bottom:5px;
}
.brapath__f input, .brapath__f select{
  padding:9px 10px; border:1px solid var(--linen); background:var(--paper);
  font:14px/1.4 Georgia,serif; color:var(--ink);
}
.brapath__out{
  font-size:13.5px; line-height:1.62; color:var(--ink);
  border-left:2px solid var(--gold); padding:11px 14px; margin:14px 0 0;
  background:var(--paper);
}
.brapath__out[hidden]{ display:none; }

@media (max-width:600px){
  .brapath__row{ gap:10px; }
  .brapath__f input, .brapath__f select{ width:100%; }
}

/* An estimated value looks different from a measured one, because it is. */
input.is-estimated{
  border-color:var(--gold) !important;
  background-image:linear-gradient(to bottom, rgba(143,117,73,.07), rgba(143,117,73,.07));
}
.brapath__out[data-tone="bad"]{ border-left-color:var(--rust); }

/* ============================================================
   47. EVERY MEASUREMENT SHOWS ITS OWN DRAWING  (v7.2)
   ------------------------------------------------------------
   The review table gave each measurement a one-line description,
   which helped. What it could not do was show her.

   The panel is a row of its own spanning the whole table, and the
   figures inside are drawn at the size they had in the tour. A
   diagram she needs while correcting a number should be at least
   as legible as the one she was given when she first took the
   measurement — until v7.2 it was a thumbnail squeezed into a
   two-inch column, which was worse exactly where it mattered more.

   Built on <details>: no JavaScript, keyboard-reachable, announced
   by a screen reader for free, and a printed page keeps whichever
   panels were left open.
   ============================================================ */

.mhelp-row > td{
  padding:0 10px 14px !important;
  border-bottom:1px solid var(--linen);
}

.mhelp{ margin:0; }

.mhelp__sum{
  cursor:pointer; list-style:none;
  display:flex; align-items:baseline; gap:10px; flex-wrap:wrap;
  padding:8px 0 2px;
}
.mhelp__sum::-webkit-details-marker{ display:none; }
.mhelp__sum:focus-visible{ outline:2px solid var(--gold); outline-offset:3px; }

.mhelp__name{
  font-family:var(--font-ui); font-size:11px; letter-spacing:.1em;
  color:var(--ink-soft); border-bottom:1px dotted var(--linen);
}
.mhelp__sum:hover .mhelp__name{ color:var(--ink); border-bottom-color:var(--gold); }

.mhelp__cue{
  font-family:var(--font-ui); font-size:9px; letter-spacing:.18em;
  text-transform:uppercase; color:var(--gold);
  border:1px solid var(--linen); padding:2px 6px; white-space:nowrap;
}
.mhelp[open] .mhelp__cue{ border-color:var(--gold); }
.mhelp[open] .mhelp__cue::after{ content:" \2014 close"; }

/* Words at a readable measure on the left, the figures beside them with room
   to actually be figures. */
.mhelp__body{
  display:grid; grid-template-columns:minmax(0,1fr) minmax(320px,42%);
  gap:22px; align-items:start;
  border-left:2px solid var(--gold); background:var(--paper);
  padding:18px 20px; margin:10px 0 4px;
}

/* ---- one figure at a time, front by default ----
   Two drawings side by side gave any step with a back view half the width per
   drawing, so the bust came out smaller than the waist for no reason a customer
   could see. Switchable now, which keeps every panel and every drawing the same
   size whatever the step.

   Radio inputs and sibling selectors, so it needs no JavaScript and no :has().
   The radios are clipped rather than display:none — display:none would take
   them out of the tab order and off a screen reader, and the labels are real
   labels, so the whole control works from a keyboard for free.

   The names are prefixed with an underscore so the fit engine ignores them if
   they arrive with a submit. */
.mhelp__figs{ display:block; }

.mhelp__tabs{ display:flex; gap:6px; margin:0 0 9px; }

.mhelp__radio{
  position:absolute; width:1px; height:1px; margin:-1px; padding:0; border:0;
  overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap;
}
.mhelp__tab{
  cursor:pointer;
  font-family:var(--font-ui); font-size:9.5px; letter-spacing:.16em;
  text-transform:uppercase; color:var(--ink-soft);
  border:1px solid var(--linen); background:var(--ivory);
  padding:6px 10px;
  transition:color .2s var(--ease), border-color .2s var(--ease);
}
.mhelp__tab:hover{ color:var(--ink); border-color:var(--gold); }
.mhelp__radio:focus-visible + .mhelp__radio + .mhelp__tabs .mhelp__tab,
.mhelp__radio:focus-visible ~ .mhelp__tabs .mhelp__tab{ outline:none; }

/* Which tab looks chosen, and which figure shows. Two views is the most any
   step has; a third would want one more pair of these. */
.mhelp__figs--tabbed .mhelp__fig{ display:none; }
.mhelp__radio:nth-of-type(1):checked ~ .mhelp__fig:nth-of-type(1){ display:block; }
.mhelp__radio:nth-of-type(2):checked ~ .mhelp__fig:nth-of-type(2){ display:block; }
.mhelp__radio:nth-of-type(1):checked ~ .mhelp__tabs .mhelp__tab:nth-of-type(1),
.mhelp__radio:nth-of-type(2):checked ~ .mhelp__tabs .mhelp__tab:nth-of-type(2){
  color:var(--ink); border-color:var(--gold); background:var(--paper);
}
.mhelp__radio:nth-of-type(1):focus-visible ~ .mhelp__tabs .mhelp__tab:nth-of-type(1),
.mhelp__radio:nth-of-type(2):focus-visible ~ .mhelp__tabs .mhelp__tab:nth-of-type(2){
  outline:2px solid var(--gold); outline-offset:2px;
}

.mhelp__fig{
  margin:0; background:var(--ivory); border:1px solid var(--linen); padding:8px;
  /* v7.2 — the same magnifier as the tour, so these need the same box: relative
     for the corner mark, overflow hidden so the scaled drawing is clipped to the
     frame rather than spilling across the table. */
  position:relative; overflow:hidden; cursor:zoom-in;
  -webkit-tap-highlight-color:transparent;
}
.mhelp__fig svg{ display:block; width:100%; height:auto; }

.mhelp__text p{ margin:0 0 11px; font-size:14px; line-height:1.62; max-width:62ch; }
.mhelp__text p:last-child{ margin-bottom:0; }
.mhelp__lead{ font-weight:500; font-size:15px; }
.mhelp__err{ color:var(--ink-soft); }
.mhelp__err span{
  display:block; font-family:var(--font-ui); font-size:9px; letter-spacing:.18em;
  text-transform:uppercase; color:var(--rust); margin-bottom:3px;
}
.mhelp__tip{
  color:var(--ink-soft); font-size:13px;
  border-top:1px solid var(--linen); padding-top:9px;
}

.fit-name{ font-weight:500; font-size:15px; display:block; }

@media (max-width:860px){
  .mhelp__body{ grid-template-columns:1fr; }
  .mhelp__figs{ max-width:420px; }
}

