/* Maison Lynx — base design system (extracted from index.html 2026-07-14, unchanged) */
/* ============ TOKENS ============ */
:root{
  --paper:#FAF7F1;        /* warm near-white */
  --cream:#F1E9DC;
  --sand:#E6D9C6;
  --beige:#D9C6AC;
  --oak:#C6A277;          /* light oak — accent, used sparingly */
  --warm-grey:#9C948A;
  --ink:#2A2621;          /* charcoal text */
  --ink-soft:#5A5249;     /* warm body grey */
  --hair:rgba(42,38,33,.16);

  --serif:'Fraunces', Georgia, 'Times New Roman', serif;
  --sans:'Instrument Sans', system-ui, -apple-system, sans-serif;

  --pad: clamp(1.5rem, 7vw, 8rem);   /* generous side margins */
  --maxw: 1500px;
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{
  background:var(--paper);
  color:var(--ink);
  font-family:var(--sans);
  font-size:clamp(1rem,.55vw + .85rem,1.125rem);
  line-height:1.7;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
  overflow-x:hidden;
}
h1,h2,h3{font-family:var(--serif);font-weight:400;line-height:1.05;letter-spacing:-.01em}
a{color:inherit;text-decoration:none}
img{max-width:100%;display:block}

/* quiet editorial link */
.qlink{
  font-family:var(--sans);font-size:.82rem;font-weight:500;
  letter-spacing:.14em;text-transform:uppercase;
  display:inline-block;padding-bottom:.35em;
  border-bottom:1px solid var(--ink);
  transition:opacity .4s, letter-spacing .4s, transform .16s cubic-bezier(.23,1,.32,1);
}
.qlink:hover{opacity:.55;letter-spacing:.2em}
.qlink:active{transform:scale(.97)}

.eyebrow{
  font-family:var(--sans);font-size:.72rem;font-weight:500;
  letter-spacing:.32em;text-transform:uppercase;color:var(--warm-grey);
}
.num{font-family:var(--serif);font-size:.9rem;color:var(--oak);letter-spacing:.05em}

/* ============ placeholder art (intentional warm surfaces) ============ */
.ph{
  position:relative;overflow:hidden;background:var(--cream);
  border:1px solid var(--hair);
}
.ph::before{
  content:"";position:absolute;inset:0;
  background:
    radial-gradient(120% 90% at 78% 18%, rgba(255,255,255,.65), transparent 55%),
    radial-gradient(140% 120% at 15% 95%, var(--beige), transparent 60%),
    linear-gradient(150deg, var(--sand), var(--cream));
}
.ph::after{
  content:attr(data-label);position:absolute;left:50%;top:50%;
  transform:translate(-50%,-50%);
  font-family:var(--sans);font-size:.66rem;letter-spacing:.28em;text-transform:uppercase;
  color:rgba(42,38,33,.35);white-space:nowrap;
}
/* real imagery — sits above the warm fallback gradient */
.ph img{position:relative;z-index:1;width:100%;height:100%;object-fit:cover;display:block}
.ph:has(img)::after{content:none}    /* hide placeholder label once an image is present */

/* ============ NAV ============ */
nav{
  position:fixed;top:0;left:0;right:0;z-index:50;
  display:flex;align-items:center;justify-content:space-between;
  padding:1.4rem var(--pad);
  transition:background .45s ease, box-shadow .45s ease;
  mix-blend-mode:normal;
}
nav.scrolled{background:rgba(250,247,241,.85);backdrop-filter:blur(12px);box-shadow:0 1px 0 var(--hair)}
.brand{font-family:var(--serif);font-size:1.15rem;letter-spacing:.22em;text-transform:uppercase;font-weight:400}
.navlinks{display:flex;gap:2.6rem}
.navlinks a{font-size:.74rem;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-soft);transition:color .3s}
.navlinks a:hover{color:var(--ink)}
@media(max-width:760px){.navlinks{display:none}}

/* ============ HERO ============ */
.hero{position:relative;height:100svh;min-height:600px;width:100%;overflow:hidden}
.hero::before{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(90deg, rgba(248,244,236,.72) 0%, rgba(248,244,236,.22) 22%, transparent 40%),
             linear-gradient(0deg, rgba(248,244,236,.62) 0%, transparent 46%),
             linear-gradient(180deg, rgba(248,244,236,.7) 0%, rgba(248,244,236,.15) 12%, transparent 22%)}
.hero .ph{position:absolute;inset:0;border:none}
.hero .ph::before{
  background:
    radial-gradient(90% 70% at 72% 22%, rgba(255,251,244,.9), transparent 55%),
    radial-gradient(120% 100% at 20% 100%, var(--beige), transparent 62%),
    linear-gradient(155deg, #EFE3D0 0%, var(--sand) 55%, #CDB79A 100%);
}
.hero-copy{
  position:absolute;left:var(--pad);bottom:clamp(3rem,9vh,7rem);z-index:2;
  max-width:min(46rem,80vw);
}
.hero-copy h1{
  font-size:clamp(2.6rem,6.4vw,5.6rem);
  font-weight:400;letter-spacing:-.02em;color:var(--ink);
  margin:.6rem 0 1.6rem;
  text-shadow:0 1px 34px rgba(248,244,236,.85), 0 1px 4px rgba(248,244,236,.7);
}
.hero-copy .eyebrow{color:var(--ink);text-shadow:0 0 16px rgba(248,244,236,1),0 1px 3px rgba(248,244,236,.95)}
.hero-copy .qlink{text-shadow:0 1px 18px rgba(248,244,236,.9)}
#nav:not(.scrolled) .brand,#nav:not(.scrolled) .navlinks a{text-shadow:0 1px 16px rgba(248,244,236,.9)}
#nav:not(.scrolled) .navlinks a{color:var(--ink)}
.hero-copy h1 em{font-style:italic;font-weight:400;padding-right:.14em}
.hairline{width:1px;height:clamp(3rem,7vh,5rem);background:var(--ink);opacity:.4;margin-bottom:1.4rem}

/* ============ generic section ============ */
section{padding-block:clamp(6rem,14vh,11rem)}
.wrap{max-width:var(--maxw);margin-inline:auto;padding-inline:var(--pad)}

/* brand intro — asymmetric statement */
.intro .wrap{display:grid;grid-template-columns:1fr 1fr;gap:clamp(2rem,6vw,7rem);align-items:end}
.intro .statement{grid-column:2;font-family:var(--serif);font-weight:300;font-size:clamp(1.6rem,3vw,2.7rem);line-height:1.25;letter-spacing:-.015em}
.intro .statement em{font-style:italic;color:var(--oak)}
.intro .aside{grid-column:1;grid-row:1;color:var(--ink-soft);max-width:34ch}
@media(max-width:820px){.intro .wrap{grid-template-columns:1fr}.intro .statement,.intro .aside{grid-column:1}.intro .aside{grid-row:2;margin-top:2rem}}

/* section heading block */
.sec-head{display:flex;justify-content:space-between;align-items:flex-end;gap:2rem;margin-bottom:clamp(3rem,7vh,6rem);flex-wrap:wrap}
.sec-head h2{font-size:clamp(2rem,4.4vw,3.6rem);font-weight:400}
.sec-head p{color:var(--ink-soft);max-width:32ch}

/* ============ ESSENTIALS — editorial spreads (no grid) ============ */
.spread{
  display:grid;grid-template-columns:1fr 1fr;gap:clamp(2rem,6vw,6rem);
  align-items:center;margin-bottom:clamp(5rem,11vh,9rem);
}
.spread:last-child{margin-bottom:0}
.spread .art{aspect-ratio:4/5}
.spread.flip .art{order:2}
.spread .txt{max-width:38ch}
.spread .txt h3{font-size:clamp(1.8rem,3.3vw,2.8rem);margin:.7rem 0 1rem;font-weight:400}
.spread .txt .purpose{color:var(--ink-soft);margin-bottom:1.8rem}
@media(max-width:820px){
  .spread{grid-template-columns:1fr;gap:1.6rem;margin-bottom:5rem}
  .spread.flip .art{order:0}
  .spread .art{aspect-ratio:3/2}
}

/* ============ SIGNATURE — quieter trio ============ */
.signature{background:var(--cream)}
.trio{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(1.5rem,3vw,3rem)}
.trio .card .art{aspect-ratio:3/4;margin-bottom:1.4rem}
.trio .card h3{font-size:1.5rem;margin:.4rem 0 .5rem;font-weight:400}
.trio .card p{color:var(--ink-soft);font-size:.95rem;max-width:30ch}
@media(max-width:820px){.trio{grid-template-columns:1fr;gap:3rem}}

/* ============ MISSION ============ */
.mission{position:relative;color:var(--ink)}
.mission .band{position:relative;border-radius:2px;overflow:hidden;min-height:min(80vh,640px);display:flex;align-items:center}
.mission .band::before{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(90deg, rgba(248,244,236,.95) 0%, rgba(248,244,236,.84) 34%, rgba(248,244,236,.52) 56%, rgba(248,244,236,.16) 76%, transparent 90%),
             linear-gradient(0deg, rgba(248,244,236,.5) 0%, transparent 40%)}
.mission h2,.mission p,.mission .give,.mission .eyebrow{text-shadow:0 1px 22px rgba(248,244,236,.96),0 0 6px rgba(248,244,236,.85)}
@media(max-width:820px){.mission .band::before{background:linear-gradient(180deg, rgba(248,244,236,.84), rgba(248,244,236,.64))}}
.mission .band .ph{position:absolute;inset:0;border:none}
.mission .band .ph::before{
  background:
    radial-gradient(90% 80% at 75% 30%, rgba(255,252,246,.75), transparent 55%),
    linear-gradient(160deg,#E7DAC6,#CDB294);
}
.mission .band .inner{position:relative;z-index:2;max-width:44rem;padding:clamp(2.5rem,6vw,5rem)}
.mission h2{font-size:clamp(2rem,4.4vw,3.4rem);font-weight:400;margin:1rem 0 1.4rem}
.mission p{color:var(--ink);max-width:46ch}
.mission .give{margin-top:1.6rem;font-family:var(--serif);font-style:italic;font-size:1.25rem;color:var(--ink)}

/* ============ NEWSLETTER ============ */
.news{text-align:center}
.news .wrap{max-width:44rem}
.news h2{font-size:clamp(1.8rem,3.6vw,2.8rem);font-weight:300;margin-bottom:1rem}
.news p{color:var(--ink-soft);margin-bottom:2.4rem}
.news form{display:flex;gap:1rem;justify-content:center;flex-wrap:wrap;max-width:30rem;margin-inline:auto}
.news input{
  flex:1;min-width:200px;background:transparent;border:none;border-bottom:1px solid var(--ink);
  padding:.7rem .2rem;font-family:var(--sans);font-size:1rem;color:var(--ink);
}
.news input::placeholder{color:var(--warm-grey)}
.news input:focus{outline:none;border-color:var(--oak)}
.news button{background:none;border:none;cursor:pointer}

/* ============ FOOTER ============ */
footer{background:var(--ink);color:var(--cream);padding:clamp(4rem,8vh,6rem) var(--pad) 3rem}
.foot-top{display:flex;justify-content:space-between;gap:3rem;flex-wrap:wrap;padding-bottom:3rem;border-bottom:1px solid rgba(241,233,220,.15)}
.foot-brand{font-family:var(--serif);font-size:1.4rem;letter-spacing:.2em;text-transform:uppercase}
.foot-brand span{display:block;font-family:var(--sans);font-size:.72rem;letter-spacing:.18em;color:var(--warm-grey);margin-top:1rem;text-transform:none;max-width:26ch;line-height:1.6}
.foot-cols{display:flex;gap:clamp(2.5rem,6vw,6rem);flex-wrap:wrap}
.foot-col h4{font-family:var(--sans);font-weight:500;font-size:.72rem;letter-spacing:.22em;text-transform:uppercase;color:var(--warm-grey);margin-bottom:1.2rem}
.foot-col a{display:block;font-size:.95rem;color:var(--cream);opacity:.85;margin-bottom:.7rem;transition:opacity .3s}
.foot-col a:hover{opacity:1}
.foot-bottom{display:flex;justify-content:space-between;gap:1rem;flex-wrap:wrap;margin-top:2.5rem;font-size:.78rem;color:var(--warm-grey);letter-spacing:.05em}

/* ============ reveal ============
   FAIL-OPEN: content is visible by default. It only starts hidden when the
   page has told us JS is alive (html.js), so a script failure can never
   leave a customer looking at an empty shop. */
.js .reveal{opacity:0;transform:translateY(28px);transition:opacity 1s cubic-bezier(.2,.7,.2,1),transform 1s cubic-bezier(.2,.7,.2,1)}
.reveal.in{opacity:1;transform:none}
@media(prefers-reduced-motion:reduce){.reveal{opacity:1;transform:none;transition:none}html{scroll-behavior:auto}}
