@import url('https://fonts.googleapis.com/css2?family=UnifrakturCook:wght@700&family=EB+Garamond:ital,wght@0,400;0,500;1,400&family=Inter:wght@300;400;500;600&family=JetBrains+Mono:wght@400;500&display=swap');
:root{
  --pink:#f2bccb;--pink-lt:#f8dce4;--pink-dk:#e3a0b6;
  --navy:#10192c;--navy-2:#18243d;
  --ink:#121a2b;--ink-dim:#46506a;
  --steel:#34506a;--steel-lt:#a9c0d2;
  --line:rgba(18,26,43,.16);
  --black:'UnifrakturCook','Old English Text MT',Georgia,serif;
  --serif:'EB Garamond',Georgia,serif;
  --ui:'Inter',system-ui,-apple-system,sans-serif;
  --mono:'JetBrains Mono',ui-monospace,monospace;
  --camo:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 600 400'%3E%3Cg fill='%23e9a8bd'%3E%3Cpath d='M40 60q60-50 130-10q50 40 10 80q-70 40-120 0z'/%3E%3Cpath d='M380 40q70-40 140 20q40 50-20 70q-80 10-120-40z'/%3E%3Cpath d='M200 250q80-50 150 0q50 50-10 90q-90 30-140-30z'/%3E%3Cpath d='M30 300q50-40 100 0q30 40-20 60q-60 10-80-60z'/%3E%3C/g%3E%3Cg fill='%23f7d2dc'%3E%3Cpath d='M250 80q50-30 90 10q20 40-30 55q-60 5-60-65z'/%3E%3Cpath d='M470 220q60-30 110 20q20 50-40 70q-70-10-70-90z'/%3E%3Cpath d='M90 190q40-25 80 5q15 35-30 45q-50-5-50-50z'/%3E%3C/g%3E%3Cg fill='%23dc94ad'%3E%3Cpath d='M300 320q40-20 70 10q10 30-30 40q-40-5-40-50z'/%3E%3Cpath d='M520 90q30-15 50 15q5 30-25 35q-30-10-25-50z'/%3E%3Cpath d='M150 20q30-15 55 10q5 25-25 30q-35-5-30-40z'/%3E%3C/g%3E%3C/svg%3E")}
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{background:var(--pink-lt);color:var(--ink);font-family:var(--ui);font-weight:300;font-size:16px;line-height:1.7;overflow-x:hidden;-webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none}
svg{display:block;max-width:100%}
::selection{background:var(--steel);color:var(--pink-lt)}
a:focus-visible,.btn:focus-visible{outline:2px solid var(--steel);outline-offset:4px}
.wrap{max-width:1240px;margin:0 auto;padding:0 48px}
.mono{font-family:var(--mono);font-size:12px;letter-spacing:.08em;color:var(--ink-dim)}

header{position:fixed;inset:0 0 auto;z-index:100;display:flex;align-items:center;justify-content:space-between;padding:22px 48px;border-bottom:1px solid transparent;transition:background .4s,padding .4s,border-color .4s}
header.scrolled{background:rgba(248,220,228,.94);backdrop-filter:blur(14px);padding:14px 48px;border-color:var(--line)}
.brand{display:flex;align-items:center;gap:12px}
.brand svg{width:22px;height:22px;flex-shrink:0}
.brand-title{font-family:var(--black);font-size:26px;line-height:1;color:var(--steel)}
.brand-sub{display:block;font-family:var(--mono);font-size:10.5px;letter-spacing:.1em;color:var(--ink-dim);margin-top:4px}
nav{display:flex;gap:28px}
nav a{font-family:var(--mono);font-size:12px;letter-spacing:.08em;color:var(--ink-dim);padding-bottom:4px;border-bottom:1px solid transparent;transition:color .3s,border-color .3s}
nav a:hover,nav a[aria-current]{color:var(--ink);border-color:var(--steel)}

.camo{background-color:var(--pink);background-image:linear-gradient(180deg,rgba(248,220,228,0) 55%,var(--pink-lt) 100%),var(--camo);background-size:auto,900px 600px}
.hero{min-height:88svh;display:flex;align-items:flex-end;padding:160px 0 80px}
.hero.short{min-height:60svh}
.hero h1{font-family:var(--black);font-weight:700;font-size:clamp(56px,11vw,150px);line-height:1;color:var(--steel);letter-spacing:-.01em;animation:rise 1s ease both}
.lede{font-family:var(--serif);font-size:clamp(22px,2.6vw,32px);line-height:1.4;max-width:720px;margin:24px 0 36px;animation:rise 1s ease .25s both}
.hero .mono{margin-bottom:18px}
.actions{display:flex;gap:14px;flex-wrap:wrap}
.btn{display:inline-block;font-family:var(--mono);font-size:12.5px;font-weight:500;letter-spacing:.08em;padding:15px 30px;border:1px solid var(--ink);color:var(--ink);transition:background .3s,color .3s}
.btn:hover{background:var(--ink);color:var(--pink-lt)}
.btn.primary{background:var(--navy);color:var(--pink-lt);border-color:var(--navy)}
.btn.primary:hover{background:var(--steel);border-color:var(--steel)}
@keyframes rise{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}

.thesis{padding:clamp(80px,12vw,140px) 0}
.thesis .wrap{display:grid;grid-template-columns:.8fr 1.6fr;gap:80px;align-items:start}
.label{position:sticky;top:120px}
h2{font-family:var(--black);font-weight:700;font-size:clamp(34px,4vw,54px);line-height:1.1;color:var(--steel)}
.thesis-copy p:first-child{font-family:var(--serif);font-size:clamp(26px,2.8vw,40px);line-height:1.35}
.thesis-copy p+p{margin-top:26px;font-family:var(--serif);font-size:clamp(18px,1.5vw,21px);line-height:1.8;color:var(--ink-dim);max-width:62ch}

.split{display:grid;grid-template-columns:1fr 1fr;background:var(--navy);color:var(--pink-lt)}
.panel{padding:72px 56px 80px}
.panel+.panel{background:var(--navy-2);border-left:1px solid rgba(248,220,228,.14)}
.panel .mono{color:var(--steel-lt)}
.panel h3{font-family:var(--serif);font-weight:400;font-size:clamp(34px,3.4vw,48px);line-height:1.1;margin:10px 0 14px}
.panel>p{color:rgba(248,220,228,.78);max-width:46ch;margin-bottom:28px}
.specs{list-style:none}
.specs li{padding:18px 0;border-top:1px solid rgba(248,220,228,.14)}
.specs strong{display:block;font-weight:500;font-size:16px;color:var(--pink)}
.specs span{display:block;margin-top:4px;font-size:15px;color:rgba(248,220,228,.72);max-width:50ch}

.principles{list-style:none;max-width:720px}
.principles li{padding:22px 0;border-top:1px solid var(--line)}
.principles li:last-child{border-bottom:1px solid var(--line)}
.principles strong{display:block;font-family:var(--serif);font-weight:500;font-size:24px;color:var(--ink)}
.principles span{display:block;margin-top:4px;color:var(--ink-dim);max-width:56ch}

.contact{padding:clamp(80px,11vw,130px) 0}
.contact .wrap{max-width:860px}
.contact p{font-family:var(--serif);font-size:clamp(20px,2vw,26px);line-height:1.5;margin:18px 0 30px}

footer{background:var(--navy);color:var(--pink-lt);padding:48px 0 40px}
footer .wrap{display:flex;justify-content:space-between;align-items:flex-end;flex-wrap:wrap;gap:24px}
.foot-brand{font-family:var(--black);font-size:30px;color:var(--pink)}
.foot-meta{font-family:var(--mono);font-size:11.5px;letter-spacing:.06em;line-height:1.9;color:var(--steel-lt);text-align:right}

@media(max-width:900px){
  .wrap{padding:0 20px}
  header,header.scrolled{padding:14px 20px}
  nav{gap:18px}
  .brand-sub{display:none}
  .brand-title{font-size:22px}
  .thesis .wrap{grid-template-columns:1fr;gap:28px}
  .label{position:static}
  .split{grid-template-columns:1fr}
  .panel{padding:56px 20px 64px}
  .panel+.panel{border-left:0;border-top:1px solid rgba(248,220,228,.14)}
  .foot-meta{text-align:left}
}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important;scroll-behavior:auto!important}}

/* ---- v2: photo hero, three-column stack ---- */
.photo-hero{position:relative}
.hero-img{position:relative;height:100svh;min-height:560px}
.hero-img img{width:100%;height:100%;object-fit:cover;object-position:40% 55%}
.hero-img::after{content:'';position:absolute;inset:0;background:linear-gradient(180deg,rgba(242,188,203,.12) 0%,rgba(242,188,203,0) 40%,rgba(248,220,228,0) 82%,var(--pink-lt) 100%)}
.photo-hero .hero-copy{position:absolute;z-index:2;right:5vw;top:21%;width:min(44vw,620px)}
.photo-hero h1{font-family:var(--black);font-weight:700;font-size:clamp(46px,6.2vw,100px);line-height:1;color:var(--steel);animation:rise 1s ease both}
.slogan{font-family:var(--serif);font-style:italic;font-size:clamp(24px,2.6vw,36px);color:var(--ink);margin:16px 0 4px}
.photo-hero .lede{margin:12px 0 28px;font-size:clamp(19px,1.9vw,25px)}
.split.three{grid-template-columns:repeat(3,1fr)}
.split.three .panel{padding:64px 40px 72px}
.split.three .panel:nth-child(3){background:var(--navy);border-left:1px solid rgba(248,220,228,.14)}
.thesis-copy .principles{margin-top:36px}
@media(max-width:1100px){
  .split.three{grid-template-columns:1fr}
  .split.three .panel{padding:56px 24px 64px}
  .split.three .panel+.panel{border-left:0;border-top:1px solid rgba(248,220,228,.14)}
}
@media(max-width:900px){
  .hero-img{height:62svh;min-height:380px}
  .photo-hero .hero-copy{position:static;width:auto;padding:28px 20px 56px}
}

/* ---- v3: cathedral to the left, copy right-aligned ---- */
.hero-img{height:min(100svh,56.25vw);min-height:520px;overflow:hidden;background:linear-gradient(180deg,#d6e0ec 0%,#dbe3ef 35%,#d9e1ec 65%,#dee4ee 100%)}
.hero-img img{position:absolute;top:0;left:-20%;width:auto;height:100%;max-width:none;object-fit:fill;-webkit-mask-image:linear-gradient(to right,#000 0,#000 86%,transparent 100%);mask-image:linear-gradient(to right,#000 0,#000 86%,transparent 100%)}
.photo-hero .hero-copy{width:min(31vw,450px);top:20%;text-align:right}
.photo-hero h1{font-size:clamp(44px,5.2vw,84px)}
.photo-hero .lede{font-size:clamp(18px,1.6vw,22px)}
.photo-hero .actions{justify-content:flex-end}
@media(max-width:900px){
  .hero-img{height:62svh;min-height:380px}
  .hero-img img{left:-6%}
  .photo-hero .hero-copy{width:auto;padding:28px 20px 56px}
}

/* ---- v4: reading progress bar, title colour loop ---- */
:root{--rose:#dc7f9f}
#readingProgress{position:fixed;top:0;left:0;height:2px;width:0;background:var(--steel);z-index:9999;transition:width .1s linear}
.photo-hero h1{animation:rise 1s ease both,hue 4.5s ease-in-out infinite}
@keyframes hue{0%,100%{color:var(--steel)}50%{color:var(--rose)}}

/* ---- v5: blueprint header on About ---- */
:root{--bp:#1b191b}
.about #readingProgress{background:var(--rose)}
header.on-dark:not(.scrolled){background:linear-gradient(180deg,rgba(0,0,0,.85),rgba(0,0,0,0))}
header.on-dark:not(.scrolled) .brand-title{color:var(--steel-lt)}
header.on-dark:not(.scrolled) .brand-sub{color:rgba(248,220,228,.75)}
header.on-dark:not(.scrolled) .brand svg path{stroke:var(--steel-lt)}
header.on-dark:not(.scrolled) nav a{color:rgba(248,220,228,.8)}
header.on-dark:not(.scrolled) nav a:hover,header.on-dark:not(.scrolled) nav a[aria-current]{color:var(--pink-lt);border-color:var(--steel-lt)}
.bp-hero{background:var(--bp)}
.bp-art{position:relative;container-type:inline-size}
.bp-art img{display:block;width:100%;height:auto}
.bp-copy{position:absolute;left:13%;top:10.5%;width:37%;z-index:2;text-shadow:0 0 18px var(--bp),0 0 6px var(--bp)}
.bp-copy .mono{color:rgba(248,220,228,.72);margin-bottom:8px;font-size:clamp(11px,1cqw,15px)}
.bp-copy h1{font-family:var(--black);font-weight:700;font-size:clamp(34px,8.4cqw,170px);line-height:.95;color:var(--steel-lt);animation:rise 1s ease both}
.bp-caption{max-width:1240px;margin:0 auto;padding:26px 48px 48px}
.bp-caption p{font-family:var(--serif);font-size:clamp(19px,1.9vw,25px);line-height:1.45;color:var(--pink-lt);max-width:760px;animation:rise 1s ease .25s both}
@media(max-width:900px){
  .bp-copy{position:static;width:auto;padding:24px 20px 0}
  .bp-copy h1{font-size:clamp(52px,14cqw,90px)}
  .bp-caption{padding:14px 20px 40px}
}

/* ---- v6: vault section ---- */
:root{--rose-hi:#ee8fb0;--steel-xl:#bcd0e0}
.vault{position:relative;isolation:isolate;padding:clamp(80px,11vw,140px) 0;background:#101a2d url(vault.jpg) 60% center/cover no-repeat}
.vault::before{content:'';position:absolute;inset:0;z-index:-1;background:linear-gradient(90deg,rgba(16,25,44,.93) 0%,rgba(16,25,44,.82) 50%,rgba(16,25,44,.4) 100%)}
.vault .mono{color:var(--steel-xl);margin-bottom:28px}
.oneliners{list-style:none;max-width:780px}
.oneliners li{display:grid;grid-template-columns:minmax(150px,230px) 1fr;gap:8px 32px;align-items:baseline;padding:22px 0;border-top:1px solid rgba(248,220,228,.2)}
.oneliners li:last-child{border-bottom:1px solid rgba(248,220,228,.2)}
.oneliners strong{font-family:var(--serif);font-weight:500;font-size:clamp(24px,2.3vw,32px);color:var(--pink-lt)}
.oneliners span{font-family:var(--serif);font-size:clamp(18px,1.6vw,22px);line-height:1.45;color:var(--steel-xl)}
.vault .custom{max-width:780px;margin-top:44px;font-family:var(--serif);font-style:italic;font-size:clamp(25px,2.7vw,36px);line-height:1.3;color:var(--rose-hi)}
@media(max-width:700px){.oneliners li{grid-template-columns:1fr}.vault::before{background:rgba(16,25,44,.86)}}

/* ---- v8: contact note, footer slogan ---- */
.contact-note{margin-top:22px;font-family:var(--mono);font-size:12.5px;letter-spacing:.04em;color:var(--ink-dim)}
.contact-note a{text-decoration:underline;text-underline-offset:3px}
.foot-slogan{text-align:left;font-style:italic}

/* ---- v9: contact form ---- */
.contact form{display:grid;grid-template-columns:1fr 1fr;gap:16px 18px;margin-top:8px}
.contact .full{grid-column:1/-1}
.contact label{display:flex;flex-direction:column;gap:6px;font-family:var(--mono);font-size:12px;letter-spacing:.06em;color:var(--ink-dim)}
.contact input,.contact select,.contact textarea{width:100%;font-family:var(--ui);font-size:15.5px;font-weight:400;color:var(--ink);background:rgba(248,220,228,.78);border:1px solid rgba(18,26,43,.3);border-radius:0;padding:14px 16px}
.contact textarea{min-height:150px;resize:vertical}
.contact input:focus,.contact select:focus,.contact textarea:focus{outline:2px solid var(--steel);outline-offset:1px;background:#fff6f8}
.contact .hp{position:absolute;left:-9999px;width:1px;height:1px;opacity:0}
button.btn{cursor:pointer}
button.btn:disabled{opacity:.6;cursor:wait}
.form-status{font-family:var(--mono);font-size:13px;line-height:1.6;color:var(--ink)}
.form-status a{text-decoration:underline;text-underline-offset:3px}
@media(max-width:700px){.contact form{grid-template-columns:1fr}}
