/* ============================================================
   ASHORE CHINA — editorial dark
   Fraunces (display serif) / Space Grotesk (body) / IBM Plex Mono (labels)
   ============================================================ */
@import url('https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,300..900;1,9..144,300..900&family=IBM+Plex+Mono:wght@400;500&family=Space+Grotesk:wght@400;500&display=swap');

:root{
  --bg:#161818;
  --bg2:#1b1d1d;
  --ink:#f5f4f0;
  --muted:#9a9a94;
  --line:hsla(163,6%,77%,.10);
  --accent:#b14e17;
  --accent-hi:#cf601f;
  --ease:cubic-bezier(.16,1,.3,1);
  --ease-hard:cubic-bezier(.83,.01,.29,1);
}

*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
body{
  background:var(--bg);
  color:var(--ink);
  font-family:'Space Grotesk',-apple-system,'PingFang SC','Microsoft YaHei',sans-serif;
  font-size:17px;
  line-height:1.65;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}

/* film grain over everything */
body::after{
  content:"";
  position:fixed;inset:0;
  background:url('assets/noise.png') repeat;
  background-size:256px;
  opacity:0;
  pointer-events:none;
  z-index:900;
  animation:grain 1.2s ease .4s forwards;
}
@keyframes grain{to{opacity:.035}}

::selection{background:var(--accent);color:var(--ink)}

.wrap{width:min(92vw,1280px);margin:0 auto}
.mono{font-family:'IBM Plex Mono',ui-monospace,monospace}

a{color:var(--ink)}

/* ---------- custom cursor ---------- */
.cursor{
  position:fixed;top:0;left:0;
  width:10px;height:10px;border-radius:50%;
  background:var(--accent-hi);
  mix-blend-mode:difference;
  pointer-events:none;
  z-index:950;
  transform:translate(-50%,-50%);
  transition:width .25s var(--ease),height .25s var(--ease),background .25s;
}
.cursor.big{width:56px;height:56px}
@media (pointer:coarse){.cursor{display:none}}

/* ---------- loader ---------- */
#loader{
  position:fixed;inset:0;z-index:1000;
  background:var(--bg);
  display:flex;align-items:center;justify-content:center;
  transition:opacity .8s var(--ease-hard);
}
#loader.done{opacity:0;pointer-events:none}
#loader .pct{
  position:absolute;top:3.3vw;right:3.5vw;
  font-family:'IBM Plex Mono',monospace;
  font-size:13px;letter-spacing:.12em;color:var(--muted);
}
.l-logo{
  display:block;width:76px;margin:0 auto 4vh;
  opacity:0;animation:lfade 1s var(--ease) .05s forwards;
}
@keyframes lfade{to{opacity:1}}
.l-line{overflow:hidden;height:clamp(3.4rem,11vw,10rem);display:flex;align-items:center;justify-content:center}
.l-line span{
  display:block;
  font-family:'Fraunces',serif;
  font-weight:900;
  font-size:clamp(3.2rem,10.5vw,9.5rem);
  line-height:1;
  letter-spacing:-.02em;
  text-transform:uppercase;
  transform:translate3d(0,115%,0);
  animation:rise 1.9s var(--ease-hard) forwards;
}
.l-line:nth-child(2) span{animation-delay:.18s;color:transparent;-webkit-text-stroke:1.5px var(--ink)}
.l-line:nth-child(3) span{animation-delay:.36s;color:var(--accent)}
@keyframes rise{to{transform:translate3d(0,0,0)}}

/* ---------- nav ---------- */
nav{
  position:fixed;top:0;left:0;right:0;z-index:800;
  background:rgba(22,24,24,.72);
  backdrop-filter:blur(14px);
  -webkit-backdrop-filter:blur(14px);
  border-bottom:1px solid var(--line);
}
nav .wrap{display:flex;align-items:center;justify-content:space-between;height:64px}
.brand{
  display:flex;align-items:center;gap:11px;
  font-family:'Fraunces',serif;font-weight:600;font-size:20px;
  letter-spacing:-.01em;text-decoration:none;
}
.brand img{height:27px;width:auto;display:block}
.brand span{color:var(--accent)}
nav .links{display:flex;gap:2.2rem}
nav .links a{
  font-family:'IBM Plex Mono',monospace;
  font-size:11px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--muted);text-decoration:none;
  transition:color .3s;
}
nav .links a:hover{color:var(--ink)}
@media (max-width:640px){nav .links a:not(:last-child){display:none}}

/* ---------- hero ---------- */
.hero{
  min-height:100vh;
  display:flex;flex-direction:column;justify-content:center;
  padding:120px 0 60px;
  position:relative;
}
.hero-grid{
  display:grid;grid-template-columns:repeat(12,1fr);
  align-items:start;gap:0 2vw;
}
.hero-title{grid-column:1/13;grid-row:1;position:relative;z-index:2;align-self:center}
.ht-line{display:block;overflow:hidden}
.ht-word{display:inline-block;overflow:hidden;vertical-align:bottom}
.ht-char{display:inline-block;transform:translate3d(0,1.05em,0)}
body.loaded .ht-char{
  animation:charup 1.25s var(--ease-hard) forwards;
  animation-delay:calc(var(--i)*.022s + .15s);
}
@keyframes charup{to{transform:translate3d(0,0,0)}}
.ht-big{
  font-family:'Fraunces',serif;font-weight:900;
  font-size:clamp(3.2rem,10vw,9.5rem);
  line-height:.82;letter-spacing:-.025em;text-transform:uppercase;
}
.ht-italic{
  font-family:'Fraunces',serif;font-style:italic;font-weight:340;
  font-size:clamp(1.9rem,5.2vw,4.6rem);
  line-height:1;letter-spacing:0;
  color:var(--bg);
  -webkit-text-stroke:1.5px var(--ink);
  margin:-.35em 0 -.25em 1.2ch;
  position:relative;z-index:3;
}
.hero-side{
  grid-column:8/13;grid-row:1;
  align-self:start;
  margin-top:-6vh;
  position:relative;z-index:1;
  will-change:transform;
}
.hero-side img{display:block;width:100%;height:auto}
.hero-side figcaption{
  font-family:'IBM Plex Mono',monospace;
  font-size:10px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--muted);padding-top:4px;
  display:flex;justify-content:space-between;
}
.hero-sub{
  grid-column:1/8;grid-row:2;
  margin-top:6vh;
  max-width:560px;
}
.hero-sub .lead{
  font-family:'Fraunces',serif;font-style:italic;font-weight:400;
  font-size:clamp(1.3rem,2.2vw,1.7rem);line-height:1.4;
  color:var(--ink);
}
.hero-sub p.plain{color:var(--muted);margin-top:1.2rem;font-size:16px}
.hero-cta{margin-top:2.6rem;display:flex;gap:1.4rem;flex-wrap:wrap;align-items:center}

.btn{
  display:inline-block;
  font-family:'IBM Plex Mono',monospace;
  font-size:11px;letter-spacing:.2em;text-transform:uppercase;
  text-decoration:none;
  padding:15px 34px;
  border:1px solid var(--ink);
  color:var(--bg);background:var(--ink);
  transition:background .35s var(--ease),color .35s var(--ease),border-color .35s;
}
.btn:hover{background:var(--accent);border-color:var(--accent);color:var(--ink)}
.btn.ghost{background:transparent;color:var(--ink)}
.btn.ghost:hover{background:var(--ink);color:var(--bg)}

/* ---------- marquee ---------- */
.marquee{
  border-top:1px solid var(--line);border-bottom:1px solid var(--line);
  overflow:hidden;padding:18px 0;
  background:var(--bg2);
}
.m-track{display:flex;width:max-content;animation:roll 44s linear infinite}
.m-track span{
  font-family:'IBM Plex Mono',monospace;
  font-size:13px;letter-spacing:.18em;text-transform:uppercase;
  color:var(--muted);white-space:nowrap;padding-right:3rem;
}
.m-track span i{font-style:normal;color:var(--accent);padding-right:3rem}
@keyframes roll{to{transform:translate3d(-50%,0,0)}}

/* ---------- sections ---------- */
section{padding:17vh 0}
.kicker{
  font-family:'IBM Plex Mono',monospace;
  font-size:11px;letter-spacing:.2em;text-transform:uppercase;
  color:var(--accent);margin-bottom:2.2rem;
}
h2.big{
  font-family:'Fraunces',serif;font-weight:600;
  font-size:clamp(2.2rem,4.6vw,4.2rem);
  line-height:1.06;letter-spacing:-.02em;
  max-width:20ch;
}
h2.big em{font-style:italic;font-weight:340;color:var(--accent)}
.body-cols{
  display:grid;grid-template-columns:repeat(12,1fr);gap:2rem;
  margin-top:5vh;
}
.body-cols .txt{grid-column:6/12;color:var(--muted);font-size:17px}
.body-cols .txt p+p{margin-top:1.2rem}
.body-cols .txt strong{color:var(--ink)}
@media (max-width:860px){.body-cols .txt{grid-column:1/13}}

.promise{
  grid-column:6/12;
  margin-top:4rem;
  border:1px solid var(--line);
  padding:2.2rem 2.4rem;
  background:var(--bg2);
}
.promise .tag{
  font-family:'IBM Plex Mono',monospace;font-size:10px;
  letter-spacing:.2em;text-transform:uppercase;color:var(--accent);
  display:block;margin-bottom:1rem;
}
.promise p{
  font-family:'Fraunces',serif;font-style:italic;font-weight:400;
  font-size:clamp(1.15rem,1.8vw,1.45rem);line-height:1.5;color:var(--ink);
}
.promise a{color:var(--accent);text-decoration-color:rgba(177,78,23,.4)}
@media (max-width:860px){.promise{grid-column:1/13}}

/* why 区块左侧水墨插画 */
.why-art{grid-column:1/5;grid-row:1/3;position:sticky;top:110px;margin:0}
.why-art img{display:block;width:100%;height:auto}
.why-art figcaption{
  font-family:'IBM Plex Mono',monospace;font-size:10px;
  letter-spacing:.14em;text-transform:uppercase;color:var(--muted);
  padding-top:4px;display:flex;justify-content:space-between;
}
@media (max-width:860px){
  .why-art{grid-column:1/13;grid-row:auto;position:static;max-width:340px;margin-bottom:3rem}
}

/* ---------- steps ---------- */
.steps{margin-top:8vh;border-bottom:1px solid var(--line)}
.step{
  display:grid;grid-template-columns:repeat(12,1fr);gap:1rem;
  align-items:baseline;
  border-top:1px solid var(--line);
  padding:3.4rem 0;
  transform:translate3d(calc(var(--fx,1)*var(--drift,0px)),0,0);
  transition:background .4s;
}
.step:hover{background:rgba(245,244,240,.02)}
.step .num{
  grid-column:1/3;
  font-family:'IBM Plex Mono',monospace;
  font-size:13px;letter-spacing:.1em;color:var(--accent);
}
.step .main{grid-column:3/9}
.step:nth-child(even) .main{grid-column:5/11}
.step:nth-child(even) .num{grid-column:3/5}
.step h3{
  font-family:'Fraunces',serif;font-weight:600;
  font-size:clamp(1.6rem,2.8vw,2.4rem);letter-spacing:-.01em;
  display:flex;align-items:baseline;gap:1.2rem;flex-wrap:wrap;
}
.step h3 .fee{
  font-family:'IBM Plex Mono',monospace;font-size:10px;
  letter-spacing:.18em;text-transform:uppercase;color:var(--muted);

}
.step .main p{color:var(--muted);margin-top:1rem;max-width:56ch;font-size:16px}
@media (max-width:860px){
  .step .num,.step:nth-child(even) .num{grid-column:1/13}
  .step .main,.step:nth-child(even) .main{grid-column:1/13;margin-top:.6rem}
}

/* ---------- about (sticky portrait) ---------- */
.about-grid{display:grid;grid-template-columns:repeat(12,1fr);gap:2rem;align-items:start}
.about-photo{grid-column:1/6;position:sticky;top:110px}
.about-photo img{display:block;width:100%;height:auto}
.about-photo figcaption{
  font-family:'IBM Plex Mono',monospace;font-size:10px;
  letter-spacing:.14em;text-transform:uppercase;color:var(--muted);
  padding-top:4px;display:flex;justify-content:space-between;
}
.about-txt{grid-column:7/13}
.about-txt h2.big{margin-bottom:3vh}
.about-txt p{color:var(--muted);margin-top:1.2rem;max-width:52ch}
.facts{margin-top:3.4rem;border-top:1px solid var(--line)}
.facts .row{
  display:grid;grid-template-columns:180px 1fr;gap:1.4rem;
  padding:1.1rem 0;border-bottom:1px solid var(--line);font-size:14px;
}
.facts .k{
  font-family:'IBM Plex Mono',monospace;font-size:10px;
  letter-spacing:.16em;text-transform:uppercase;color:var(--muted);padding-top:3px;
}
.facts .v{color:var(--ink)}
@media (max-width:860px){
  .about-photo{grid-column:1/13;position:static;max-width:420px}
  .about-txt{grid-column:1/13;margin-top:4rem}
  .facts .row{grid-template-columns:1fr;gap:.3rem}
}

/* ---------- contact ---------- */
.contactbox{border-top:1px solid var(--line);text-align:left}
.contactbox h2.big{max-width:14ch}
.big-mail{
  display:inline-block;margin-top:5vh;
  font-family:'Fraunces',serif;font-weight:600;
  font-size:clamp(1.8rem,5.6vw,5rem);
  letter-spacing:-.02em;text-decoration:none;
  background:linear-gradient(var(--accent),var(--accent)) left bottom / 0% 3px no-repeat;
  transition:background-size .6s var(--ease),color .4s;
  padding-bottom:.08em;
}
.big-mail:hover{background-size:100% 3px;color:var(--accent)}
.contactbox .note{
  font-family:'IBM Plex Mono',monospace;font-size:11px;
  letter-spacing:.16em;text-transform:uppercase;color:var(--muted);margin-top:2.6rem;
}

/* ---------- footer ---------- */
footer{border-top:1px solid var(--line);padding:8vh 0 0;overflow:hidden}
footer .legal{display:flex;gap:2.4rem;flex-wrap:wrap}
footer .legal a{
  font-family:'IBM Plex Mono',monospace;font-size:11px;
  letter-spacing:.14em;text-transform:uppercase;color:var(--muted);
  text-decoration:none;transition:color .3s;
}
footer .legal a:hover{color:var(--ink)}
footer p, footer .fine{color:var(--muted);font-size:13px;margin-top:2.4rem;line-height:1.8;max-width:640px}
.giant{
  font-family:'Fraunces',serif;font-weight:900;text-transform:uppercase;
  font-size:11.4vw;line-height:.82;letter-spacing:-.02em;
  white-space:nowrap;
  width:max-content;
  position:relative;left:50%;
  margin-top:6vh;
  color:transparent;-webkit-text-stroke:1px rgba(245,244,240,.11);
  transform:translate(-50%,18%);
  user-select:none;
}

/* ---------- reveal on scroll ---------- */
.rev{opacity:0;transform:translate3d(0,26px,0);transition:opacity 1.25s var(--ease),transform 1.25s var(--ease)}
.rev.in{opacity:1;transform:none}
.rev.d1{transition-delay:.08s}.rev.d2{transition-delay:.16s}.rev.d3{transition-delay:.24s}

/* ---------- legal pages ---------- */
.legal-body{max-width:760px;padding:20vh 0 12vh}
.legal-body h1{
  font-family:'Fraunces',serif;font-weight:600;
  font-size:clamp(2.4rem,5vw,3.8rem);letter-spacing:-.02em;line-height:1.05;
}
.legal-body .updated{
  font-family:'IBM Plex Mono',monospace;font-size:11px;
  letter-spacing:.16em;text-transform:uppercase;color:var(--accent);margin:1.4rem 0 0;
}
.legal-body .pad{margin-top:5vh}
.legal-body h2{
  font-family:'Fraunces',serif;font-weight:600;font-size:1.5rem;
  margin:3.2rem 0 1rem;letter-spacing:-.01em;
}
.legal-body p,.legal-body li{color:var(--muted);font-size:16px}
.legal-body p+p{margin-top:1rem}
.legal-body ul{margin:1rem 0 0 1.2rem}
.legal-body li{margin-top:.6rem}
.legal-body strong{color:var(--ink)}
.legal-body a{color:var(--accent);text-decoration-color:rgba(177,78,23,.4)}

/* ---------- mobile hero ---------- */
@media (max-width:860px){
  .hero{padding-top:110px}
  .hero-title{grid-column:1/13;grid-row:1}
  .hero-side{grid-column:4/13;grid-row:2;margin-top:5vh}
  .hero-sub{grid-column:1/13;grid-row:3;margin-top:5vh}
  .ht-big{font-size:clamp(3rem,16.5vw,6rem)}
  .ht-italic{font-size:clamp(1.6rem,8vw,2.6rem)}
}

/* ---------- reduced motion ---------- */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important}
  #loader{display:none}
  .ht-char{transform:none}
  .rev{opacity:1;transform:none}
  body::after{opacity:.035}
}

/* ---------- sub pages (faq / pricing / cases) ---------- */
.page-head{padding:20vh 0 6vh}
.page-head .kicker{margin-bottom:2.2rem}
.page-head h1{
  font-family:'Fraunces',serif;font-weight:900;
  font-size:clamp(2.8rem,7.5vw,6.4rem);line-height:.95;letter-spacing:-.025em;text-transform:uppercase;
}
.page-head h1 em{font-style:italic;font-weight:340;text-transform:none;color:var(--accent)}
.page-head .lede{margin-top:3.4rem;max-width:56ch;color:var(--muted);font-size:17px;line-height:1.75}
.page-head .lede strong{color:var(--ink)}

/* FAQ */
.faq-list{border-top:1px solid var(--line);margin-bottom:12vh}
.faq{border-bottom:1px solid var(--line)}
.faq button{
  all:unset;box-sizing:border-box;cursor:pointer;display:grid;
  grid-template-columns:64px 1fr 40px;gap:1.6rem;align-items:baseline;
  width:100%;padding:3.4rem 0;transition:opacity .4s;
}
.faq button:hover .q{color:var(--accent)}
.faq .no{
  font-family:'IBM Plex Mono',monospace;font-size:11px;letter-spacing:.14em;color:var(--accent);
}
.faq .q{
  font-family:'Fraunces',serif;font-weight:600;font-size:clamp(1.15rem,2.2vw,1.5rem);
  letter-spacing:-.01em;line-height:1.3;transition:color .4s;
}
.faq .pm{
  justify-self:end;font-family:'IBM Plex Mono',monospace;font-size:18px;color:var(--muted);
  transition:transform .5s var(--ease);
}
.faq.open .pm{transform:rotate(45deg);color:var(--accent)}
.faq .a{
  display:grid;grid-template-rows:0fr;transition:grid-template-rows .6s var(--ease);
}
.faq.open .a{grid-template-rows:1fr}
.faq .a-in{overflow:hidden}
.faq .a p{
  max-width:62ch;color:var(--muted);font-size:16px;line-height:1.8;padding:0 0 3.4rem calc(64px + 1.6rem);
}
.faq .a strong{color:var(--ink)}
@media (max-width:640px){
  .faq button{grid-template-columns:40px 1fr 28px;gap:1rem}
  .faq .a p{padding-left:calc(40px + 1rem)}
}

/* Pricing */
.tiers{display:grid;grid-template-columns:repeat(3,1fr);gap:0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.tier{padding:5rem 3.2rem 4.4rem;border-right:1px solid var(--line);position:relative;display:flex;flex-direction:column}
.tier:last-child{border-right:none}
.tier .t-no{font-family:'IBM Plex Mono',monospace;font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--accent)}
.tier h3{font-family:'Fraunces',serif;font-weight:600;font-size:1.7rem;letter-spacing:-.01em;margin-top:1.6rem}
.tier .price{
  font-family:'Fraunces',serif;font-weight:900;font-size:clamp(2.6rem,4vw,3.6rem);
  letter-spacing:-.02em;line-height:1;margin-top:2.6rem;
}
.tier .price .unit{font-family:'IBM Plex Mono',monospace;font-weight:400;font-size:12px;letter-spacing:.1em;color:var(--muted);display:block;margin-top:.9rem;text-transform:uppercase}
.tier ul{list-style:none;margin:2.6rem 0 0;padding:0;flex:1}
.tier li{
  color:var(--muted);font-size:15px;line-height:1.65;padding:.85rem 0 .85rem 1.6rem;position:relative;
  border-top:1px solid var(--line);
}
.tier li::before{content:"—";position:absolute;left:0;color:var(--accent)}
.tier li strong{color:var(--ink)}
.tier .t-cta{margin-top:3rem}
.tier.hot{background:rgba(245,244,240,.025)}
.tier .flag{
  position:absolute;top:0;right:0;font-family:'IBM Plex Mono',monospace;font-size:10px;
  letter-spacing:.16em;text-transform:uppercase;background:var(--accent);color:var(--bg);
  padding:.7rem 1.2rem;
}
.milestones{display:grid;grid-template-columns:repeat(3,1fr);gap:2.4rem;margin-top:6vh}
.ms{border-top:1px solid var(--line);padding-top:2rem}
.ms .pct2{font-family:'Fraunces',serif;font-weight:900;font-size:2.4rem;color:var(--accent)}
.ms h4{font-family:'Fraunces',serif;font-weight:600;font-size:1.15rem;margin-top:1rem}
.ms p{color:var(--muted);font-size:14px;line-height:1.7;margin-top:.8rem}
.note-strip{
  border:1px solid var(--line);padding:2.6rem 3rem;margin-top:8vh;
  color:var(--muted);font-size:15px;line-height:1.8;
}
.note-strip strong{color:var(--ink)}
@media (max-width:860px){
  .tiers{grid-template-columns:1fr}
  .tier{border-right:none;border-bottom:1px solid var(--line);padding:4rem 0}
  .tier:last-child{border-bottom:none}
  .milestones{grid-template-columns:1fr}
}

/* Cases */
.case{border-top:1px solid var(--line);padding:7vh 0;display:grid;grid-template-columns:repeat(12,1fr);gap:0 2.4rem}
.case:last-of-type{border-bottom:1px solid var(--line)}
.case .c-no{
  grid-column:1/3;font-family:'Fraunces',serif;font-weight:900;
  font-size:clamp(3rem,6vw,5rem);line-height:.9;color:transparent;-webkit-text-stroke:1px rgba(245,244,240,.25);
}
.case .c-main{grid-column:3/9}
.case .c-side{grid-column:9/13}
.case h3{font-family:'Fraunces',serif;font-weight:600;font-size:clamp(1.5rem,2.6vw,2.1rem);letter-spacing:-.015em;line-height:1.15}
.case h3 em{font-style:italic;font-weight:340;color:var(--accent)}
.case .c-main p{color:var(--muted);font-size:16px;line-height:1.8;margin-top:1.6rem;max-width:58ch}
.case .c-main p strong{color:var(--ink)}
.case .c-side{border-left:1px solid var(--line);padding-left:2.4rem}
.case .c-side dt{
  font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:.16em;text-transform:uppercase;
  color:var(--accent);margin-top:1.8rem;
}
.case .c-side dt:first-child{margin-top:0}
.case .c-side dd{color:var(--ink);font-size:14.5px;margin-top:.5rem;line-height:1.6}
.disclaimer{
  margin:8vh 0 12vh;border:1px dashed rgba(245,244,240,.25);padding:2.6rem 3rem;
  color:var(--muted);font-size:14px;line-height:1.8;
}
.disclaimer strong{color:var(--ink)}
@media (max-width:860px){
  .case .c-no{grid-column:1/13}
  .case .c-main{grid-column:1/13;margin-top:2rem}
  .case .c-side{grid-column:1/13;border-left:none;padding-left:0;margin-top:3rem}
}
