/* ===== Tokens: black and white, from the P mark ===== */
:root{
  --bg:#000000;        /* page base, matches the logo */
  --surface:#111111;   /* alternate bands */
  --raised:#1E1E1E;    /* tags, inputs, cards */
  --text:#FFFFFF;
  --soft:#A3A3A3;      /* secondary text */
  --line:rgba(255,255,255,.18);
  --ink:#000000;       /* text on white */
  --display:"Archivo", "Helvetica Neue", Arial, sans-serif;
  --font-instrument-serif:"Instrument Serif";
  --serif:"Instrument Serif", Georgia, "Times New Roman", serif;
  --body:"Montserrat", system-ui, -apple-system, "Segoe UI", Arial, sans-serif;
  --wrap:76rem;
  --pad:clamp(1.25rem,4vw,2.5rem);
  color-scheme:dark;
}
*,*::before,*::after{box-sizing:border-box}
html{font-synthesis:none;scroll-behavior:smooth;scroll-padding-top:env(safe-area-inset-top,0px)}
body{margin:0;background:var(--bg);color:var(--text);font-family:var(--body);font-size:1.05rem;line-height:1.7;-webkit-font-smoothing:antialiased}
img{max-width:100%;display:block}
a{color:inherit}
:focus-visible{outline:3px solid var(--text);outline-offset:3px;border-radius:2px}
.wrap{max-width:var(--wrap);margin:0 auto;padding:0 var(--pad)}
.band{padding:clamp(3.5rem,10vw,7.5rem) 0}
.band-surface{background:var(--surface)}
h1,h2,h3{font-family:var(--display);font-weight:700;line-height:1.1;margin:0;letter-spacing:0}
h2{font-size:clamp(2.1rem,5vw,3.4rem);font-weight:700;letter-spacing:0;max-width:18ch}
h3{font-size:1.35rem;font-weight:600;line-height:1.2}
p{margin:0 0 1rem;max-width:60ch}
.lede{font-size:clamp(1.15rem,2vw,1.35rem);line-height:1.55;font-weight:500}
.muted{color:var(--soft)}
.ph{background:rgba(255,255,255,.1);outline:1px dashed rgba(255,255,255,.5);outline-offset:1px;padding:0 .15em;border-radius:2px} /* placeholder marker: delete when real */

/* Buttons */
.btn{display:inline-block;font-family:var(--body);font-weight:600;font-size:1rem;text-decoration:none;padding:.9rem 1.4rem;border-radius:999px;border:2px solid var(--text);transition:background .2s,color .2s,border-color .2s}
.btn-solid{background:var(--text);border-color:var(--text);color:var(--ink)}
.btn-solid:hover{background:transparent;color:var(--text)}
.btn-line:hover{background:var(--text);color:var(--ink)}
.btn-dark{background:var(--ink);border-color:var(--ink);color:var(--text)}
.btn-dark:hover{background:#333;border-color:#333}

/* Nav */
.nav{display:flex;justify-content:space-between;align-items:center;padding-top:calc(1.25rem + env(safe-area-inset-top,0px));padding-bottom:1.25rem}
.logo{display:flex;align-items:center;gap:.7rem;font-family:var(--display);font-weight:700;font-size:1.15rem;text-decoration:none}
.logo img{height:34px;width:auto}
.nav ul{list-style:none;display:flex;gap:1.75rem;margin:0;padding:0;align-items:center}
.nav a{text-decoration:none;font-family:var(--body);font-weight:600;font-size:.95rem}
.nav ul a:not(.btn):hover{text-decoration:underline;text-underline-offset:4px}
.nav .btn{padding:.55rem 1.1rem}
@media (max-width:760px){.nav li:not(:last-child){display:none}}

/* Hero: the one orchestrated moment. Outline (half-formed) fills solid (born). */
.hero{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);gap:2rem;align-items:end;padding-top:clamp(2rem,6vw,4rem)}
.hero-copy{padding-bottom:clamp(3rem,8vw,6rem)}
.born .accent{font-family:var(--font-instrument-serif), "Instrument Serif", Georgia, serif;font-style:italic;font-weight:400;letter-spacing:-.02em;font-size:1.06em}
.hero{container-type:inline-size}
.hero-copy{container-type:inline-size;align-self:center;padding-top:clamp(2rem,6vw,4rem)}
/* "born properly." is ~6.9em wide, so 14cqi keeps it on one line in whatever width the headline has */
.hero{--hs:clamp(2rem,6vw,5.9rem)}
@supports (font-size:1cqi){.hero,.hero-copy{--hs:clamp(2rem,14cqi,5.9rem)}}
.born .line2{white-space:nowrap}
.born{font-weight:800;font-size:var(--hs);line-height:1.02;letter-spacing:0}
.born .w{color:transparent;-webkit-text-stroke:2px var(--text);background:linear-gradient(var(--text),var(--text)) left/0% 100% no-repeat;-webkit-background-clip:text;background-clip:text;animation:fill .75s cubic-bezier(.65,0,.25,1) forwards;animation-delay:calc(.7s + var(--d) * .32s)}
.born .dot{display:inline-block;width:.2em;height:.2em;border-radius:50%;background:var(--text);margin-left:.04em;transform:scale(0);animation:pop .55s cubic-bezier(.3,1.6,.5,1) forwards;animation-delay:2.2s}
@keyframes fill{99%{color:transparent}to{background-size:100% 100%;color:var(--text);-webkit-text-stroke-color:transparent}}
@keyframes pop{to{transform:scale(1)}}
@supports not ((background-clip:text) or (-webkit-background-clip:text)){.born .w{color:var(--text);-webkit-text-stroke:0}}
.hero .lede{font-size:1rem;font-weight:500;line-height:1.7;margin-top:2rem;max-width:40ch}
.actions{display:flex;flex-wrap:wrap;gap:.75rem;margin-top:2rem}
.hero-photo{position:relative;align-self:end}
.hero-photo img{position:relative;z-index:1;width:100%;height:auto;max-height:90vh;object-fit:contain;object-position:bottom}
@media (max-width:860px){
  /* Mobile: portrait first with the headline set into its faded bottom, then intro, lede, buttons */
  .hero{grid-template-columns:1fr;gap:0;padding-top:.5rem}
  .hero-copy{display:contents}
  .hero-photo{grid-row:1;grid-column:1;margin:0 calc(-1 * var(--pad))}
  .hero-photo::after{content:"";position:absolute;left:0;right:0;bottom:0;height:48%;background:linear-gradient(to bottom,transparent,rgba(0,0,0,.75) 45%,#000 85%);z-index:1}
  .hero-photo img{max-height:none;width:100%}
  .born{grid-row:1;grid-column:1;align-self:end;position:relative;z-index:2;margin-bottom:.25rem}
  .hero{--hs:clamp(2rem,11.5vw,4rem)}
  .born{text-align:center}
  .hero .lede{grid-row:2;margin:1.25rem auto 0;text-align:center}
  .hero-copy .actions{grid-row:3;margin-bottom:1rem}
  .hero-copy .actions{flex-wrap:nowrap;gap:.6rem}
  .hero-copy .actions .btn{flex:1 1 0;text-align:center;padding:.8rem .4rem;font-size:.9rem;white-space:nowrap}
}

/* Pillars: Brand, Story, Store */
.pillars-head{display:flex;flex-wrap:wrap;justify-content:space-between;gap:1.5rem;align-items:end;margin-bottom:3rem}
.pillar{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);gap:1.5rem 3rem;align-items:center;padding:2.25rem 0;border-top:1px solid var(--line)}
.pillar:last-child{border-bottom:1px solid var(--line)}
.pillar-word{font-family:var(--display);font-weight:700;font-size:clamp(3.2rem,8.5vw,6.5rem);line-height:1;color:transparent;-webkit-text-stroke:2px var(--text)}
.pillar ul{list-style:none;padding:0;margin:1rem 0 0}
.pillar li{padding:.45rem 0;border-top:1px dashed var(--line)}
@media (max-width:760px){.pillar{grid-template-columns:1fr}}
.pillar-tabs{display:none}
.pillar .lede{margin:0}
@media (max-width:760px){
  .js .pillar-tabs{display:flex;justify-content:space-between;gap:.5rem;margin-bottom:1.5rem}
  .pillar-tabs button{flex:1 1 0;min-width:0;background:none;border:0;padding:.35rem 0;cursor:pointer;font-family:var(--display);font-weight:700;font-size:clamp(1.35rem,7.4vw,2.1rem);line-height:1;text-align:center;color:transparent;-webkit-text-stroke:1.2px var(--text);transition:color .35s}
  .pillar-tabs button:first-child{text-align:left}
  .pillar-tabs button:last-child{text-align:right}
  .pillar-tabs button[aria-selected="true"]{color:var(--text)}
  .js .pillar{display:none;padding:1.5rem 0 0;border-bottom:0}
  .js .pillar.is-active{display:block}
  .js .pillar .pillar-word{display:none}
}

/* Work stories */
.stories{margin-top:3rem;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0 2.5rem}
.story{padding:1.75rem 0;border-top:2px solid var(--text)}
.story .tag{display:inline-block;font-family:var(--body);font-weight:600;font-size:.8rem;background:var(--raised);color:var(--text);padding:.2rem .65rem;border-radius:999px;margin-bottom:.9rem}
.story h3{margin-bottom:.6rem}
.swipe{display:none}
@media (max-width:760px){
  .swipe{display:block;margin-top:.75rem}
  .stories{display:flex;gap:1rem;overflow-x:auto;scroll-snap-type:x mandatory;margin:1.75rem calc(-1 * var(--pad)) 0;padding:0 var(--pad) .5rem;scroll-padding-left:var(--pad)}
  .story{flex:0 0 84%;scroll-snap-align:start;background:var(--surface);border-top:0;border-radius:1rem;padding:1.5rem}
}

/* Speaking */
.speak{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:3rem;align-items:start;margin-top:3rem}
.talks{list-style:none;margin:0;padding:0}
.talks li{padding:1.25rem 0;border-top:1px solid var(--line)}
.talks li:last-child{border-bottom:1px solid var(--line)}
.talks strong{display:block;font-family:var(--display);font-size:1.3rem;line-height:1.25;margin-bottom:.25rem}
.book{background:var(--text);color:var(--ink);padding:2rem;border-radius:1.25rem}
.book img{height:44px;width:auto;margin-bottom:1.25rem}
.book h3{margin-bottom:.75rem}
.book .btn{margin-top:.5rem}
@media (max-width:820px){.speak{grid-template-columns:1fr}}

/* My story */
.about{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:clamp(2rem,5vw,4.5rem);align-items:start}
.about h2{max-width:12ch}
@media (max-width:760px){.about{grid-template-columns:1fr}}

/* Now */
.now{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1.5rem;margin-top:3.5rem;max-width:56rem}
.now:has(> div:nth-child(2):last-child){grid-template-columns:repeat(2,minmax(0,1fr))}
.now div{border-top:2px solid var(--text);padding-top:1rem}
.now h3{font-size:1.05rem;margin-bottom:.4rem}
.now p{font-size:1.02rem}
@media (max-width:900px){.now{grid-template-columns:repeat(2,minmax(0,1fr))}.now div:first-child{grid-column:1/-1}}


/* Work with me */
.offers{margin-top:3rem}
.offer{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.3fr) auto;gap:1.5rem 2.5rem;align-items:center;padding:2rem 0;border-top:1px solid var(--line)}
.offer:last-child{border-bottom:1px solid var(--line)}
.offer h3{font-size:clamp(1.4rem,2.6vw,1.9rem);}
.offer p{margin:0}
@media (max-width:820px){.offer{grid-template-columns:1fr auto;grid-template-areas:"t b" "p p";gap:.75rem 1rem;padding:1.5rem 0}.offer h3{grid-area:t}.offer p{grid-area:p}.offer .btn{grid-area:b;padding:.6rem 1rem;font-size:.9rem}}

/* Contact + notes */
.contact{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);gap:clamp(2rem,6vw,5rem)}
.contact h2{font-weight:800;font-size:clamp(2.6rem,7vw,5rem);max-width:12ch}
form{display:grid;gap:1rem}
label{font-family:var(--body);font-weight:600;font-size:.95rem;display:grid;gap:.4rem}
input,select,textarea{font:inherit;font-size:1rem;color:var(--text);background:var(--raised);border:2px solid transparent;border-radius:.75rem;padding:.85rem 1rem;width:100%}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--text)}
textarea{min-height:8rem;resize:vertical}
.hidden{position:absolute;left:-9999px}
.notes{margin-top:3.5rem;padding-top:2.5rem;border-top:1px solid var(--line)}
.notes form{grid-template-columns:1fr auto;align-items:end;max-width:34rem}
@media (max-width:820px){.contact{grid-template-columns:1fr}}
@media (max-width:480px){.notes form{grid-template-columns:1fr}}

footer{padding:2.5rem 0 calc(2.5rem + env(safe-area-inset-bottom,0px));font-size:.95rem;border-top:1px solid var(--line)}
footer .wrap{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem}
footer .sig{display:flex;align-items:center;gap:.75rem}
footer .sig img{height:28px;width:auto}
footer ul{list-style:none;display:flex;flex-wrap:wrap;gap:1.25rem;margin:0;padding:0}

/* ===== Scroll motion =====
   Section headings get the hero's idea: they arrive as an outline and fill in.
   Everything else eases up once, in a short stagger. Only runs with JS on. */
.js .fill-in{color:transparent;-webkit-text-stroke:1.5px var(--text);background:linear-gradient(var(--text),var(--text)) left/0% 100% no-repeat;-webkit-background-clip:text;background-clip:text;transition:background-size 1s cubic-bezier(.65,0,.25,1) .15s,color 0s linear 1.15s,-webkit-text-stroke-color 0s linear 1.15s}
.js .fill-in.in{background-size:100% 100%;color:var(--text);-webkit-text-stroke-color:transparent}
.js .reveal{opacity:0;transform:translateY(18px);transition:opacity .7s ease,transform .7s cubic-bezier(.2,.7,.2,1);transition-delay:calc(var(--i,0) * 90ms)}
.js .reveal.in{opacity:1;transform:none}
.js .pillar-word.reveal{transform:translateX(-24px)}
.js .pillar-word.reveal.in{transform:none}
@media (prefers-reduced-motion:reduce){
  .js .reveal{opacity:1;transform:none;transition:none}
  .js .fill-in{color:var(--text);-webkit-text-stroke:0;background:none}
  html{scroll-behavior:auto}
  .born .w{animation:none;background-size:100% 100%}
  .born .dot{animation:none;transform:scale(1)}
}

/* ===== Mobile menu ===== */
.menu-btn{display:none;font-family:var(--body);font-weight:600;font-size:.95rem;color:var(--text);background:none;border:0;padding:.55rem .25rem;cursor:pointer}
@media (max-width:760px){
  .nav{gap:.75rem}
  .nav .nav-cta{margin-left:auto}
  .menu-btn{display:block;position:relative;z-index:60}
  .nav ul.menu{display:none}
  .menu-open .nav ul.menu{display:flex;position:fixed;inset:0;z-index:50;flex-direction:column;align-items:flex-start;justify-content:center;gap:1.1rem;padding:6rem var(--pad) 3rem;background:var(--bg)}
  .menu-open .nav ul.menu li{display:block}
  .menu-open .nav ul.menu a:not(.btn){font-family:var(--display);font-weight:700;font-size:2rem}
  .menu-open{overflow:hidden}
}
@media (min-width:761px){.nav .nav-cta{display:none}}
.nav a[aria-current="page"]{text-decoration:underline;text-underline-offset:4px}

/* ===== Inner pages ===== */
.page-head{padding-top:clamp(2.5rem,8vw,6rem);padding-bottom:clamp(2rem,4vw,3rem)}
.page-head h1{font-size:clamp(2.8rem,8vw,5.5rem);font-weight:800;line-height:1}
.page-head p{margin:1.25rem 0 0;color:var(--soft);max-width:44ch}
.filters{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:2rem}
.filters button{font-family:var(--body);font-weight:600;font-size:.95rem;color:var(--text);background:none;border:2px solid var(--line);border-radius:999px;padding:.5rem 1.1rem;cursor:pointer;transition:background .2s,color .2s,border-color .2s}
.filters button:hover{border-color:var(--text)}
.filters button[aria-pressed="true"]{background:var(--text);color:var(--ink);border-color:var(--text)}

.media{position:relative;border-radius:1rem;background:var(--surface);overflow:hidden;display:grid;place-items:center;aspect-ratio:4/3}
.media img{width:100%;height:100%;object-fit:cover;transition:transform .6s cubic-bezier(.2,.7,.2,1)}
.media.wide{aspect-ratio:16/9}
.media-ph{border:1.5px dashed rgba(255,255,255,.35);color:var(--soft);font-size:.95rem;text-align:center;padding:1rem}

.cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:3rem 2.5rem;padding-bottom:clamp(3rem,8vw,6rem)}
.card > a,.card > div{display:block;text-decoration:none;color:inherit}
.card a:hover .media img{transform:scale(1.03)}
.card a:hover .card-title{text-decoration:underline;text-underline-offset:5px}
.card-meta{display:flex;align-items:center;gap:.75rem;margin:1.1rem 0 .5rem}
.card-meta .tag{display:inline-block;font-weight:600;font-size:.8rem;background:var(--raised);padding:.2rem .65rem;border-radius:999px}
.card-meta .year{color:var(--soft);font-size:.9rem}
.card-title{font-family:var(--display);font-weight:700;font-size:clamp(1.4rem,2.4vw,1.8rem);line-height:1.15;margin:0 0 .4rem}
.card p{color:var(--soft);margin:0}
.card.is-hidden{display:none}
@media (max-width:760px){.cards{grid-template-columns:1fr;gap:2.5rem}}

/* Case study */
.back{display:inline-block;margin-bottom:2rem;font-weight:600;font-size:.95rem;text-decoration:none;color:var(--soft)}
.back:hover{color:var(--text)}
.cs-head .card-meta{margin-top:0}
.cs-meta{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1.5rem;margin:2.5rem 0 0;padding:1.5rem 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.cs-meta dt{color:var(--soft);font-size:.85rem;margin-bottom:.25rem}
.cs-meta dd{margin:0;font-weight:600}
.cs-body{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:2.5rem;padding-top:clamp(3rem,7vw,5rem);padding-bottom:clamp(3rem,7vw,5rem)}
.cs-block h2{font-size:1.35rem;font-weight:700;margin-bottom:.75rem}
.cs-block p{color:var(--soft)}
.cs-gallery{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1.25rem;padding-bottom:clamp(3rem,7vw,5rem)}
.cs-gallery .media:first-child{grid-column:1/-1;aspect-ratio:16/9}
.next{display:block;text-decoration:none;padding-top:clamp(2.5rem,6vw,4rem);padding-bottom:clamp(2.5rem,6vw,4rem);border-top:1px solid var(--line)}
.next span{display:block;color:var(--soft);font-size:.95rem;margin-bottom:.5rem}
.next strong{font-family:var(--display);font-weight:800;font-size:clamp(2rem,6vw,4rem);line-height:1}
.next:hover strong{text-decoration:underline;text-underline-offset:8px}
@media (max-width:760px){
  .cs-meta{grid-template-columns:1fr 1fr}
  .cs-body{grid-template-columns:1fr;gap:2rem}
  .cs-gallery{grid-template-columns:1fr}
}

/* Logofolio */
.logos{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:2rem 1.25rem;padding-bottom:clamp(3rem,8vw,6rem)}
.logo-tile{margin:0}
.logo-tile .mark{aspect-ratio:1;border-radius:1rem;background:var(--surface);display:grid;place-items:center;padding:20%;transition:background .3s}
.logo-tile .mark img{max-width:100%;max-height:100%;object-fit:contain}
.logo-tile:hover .mark{background:var(--raised)}
.logo-tile figcaption{display:flex;justify-content:space-between;gap:.5rem;margin-top:.75rem;font-size:.9rem}
.logo-tile figcaption span:last-child{color:var(--soft)}
@media (max-width:900px){.logos{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:560px){.logos{grid-template-columns:repeat(2,minmax(0,1fr));gap:1.5rem 1rem}}

/* Closing call to action on inner pages */
.cta-band h2{font-size:clamp(2.4rem,6vw,4.2rem);font-weight:800;max-width:14ch}
.cta-band p{margin:1.25rem 0 2rem;color:var(--soft)}

/* Homepage links under the three work cards */
.work-links{display:flex;flex-wrap:wrap;align-items:center;gap:1rem 1.5rem;margin-top:2.5rem}
.work-links a:not(.btn){font-weight:600;text-underline-offset:4px}
.story h3 a{text-decoration:none}
.story h3 a:hover{text-decoration:underline;text-underline-offset:4px}
@media (max-width:760px){
  .logo{white-space:nowrap;font-size:1rem;gap:.5rem}
  .logo img{height:30px}
  .nav .nav-cta{white-space:nowrap;padding:.45rem .85rem;font-size:.85rem}
  .menu-btn{font-size:.9rem;padding:.45rem 0}
  .filters{gap:.4rem}
  .filters button{padding:.4rem .85rem;font-size:.88rem}
}

/* ===== Smooth scroll (Lenis) ===== */
html.lenis,html.lenis body{height:auto}
html.lenis{scroll-behavior:auto}
.lenis.lenis-stopped{overflow:clip}
.lenis [data-lenis-prevent]{overscroll-behavior:contain}

/* ===== Custom cursor ===== */
.cursor-dot,.cursor-ring{position:fixed;left:0;top:0;pointer-events:none;z-index:9999;border-radius:50%;opacity:0;mix-blend-mode:difference;will-change:transform}
.cursor-dot{width:6px;height:6px;margin:-3px 0 0 -3px;background:#fff;transition:opacity .3s}
.cursor-ring{width:34px;height:34px;margin:-17px 0 0 -17px;border:1.5px solid #fff;transition:opacity .3s,width .35s cubic-bezier(.2,.7,.2,1),height .35s cubic-bezier(.2,.7,.2,1),margin .35s cubic-bezier(.2,.7,.2,1),background-color .35s}
.cursor-on .cursor-dot,.cursor-on .cursor-ring{opacity:1}
.cursor-ring.is-hover{width:70px;height:70px;margin:-35px 0 0 -35px;background:#fff}
.cursor-ring.is-down{width:24px;height:24px;margin:-12px 0 0 -12px}
.cursor-ring.is-text{opacity:0 !important}
html.has-cursor,html.has-cursor *{cursor:none}
html.has-cursor input,html.has-cursor textarea,html.has-cursor select{cursor:auto}

/* ===== Hero photo entrance ===== */
.hero-photo{overflow:hidden}
.hero-photo picture{display:block;animation:photoIn 1.5s cubic-bezier(.2,.7,.2,1) .15s both}
.hero-photo img{will-change:transform}
@keyframes photoIn{from{opacity:0;clip-path:inset(100% 0 0 0);transform:translateY(40px) scale(1.06)}to{opacity:1;clip-path:inset(0 0 0 0);transform:none}}

/* ===== Brand / Story / Store: hover fills the outline and opens the letters ===== */
@media (hover:hover){
  .pillar-word,.js .pillar-word.reveal{background:linear-gradient(var(--text),var(--text)) left/0% 100% no-repeat;-webkit-background-clip:text;background-clip:text;
    transition:opacity .7s ease,transform .7s cubic-bezier(.2,.7,.2,1),background-size .8s cubic-bezier(.65,0,.25,1),letter-spacing .8s cubic-bezier(.2,.7,.2,1);
    transition-delay:calc(var(--i,0) * 90ms),calc(var(--i,0) * 90ms),0s,0s}
  .pillar:hover .pillar-word{background-size:100% 100%;letter-spacing:.04em}
  .pillar > div:last-child{transition:opacity .7s ease,transform .6s cubic-bezier(.2,.7,.2,1)}
  .pillar:hover > div:last-child .lede{color:var(--text)}
  .pillar .lede{color:var(--soft);transition:color .4s}
}

/* ===== Spotify ===== */
.listening{margin-top:3.5rem;max-width:40rem}
.listening h3{margin-bottom:.35rem}
.listening p{margin-bottom:1rem}
.spotify{height:352px;border-radius:12px}
.spotify iframe{display:block;width:100%;height:352px;border:0;border-radius:12px}


/* ===== Logofolio: dense grid for 45+ marks, names on hover ===== */
.logos{grid-template-columns:repeat(6,minmax(0,1fr));gap:1rem}
.logo-tile{position:relative}
.logo-tile .mark{padding:22%}
.logo-tile .media-ph{font-size:.75rem}
@media (hover:hover){
  .logo-tile figcaption{position:absolute;left:0;right:0;bottom:0;margin:0;padding:.55rem .7rem;font-size:.78rem;opacity:0;transform:translateY(6px);transition:opacity .3s,transform .3s}
  .logo-tile:hover figcaption{opacity:1;transform:none}
}
@media (hover:none){.logo-tile figcaption{font-size:.75rem;margin-top:.45rem}}
@media (max-width:1100px){.logos{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media (max-width:760px){.logos{grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem}}


/* "I like ideas best when / they're still messy." sits on exactly two lines on phones.
   The longer line is ~10em wide, so 9.6cqi keeps it inside the screen. */
@media (max-width:760px){
  .about{container-type:inline-size}
  .about h2.two-line{max-width:none;font-size:clamp(1.5rem,6vw,2.1rem)}
  @supports (font-size:1cqi){.about h2.two-line{font-size:clamp(1.5rem,9.6cqi,2.1rem)}}
  .about h2.two-line span{display:block;white-space:nowrap}
}

/* Logofolio: keep every tile square whatever the logo's shape */
.logo-tile .mark{position:relative;overflow:hidden}
.logo-tile .mark img{position:absolute;inset:22%;width:56%;height:56%;max-width:none;max-height:none;object-fit:contain}

/* Logofolio: light tiles so every logo shows in its real colours.
   Most client logos are designed for white; on black, the dark ones disappeared. */
.logo-tile .mark{background:#F4F4F2;transition:transform .35s cubic-bezier(.2,.7,.2,1),box-shadow .35s}
.logo-tile .mark.on-dark{background:#1A1A1A;box-shadow:inset 0 0 0 1px var(--line)}
.logo-tile:hover .mark{background:#FFFFFF;transform:translateY(-3px)}
.logo-tile:hover .mark.on-dark{background:#222}
.logo-tile .mark img{inset:20%;width:60%;height:60%}
@media (hover:hover){
  .logo-tile figcaption{color:#111;font-weight:600}
  .logo-tile .mark.on-dark + figcaption{color:var(--text)}
}

/* ===== Watching: posters of what Peter is watching ===== */
.watching{margin-top:3.5rem}
.watching h3{margin-bottom:.35rem}
.watching > p{margin-bottom:1.25rem}
.posters{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:1.5rem 1.25rem;max-width:56rem}
.poster{display:block;text-decoration:none;color:inherit}
.poster-img{aspect-ratio:2/3;border-radius:.75rem;overflow:hidden;background:var(--surface);display:grid;place-items:center;margin-bottom:.7rem}
.poster-img img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .5s cubic-bezier(.2,.7,.2,1)}
a.poster:hover .poster-img img{transform:scale(1.04)}
.poster strong{display:block;font-family:var(--display);font-weight:600;font-size:1rem;line-height:1.25}
.poster .muted{display:block;font-size:.85rem;margin-top:.15rem}
.poster-img.media-ph,.poster-img .media-ph{font-size:.8rem}
@media (max-width:760px){
  .posters{display:flex;gap:1rem;overflow-x:auto;scroll-snap-type:x mandatory;margin:0 calc(-1 * var(--pad));padding:0 var(--pad) .5rem;scroll-padding-left:var(--pad)}
  .poster{flex:0 0 42%;scroll-snap-align:start}
}

/* Talk video link, project link */
.talk-video{display:inline-block;margin-top:.5rem;font-weight:600;font-size:.9rem;text-underline-offset:4px}
.cs-link{margin-top:1.5rem}

/* Dashboard preview: everything visible straight away */
.preview .hero-photo picture{animation:none}
.preview .born .w{animation:none;background-size:100% 100%}
.preview .born .dot{animation:none;transform:none}
