
@font-face{
  font-family:"Huiwen-mincho";
  src:local("Huiwen-mincho"),local("汇文明朝");
  font-display:swap;
}
:root{
  --ink:#8e4639;
  --ink-soft:rgba(142,70,57,.62);
  --paper:#fbfaf7;
  --gray:#b8b8b5;
  --stage-w:1440px;
}
*{box-sizing:border-box}
html,body{margin:0;min-height:100%;background:#191919;color:var(--ink);font-family:"Huiwen-mincho","Noto Serif SC",serif}
body{overflow-x:hidden}
a{color:inherit;text-decoration:none}
button{font:inherit}
.site{
  min-height:100vh;
  display:grid;
  place-items:center;
  padding:24px;
  background:#191919;
}
.frame{
  position:relative;
  width:min(var(--stage-w),calc(100vw - 48px));
  aspect-ratio:2354/1636;
  overflow:hidden;
  background:var(--paper);
  box-shadow:0 18px 70px rgba(0,0,0,.35);
  isolation:isolate;
}
.frame.route-frame{aspect-ratio:4096/2913}
.map{
  position:absolute;inset:0;
  background:url("https://res.cloudinary.com/p0nchg33/image/upload/v1790185326/desktop-map.webp") center center/100% 100% no-repeat;
  z-index:0;
  transform:translateY(-20px) scale(1.015);
  transform-origin:center;
  animation:mapIn 1.65s cubic-bezier(.16,1,.3,1) both;
}
.map::after{
  content:"";position:absolute;inset:0;background:rgba(255,255,255,.02);
}
.frame.route-frame .map{
  background-size:cover;
  transform:translateY(-20px) scale(1.015);
}
.map.mobile{display:none;background-image:url("https://res.cloudinary.com/p0nchg33/image/upload/v1790185327/phone-map.webp")}
.hero-title{
  position:absolute;
  z-index:5;
  right:4.3%;
  top:15.5%;
  display:flex;
  flex-direction:column;
  align-items:flex-start;
  line-height:.84;
  color:var(--ink);
  pointer-events:none;
  animation:heroIn 1.2s .45s cubic-bezier(.16,1,.3,1) both;
}
.hero-title .cn{font-size:clamp(72px,11vw,180px);letter-spacing:-.09em}
.hero-title .en{font-size:clamp(34px,4.8vw,78px);margin-left:.28em;letter-spacing:-.05em}
.hero-title .sub{font-size:clamp(18px,2vw,34px);margin-top:12px;letter-spacing:.04em;white-space:nowrap;color:var(--ink-soft)}
.nav{
  position:absolute;z-index:20;top:2.5%;right:2.5%;
  display:flex;gap:clamp(15px,2vw,30px);
  font-size:clamp(14px,1.45vw,23px);
  white-space:nowrap;
  animation:navIn .9s .72s cubic-bezier(.16,1,.3,1) both;
}
.nav a{opacity:.72;transition:opacity .25s,transform .25s}
.nav a:hover{opacity:1;transform:translateY(-2px)}
.nav a.active{opacity:1}
.footer{
  position:absolute;z-index:6;left:1.2%;right:1.2%;bottom:1.4%;
  text-align:center;font-size:clamp(16px,2.1vw,34px);
  letter-spacing:-.02em;color:rgba(142,70,57,.58);
  animation:footerIn .9s 1.05s cubic-bezier(.16,1,.3,1) both;
}
.route-hotspot{
  position:absolute;z-index:12;width:clamp(22px,2vw,36px);height:clamp(22px,2vw,36px);
  border:3px solid #9fc8ed;border-radius:50%;
  background:rgba(255,255,255,.92);
  box-shadow:0 0 0 0 rgba(159,200,237,.6);
  animation:pulse 2.2s 1.35s ease-out infinite;
  cursor:pointer;
}
.route-hotspot:hover{transform:scale(1.12);background:#d9ebfb}
.hotspot-1{left:37%;top:42%}
.hotspot-2{left:56%;top:29%}
.hotspot-3{left:66%;top:40%}
.route-panel{
  position:absolute;z-index:8;
  right:4.5%;top:14%;width:40%;
  animation:panelIn 1.25s .7s cubic-bezier(.16,1,.3,1) both;
}
.route-title{font-size:clamp(28px,3.2vw,54px);line-height:1.05;margin:0 0 25px}
.route-title .line-no{margin-right:1.3em}
.route-sub{font-size:clamp(20px,2.2vw,34px);margin-bottom:20px}
.station-list{font-size:clamp(16px,1.55vw,25px);line-height:1.55;margin:0 0 32px}
.station-list a{display:block;width:max-content;transition:transform .2s,opacity .2s}
.station-list a:hover{transform:translateX(7px);opacity:.65}
.copy{
  font-size:clamp(12px,1.05vw,18px);
  line-height:1.7;
  max-width:95%;
  color:rgba(142,70,57,.9);
}
.copy + .copy{margin-top:12px}
.route-raster{
  position:absolute;inset:0;z-index:4;
  background:url("https://res.cloudinary.com/p0nchg33/image/upload/v1790185329/figma-route-overlay.png") center/100% 100% no-repeat;
  pointer-events:none;
  opacity:.18;
  mix-blend-mode:multiply;
  animation:rasterIn 1.4s .85s ease both;
}
.route-frame .route-raster{display:none}
.detail-badge{
  position:absolute;left:4%;top:17%;z-index:9;
  font-size:clamp(17px,1.5vw,25px);
  animation:panelIn 1.05s .8s both;
}
.detail-badge::before{content:"";display:inline-block;width:2.6em;height:2px;background:currentColor;vertical-align:middle;margin-right:.7em}
.stage-switch{
  position:absolute;left:4%;bottom:5%;z-index:30;
  font-size:13px;letter-spacing:.08em;opacity:.6;
}
.back-link{
  position:absolute;z-index:22;left:2.5%;top:2.5%;
  font-size:clamp(13px,1.2vw,20px);opacity:.7;
  animation:navIn .9s .8s both;
}
.mobile-nav{display:none}

@keyframes mapIn{
  from{opacity:0;transform:translateY(10px) scale(1.05)}
  to{opacity:1;transform:translateY(-20px) scale(1.015)}
}
@keyframes heroIn{
  from{opacity:0;transform:translateY(50px) scale(.92);filter:blur(7px)}
  to{opacity:1;transform:none;filter:none}
}
@keyframes navIn{
  from{opacity:0;transform:translateY(-18px)}
  to{opacity:1;transform:none}
}
@keyframes footerIn{
  from{opacity:0;transform:translateY(25px)}
  to{opacity:1;transform:none}
}
@keyframes panelIn{
  from{opacity:0;transform:translateY(45px);clip-path:inset(0 0 100% 0)}
  to{opacity:1;transform:none;clip-path:inset(0 0 0 0)}
}
@keyframes rasterIn{from{opacity:0}to{opacity:.18}}
@keyframes pulse{
  0%{box-shadow:0 0 0 0 rgba(159,200,237,.55)}
  70%{box-shadow:0 0 0 14px rgba(159,200,237,0)}
  100%{box-shadow:0 0 0 0 rgba(159,200,237,0)}
}

@media(max-width:700px){
  .site{padding:0;background:var(--paper);display:block}
  .frame,.frame.route-frame{width:100vw;min-height:100svh;aspect-ratio:auto;height:100svh;box-shadow:none}
  .map.desktop{display:none}
  .map.mobile{display:block;inset:0;background-size:100% auto;background-position:center top;transform:translateY(-20px) scale(1.01)}
  .frame.route-frame .map.mobile{background-size:100% auto}
  .nav{display:none}
  .mobile-nav{
    display:flex;position:absolute;z-index:25;top:1.7%;left:5%;right:5%;
    justify-content:space-between;gap:4px;font-size:clamp(11px,3vw,15px);
    animation:navIn .9s .7s both;
  }
  .mobile-nav a{opacity:.7;white-space:nowrap}
  .mobile-nav a.active{opacity:1}
  .hero-title{
    top:28%;right:auto;left:8%;width:84%;
    animation:mobileHeroIn 1.15s .42s both;
  }
  .hero-title .cn{font-size:clamp(64px,20vw,118px)}
  .hero-title .en{font-size:clamp(28px,8.7vw,52px);margin-left:.08em}
  .hero-title .sub{font-size:clamp(16px,4.6vw,25px);line-height:1.05;white-space:normal;margin-top:12px}
  .footer{bottom:2%;font-size:clamp(11px,3.5vw,18px);line-height:1.1}
  .route-hotspot{width:18px;height:18px;border-width:2px}
  .hotspot-1{left:47%;top:42%}.hotspot-2{left:62%;top:31%}.hotspot-3{left:52%;top:49%}
  .route-panel{
    left:8%;right:8%;top:18%;width:auto;
    animation:mobilePanelIn 1.1s .72s both;
  }
  .route-title{font-size:clamp(25px,7vw,38px);line-height:1.15;margin-bottom:18px}
  .route-title .line-no{margin-right:.7em}
  .route-sub{font-size:clamp(18px,5.2vw,27px);margin-bottom:12px}
  .station-list{font-size:clamp(13px,4vw,19px);line-height:1.5;margin-bottom:18px}
  .copy{font-size:clamp(10px,2.9vw,14px);line-height:1.65}
  .route-raster{display:none}
  .back-link{left:5%;top:8%;font-size:13px}
  .detail-badge{left:8%;top:14%;font-size:13px}
  @keyframes mobileHeroIn{
    from{opacity:0;transform:translateY(42px) scale(.94);filter:blur(5px)}
    to{opacity:1;transform:none;filter:none}
  }
  @keyframes mobilePanelIn{
    from{opacity:0;transform:translateY(38px)}
    to{opacity:1;transform:none}
  }
}
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition:none!important}
}
