/* =====================================================================
   KAIWEN LIU — Portfolio site
   Style: Pure-white / architecture-studio minimal
   Edit colors & type here once; every page updates.
===================================================================== */
:root{
  --ink:#1a1a1a;
  --muted:#737373;
  --faint:#a6a6a6;
  --line:#ededed;          /* hairline */
  --line-strong:#dcdcdc;   /* slightly stronger hairline (was heavy black) */
  --bg:#ffffff;
  --max:1320px;
  --gap:48px;
  --pad:clamp(24px,5.5vw,104px);
  --sans:"Inter","PingFang SC","Microsoft YaHei","Noto Sans SC","Helvetica Neue",Helvetica,Arial,sans-serif;
  --mono:"Space Mono","SFMono-Regular",Menlo,monospace;
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{
  background:var(--bg);color:var(--ink);
  font-family:var(--sans);font-size:15.5px;line-height:1.7;
  -webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none}
img{max-width:100%;display:block}

/* ---- shared label / mono ---- */
.label{font-family:var(--mono);font-size:10.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--faint)}
.rule{border:0;border-top:1px solid var(--line-strong);margin:0}
.hair{border:0;border-top:1px solid var(--line);margin:0}

/* ---- header / nav ---- */
.nav{
  position:sticky;top:0;z-index:20;background:var(--bg);
  display:flex;justify-content:space-between;align-items:center;
  padding:26px var(--pad);border-bottom:1px solid var(--line);
}
.nav .name{font-weight:700;letter-spacing:.24em;font-size:12.5px}
.nav ul{display:flex;gap:32px;list-style:none}
.nav a{font-family:var(--mono);font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}
.nav a:hover,.nav a.active{color:var(--ink)}

/* ---- generic wrapper ---- */
.wrap{max-width:var(--max);margin:0 auto;padding:var(--pad)}
.section{padding:clamp(48px,7vw,104px) var(--pad)}

/* ---- hero (home) ---- */
.hero{max-width:var(--max);margin:0 auto;padding:clamp(72px,11vw,168px) var(--pad) clamp(40px,6vw,72px)}
.hero h1{font-size:clamp(40px,7.5vw,84px);font-weight:700;letter-spacing:-.02em;line-height:1.0}
.hero .sub{margin-top:26px;font-size:clamp(16px,2vw,21px);color:var(--muted);max-width:720px;font-weight:400}
.hero .meta{margin-top:44px;display:flex;gap:48px;flex-wrap:wrap}
.hero .meta div .label{display:block;margin-bottom:6px}
.hero .meta div span{font-size:14px}

/* ---- project grid (home) ---- */
.grid{
  max-width:var(--max);margin:0 auto;padding:0 var(--pad) clamp(64px,9vw,128px);
  display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:var(--gap) calc(var(--gap) - 8px);
}
.card{display:block;padding-top:0}
.card .thumb{position:relative;width:100%;aspect-ratio:4/3;background:#f4f4f4;overflow:hidden;transition:opacity .3s}
.card:hover .thumb{opacity:.85}
.card .row{display:flex;justify-content:space-between;align-items:baseline;margin-top:18px;gap:12px}
.card h3{font-size:17px;font-weight:700;letter-spacing:0}
.card .num{font-family:var(--mono);font-size:12px;color:var(--faint)}
.card .desc{margin-top:5px;font-size:13.5px;color:var(--muted)}

/* ---- image placeholder (replace with <img>) ---- */
.ph{
  position:relative;width:100%;background:#f4f4f4;border:1px solid #ececec;
  display:flex;align-items:center;justify-content:center;
}
.ph::after{
  content:attr(data-label);font-family:var(--mono);font-size:10.5px;
  letter-spacing:.16em;color:#b3b3b3;text-transform:uppercase;text-align:center;padding:0 16px;
}
.ph.r43{aspect-ratio:4/3}
.ph.r169{aspect-ratio:16/9}
.ph.r11{aspect-ratio:1/1}
.ph.r34{aspect-ratio:3/4}
.ph.tall{aspect-ratio:3/4}

/* ---- project detail ---- */
.back{display:inline-block;font-family:var(--mono);font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted);margin-bottom:32px}
.back:hover{color:var(--ink)}
.proj-head{max-width:var(--max);margin:0 auto;padding:clamp(40px,5vw,64px) var(--pad) 0}
.proj-head .pnum{font-family:var(--mono);font-size:11px;letter-spacing:.2em;color:var(--faint)}
.proj-head h1{font-size:clamp(32px,5vw,58px);font-weight:700;line-height:1.04;letter-spacing:-.01em;margin-top:14px}
.proj-head .tagline{font-size:clamp(16px,2vw,20px);color:var(--muted);margin-top:18px;max-width:820px;font-weight:400}
.metarow{
  max-width:var(--max);margin:44px auto 0;padding:0 var(--pad);
  display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:28px;
  border-top:1px solid var(--line);padding-top:26px;
}
.metarow .label{display:block;margin-bottom:6px}
.metarow .v{font-size:14.5px}
.proj-body{max-width:var(--max);margin:0 auto;padding:clamp(44px,6vw,80px) var(--pad)}
.proj-body p{max-width:680px;color:#333;margin-bottom:20px}
.imgcol{display:grid;gap:var(--gap);margin:44px 0}
.imgcol.two{grid-template-columns:1fr 1fr}
.cap{font-family:var(--mono);font-size:10.5px;letter-spacing:.08em;color:var(--faint);margin-top:10px}
.prevnext{max-width:var(--max);margin:0 auto;padding:34px var(--pad) 0;border-top:1px solid var(--line);display:flex;justify-content:space-between;font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase}
.prevnext a:hover{color:var(--faint)}

/* ---- about ---- */
.about-grid{max-width:var(--max);margin:0 auto;padding:clamp(44px,6vw,80px) var(--pad);display:grid;grid-template-columns:1fr 2.1fr;gap:clamp(32px,6vw,96px)}
.about-grid h2{font-size:12px;font-family:var(--mono);letter-spacing:.18em;text-transform:uppercase;color:var(--faint);font-weight:400}
.about-block{margin-bottom:52px}
.about-block h3{font-size:15.5px;font-weight:700;letter-spacing:0}
.about-block .when{font-family:var(--mono);font-size:11px;letter-spacing:.04em;color:var(--faint);margin-bottom:3px}
.about-block ul{list-style:none;margin-top:7px}
.about-block li{font-size:14px;color:#3a3a3a;padding-left:16px;position:relative;margin-bottom:5px;line-height:1.6}
.about-block li::before{content:"—";position:absolute;left:0;color:var(--faint)}
.entry{margin-bottom:30px}
.lead{font-size:clamp(18px,2.3vw,25px);line-height:1.55;max-width:800px;font-weight:400}

/* ---- footer ---- */
.foot{border-top:1px solid var(--line);padding:36px var(--pad);display:flex;justify-content:space-between;flex-wrap:wrap;gap:14px;font-family:var(--mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.foot a:hover{color:var(--ink)}

/* ---- responsive ---- */
@media(max-width:760px){
  .about-grid{grid-template-columns:1fr}
  .imgcol.two{grid-template-columns:1fr}
  .nav ul{gap:18px}
  .hero .meta{gap:26px}
  /* 手机端：一排两个项目 */
  .grid{grid-template-columns:1fr 1fr;gap:24px 14px;padding-left:16px;padding-right:16px}
  .cat-head{padding-left:16px;padding-right:16px}
  .card .row{flex-direction:column;align-items:flex-start;gap:3px;margin-top:11px}
  .card h3{font-size:14px;line-height:1.25}
  .card .num{font-size:10px}
  .card .desc{font-size:11.5px;margin-top:4px;line-height:1.45}
  /* 手机端排版收紧 */
  .hero{padding:48px 24px 28px}
  .hero h1{font-size:44px}
  .hero .sub{font-size:15.5px;margin-top:18px}
  .hero .meta{margin-top:28px}
  .section{padding:32px 24px 0}
  .lead{font-size:17px;line-height:1.6}
  .cv-btn{margin-top:22px}
  .about-grid{padding-top:28px;gap:8px}
  .about-block{margin-bottom:34px}
  .proj-head{padding-top:28px}
  .proj-head h1{font-size:30px}
  .proj-head .tagline{font-size:16px;margin-top:12px}
  .proj-body{padding-top:32px}
  .proj-body p{font-size:15px}
}
@media(max-width:380px){
  .grid{gap:18px 10px;padding-left:12px;padding-right:12px}
  .card h3{font-size:13px}
}

/* ---- CV download button (About page) ---- */
.cv-btn{
  display:inline-block;margin-top:30px;
  font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--ink);border:1px solid var(--ink);
  padding:13px 24px;transition:background .2s,color .2s;
}
.cv-btn:hover{background:var(--ink);color:#fff}

/* ===== nav dropdown (Work) ===== */
.nav li.dd{position:relative}
.nav li.dd>a{display:inline-flex;align-items:center;gap:5px}
.dd-caret{font-size:8px;line-height:1}
.nav ul.dd-menu{display:block;gap:0;position:absolute;top:100%;right:0;left:auto;min-width:240px;background:var(--bg);border:1px solid var(--line);padding:6px 0;list-style:none;
  opacity:0;visibility:hidden;transform:translateY(-4px);transition:opacity .18s,transform .18s,visibility .18s;z-index:30}
.dd-menu::before{content:"";position:absolute;top:-16px;left:0;right:0;height:16px}
.nav li.dd:hover .dd-menu,.nav li.dd:focus-within .dd-menu{opacity:1;visibility:visible;transform:translateY(0)}
.dd-menu li{display:block}
.dd-menu a{display:block;padding:10px 20px;font-family:var(--mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);white-space:nowrap}
.dd-menu a:hover{color:var(--ink);background:#f6f6f6}

/* ===== homepage category sections ===== */
.cat{scroll-margin-top:84px}
.cat-head{max-width:var(--max);margin:0 auto;padding:clamp(40px,5vw,72px) var(--pad) 22px}
.cat-title{font-size:13px;font-family:var(--mono);letter-spacing:.2em;text-transform:uppercase;color:var(--ink);font-weight:700}
.cat-sub{font-size:13px;color:var(--muted);margin-top:6px}
.cat .grid{padding-top:0;padding-bottom:0}
.cat:last-of-type .grid{padding-bottom:clamp(56px,8vw,112px)}
/* placeholder (non-linking) card */
.card.ph-card{opacity:.85}
.card.ph-card .thumb .ph{border-style:dashed}
.tag-soon{font-family:var(--mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--faint)}

/* ===== uniform image plates (project detail) ===== */
.plates figure{margin:0 0 clamp(56px,8vw,100px)}
.plates figcaption{margin:0 0 12px}
.plates img{width:100%;height:auto;display:block}
.zoom{cursor:zoom-in;transition:opacity .2s}
.zoom:hover{opacity:.9}

/* ===== lightbox ===== */
#lb{position:fixed;inset:0;background:rgba(14,14,16,.93);display:none;align-items:center;justify-content:center;z-index:100;cursor:zoom-out;padding:24px}
#lb.on{display:flex}
#lb img{max-width:95vw;max-height:92vh;wid
/* ===== protected (view-only) image — discourages download ===== */
.protected-img{width:100%;background-size:contain;background-position:center;background-repeat:no-repeat;background-color:#f4f4f4;border:1px solid #ececec;
  -webkit-user-select:none;user-select:none;-webkit-user-drag:none;-webkit-touch-callout:none}
