/* ─────────────  TOKENS  ─────────────
   Two colours only. Ink is #0a0a0a, paper is #fff, plus #333 for hairlines
   inside the black playlist block. Nothing else. */
:root{
  --ink:#0a0a0a;
  --paper:#fff;
  --hair:#333;                       /* only used inside the black block */
  --display:'Archivo Black',sans-serif;
  --body:'Karla',system-ui,sans-serif;
  --hand:'Caveat',cursive;
  --mono:'JetBrains Mono',monospace;
  --edge:clamp(20px,5vw,56px);       /* page gutter */
  --wrap:1360px;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--body);text-wrap:pretty;-webkit-font-smoothing:antialiased}
a{color:var(--ink);text-decoration:none}
a:hover{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}
button{font:inherit;color:inherit}
.wrap{max-width:var(--wrap);margin:0 auto;padding:0 var(--edge)}
section[id]{scroll-margin-top:84px}

/* ─────────────  MOTION  ───────────── */
@keyframes up{from{opacity:0;transform:translateY(26px)}to{opacity:1;transform:none}}
@keyframes slide{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes blink{50%{opacity:0}}
[data-rv]{opacity:0}
[data-rv].in{animation:up .8s cubic-bezier(.2,.7,.2,1) both}
.mq{display:inline-block;white-space:nowrap;animation:slide 30s linear infinite}
@media (prefers-reduced-motion:reduce){
  .mq,.ast{animation:none!important}
  [data-rv]{opacity:1}[data-rv].in{animation:none}
}

/* ─────────────  NAV  ───────────── */
.nav{display:flex;align-items:center;justify-content:space-between;gap:20px;
  padding:18px 0 16px;border-bottom:2px solid var(--ink);
  position:sticky;top:0;background:var(--paper);z-index:30}
.brand{font-family:var(--display);font-size:19px;letter-spacing:-.01em;text-transform:uppercase;
  display:flex;align-items:baseline;gap:7px}
.brand:hover{text-decoration:none}
.brand em{font-family:var(--hand);font-size:20px;font-weight:700;font-style:normal;
  text-transform:none;letter-spacing:0}
.navlinks{display:flex;align-items:center;gap:clamp(12px,2.2vw,28px);flex-wrap:wrap}
.navlink{font-size:13px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;
  border-bottom:2px solid transparent;padding-bottom:2px}
.navlink:hover{border-bottom-color:var(--ink);text-decoration:none}
.btn{display:inline-block;font-size:13px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;
  background:var(--ink);color:var(--paper);padding:9px 15px}
.btn:hover{background:var(--paper);color:var(--ink);box-shadow:inset 0 0 0 2px var(--ink);text-decoration:none}
.btn-lg{padding:12px 20px;font-size:13.5px}

/* ─────────────  HERO  ───────────── */
.hero{padding:clamp(45px,6vh,75px) 0 80px;position:relative}
.hand{font-family:var(--hand);font-size:26px;font-weight:700}
.hero-intro{display:block;margin:0 0 12px;font-size:clamp(20px,1.7vw,27px)}
.hero-title{font-family:var(--display);font-size:clamp(58px,6.6vw,108px);line-height:.87;
  letter-spacing:-.055em;text-transform:uppercase;margin:0;font-weight:900}
.hero-line{display:block}
.hero-problems{color:transparent;-webkit-text-stroke:2.5px var(--ink);text-stroke:2.5px var(--ink)}
.hero-products{display:inline-block;color:var(--paper);background:var(--ink);padding:0 .015em .035em 0;line-height:.86}
@supports not (-webkit-text-stroke:2px black){.hero-problems{color:var(--paper);text-shadow:-2px -2px 0 var(--ink),2px -2px 0 var(--ink),-2px 2px 0 var(--ink),2px 2px 0 var(--ink)}}
.outline{-webkit-text-stroke:2px var(--ink);color:transparent}
.ast{position:absolute;right:clamp(20px,3vw,48px);top:clamp(75px,8vw,112px);font-family:var(--display);
  font-size:clamp(38px,4.2vw,60px);line-height:1;animation:spin 16s linear infinite}
.lede{font-size:clamp(16px,1.5vw,19px);line-height:1.55;max-width:44ch;margin:30px 0 0}
.hero-description{max-width:590px;font-size:clamp(17px,1.25vw,20px);margin-top:38px}
.proof-row{display:flex;gap:8px 13px;flex-wrap:wrap;margin-top:22px;font-family:var(--mono);font-size:clamp(12px,1vw,14px);letter-spacing:.04em;text-transform:uppercase}
.typed{font-family:var(--mono);font-size:13.5px;margin:20px 0 0;min-height:22px}
.caret{display:inline-block;width:8px;height:15px;background:var(--ink);vertical-align:-2px;
  animation:blink 1s steps(1) infinite}
.scrollcue{display:inline-flex;align-items:baseline;gap:8px;font-family:var(--hand);
  font-size:22px;font-weight:700;margin-top:26px;transition:gap .2s}
.scrollcue:hover{text-decoration:none;gap:14px}
.scrollcue span{font-family:var(--display);font-size:16px}

/* ─────────────  MARQUEE  ───────────── */
.marquee{overflow:hidden;background:var(--ink);color:var(--paper);padding:11px 0;
  font-family:var(--display);font-size:17px;letter-spacing:.06em;text-transform:uppercase}

/* ─────────────  SECTION HEADS  ───────────── */
.sec{padding:clamp(38px,5vw,70px) 0 0}
h2{font-family:var(--display);font-size:clamp(38px,7vw,88px);line-height:.94;
  letter-spacing:-.03em;text-transform:uppercase;margin:0}
h2.sm{font-size:clamp(28px,4vw,48px);letter-spacing:-.02em}
.sechead{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;
  flex-wrap:wrap;padding-bottom:24px}
.sechead p{font-size:15.5px;line-height:1.55;max-width:34ch;margin:0 0 8px}
.kicker{display:block;font-family:var(--mono);font-size:11px;letter-spacing:.08em;
  text-transform:uppercase;opacity:.55}

/* ─────────────  FILTERS  ───────────── */
.filters{display:flex;gap:9px;flex-wrap:wrap;align-items:center;padding-bottom:16px}
.filters .lbl{font-family:var(--mono);font-size:11.5px;letter-spacing:.08em;
  text-transform:uppercase;opacity:.55;margin-right:4px}
.chip{all:unset;cursor:pointer;font-size:13px;font-weight:700;padding:6px 14px;
  box-shadow:inset 0 0 0 2px var(--ink);background:transparent;color:var(--ink)}
.chip:hover{background:var(--ink);color:var(--paper)}
.chip[aria-pressed="true"]{background:var(--ink);color:var(--paper)}

/* ─────────────  WORK ROWS  ───────────── */
.rows{border-top:2px solid var(--ink)}
.row{border-bottom:2px solid var(--ink)}
.row[hidden]{display:none}
.rowhead{all:unset;cursor:pointer;display:flex;align-items:baseline;flex-wrap:wrap;
  gap:4px 18px;width:100%;padding:20px 4px}
.rowhead:hover{background:var(--ink);color:var(--paper)}
.row-placeholder .rowhead:hover{background:var(--paper);color:var(--ink)}
.rownum{font-family:var(--mono);font-size:12.5px;opacity:.6;width:26px;flex:none}
.rowtitle{font-family:var(--display);font-size:clamp(28px,4.4vw,50px);line-height:1;
  letter-spacing:-.02em;text-transform:uppercase;flex:1;min-width:0}
.rowtitle.outline{-webkit-text-stroke:1.5px var(--ink);color:transparent}
.rowmeta{font-family:var(--mono);font-size:11.5px;letter-spacing:.06em;text-transform:uppercase;
  opacity:.6;flex:none}
.rowsign{font-family:var(--display);font-size:24px;line-height:1;flex:none}
.rowdesc{order:3;flex:1 0 calc(100% - 44px);margin-left:44px;font-size:15px;line-height:1.35}
.detail{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);
  gap:clamp(20px,3vw,40px);padding:6px 4px 30px;align-items:start}
.detail[hidden]{display:none}
.detail .quip{display:block;font-family:var(--hand);font-size:22px;font-weight:700;margin-bottom:8px}
.detail p{font-size:16px;line-height:1.6;margin:0 0 14px}
.factstrip{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));border:2px solid var(--ink)}
.factstrip > span{padding:10px 12px;border-right:2px solid var(--ink)}
.factstrip > span:last-child{border-right:0}
.factstrip .k{display:block;font-family:var(--mono);font-size:10.5px;letter-spacing:.08em;
  text-transform:uppercase;opacity:.55}
.factstrip .v{display:block;font-weight:700;font-size:15px}
.tags{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}
.tag{font-family:var(--mono);font-size:11.5px;padding:5px 10px;box-shadow:inset 0 0 0 1.5px var(--ink)}
.links{display:flex;gap:14px;margin-top:16px;font-size:13.5px;font-weight:700;
  letter-spacing:.03em;text-transform:uppercase}
.shot{width:100%;aspect-ratio:4/3;box-shadow:inset 0 0 0 2px var(--ink);
  display:grid;place-items:center;overflow:hidden}
.shot img{width:100%;height:100%;object-fit:contain;display:block;background:var(--paper)}
.shot .ph{font-family:var(--mono);font-size:11.5px;letter-spacing:.06em;text-transform:uppercase;opacity:.4;padding:8px;text-align:center}

/* ─────────────  SKILLS  ───────────── */
.skills{display:flex;gap:10px;flex-wrap:wrap;margin-top:20px}
.skill{font-size:14px;font-weight:700;padding:8px 15px;box-shadow:inset 0 0 0 2px var(--ink)}

/* ─────────────  LIFE  ───────────── */
.lifeintro p{font-size:16px;line-height:1.6;max-width:44ch;margin:20px 0 0}
.lifecards{display:grid;grid-template-columns:repeat(auto-fit,minmax(270px,1fr));gap:22px;
  align-items:start;padding-bottom:26px}
.lcard{box-shadow:inset 0 0 0 2px var(--ink);padding:20px;transition:transform .18s}
.lcard h3{font-family:var(--display);font-size:26px;text-transform:uppercase;
  letter-spacing:-.01em;margin:6px 0 0}
.lcard p{font-size:14.5px;line-height:1.55;margin:8px 0 12px}
.lcard:nth-child(1):hover{transform:rotate(-.7deg)}
.lcard:nth-child(2):hover{transform:rotate(.7deg)}
.lcard:nth-child(3):hover{transform:rotate(-.5deg)}
.lshot{width:100%;aspect-ratio:3/2;box-shadow:inset 0 0 0 2px var(--ink);
  display:grid;place-items:center;overflow:hidden}
.lshot img{width:100%;height:100%;object-fit:cover;display:block}
.nowlist{display:grid;gap:9px;margin-top:10px;font-size:14.5px;line-height:1.45}
.nowlist > span{display:flex;gap:10px}
.nowlist .k{font-family:var(--mono);font-size:11px;text-transform:uppercase;opacity:.55;
  width:64px;flex:none;padding-top:3px}

/* playlist — the one inverted block */
.playlist{background:var(--ink);color:var(--paper);padding:clamp(22px,3vw,34px);margin-bottom:26px}
.playhead{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;
  flex-wrap:wrap;margin-bottom:18px}
.playhead .kicker{opacity:.6}
.playhead h3{font-family:var(--display);font-size:clamp(28px,4vw,44px);text-transform:uppercase;
  letter-spacing:-.02em;margin:4px 0 0}
.playhead .hand{font-size:21px}
.tracks{border-top:1px solid var(--hair)}
.track{all:unset;cursor:pointer;display:flex;align-items:center;gap:14px;width:100%;
  padding:13px 6px;border-bottom:1px solid var(--hair);box-sizing:border-box}
.track:hover{background:var(--paper);color:var(--ink)}
.track .n{font-family:var(--mono);font-size:12px;opacity:.55;width:24px;flex:none}
.track .t{flex:1;font-weight:700;font-size:16.5px;min-width:0}
.track .d{font-family:var(--mono);font-size:12px;opacity:.55}
.nowplaying{display:flex;align-items:center;gap:16px;margin-top:18px;flex-wrap:wrap}
.nowplaying .lbl{font-family:var(--mono);font-size:12px;letter-spacing:.06em;
  text-transform:uppercase;opacity:.7}
.nowplaying .name{font-weight:700;font-size:16px}
.eq{display:flex;align-items:flex-end;gap:3px;height:22px}
.eq i{display:block;width:4px;background:var(--paper);height:4px;transition:height .24s ease}

.roll{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px}
.roll > div{aspect-ratio:1;box-shadow:inset 0 0 0 2px var(--ink);transition:transform .18s;
  display:grid;place-items:center;overflow:hidden}
.roll > div img{width:100%;height:100%;object-fit:cover;display:block}
.roll > div:nth-child(1):hover{transform:rotate(-1.5deg)}
.roll > div:nth-child(2):hover{transform:rotate(1.5deg)}
.roll > div:nth-child(3):hover{transform:rotate(-1deg)}
.roll > div:nth-child(4):hover{transform:rotate(1deg)}
.ph{font-family:var(--mono);font-size:11.5px;letter-spacing:.06em;text-transform:uppercase;
  opacity:.4;padding:8px;text-align:center}

/* ─────────────  SAY HI  ───────────── */
.hi{padding:clamp(48px,7vw,96px) 0 0}
.hi h2{font-size:clamp(40px,8vw,104px)}
.hi .lede{font-size:17px;max-width:46ch;margin:24px 0 0}
.contact{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));
  border:2px solid var(--ink);margin-bottom:26px}
.contact a{display:block;padding:22px 20px;border-right:2px solid var(--ink)}
.contact a:last-child{border-right:0}
.contact a:hover{background:var(--ink);color:var(--paper);text-decoration:none}
.contact .v{display:block;font-family:var(--display);font-size:21px;text-transform:uppercase;
  margin-top:6px;word-break:break-all}
.about{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));
  gap:clamp(20px,3vw,40px);align-items:center;padding-bottom:20px}
.portrait{aspect-ratio:4/5;box-shadow:inset 0 0 0 2px var(--ink);max-width:340px;
  display:grid;place-items:center;overflow:hidden}
.portrait img{width:100%;height:100%;object-fit:cover;display:block}
.about p{font-size:16px;line-height:1.6;margin:0 0 16px}

/* ─────────────  FOOTER  ───────────── */
footer{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;
  padding:18px 0 22px;border-top:2px solid var(--ink);margin-top:30px;
  font-size:12.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase}
footer .set{display:flex;gap:16px}
footer .hand{font-size:18px;text-transform:none;letter-spacing:0}

/* ─────────────  TERMINAL (press T)  ───────────── */
.term{position:fixed;inset:0;background:rgba(10,10,10,.94);color:#f2f2f2;z-index:60;
  font-family:var(--mono);padding:clamp(20px,5vw,60px);overflow:auto}
.term[hidden]{display:none}
.term .inner{max-width:720px;font-size:13.5px;line-height:1.75}
.term .bar{display:flex;justify-content:space-between;border-bottom:1px solid var(--hair);
  padding-bottom:10px;margin-bottom:18px}
.term .bar button{all:unset;cursor:pointer;font-weight:700}
.term p{margin:0 0 2px}
.term p.gap{margin-bottom:16px}
.term .who{font-size:22px;font-weight:700;margin-bottom:16px}
.term a{color:#f2f2f2}
.term .caret{background:#f2f2f2}
.dim{opacity:.5}
.dim85{opacity:.85}

/* ─────────────  PHONE  ───────────── */
@media (max-width:780px){
  .rowmeta{order:3;flex:1 0 100%;min-width:0}
  .rowdesc{order:4;margin-left:44px}
  .detail{grid-template-columns:minmax(0,1fr)}
  .detail .shot{max-width:420px}
}
@media (max-width:600px){
  .hero{padding-bottom:58px}
  .hero-title{font-size:clamp(45px,13vw,64px);line-height:.9;letter-spacing:-.045em}
  .hero-problems{-webkit-text-stroke-width:1.5px}
  .ast{right:0;top:clamp(72px,20vw,112px);font-size:38px}
}
