/* ============================================================
   JOANNA MARLOWE — visual-storyteller portfolio (demo)
   Dark / cinematic. Built static for Cloudflare Pages.
   ============================================================ */
:root{
  --bg:#0b0b0d; --bg-2:#101013; --ink:#f3f0ea; --muted:#9a978f;
  --line:rgba(243,240,234,.14); --line-2:rgba(243,240,234,.08);
  --gold:#c9a24b; --maxw:1320px;
  --serif:"Cormorant Garamond",Georgia,serif;
  --sans:"Jost",-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif;
  --script:"Pinyon Script",cursive;
  --ease:cubic-bezier(.22,1,.36,1);
}
*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);
  font-weight:300;font-size:17px;line-height:1.7;-webkit-font-smoothing:antialiased;overflow-x:hidden}
img,video{max-width:100%;display:block}
a{color:inherit;text-decoration:none}
.container{max-width:var(--maxw);margin:0 auto;padding:0 32px}
.eyebrow{font-size:11px;letter-spacing:.32em;text-transform:uppercase;color:var(--muted);font-weight:400;margin:0 0 18px}
.eyebrow.gold{color:var(--gold)}
h1,h2,h3{font-family:var(--serif);font-weight:400;letter-spacing:-.01em;line-height:1.05;margin:0}
h2.display{font-size:clamp(2.2rem,5vw,4.2rem)}
h3{font-size:1.6rem}
.lede{font-size:1.15rem;color:#cbc8c0;max-width:62ch;font-weight:300}
.muted{color:var(--muted)}
section{position:relative}

/* ---------- buttons / links ---------- */
.btn{display:inline-block;font-family:var(--sans);font-size:12px;letter-spacing:.2em;text-transform:uppercase;
  padding:15px 30px;border:1px solid var(--line);color:var(--ink);transition:.45s var(--ease);background:transparent}
.btn:hover{background:var(--ink);color:#0b0b0d;border-color:var(--ink)}
.btn.solid{background:var(--ink);color:#0b0b0d;border-color:var(--ink)}
.btn.solid:hover{background:transparent;color:var(--ink)}
.txtlink{font-size:12px;letter-spacing:.22em;text-transform:uppercase;color:var(--ink);
  border-bottom:1px solid var(--line);padding-bottom:5px;transition:.4s var(--ease)}
.txtlink:hover{border-color:var(--ink);letter-spacing:.28em}
.txtlink::after{content:" →"}

/* ---------- nav ---------- */
.nav{position:fixed;inset:0 0 auto 0;z-index:60;display:flex;align-items:center;justify-content:space-between;
  padding:26px 40px;transition:.5s var(--ease);mix-blend-mode:difference}
.nav.scrolled{background:rgba(11,11,13,.82);backdrop-filter:blur(14px);padding:16px 40px;mix-blend-mode:normal;
  border-bottom:1px solid var(--line-2)}
.brand{font-family:var(--script);font-size:34px;line-height:1;color:var(--ink);display:flex;align-items:baseline;gap:10px}
.brand small{font-family:var(--sans);font-size:11px;letter-spacing:.34em;text-transform:uppercase;color:var(--muted);font-weight:400}
.nav-links{display:flex;gap:34px;align-items:center}
.nav-links a{font-size:12px;letter-spacing:.2em;text-transform:uppercase;color:var(--ink);position:relative;padding:4px 0}
.nav-links a::after{content:"";position:absolute;left:0;bottom:0;width:0;height:1px;background:currentColor;transition:.4s var(--ease)}
.nav-links a:hover::after,.nav-links a.active::after{width:100%}
.nav-tools{display:flex;gap:20px;align-items:center}
.icon{width:20px;height:20px;stroke:currentColor;fill:none;stroke-width:1.4}
.burger{display:none;background:none;border:0;color:inherit;cursor:pointer;flex-direction:column;gap:5px;padding:6px}
.burger span{width:26px;height:1.5px;background:currentColor;transition:.4s var(--ease)}
/* mobile menu */
.mobile-menu{position:fixed;inset:0;z-index:70;background:rgba(8,8,10,.98);backdrop-filter:blur(8px);
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;opacity:0;pointer-events:none;transition:.5s var(--ease)}
.mobile-menu.open{opacity:1;pointer-events:auto}
.mobile-menu a{font-family:var(--serif);font-size:2.4rem;color:var(--ink);padding:8px}
.mobile-menu .close{position:absolute;top:24px;right:32px;font-size:30px;background:none;border:0;color:var(--ink);cursor:pointer}

/* ---------- hero ---------- */
.hero{height:100vh;min-height:620px;position:relative;display:flex;align-items:center;justify-content:center;text-align:center;overflow:hidden}
.hero video,.hero .kb{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.hero::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(8,8,10,.55) 0%,rgba(8,8,10,.25) 40%,rgba(8,8,10,.75) 100%)}
.hero-inner{position:relative;z-index:3;padding:0 24px}
.hero .signature{font-family:var(--script);font-size:clamp(4rem,13vw,11rem);line-height:.9;color:var(--ink);text-shadow:0 10px 50px rgba(0,0,0,.5)}
.hero .surname{font-family:var(--serif);font-size:clamp(1rem,2.4vw,1.7rem);letter-spacing:.5em;text-transform:uppercase;margin:6px 0 22px;color:#e9e6df}
.hero .tagline{font-size:13px;letter-spacing:.34em;text-transform:uppercase;color:#cfccc4}
.hero-control{position:absolute;left:34px;bottom:30px;z-index:4;width:44px;height:44px;border-radius:50%;
  border:1px solid var(--line);background:rgba(0,0,0,.25);color:var(--ink);cursor:pointer;display:grid;place-items:center;transition:.4s var(--ease)}
.hero-control:hover{background:rgba(255,255,255,.12)}
.scroll-cue{position:absolute;bottom:30px;left:50%;transform:translateX(-50%);z-index:4;font-size:10px;letter-spacing:.3em;text-transform:uppercase;color:var(--muted);display:flex;flex-direction:column;align-items:center;gap:10px}
.scroll-cue .bar{width:1px;height:46px;background:linear-gradient(var(--ink),transparent);animation:cue 2.4s var(--ease) infinite}
@keyframes cue{0%{transform:scaleY(0);transform-origin:top}40%{transform:scaleY(1);transform-origin:top}60%{transform:scaleY(1);transform-origin:bottom}100%{transform:scaleY(0);transform-origin:bottom}}

/* ---------- page hero (interior pages) ---------- */
.page-hero{height:62vh;min-height:440px;display:flex;align-items:flex-end;position:relative;overflow:hidden}
.page-hero img,.page-hero video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.page-hero::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(8,8,10,.5),rgba(8,8,10,.85))}
.page-hero .container{position:relative;z-index:2;padding-bottom:54px}
.page-hero h1{font-size:clamp(2.6rem,7vw,5.5rem)}

/* ---------- generic blocks ---------- */
.block{padding:120px 0}
.block.tight{padding:80px 0}
.split{display:grid;grid-template-columns:1fr 1fr;gap:70px;align-items:center}
.lead-row{display:flex;justify-content:space-between;align-items:flex-end;gap:30px;margin-bottom:54px;flex-wrap:wrap}

/* full-bleed media section with floating content */
.bleed{min-height:88vh;display:flex;align-items:center;position:relative;overflow:hidden;padding:90px 0}
.bleed > img,.bleed > video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.bleed::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(8,8,10,.82) 0%,rgba(8,8,10,.35) 60%,rgba(8,8,10,.2) 100%)}
.bleed .container{position:relative;z-index:2}

/* ---------- galleries ---------- */
.grid{display:grid;gap:18px}
.grid.c2{grid-template-columns:repeat(2,1fr)}
.grid.c3{grid-template-columns:repeat(3,1fr)}
.grid.c4{grid-template-columns:repeat(4,1fr)}
.tile{position:relative;overflow:hidden;cursor:pointer;background:var(--bg-2)}
.tile img{width:100%;height:100%;object-fit:cover;transition:transform 1.1s var(--ease),filter .6s var(--ease);filter:grayscale(1) contrast(1.04)}
.tile:hover img{transform:scale(1.06);filter:grayscale(0)}
.tile .cap{position:absolute;left:0;right:0;bottom:0;padding:22px;background:linear-gradient(transparent,rgba(0,0,0,.8));
  opacity:0;transform:translateY(14px);transition:.5s var(--ease)}
.tile:hover .cap{opacity:1;transform:none}
.tile .cap .t{font-family:var(--serif);font-size:1.3rem}
.tile .cap .s{font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--muted)}
.ar-43{aspect-ratio:4/3}.ar-32{aspect-ratio:3/2}.ar-11{aspect-ratio:1/1}.ar-34{aspect-ratio:3/4}.ar-169{aspect-ratio:16/9}
.span2{grid-column:span 2}.row2{grid-row:span 2}

/* ---------- cards (work / journal / series) ---------- */
.cards{display:grid;grid-template-columns:repeat(3,1fr);gap:34px}
.card{display:block;group:card}
.card .ph{overflow:hidden;aspect-ratio:3/2;margin-bottom:20px;background:var(--bg-2)}
.card .ph img{width:100%;height:100%;object-fit:cover;transition:transform 1.1s var(--ease),filter .6s var(--ease);filter:grayscale(1) contrast(1.04)}
.card:hover .ph img{transform:scale(1.05);filter:none}
.card .meta{font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--muted);margin-bottom:8px}
.card h3{font-size:1.5rem;margin-bottom:8px}
.card p{color:var(--muted);font-size:.97rem;margin:0}

/* ---------- stats ---------- */
.stats{display:flex;gap:64px;flex-wrap:wrap}
.stat .n{font-family:var(--serif);font-size:3.2rem;line-height:1}
.stat .l{font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--muted);margin-top:6px}

/* ---------- marquee ---------- */
.marquee{overflow:hidden;border-top:1px solid var(--line-2);border-bottom:1px solid var(--line-2);padding:30px 0}
.marquee .track{display:flex;gap:60px;white-space:nowrap;animation:slide 36s linear infinite;width:max-content}
.marquee span{font-family:var(--serif);font-size:clamp(1.6rem,3vw,2.6rem);color:var(--muted)}
.marquee span::after{content:"·";margin-left:60px;color:var(--gold)}
@keyframes slide{to{transform:translateX(-50%)}}

/* ---------- quote ---------- */
.quote{text-align:center;padding:140px 0}
.quote blockquote{font-family:var(--serif);font-size:clamp(1.8rem,4vw,3rem);line-height:1.3;max-width:18ch;margin:0 auto;font-style:italic;font-weight:300}
.quote cite{display:block;margin-top:30px;font-style:normal;font-size:11px;letter-spacing:.24em;text-transform:uppercase;color:var(--muted)}

/* ---------- forms ---------- */
.field{position:relative;margin-bottom:30px}
.field input,.field textarea{width:100%;background:transparent;border:0;border-bottom:1px solid var(--line);
  color:var(--ink);font-family:var(--sans);font-size:1rem;padding:12px 0;outline:none;transition:.4s}
.field textarea{resize:vertical;min-height:90px}
.field input:focus,.field textarea:focus{border-color:var(--ink)}
.field label{position:absolute;left:0;top:12px;color:var(--muted);font-size:1rem;pointer-events:none;transition:.3s var(--ease)}
.field input:focus+label,.field input:not(:placeholder-shown)+label,
.field textarea:focus+label,.field textarea:not(:placeholder-shown)+label{top:-14px;font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--muted)}

/* ---------- footer ---------- */
footer{border-top:1px solid var(--line-2);padding:90px 0 40px;background:var(--bg-2)}
.foot-grid{display:grid;grid-template-columns:1.4fr 1fr 1.3fr;gap:50px;margin-bottom:70px}
.foot-grid .brand{font-size:46px}
footer h4{font-size:11px;letter-spacing:.24em;text-transform:uppercase;color:var(--muted);font-family:var(--sans);font-weight:400;margin:0 0 22px}
footer ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}
footer ul a:hover{color:var(--gold)}
.foot-form{display:flex;border-bottom:1px solid var(--line)}
.foot-form input{flex:1;background:none;border:0;color:var(--ink);padding:12px 0;outline:none;font-family:var(--sans)}
.foot-form button{background:none;border:0;color:var(--ink);cursor:pointer;letter-spacing:.2em;text-transform:uppercase;font-size:11px}
.foot-bottom{display:flex;justify-content:space-between;align-items:center;gap:20px;padding-top:30px;border-top:1px solid var(--line-2);color:var(--muted);font-size:12px;letter-spacing:.06em;flex-wrap:wrap}
.socials{display:flex;gap:22px}.socials a{font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}
.socials a:hover{color:var(--ink)}

/* ---------- reveal animation ---------- */
.reveal{opacity:0;transform:translateY(38px);transition:opacity 1s var(--ease),transform 1.1s var(--ease)}
.reveal.in{opacity:1;transform:none}
.reveal.d1{transition-delay:.12s}.reveal.d2{transition-delay:.24s}.reveal.d3{transition-delay:.36s}

/* ---------- Ken Burns ---------- */
.kb{animation:kb 22s ease-in-out infinite alternate}
@keyframes kb{from{transform:scale(1.04) translate(0,0)}to{transform:scale(1.16) translate(-2%,-2%)}}

/* ---------- lightbox ---------- */
.lb{position:fixed;inset:0;z-index:90;background:rgba(6,6,8,.96);display:none;align-items:center;justify-content:center}
.lb.open{display:flex}
.lb img{max-width:90vw;max-height:86vh;object-fit:contain;box-shadow:0 30px 80px rgba(0,0,0,.6)}
.lb button{position:absolute;background:none;border:0;color:var(--ink);cursor:pointer;font-size:30px;padding:18px}
.lb .x{top:18px;right:24px}.lb .prev{left:18px;top:50%;transform:translateY(-50%);font-size:46px}
.lb .next{right:18px;top:50%;transform:translateY(-50%);font-size:46px}

/* ---------- responsive ---------- */
@media(max-width:1000px){
  .split{grid-template-columns:1fr;gap:40px}
  .grid.c4{grid-template-columns:repeat(2,1fr)}
  .cards{grid-template-columns:repeat(2,1fr)}
  .foot-grid{grid-template-columns:1fr 1fr;gap:40px}
}
@media(max-width:680px){
  body{font-size:16px}.container{padding:0 22px}.block{padding:80px 0}
  .nav{padding:18px 22px}.nav.scrolled{padding:14px 22px}
  .nav-links,.nav-tools .search{display:none}.burger{display:flex}
  .grid.c3,.grid.c2,.grid.c4,.cards{grid-template-columns:1fr}.span2{grid-column:auto}
  .stats{gap:36px}.foot-grid{grid-template-columns:1fr}.bleed::after{background:linear-gradient(rgba(8,8,10,.5),rgba(8,8,10,.85))}
  .hero-control{left:18px}
}


/* ============ philpenman-match overrides ============ */
/* full-name signature logo — both names equal */
.brand{font-family:var(--script);font-size:30px;line-height:1;letter-spacing:0;white-space:nowrap}
.brand small{display:none}
.nav.scrolled .brand{font-size:25px}
.foot-grid .brand{font-size:40px}

/* intro splash: black -> signature draws in -> dismiss on scroll/time */
.splash{position:fixed;inset:0;z-index:200;background:#000;display:flex;align-items:center;justify-content:center;
  transition:opacity 1.2s var(--ease),transform 1.2s var(--ease)}
.splash.done{opacity:0;transform:translateY(-10%);pointer-events:none}
.splash .sig{font-family:var(--script);font-size:clamp(3rem,10vw,8rem);color:#f3f0ea;line-height:1;white-space:nowrap;
  clip-path:inset(0 100% 0 0);animation:sigdraw 2.1s var(--ease) .25s forwards}
@keyframes sigdraw{to{clip-path:inset(0 -3% 0 0)}}
.splash .hint{position:absolute;bottom:40px;left:50%;transform:translateX(-50%);font-size:10px;letter-spacing:.34em;
  text-transform:uppercase;color:#6f6f6f;opacity:0;animation:hintin .9s ease 2.5s forwards}
@keyframes hintin{to{opacity:.85}}
html.splash-lock,html.splash-lock body{overflow:hidden;height:100%}

/* clean dimmed hero, no overlaid title (signature lives in the intro) */
.hero::after{background:linear-gradient(180deg,rgba(8,8,10,.30),rgba(8,8,10,.18) 50%,rgba(8,8,10,.72))}
.hero video{opacity:.86}

/* minimal section rows (label + thin rule, like the source) */
.row-label{font-size:13px;letter-spacing:.04em;color:var(--ink);font-family:var(--sans);font-weight:400;
  padding-bottom:24px;border-bottom:1px solid var(--line);margin-bottom:46px}
.row-label.light{color:#fff}
.exitem{border-top:1px solid var(--line);padding-top:26px}
.exitem .exdate{font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--muted);margin-bottom:18px}
.exitem h3{font-size:1.7rem;margin-bottom:16px}
.exitem p{color:var(--muted);font-size:.97rem;margin:0;font-weight:300}
.pubgrid{gap:30px}
.pub .cover{aspect-ratio:3/4;overflow:hidden;margin-bottom:16px;box-shadow:0 18px 50px rgba(0,0,0,.5)}
.pub .cover img{width:100%;height:100%;object-fit:cover;filter:grayscale(1) contrast(1.05);transition:transform 1s var(--ease)}
.pub:hover .cover img{transform:scale(1.05)}
.pub h3{font-size:1.3rem;margin-bottom:4px}
.pub p{color:var(--muted);font-size:12px;letter-spacing:.1em;text-transform:uppercase;margin:0 0 14px}
.intro-bio .lede{font-size:clamp(1.15rem,2vw,1.5rem);color:#e7e4dd}
