*{box-sizing:border-box;margin:0;padding:0;}
:root{
  --bg:#ffffff;--bg2:#101010;--bg3:#181818;--bg4:#222;
  --bd1:#1e1e1e;--bd2:#2a2a2a;--bd3:#383838;
  --t1:#f0f0f0;--t2:#aaa;--t3:#666;--t4:#444;
  --peak:#c8973a;--offpeak:#4a9e6a;
  --accent:#3a6cf0;
}
html,body{height:100%;overflow:hidden;
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  background:var(--bg);color:var(--t1);font-size:13px;
  -webkit-user-select:none;user-select:none;}
/* 仅允许在输入框中选中/复制文字（如车站名、线路名等可编辑内容） */
input,textarea{
  -webkit-user-select:text;user-select:text;}

/* 主页：进入游戏动画封面；home-mode 下不显示系统光标（只显示黑点） */
body.home-mode,html.home-mode{
  cursor:none;
}
body.home-mode *,body.home-mode *::before,body.home-mode *::after{
  cursor:none !important;
}
.cursor-dot{
  position:fixed;
  top:0;
  left:0;
  width:14px;
  height:14px;
  background-color:#000;
  border-radius:50%;
  transform:translate(-50%,-50%);
  pointer-events:none;
  z-index:10001;
  will-change:transform;
}
/* 更新说明弹窗 z-index:10050，自定义黑点需在其之上 */
body.release-notes-open .cursor-dot,
html.release-notes-open .cursor-dot{
  z-index:10060;
}

/* 触屏设备：不显示自定义鼠标点，保留系统交互习惯 */
@media (pointer:coarse){
  .cursor-dot{
    display:none !important;
  }
  body.home-mode,html.home-mode{
    cursor:auto;
  }
  body.home-mode *,body.home-mode *::before,body.home-mode *::after{
    cursor:auto !important;
  }
}
#screen-home{
  position:fixed;
  inset:0;
  z-index:9000;
  background:var(--bg);
  overflow:hidden;
  will-change:transform,opacity;
  transform:translateY(0);
  opacity:1;
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
}
#screen-home canvas{
  display:block;
  position:absolute;
  top:0;
  left:0;
  z-index:1;
  /* 渐进加载：初始透明，首页准备好后再淡入线条 */
  opacity:0;
  transition:opacity 0.4s ease;
}
#screen-home[data-ready="1"] canvas{
  opacity:1;
}
.cursor-dot{
  position:fixed;
  top:0;
  left:0;
  width:14px;
  height:14px;
  background-color:#000;
  border-radius:50%;
  transform:translate(-50%,-50%);
  pointer-events:none;
  z-index:10001;
  will-change:transform;
}
#screen-home .ui-container{
  position:absolute;
  bottom:80px;
  left:80px;
  z-index:10;
  display:flex;
  flex-direction:column;
  align-items:flex-start;
  pointer-events:none;
}
#screen-home .main-title{
  font-weight:900;
  font-size:clamp(3rem,5vw,6rem);
  color:#000;
  line-height:1;
  letter-spacing:0.5em;
  margin-bottom:40px;
  margin-right:-0.5em;
  opacity:0;
  transform:translateY(20px);
  animation:fadeUp 1s cubic-bezier(0.16,1,0.3,1) forwards;
  animation-delay:0.3s;
  pointer-events:auto;
}
#screen-home .main-title.true-focus{
  display:inline-block;
}
#screen-home .main-title.true-focus .tf-char{
  display:inline-block;
  will-change:filter,opacity,transform;
  transition:filter 120ms ease, opacity 120ms ease, transform 120ms ease;
  transform-origin:50% 70%;
}
#screen-home .main-title.true-focus .tf-char.is-space{
  width:0.5em;
}
#screen-home .text-btn{
  pointer-events:auto;
  background:none;
  border:none;
  outline:none;
  padding:0;
  font-size:1.2rem;
  font-weight:900;
  color:#000;
  letter-spacing:0.1em;
  cursor:none;
  position:relative;
  display:flex;
  align-items:center;
  gap:15px;
  opacity:0;
  animation:fadeUp 1s cubic-bezier(0.16,1,0.3,1) forwards;
  animation-delay:0.5s;
}
#screen-home .text-btn::after{
  content:'';
  position:absolute;
  bottom:-8px;
  left:0;
  width:0%;
  height:6px;
  background-color:#000;
  transition:width 0.4s cubic-bezier(0.25,0.8,0.25,1);
}
#screen-home .text-btn:hover::after{
  width:100%;
}
#screen-home .arrow-icon{
  display:inline-block;
  transform:translateX(-10px);
  opacity:0;
  transition:all 0.4s ease;
  font-weight:900;
}
#screen-home .text-btn:hover .arrow-icon{
  transform:translateX(0);
  opacity:1;
}
#screen-home .about-link{
  position:absolute;
  left:80px;
  bottom:32px;
  padding:0;
  margin:0;
  background:none;
  border:none;
  outline:none;
  pointer-events:auto;
  cursor:none;
  z-index:10;
  font-size:0.8rem;
  font-weight:500;
  letter-spacing:0.08em;
  color:rgba(0,0,0,0.6);
}
#screen-home .about-link:hover{
  color:#000;
}

/* 首页右上角：更新说明（铃铛 + 未读红点） */
.release-notes-trigger{
  position:relative;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:44px;
  height:44px;
  padding:0;
  border:none;
  background:rgba(255,255,255,0.35);
  border-radius:12px;
  color:#0a0a0a;
  box-shadow:0 1px 0 rgba(0,0,0,0.06);
  transition:background .2s,transform .15s,box-shadow .2s;
  z-index:12;
  pointer-events:auto;
}
.release-notes-trigger:hover{
  background:rgba(255,255,255,0.55);
  transform:translateY(-1px);
  box-shadow:0 4px 14px rgba(0,0,0,0.08);
}
.release-notes-trigger:focus-visible{
  outline:2px solid #000;
  outline-offset:2px;
}
.release-notes-trigger .release-notes-icon svg{
  width:22px;
  height:22px;
  display:block;
}
.release-notes-badge{
  position:absolute;
  top:8px;
  right:8px;
  width:9px;
  height:9px;
  border-radius:50%;
  background:#ef4444;
  box-shadow:0 0 0 2px rgba(255,255,255,0.95);
  pointer-events:none;
  display:none;
}
.release-notes-badge.is-unread{
  display:block;
}
#screen-home .release-notes-trigger--home{
  position:absolute;
  top:28px;
  right:36px;
}
#screen-home .release-notes-trigger--home{
  cursor:pointer !important;
}
@media (max-width:768px){
  #screen-home .release-notes-trigger--home{
    top:20px;
    right:20px;
    width:40px;
    height:40px;
  }
}

/* 更新说明：大屏居中弹窗 */
.release-notes-modal{
  position:fixed;
  inset:0;
  z-index:10050;
  display:none;
  align-items:center;
  justify-content:center;
  padding:max(16px,env(safe-area-inset-top)) max(16px,env(safe-area-inset-right)) max(24px,env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left));
  box-sizing:border-box;
}
.release-notes-modal.is-open{
  display:flex;
}
.release-notes-backdrop{
  position:absolute;
  inset:0;
  background:rgba(15,23,42,0.45);
  -webkit-backdrop-filter:none;
  backdrop-filter:none;
}
.release-notes-dialog{
  position:relative;
  width:min(92vw,760px);
  max-height:min(85vh,900px);
  overflow:hidden;
  display:flex;
  flex-direction:column;
  background:#fafafa;
  color:#0f172a;
  border-radius:18px;
  box-shadow:0 24px 80px rgba(15,23,42,0.25),0 0 0 1px rgba(15,23,42,0.06);
  z-index:1;
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Segoe UI",Roboto,sans-serif;
  contain:layout paint;
}
.release-notes-close{
  position:absolute;
  top:14px;
  right:16px;
  width:40px;
  height:40px;
  border:none;
  border-radius:10px;
  background:transparent;
  color:rgba(15,23,42,0.45);
  font-size:26px;
  line-height:1;
  cursor:pointer;
  display:flex;
  align-items:center;
  justify-content:center;
  transition:background .15s,color .15s;
}
.release-notes-close:hover{
  background:rgba(15,23,42,0.06);
  color:#0f172a;
}
.release-notes-h2{
  margin:0;
  padding:28px 56px 12px 28px;
  font-size:clamp(1.25rem,2.8vw,1.6rem);
  font-weight:800;
  letter-spacing:0.12em;
}
.release-notes-body{
  overflow:auto;
  padding:0 28px 28px;
  -webkit-overflow-scrolling:touch;
  overscroll-behavior:contain;
  touch-action:pan-y;
  will-change:scroll-position;
  transform:translateZ(0);
}
.release-notes-section{
  margin-top:20px;
}
.release-notes-section:first-child{
  margin-top:4px;
}
.release-notes-h3{
  margin:0 0 12px;
  font-size:0.95rem;
  font-weight:700;
  letter-spacing:0.08em;
  text-transform:none;
  color:rgba(15,23,42,0.88);
}
.release-notes-ver{
  letter-spacing:0.06em;
  text-transform:none;
  font-size:0.95rem;
  font-weight:400;
  color:rgba(15,23,42,0.72);
}
.release-notes-section--future .release-notes-h3{
  color:#b45309;
}
.release-notes-section--future .release-notes-ver{
  color:rgba(120,53,15,0.85);
}
.release-notes-eta{
  margin:0 0 12px;
  font-size:0.95rem;
  font-weight:400;
  letter-spacing:0.04em;
  line-height:1.75;
  color:rgba(120,53,15,0.88);
}
.release-notes-eta--current{
  color:rgba(15,23,42,0.72);
}
.release-notes-compact{
  font-size:0.95rem;
  line-height:1.72;
  color:rgba(15,23,42,0.88);
}
.release-notes-compact p{
  margin:0 0 10px;
}
.release-notes-compact p:last-child{
  margin-bottom:0;
}
.release-notes-intro{
  margin:0 0 16px;
  font-size:0.95rem;
  line-height:1.75;
  color:rgba(15,23,42,0.88);
}
.release-notes-intro strong{
  color:rgba(15,23,42,0.92);
  font-weight:700;
}
.release-notes-intro p{
  margin:0 0 12px;
}
.release-notes-intro p:last-child{
  margin-bottom:0;
}
.release-notes-list{
  margin:0;
  padding:0;
  font-size:0.95rem;
  line-height:1.75;
  color:rgba(15,23,42,0.88);
}
.release-notes-list li{
  margin-bottom:10px;
}
.release-notes-list li:last-child{
  margin-bottom:0;
}
.release-notes-ol{
  list-style:decimal;
  padding-left:1.35em;
}
.release-notes-ol li{
  padding-left:0.25em;
}
.release-notes-section--future .release-notes-ol{
  color:rgba(15,23,42,0.88);
}
.release-notes-table{
  width:100%;
  border-collapse:collapse;
  margin:12px 0;
  font-size:0.88rem;
  line-height:1.4;
}
.release-notes-table th,
.release-notes-table td{
  border:1px solid rgba(15,23,42,0.12);
  padding:8px 10px;
  text-align:left;
  vertical-align:top;
}
.release-notes-table thead th{
  background:rgba(15,23,42,0.06);
  font-weight:700;
}
.release-notes-table tbody td[colspan="4"]{
  background:rgba(15,23,42,0.05);
  font-weight:700;
  letter-spacing:0.04em;
}
.release-notes-list li > p{
  margin:0 0 10px;
}
.release-notes-list li > p:last-child{
  margin-bottom:0;
}

/* 马赛克翻转过渡（关于 <-> 首页） */
#screen-mosaic{
  position:fixed;
  inset:0;
  z-index:9999;
  background:transparent;
  overflow:hidden;
  pointer-events:none;
  opacity:0;
  transition:opacity 0.8s cubic-bezier(0.16,1,0.3,1);
}
#screen-mosaic.fade-out{opacity:0;}
#screen-mosaic .mosaic-grid{
  position:absolute;
  inset:0;
  display:grid;
  perspective:900px;
  transform:translate3d(0,0,0);
}
#screen-mosaic .mosaic-tile{
  position:relative;
  width:100%;
  height:100%;
  transform-origin:center;
  transform-style:preserve-3d;
  transform:translate3d(0,0,0) rotateY(0deg);
  will-change:transform;
  transition:transform 0.95s cubic-bezier(0.16,1,0.3,1);
  transition-delay:var(--delay-in,0ms);
}
#screen-mosaic .mosaic-face{
  position:absolute;
  inset:0;
  backface-visibility:hidden;
}
#screen-mosaic .mosaic-face.front{background:transparent;}
#screen-mosaic .mosaic-face.back{
  background:var(--tile-color,#000);
  transform:rotateY(180deg);
}
#screen-mosaic.phase-in .mosaic-tile{
  transform:translate3d(0,0,0) rotateY(180deg);
  transition-delay:var(--delay-in,0ms);
}
#screen-mosaic.phase-out .mosaic-tile{
  transform:translate3d(0,0,0) rotateY(0deg);
  transition-delay:var(--delay-out,0ms);
}
@keyframes fadeUp{
  to{opacity:1;transform:translateY(0);}
}
@media (max-width:768px){
  #screen-home .ui-container{
    left:30px;
    bottom:50px;
  }
  #screen-home .main-title{
    font-size:2.5rem;
    letter-spacing:0.2em;
    font-weight:900;
  }
  #screen-home .about-link{
    left:30px;
    bottom:24px;
  }
}

/* 登录界面：箭头按钮动效（使用 ease-out 风格的“out”缓动） */
#screen-login .login-arrow-btn:hover .login-arrow-icon{
  transform:translateX(10px);
  opacity:0.96;
}

/* 登录界面：记住我复选框 + 动效 */
#screen-login .remember-checkbox-wrapper{
  display:flex;
  align-items:center;
  gap:8px;
  cursor:pointer;
}
#screen-login .remember-checkbox{
  position:absolute;
  opacity:0;
  width:0;
  height:0;
}
#screen-login .remember-visual{
  width:20px;
  height:20px;
  border-radius:5px;
  border:1px solid rgba(248,250,252,0.6);
  box-sizing:border-box;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  background:transparent;
  transition:
    background-color 0.22s cubic-bezier(0.16,1,0.3,1),
    border-color 0.22s cubic-bezier(0.16,1,0.3,1);
}
#screen-login .remember-visual svg{
  width:14px;
  height:14px;
}
#screen-login .remember-visual path{
  stroke-dasharray:18;
  stroke-dashoffset:18;
  transition:stroke-dashoffset 0.22s cubic-bezier(0.16,1,0.3,1);
}
#screen-login .remember-checkbox:checked + .remember-visual{
  background-color:rgba(248,250,252,0.15);
  border-color:rgba(248,250,252,0.9);
}
#screen-login .remember-checkbox:checked + .remember-visual path{
  stroke-dashoffset:0;
}

/* 登录页主内容区（#screen-login 由脚本插入，样式按类名生效） */
#screen-login .login-inner{
  position:absolute;
  left:80px;
  top:50%;
  transform:translateY(-50%);
  max-width:760px;
  width:min(70%, calc(100% - 160px));
  min-width:0;
  box-sizing:border-box;
  padding-right:16px;
}
@media (max-width:768px){
  #screen-login .login-inner{
    left:max(16px, env(safe-area-inset-left));
    right:max(16px, env(safe-area-inset-right));
    width:auto;
    max-width:none;
    padding-right:0;
    transform:translateY(-46%);
  }
  #screen-login #login-home-btn{
    left:max(14px, env(safe-area-inset-left)) !important;
    top:max(14px, env(safe-area-inset-top)) !important;
  }
  .login-form-email-row,
  .login-form-code-row{
    flex-direction:column !important;
    align-items:stretch !important;
    gap:16px !important;
    margin-bottom:16px !important;
  }
  .login-form-email-row input[data-role="email"],
  .login-form-code-row input[data-role="code"]{
    font-size:clamp(26px, 7.5vw, 40px) !important;
    line-height:1.15 !important;
  }
  .login-form-code-row input[data-role="code"]{
    width:100% !important;
    max-width:100% !important;
  }
  .login-arrow-btn .login-arrow-icon{
    width:48px !important;
    height:48px !important;
  }
  .login-arrow-btn .login-arrow-icon svg{
    width:48px !important;
    height:48px !important;
  }
}

/* 登录完成后的刷卡动效界面（透明背景，沿用当前登录页背景） */
#screen-login-swipe{
  position:fixed;
  inset:0;
  z-index:9800;
  display:none;
  background:transparent;
  color:#f9fafb;
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
}
/* 城市一卡通 3D 区域必须铺满整屏 */
#screen-login-swipe #lanyard-root{
  position:absolute !important;
  inset:0 !important;
  width:100% !important;
  height:100% !important;
}
#screen-login-swipe .lanyard-wrapper{
  position:absolute !important;
  inset:0 !important;
  width:100% !important;
  height:100% !important;
  min-height:100vh !important;
}
/* 刷卡区：右上角大框、深色底、白边，任何背景下都可见 */
#screen-login-swipe .lanyard-target{
  position:absolute !important;
  top:28px !important;
  right:28px !important;
  width:240px !important;
  height:300px !important;
  border-radius:16px !important;
  border:2px solid rgba(255,255,255,0.98) !important;
  background:transparent !important;
  box-shadow:none !important;
  display:flex !important;
  flex-direction:column !important;
  align-items:center !important;
  justify-content:flex-start !important;
  padding-top:28px !important;
  gap:12px !important;
  color:#fff !important;
  pointer-events:none !important;
  z-index:9999 !important;
}
#screen-login-swipe .lanyard-target-label{
  font-size:20px !important;
  font-weight:700 !important;
  letter-spacing:0.2em !important;
  color:#fff !important;
}
@media (max-width:768px){
  #screen-login-swipe .lanyard-target{
    top:max(12px, env(safe-area-inset-top)) !important;
    right:max(12px, env(safe-area-inset-right)) !important;
    width:min(220px, calc(100vw - 32px)) !important;
    height:min(280px, 42vh) !important;
    padding-top:20px !important;
  }
  #screen-login-swipe .lanyard-target-label{
    font-size:16px !important;
    letter-spacing:0.12em !important;
  }
}
#screen-login-swipe .lanyard-inner{
  position:relative;
  width:100%;
  height:100%;
}
#screen-login-swipe .swipe-inner{
  position:relative;
  width:100%;
  height:100%;
}
#screen-login-swipe .swipe-target{
  position:absolute;
  top:32px;
  right:32px;
  width:96px;
  height:96px;
  border-radius:16px;
  border:2px dashed rgba(248,250,252,0.85);
  box-shadow:0 0 24px rgba(248,250,252,0.35);
  display:flex;
  align-items:center;
  justify-content:center;
  font-size:12px;
  letter-spacing:0.3em;
  text-transform:uppercase;
  pointer-events:none;
}
#screen-login-swipe .swipe-card{
  position:absolute;
  left:50%;
  top:0;
  width:210px;
  height:130px;
  margin-left:-105px;
  border-radius:18px;
  background:linear-gradient(145deg,#f97316,#ea580c);
  box-shadow:0 20px 50px rgba(15,23,42,0.8);
  display:flex;
  align-items:center;
  justify-content:center;
  color:#f9fafb;
  cursor:grab;
  transform:translate3d(0,0,0);
  animation:swipeCardDrop 0.85s cubic-bezier(0.16,1,0.3,1) forwards;
}
#screen-login-swipe .swipe-card:active{
  cursor:grabbing;
}
#screen-login-swipe .swipe-card-front{
  font-weight:600;
  letter-spacing:0.22em;
  text-transform:uppercase;
  font-size:12px;
}
@keyframes swipeCardDrop{
  from{
    transform:translate3d(0,-80vh,0);
  }
  to{
    transform:translate3d(0,38vh,0);
  }
}

/* 刷卡成功：全屏对勾从下往上滑入，停留 2 秒后切页 */
#screen-swipe-success{
  position:fixed;
  inset:0;
  z-index:13000;
  display:none;
  align-items:center;
  justify-content:center;
  background:rgba(0,0,0,0.75);
  pointer-events:none;
}
#screen-swipe-success.show{
  display:flex;
  animation:swipeSuccessBgIn 0.4s ease-out forwards;
}
#screen-swipe-success .swipe-success-circle{
  --circle-size: clamp(44px, 12vw, 64px);
  width:var(--circle-size);
  height:var(--circle-size);
  border-radius:50%;
  background:#FFB300;
  border:none;
  box-shadow:none;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:0;
  box-sizing:border-box;
  transform:translateY(100vh);
  opacity:0;
  overflow:hidden;
}
#screen-swipe-success .swipe-success-mark{
  display:none;
}
#screen-swipe-success .swipe-success-check{
  width:70%;
  height:70%;
  flex-shrink:0;
  display:block;
}
#screen-swipe-success.show .swipe-success-circle{
  animation:swipeSuccessCheckSlide 0.55s cubic-bezier(0.16,1,0.3,1) 0.1s forwards;
}
@keyframes swipeSuccessBgIn{
  from{ opacity:0; }
  to{ opacity:1; }
}
@keyframes swipeSuccessCheckSlide{
  from{
    transform:translateY(100vh);
    opacity:0;
  }
  to{
    transform:translateY(0);
    opacity:1;
  }
}

/* 关于界面（已弃用：不再展示，保留 DOM 避免外链报错） */
#screen-about{
  display:none !important;
  pointer-events:none !important;
  visibility:hidden !important;
  position:fixed;
  inset:0;
  z-index:9500;
  background:#f9fafb;
  color:#020617;
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  overflow:hidden;
  display:none;
  will-change:transform,opacity;
  transform:translateY(0);
  opacity:1;
}
#screen-about .about-bg-word{
  position:absolute;
  bottom:-16.5%;
  right:-4%;
  font-size:22vw;
  font-weight:900;
  letter-spacing:-0.06em;
  color:rgba(15,23,42,0.05);
  pointer-events:none;
}
#screen-about .about-inner{
  position:absolute;
  left:80px;
  bottom:80px;
  max-width:520px;
}
#screen-about .about-subtitle{
  font-size:0.8rem;
  font-weight:700;
  letter-spacing:0.24em;
  text-transform:uppercase;
  opacity:0.6;
  margin-bottom:0.75rem;
}
#screen-about .about-title{
  font-weight:900;
  font-size:clamp(2rem,3vw,3.2rem);
  letter-spacing:0.34em;
  text-transform:uppercase;
  margin-right:-0.34em;
}
#screen-about .about-section{
  margin-top:2rem;
}
#screen-about .about-section h2{
  font-size:0.95rem;
  letter-spacing:0.12em;
  text-transform:uppercase;
  margin-bottom:0.75rem;
  color:#020617;
}
#screen-about .about-section p{
  font-size:0.85rem;
  line-height:1.7;
  color:rgba(15,23,42,0.8);
}
.about-action-btn{
  margin-right:10px;
  margin-bottom:8px;
  padding:6px 14px;
  border-radius:999px;
  border:1px solid rgba(148,163,184,0.8);
  background:transparent;
  color:#0f172a;
  font-size:0.78rem;
  letter-spacing:0.12em;
  text-transform:uppercase;
  cursor:pointer;
}
.about-action-btn:hover{
  background:rgba(148,163,184,0.16);
}
#screen-about .about-section + .about-section{
  margin-top:1.5rem;
}
#screen-about .about-legal-links{
  margin-top:1.5rem;
  font-size:0.75rem;
  letter-spacing:0.08em;
  color:rgba(15,23,42,0.6);
}
#screen-about .about-legal-links a{
  color:rgba(15,23,42,0.8);
  text-decoration:none;
  cursor:pointer;
}
#screen-about .about-legal-links a:hover{
  color:#020617;
  text-decoration:underline;
}
.about-scroll-hint{
  margin-top:2.2rem;
  font-size:0.75rem;
  letter-spacing:0.16em;
  text-transform:uppercase;
  color:rgba(15,23,42,0.55);
  display:flex;
  align-items:center;
  gap:10px;
  background:none;
  border:none;
  padding:0;
  cursor:pointer;
  text-align:left;
}
.about-scroll-hint-arrow{
  font-size:1.6rem;
  font-weight:900;
  line-height:1;
}
.about-scroll-hint-text{
  flex:1;
}
#screen-about .about-close{
  position:absolute;
  top:32px;
  right:40px;
  padding:0;
  background:none;
  border:none;
  outline:none;
  font-size:0.8rem;
  font-weight:600;
  letter-spacing:0.16em;
  text-transform:uppercase;
  color:rgba(15,23,42,0.7);
  cursor:none;
}
#screen-about .about-close:hover{
  color:#020617;
}
@media (max-width:768px){
  #screen-about .about-inner{
    left:30px;
    right:24px;
    bottom:48px;
    max-width:none;
  }
}

/* 地图内全屏菜单（风格参考 about） */
#screen-game-menu{
  position:fixed;
  inset:0;
  z-index:9500;
  background:#f9fafb;
  color:#020617;
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  overflow:auto;
  display:none;
  will-change:transform,opacity;
}
#screen-game-menu .game-menu-top-actions{
  position:absolute;
  top:24px;
  right:32px;
  display:flex;
  align-items:center;
  gap:12px;
  z-index:2;
}
#screen-game-menu .release-notes-trigger--menu{
  background:#fff;
  border:1px solid rgba(15,23,42,0.1);
  box-shadow:0 1px 3px rgba(15,23,42,0.06);
  color:#334155;
}
#screen-game-menu .release-notes-trigger--menu:hover{
  border-color:rgba(15,23,42,0.18);
  background:#fafafa;
}
#screen-game-menu .release-notes-trigger--menu .release-notes-badge{
  box-shadow:0 0 0 2px #fff;
}
#screen-game-menu .game-menu-metrics-link{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:40px;
  height:40px;
  border-radius:10px;
  background:#fff;
  border:1px solid rgba(15,23,42,0.1);
  box-shadow:0 1px 3px rgba(15,23,42,0.06);
  color:#334155;
  text-decoration:none;
}
#screen-game-menu .game-menu-metrics-link:hover{
  border-color:rgba(15,23,42,0.18);
  background:#fafafa;
}
#screen-game-menu .game-menu-bg-word{
  position:absolute;
  bottom:-16.5%;
  right:-4%;
  font-size:22vw;
  font-weight:900;
  letter-spacing:-0.06em;
  color:rgba(15,23,42,0.05);
  pointer-events:none;
}
#screen-game-menu .game-menu-inner{
  position:absolute;
  left:80px;
  bottom:80px;
  max-width:520px;
  width:min(520px,calc(100vw - 160px));
  box-sizing:border-box;
  --game-menu-controls-max:248px;
}
#screen-game-menu .game-menu-subtitle{
  font-size:0.8rem;
  font-weight:700;
  letter-spacing:0.24em;
  text-transform:uppercase;
  opacity:0.6;
  margin-bottom:0.75rem;
}
#screen-game-menu .game-menu-title{
  font-weight:900;
  font-size:clamp(2rem,3vw,3.2rem);
  letter-spacing:0.34em;
  text-transform:uppercase;
  margin-right:-0.34em;
}
#screen-game-menu .game-menu-contact-note{
  margin:1rem 0 0;
  font-size:0.82rem;
  line-height:1.7;
  color:rgba(15,23,42,0.72);
  max-width:520px;
}
#screen-game-menu .game-menu-section{
  margin-top:2rem;
}
#screen-game-menu .game-menu-section h2{
  font-size:0.95rem;
  letter-spacing:0.12em;
  text-transform:uppercase;
  margin-bottom:0.75rem;
  color:#020617;
}
#screen-game-menu .game-menu-profile{
  font-size:0.85rem;
  line-height:1.6;
  color:rgba(15,23,42,0.8);
}
#screen-game-menu .game-menu-btns{
  display:flex;
  flex-direction:column;
  align-items:stretch;
  gap:12px;
  margin-top:0.75rem;
  width:100%;
  max-width:min(var(--game-menu-controls-max),100%);
}
/* 创意按钮：左侧地铁线风格色条 + 圆角 + 悬停动效 */
#screen-game-menu .game-menu-btn{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:100%;
  max-width:100%;
  min-width:0;
  box-sizing:border-box;
  padding:14px 20px 14px 24px;
  font-size:0.85rem;
  font-weight:600;
  letter-spacing:0.08em;
  color:#020617;
  background:#fff;
  border:1px solid rgba(15,23,42,0.1);
  border-radius:10px;
  cursor:pointer;
  transition:transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s, background 0.2s;
  position:relative;
  overflow:hidden;
  box-shadow:0 1px 3px rgba(15,23,42,0.06);
}
#screen-game-menu .game-menu-settings{
  margin-top:0.75rem;
  display:flex;
  flex-direction:column;
  gap:12px;
  width:100%;
  max-width:min(var(--game-menu-controls-max),100%);
}
#screen-game-menu .game-menu-setting-row{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:10px;
  width:100%;
  box-sizing:border-box;
}
#screen-game-menu .game-menu-setting-label{
  font-size:0.85rem;
  color:rgba(15,23,42,0.8);
  min-width:0;
  flex:1;
  padding-right:8px;
}
#screen-game-menu .game-menu-help{
  position:relative;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:16px;
  height:16px;
  margin-left:6px;
  border-radius:50%;
  border:1px solid rgba(15,23,42,0.28);
  color:rgba(15,23,42,0.74);
  font-size:11px;
  font-weight:700;
  line-height:1;
  cursor:help;
  user-select:none;
}
#screen-game-menu .game-menu-help-tooltip{
  position:absolute;
  left:0;
  top:calc(100% + 8px);
  transform:none;
  width:min(320px,calc(100vw - 24px));
  background:rgba(15,23,42,0.92);
  color:rgba(255,255,255,0.94);
  border:1px solid rgba(255,255,255,0.15);
  border-radius:8px;
  padding:8px 10px;
  font-size:11px;
  line-height:1.45;
  letter-spacing:0.01em;
  box-shadow:0 8px 20px rgba(2,6,23,0.35);
  opacity:0;
  visibility:hidden;
  pointer-events:none;
  transition:opacity .12s ease,visibility .12s ease;
  z-index:5;
}
#screen-game-menu .game-menu-help:hover .game-menu-help-tooltip,
#screen-game-menu .game-menu-help:focus .game-menu-help-tooltip,
#screen-game-menu .game-menu-help:focus-visible .game-menu-help-tooltip{
  opacity:1;
  visibility:visible;
}
#screen-game-menu .game-menu-toggle-capsule{
  display:inline-flex;
  flex-shrink:0;
  padding:2px;
  border-radius:999px;
  border:1px solid rgba(15,23,42,0.14);
  background:rgba(255,255,255,0.75);
}
#screen-game-menu .game-menu-toggle-item{
  border:none;
  background:transparent;
  color:rgba(15,23,42,0.6);
  font-size:0.76rem;
  font-weight:600;
  letter-spacing:0.06em;
  padding:5px 12px;
  border-radius:999px;
  cursor:pointer;
  transition:background .18s ease,color .18s ease;
}
#screen-game-menu .game-menu-toggle-item.active{
  background:#0f172a;
  color:#fff;
}
#screen-game-menu .game-menu-toggle-item:hover{
  color:#0f172a;
}
#screen-game-menu .game-menu-btn::before{
  content:'';
  position:absolute;
  left:0;
  top:0;
  bottom:0;
  width:4px;
  background:linear-gradient(180deg,#64748b 0%,#94a3b8 100%);
  border-radius:10px 0 0 10px;
  transition:width 0.2s ease;
}
#screen-game-menu .game-menu-btn:hover{
  transform:translateX(4px);
  box-shadow:0 4px 12px rgba(15,23,42,0.12);
  border-color:rgba(15,23,42,0.18);
  background:#fafafa;
}
#screen-game-menu .game-menu-btn:hover::before{
  width:6px;
}
/* 主操作：保存/加载 - 蓝色线 */
#screen-game-menu .game-menu-btn-primary::before{
  background:linear-gradient(180deg,#0ea5e9 0%,#38bdf8 100%);
}
#screen-game-menu .game-menu-btn-primary:hover{
  border-color:rgba(14,165,233,0.35);
  background:rgba(14,165,233,0.04);
}
/* 强调：查看教程 - 琥珀/橙线 */
#screen-game-menu .game-menu-btn-accent::before{
  background:linear-gradient(180deg,#f59e0b 0%,#fbbf24 100%);
}
#screen-game-menu .game-menu-btn-accent:hover{
  border-color:rgba(245,158,11,0.35);
  background:rgba(245,158,11,0.05);
}
/* 危险：退出登录 - 红线 */
#screen-game-menu .game-menu-btn-danger::before{
  background:linear-gradient(180deg,#dc2626 0%,#f87171 100%);
}
#screen-game-menu .game-menu-btn-danger:hover{
  border-color:rgba(220,38,38,0.3);
  background:rgba(220,38,38,0.04);
}
#screen-game-menu .game-menu-slot{
  margin-top:8px;
  padding:14px 16px;
  background:linear-gradient(135deg,rgba(15,23,42,0.03) 0%,rgba(15,23,42,0.06) 100%);
  border:1px solid rgba(15,23,42,0.08);
  border-radius:10px;
  font-size:0.8rem;
  color:rgba(15,23,42,0.85);
  border-left:4px solid rgba(14,165,233,0.5);
}
#screen-game-menu .game-menu-slot-label{
  font-weight:600;
  letter-spacing:0.08em;
  margin-bottom:4px;
}
#screen-game-menu .game-menu-slot-meta{
  font-size:0.75rem;
  opacity:0.7;
  margin-top:4px;
}
#screen-game-menu .game-menu-close{
  position:static;
  padding:10px 4px;
  background:none;
  border:none;
  outline:none;
  font-size:0.8rem;
  font-weight:600;
  letter-spacing:0.16em;
  text-transform:uppercase;
  color:rgba(15,23,42,0.7);
  cursor:pointer;
}
#screen-game-menu .game-menu-close:hover{
  color:#020617;
}
@media (max-width:768px){
  #screen-game-menu .game-menu-top-actions{
    top:18px;
    right:20px;
  }
  #screen-game-menu .game-menu-inner{
    left:30px;
    right:24px;
    bottom:48px;
    max-width:none;
    width:auto;
  }
}

/* 地图内操作指南（全屏半透明 + 可搜索快捷键表） */
.screen-guide{
  position:fixed;
  inset:0;
  z-index:9510;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:max(12px,env(safe-area-inset-top)) max(12px,env(safe-area-inset-right)) max(12px,env(safe-area-inset-bottom)) max(12px,env(safe-area-inset-left));
  box-sizing:border-box;
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  opacity:0;
  visibility:hidden;
  pointer-events:none;
  transition:opacity .34s cubic-bezier(0.22,1,0.36,1),visibility 0s linear .34s;
}
.screen-guide.is-open{
  opacity:1;
  visibility:visible;
  pointer-events:auto;
  transition:opacity .34s cubic-bezier(0.22,1,0.36,1),visibility 0s;
}
.screen-guide-backdrop{
  position:absolute;
  inset:0;
  background:rgba(15,23,42,0.42);
  -webkit-backdrop-filter:blur(8px);
  backdrop-filter:blur(8px);
  opacity:0;
  transition:opacity .32s ease;
}
.screen-guide.is-open .screen-guide-backdrop{
  opacity:1;
}
.screen-guide-dialog{
  position:relative;
  z-index:1;
  width:min(96vw,720px);
  max-height:min(88vh,820px);
  display:flex;
  flex-direction:column;
  overflow:hidden;
  background:rgba(255,255,255,0.94);
  color:#0f172a;
  border-radius:20px;
  box-shadow:0 18px 46px rgba(15,23,42,0.18),0 0 0 1px rgba(255,255,255,0.55) inset;
  opacity:0;
  transform:translateY(14px) scale(0.97);
  transition:opacity .34s cubic-bezier(0.22,1,0.36,1),transform .34s cubic-bezier(0.22,1,0.36,1);
}
.screen-guide.is-open .screen-guide-dialog{
  opacity:1;
  transform:translateY(0) scale(1);
}
.screen-guide-close{
  position:absolute;
  top:12px;
  right:14px;
  width:40px;
  height:40px;
  border:none;
  border-radius:12px;
  background:transparent;
  color:rgba(15,23,42,0.4);
  font-size:26px;
  line-height:1;
  cursor:pointer;
  display:flex;
  align-items:center;
  justify-content:center;
  transition:background .18s ease,color .18s ease,transform .15s ease;
  z-index:2;
}
.screen-guide-close:hover{
  background:rgba(15,23,42,0.06);
  color:#0f172a;
}
.screen-guide-close:active{
  transform:scale(0.96);
}
.screen-guide-head{
  flex-shrink:0;
  padding:26px 52px 16px 28px;
  border-bottom:1px solid rgba(15,23,42,0.07);
}
.screen-guide-title{
  margin:0;
  font-size:clamp(1.35rem,3.2vw,1.75rem);
  font-weight:800;
  letter-spacing:0.14em;
  color:#0f172a;
}
.screen-guide-sub{
  margin:8px 0 0;
  font-size:0.82rem;
  letter-spacing:0.06em;
  color:rgba(15,23,42,0.55);
  line-height:1.5;
}
.screen-guide-search-wrap{
  position:relative;
  margin-top:18px;
  transition:margin-top .22s ease;
}
.screen-guide-search-icon{
  position:absolute;
  left:14px;
  top:50%;
  transform:translateY(-50%);
  color:rgba(15,23,42,0.35);
  pointer-events:none;
  display:flex;
  transition:color .2s ease,transform .2s ease;
}
.screen-guide-search-wrap:focus-within .screen-guide-search-icon{
  color:rgba(37,99,235,0.65);
}
.screen-guide-search{
  width:100%;
  box-sizing:border-box;
  padding:12px 14px 12px 44px;
  border-radius:14px;
  border:1px solid rgba(15,23,42,0.1);
  background:rgba(255,255,255,0.65);
  font-size:0.92rem;
  color:#0f172a;
  outline:none;
  box-shadow:0 1px 2px rgba(15,23,42,0.04);
  transition:border-color .22s ease,box-shadow .22s ease,background .22s ease;
}
.screen-guide-search::placeholder{
  color:rgba(15,23,42,0.38);
}
.screen-guide-search:focus{
  border-color:rgba(37,99,235,0.45);
  background:#fff;
  box-shadow:0 0 0 3px rgba(37,99,235,0.12);
}
.screen-guide-scroll{
  flex:1;
  min-height:0;
  overflow-y:auto;
  overflow-x:hidden;
  padding:12px 16px 22px 20px;
  -webkit-overflow-scrolling:touch;
  overscroll-behavior:contain;
  touch-action:pan-y;
}
.guide-section{
  margin-top:8px;
  transition:opacity .28s ease;
}
.guide-section:first-child{
  margin-top:0;
}
.guide-section--faded{
  opacity:0.35;
}
.guide-section-title{
  margin:0 0 10px 4px;
  font-size:0.72rem;
  font-weight:700;
  letter-spacing:0.2em;
  text-transform:uppercase;
  color:rgba(15,23,42,0.45);
  transition:opacity .25s ease;
}
.guide-section--faq{
  margin-top:18px;
  padding-top:18px;
  border-top:1px solid rgba(15,23,42,0.08);
}
.guide-section-title--faq{
  margin:0 0 14px 2px;
  font-size:1.12rem;
  font-weight:800;
  letter-spacing:0.06em;
  text-transform:none;
  color:#0f172a;
}
.guide-rows--faq{
  gap:4px;
}
.guide-rows{
  display:flex;
  flex-direction:column;
  gap:8px;
}
.guide-row{
  display:flex;
  flex-direction:row;
  align-items:flex-start;
  gap:14px;
  padding:12px 14px;
  border-radius:14px;
  background:rgba(255,255,255,0.5);
  border:1px solid rgba(15,23,42,0.06);
  box-shadow:0 1px 0 rgba(255,255,255,0.7) inset;
  transition:opacity .3s ease,transform .26s ease,box-shadow .26s ease,background .26s ease,border-color .26s ease,max-height .32s ease,margin .28s ease,padding .28s ease;
  content-visibility:auto;
  contain-intrinsic-size:84px;
}
.guide-row-keys{
  flex:0 0 108px;
  width:108px;
  min-height:40px;
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  align-content:center;
  justify-content:flex-start;
  gap:4px 5px;
  transition:opacity .25s ease;
}
.guide-row-keys--wasd{
  flex-wrap:nowrap;
  gap:4px;
}
.guide-row-text{
  flex:1;
  min-width:0;
}
.guide-row-label{
  font-size:0.78rem;
  font-weight:700;
  letter-spacing:0.08em;
  color:rgba(15,23,42,0.85);
  margin-bottom:4px;
}
.guide-row-desc{
  margin:0;
  font-size:0.84rem;
  line-height:1.65;
  color:rgba(15,23,42,0.68);
}
.guide-row-desc strong{
  color:rgba(15,23,42,0.92);
  font-weight:600;
}
.guide-row--dim{
  opacity:0.22;
  transform:scale(0.992);
  pointer-events:none;
}
.guide-row--hit{
  background:rgba(59,130,246,0.09);
  border-color:rgba(59,130,246,0.28);
  box-shadow:0 0 0 1px rgba(59,130,246,0.15),0 4px 12px rgba(37,99,235,0.07);
}
.guide-faq-item{
  flex-direction:column;
  align-items:stretch;
  gap:6px;
  padding:10px 4px 14px !important;
  background:transparent !important;
  border:none !important;
  border-radius:0 !important;
  box-shadow:none !important;
}
.guide-faq-item.guide-row--hit{
  background:rgba(59,130,246,0.06) !important;
  box-shadow:none !important;
  border-left:3px solid rgba(59,130,246,0.45) !important;
  padding-left:12px !important;
}
.guide-faq-item.guide-row--dim{
  opacity:0.22;
}
.guide-faq-q{
  margin-bottom:0 !important;
  font-size:0.88rem;
  font-weight:700;
  letter-spacing:0.02em;
  color:#0f172a;
}
.guide-faq-a{
  font-size:0.86rem;
  line-height:1.65;
  color:rgba(15,23,42,0.72);
}
.guide-kbd{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-width:26px;
  height:28px;
  padding:0 7px;
  border-radius:8px;
  font-size:0.72rem;
  font-weight:700;
  letter-spacing:0.04em;
  color:#1e293b;
  background:linear-gradient(180deg,#fff 0%,#f1f5f9 100%);
  border:1px solid rgba(15,23,42,0.14);
  box-shadow:0 1px 0 rgba(255,255,255,0.9) inset,0 2px 4px rgba(15,23,42,0.06);
}
.guide-kbd-wide{
  min-width:auto;
  padding:0 10px;
  font-size:0.68rem;
}
.guide-kbd-plus,.guide-kbd-fence{
  font-size:0.7rem;
  font-weight:600;
  color:rgba(15,23,42,0.35);
  padding:0 1px;
}
.guide-kbd-fence{
  margin:0 2px;
}
.guide-icon{
  display:inline-block;
  flex-shrink:0;
}
.guide-icon-mouse-l,
.guide-icon-mouse-r{
  width:24px;
  height:30px;
  border-radius:10px 10px 12px 12px;
  border:2px solid #475569;
  background:linear-gradient(180deg,#f8fafc 0%,#e2e8f0 100%);
  position:relative;
  box-shadow:0 2px 4px rgba(15,23,42,0.08);
}
/* 顶部左右各一块键区：左键图标深色在左，右键图标深色在右，另一侧为浅色未按下 */
.guide-icon-mouse-l::before{
  content:"";
  position:absolute;
  right:3px;
  top:5px;
  width:7px;
  height:10px;
  border-radius:2px 3px 3px 3px;
  background:rgba(148,163,184,0.4);
  border:1px solid rgba(71,85,105,0.22);
  box-sizing:border-box;
}
.guide-icon-mouse-l::after{
  content:"";
  position:absolute;
  left:3px;
  top:5px;
  width:7px;
  height:10px;
  border-radius:3px 2px 3px 3px;
  background:#475569;
  box-shadow:0 1px 0 rgba(255,255,255,0.15) inset;
}
.guide-icon-mouse-r::before{
  content:"";
  position:absolute;
  left:3px;
  top:5px;
  width:7px;
  height:10px;
  border-radius:3px 2px 3px 3px;
  background:rgba(148,163,184,0.4);
  border:1px solid rgba(71,85,105,0.22);
  box-sizing:border-box;
}
.guide-icon-mouse-r::after{
  content:"";
  position:absolute;
  right:3px;
  top:5px;
  width:7px;
  height:10px;
  border-radius:2px 3px 3px 3px;
  background:#475569;
  box-shadow:0 1px 0 rgba(255,255,255,0.15) inset;
}
.guide-icon-wheel{
  width:26px;
  height:32px;
  border-radius:8px;
  border:2px solid #475569;
  background:linear-gradient(180deg,#f8fafc,#e2e8f0);
  position:relative;
}
.guide-icon-wheel::before{
  content:"";
  position:absolute;
  left:50%;
  top:6px;
  transform:translateX(-50%);
  width:10px;
  height:14px;
  border-radius:4px;
  border:1px solid rgba(71,85,105,0.5);
  background:repeating-linear-gradient(180deg,transparent 0,transparent 2px,rgba(71,85,105,0.35) 2px,rgba(71,85,105,0.35) 3px);
}
.tb-btn-guide{
  padding:0;
}
.tb-btn-guide .tb-btn-guide-icon{
  display:flex;
  align-items:center;
  justify-content:center;
  opacity:0.92;
}
.tb-btn-guide:hover .tb-btn-guide-icon{
  opacity:1;
}
body.screen-guide-open{
  overflow:hidden;
}
@media (max-width:560px){
  .guide-row{
    flex-direction:column;
    gap:10px;
  }
  .guide-row-keys{
    width:100%;
    flex:0 0 auto;
  }
  .screen-guide-head{
    padding-right:48px;
  }
}

/* Stripe Embedded Checkout：左全屏视频 + 白半透明遮罩 + 文案；右 #a3364d + 白卡片内嵌结账 */
/* 结账页锁在视口内，Stripe 变长时仅在右侧内部滚动，不出现整页滚动条 */
#screen-checkout{
  position:fixed;
  inset:0;
  z-index:9700;
  display:none;
  overflow:hidden;
  height:100vh;
  height:100dvh;
  max-height:100vh;
  max-height:100dvh;
  -webkit-overflow-scrolling:touch;
}
#screen-checkout-return{
  position:fixed;
  inset:0;
  z-index:9700;
  display:none;
  overflow:auto;
  min-height:100vh;
  min-height:100dvh;
  background:#a3364d;
  color:#e5e7eb;
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  -webkit-overflow-scrolling:touch;
}
.metro-checkout-shell{
  display:flex;
  flex-direction:row;
  width:100%;
  height:100%;
  min-height:0;
  position:relative;
  overflow:hidden;
}
.metro-checkout-left{
  flex:0 0 50%;
  width:50%;
  min-width:0;
  height:100%;
  min-height:0;
  position:relative;
  display:flex;
  flex-direction:column;
  overflow:hidden;
  background:#0a0a0a;
}
.metro-checkout-left .metro-checkout-video{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  object-fit:cover;
  object-position:center;
}
.metro-checkout-left-overlay{
  position:absolute;
  inset:0;
  z-index:1;
  background:rgba(255,255,255,0.48);
  pointer-events:none;
}
.metro-checkout-left-inner{
  position:relative;
  z-index:2;
  flex:1;
  min-height:0;
  overflow-x:hidden;
  overflow-y:auto;
  -webkit-overflow-scrolling:touch;
  overscroll-behavior:contain;
  box-sizing:border-box;
  padding-top:clamp(18vh, 24vh, 32vh);
  padding-right:clamp(20px, 3vw, 40px);
  padding-bottom:clamp(48px, 6vh, 72px);
  padding-left:clamp(52px, 14vw, 168px);
  display:flex;
  flex-direction:column;
  justify-content:flex-start;
  align-items:flex-start;
  text-align:left;
}
.metro-checkout-brand{
  display:flex;
  flex-direction:row;
  align-items:center;
  gap:12px;
  flex-wrap:wrap;
  margin-bottom:clamp(2.25rem, 5vh, 3.5rem);
}
.metro-checkout-brand-logo{
  display:block;
  flex-shrink:0;
  height:auto;
  max-height:52px;
  width:auto;
  max-width:min(100%, 240px);
  object-fit:contain;
  object-position:left center;
}
.metro-checkout-brand-text{
  font-size:clamp(1.08rem, 1.45vw, 1.35rem);
  font-weight:800;
  letter-spacing:0.02em;
  color:#0f172a;
  font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  line-height:1.25;
}
.metro-checkout-headline{
  margin:0 0 clamp(2rem, 5vh, 3rem);
  font-size:clamp(1.28rem, 1.85vw, 1.55rem);
  font-weight:800;
  line-height:2.15;
  color:#0f172a;
  letter-spacing:0.02em;
}
.metro-checkout-features{
  margin:0;
  padding:0;
  list-style:none;
}
.metro-checkout-features li{
  display:flex;
  align-items:flex-start;
  gap:16px;
  margin-bottom:clamp(1.75rem, 4vh, 2.75rem);
  font-size:clamp(1.06rem, 1.35vw, 1.22rem);
  font-weight:600;
  line-height:2.05;
  color:#1e293b;
}
.metro-checkout-features li:last-child{
  margin-bottom:0;
}
.metro-checkout-check{
  flex-shrink:0;
  margin-top:2px;
}
.metro-checkout-right{
  flex:0 0 50%;
  width:50%;
  min-width:0;
  height:100%;
  min-height:0;
  position:relative;
  background:#a3364d;
  display:flex;
  flex-direction:column;
  align-items:stretch;
  padding:0;
  box-sizing:border-box;
  overflow:hidden;
}
.metro-checkout-right-scroll{
  flex:1;
  min-height:0;
  overflow-x:hidden;
  overflow-y:auto;
  -webkit-overflow-scrolling:touch;
  overscroll-behavior:contain;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:flex-start;
  padding:clamp(56px, 8vh, 88px) clamp(16px, 3vw, 40px) 16px;
  box-sizing:border-box;
}
.metro-checkout-back{
  position:absolute;
  top:20px;
  left:20px;
  z-index:4;
  padding:6px 0;
  font-size:0.9rem;
  font-weight:600;
  letter-spacing:0.02em;
  color:#fff;
  background:none;
  border:none;
  cursor:pointer;
  text-decoration:none;
}
.metro-checkout-back:hover{
  opacity:0.9;
  text-decoration:underline;
}
.metro-checkout-card{
  width:100%;
  max-width:480px;
  background:#fff;
  border-radius:16px;
  box-shadow:0 20px 60px rgba(0,0,0,0.18);
  padding:clamp(20px, 3vw, 28px);
  box-sizing:border-box;
}
.metro-checkout-embed-status{
  display:none;
  margin:0 0 12px;
  padding:10px 12px;
  font-size:0.85rem;
  line-height:1.5;
  color:#7f1d1d;
  text-align:center;
  background:#fef2f2;
  border-radius:8px;
}
#screen-checkout-embed{
  width:100%;
  min-height:min(380px, 50vh);
}
.metro-checkout-legal{
  flex-shrink:0;
  margin:0;
  padding:10px clamp(16px, 3vw, 40px) 16px;
  max-width:none;
  width:100%;
  box-sizing:border-box;
  text-align:center;
  font-size:0.78rem;
  line-height:1.65;
  color:rgba(255,255,255,0.92);
}
.metro-checkout-legal a{
  color:#fff;
  text-decoration:underline;
  text-underline-offset:0.2em;
}
.metro-checkout-legal a:hover{
  opacity:0.95;
}
/* 支付结果页：全屏结账红 + 左下文案（同 about-cities / end）+ 右下巨型字 */
#screen-checkout-return .metro-checkout-return-bg-word{
  position:fixed;
  bottom:-16.5%;
  right:-4%;
  font-size:22vw;
  font-weight:900;
  letter-spacing:-0.06em;
  color:rgba(0,0,0,0.12);
  pointer-events:none;
  z-index:0;
  user-select:none;
}
#screen-checkout-return .metro-checkout-return-inner{
  position:absolute;
  left:80px;
  bottom:80px;
  z-index:1;
  box-sizing:border-box;
  max-width:620px;
  padding:0;
  padding-right:24px;
  text-align:left;
}
#screen-checkout-return .about-cities-subtitle{
  font-size:0.8rem;
  font-weight:700;
  letter-spacing:0.24em;
  text-transform:uppercase;
  opacity:0.72;
  margin-bottom:0.75rem;
  color:rgba(226,232,240,0.95);
}
#screen-checkout-return .about-cities-title{
  font-weight:900;
  font-size:clamp(2rem,3vw,3.2rem);
  letter-spacing:0.34em;
  text-transform:uppercase;
  margin:0 -0.34em 0 0;
  color:#f8fafc;
  line-height:1.15;
}
#screen-checkout-return .about-section{
  margin-top:1.5rem;
}
#screen-checkout-return .about-section p,
#screen-checkout-return .metro-checkout-return-text{
  font-size:0.9rem;
  line-height:1.8;
  color:rgba(226,232,240,0.92);
  margin:0;
  max-width:none;
}
#screen-checkout-return .metro-checkout-return-actions{
  margin-top:2rem;
  display:flex;
  flex-wrap:wrap;
  gap:12px;
  justify-content:flex-start;
}
#screen-checkout-return .metro-checkout-return-btn{
  padding:10px 22px;
  font-size:0.78rem;
  font-weight:700;
  letter-spacing:0.12em;
  text-transform:uppercase;
  border-radius:999px;
  border:1px solid rgba(255,255,255,0.45);
  background:transparent;
  color:#f8fafc;
  cursor:pointer;
  transition:background 0.2s ease,border-color 0.2s ease,opacity 0.2s ease;
}
#screen-checkout-return .metro-checkout-return-btn:hover{
  background:rgba(255,255,255,0.12);
}
#screen-checkout-return .metro-checkout-return-btn.primary{
  background:#f9fafb;
  color:#431407;
  border-color:transparent;
}
#screen-checkout-return .metro-checkout-return-btn.primary:hover{
  background:#fff;
  opacity:0.98;
}
@media (max-width:768px){
  #screen-checkout-return .metro-checkout-return-inner{
    left:max(24px, env(safe-area-inset-left));
    right:max(24px, env(safe-area-inset-right));
    bottom:max(48px, env(safe-area-inset-bottom));
    max-width:none;
    padding-right:0;
  }
}
@media (max-width:900px){
  .metro-checkout-shell{
    flex-direction:column;
    height:100%;
    min-height:0;
  }
  .metro-checkout-left{
    flex:0 0 auto;
    width:100%;
    min-height:0;
    height:auto;
    max-height:min(42vh, 400px);
    overflow:hidden;
  }
  .metro-checkout-left-inner{
    min-height:auto;
    overflow-y:auto;
    padding-top:clamp(12vh, 16vh, 22vh);
    padding-right:clamp(20px, 4vw, 32px);
    padding-bottom:28px;
    padding-left:clamp(32px, 8vw, 72px);
  }
  .metro-checkout-right{
    flex:1 1 auto;
    width:100%;
    min-height:0;
    height:auto;
  }
  .metro-checkout-right-scroll{
    padding-top:52px;
  }
  #screen-checkout-embed{
    min-height:min(300px, 42vh);
  }
}

/* 法律页（服务条款 / 隐私政策） */
#screen-terms,
#screen-privacy{
  position:fixed;
  inset:0;
  z-index:9600;
  background:#f9fafb;
  color:#020617;
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  overflow:auto;
  display:none;
  -webkit-overflow-scrolling:touch;
}
#screen-terms .legal-inner,
#screen-privacy .legal-inner{
  max-width:640px;
  margin:0 auto;
  padding:80px 24px 120px;
}
#screen-terms .legal-title,
#screen-privacy .legal-title{
  font-size:1.5rem;
  font-weight:800;
  letter-spacing:0.05em;
  margin-bottom:0.5rem;
}
#screen-terms .legal-updated,
#screen-privacy .legal-updated{
  font-size:0.8rem;
  color:rgba(15,23,42,0.5);
  margin-bottom:2rem;
}
#screen-terms .legal-section,
#screen-privacy .legal-section{
  margin-top:1.5rem;
}
#screen-terms .legal-section h2,
#screen-privacy .legal-section h2{
  font-size:0.9rem;
  font-weight:700;
  letter-spacing:0.08em;
  margin-bottom:0.5rem;
  color:#020617;
}
#screen-terms .legal-section p,
#screen-privacy .legal-section p{
  font-size:0.85rem;
  line-height:1.75;
  color:rgba(15,23,42,0.85);
}
#screen-terms .legal-doc,
#screen-privacy .legal-doc{
  font-size:0.9rem;
  line-height:1.7;
  color:rgba(15,23,42,0.9);
}
#screen-terms .legal-doc p,
#screen-privacy .legal-doc p{
  margin:1em 0;
}
#screen-terms .legal-doc ol,
#screen-privacy .legal-doc ol,
#screen-terms .legal-doc ul,
#screen-privacy .legal-doc ul{
  margin:0.5em 0 0.5em 1.5em;
}
#screen-terms .legal-close,
#screen-privacy .legal-close{
  position:fixed;
  top:32px;
  right:40px;
  padding:0;
  background:none;
  border:none;
  outline:none;
  font-size:0.8rem;
  font-weight:600;
  letter-spacing:0.16em;
  text-transform:uppercase;
  color:rgba(15,23,42,0.7);
  cursor:pointer;
  z-index:2;
}
#screen-terms .legal-close:hover,
#screen-privacy .legal-close:hover{
  color:#020617;
}

/* 关于界面：点击生成的小火车（6 节矩形车厢） */
#screen-about .about-train{
  position:absolute;
  display:flex;
  align-items:center;
  gap:2px;              /* 车厢之间的小缝隙 */
  padding:2px;
  background:transparent;
  pointer-events:none;
}
#screen-about .about-train-car{
  width:18px;           /* 每节车厢是细长矩形 */
  height:10px;
  border-radius:2px;
  background:#0f172a;   /* 会被 JS 覆盖为线路主题色 */
}

/* 关于 -> 城市总览界面（从关于界面下滑进入） */
#screen-about-cities{
  position:fixed;
  inset:0;
  z-index:9650;
  background:#872907;
  color:#e5e7eb;
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  overflow:hidden;
  display:none;
  will-change:transform,opacity;
  transform:translateY(0);
  opacity:1;
}
#about-cities-physics{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  z-index:1;
}
#screen-about-cities .about-cities-bg-word{
  position:absolute;
  bottom:-16.5%;
  right:-4%;
  font-size:22vw;
  font-weight:900;
  letter-spacing:-0.06em;
  color:rgba(15,23,42,0.05);
  pointer-events:none;
  z-index:0;
}
#screen-about-cities .about-cities-inner{
  position:absolute;
  left:80px;
  bottom:80px;
  max-width:620px;
  z-index:3;
  pointer-events:none; /* 让点击与拖拽交给物理层 */
}
/* 子元素默认会重新参与命中检测，需统一关闭，否则文字区域会挡住 canvas 上的拖拽 */
#screen-about-cities .about-cities-inner *{
  pointer-events:none;
}
#screen-about-cities .about-cities-subtitle{
  font-size:0.8rem;
  font-weight:700;
  letter-spacing:0.24em;
  text-transform:uppercase;
  opacity:0.6;
  margin-bottom:0.75rem;
}
#screen-about-cities .about-cities-title{
  font-weight:900;
  font-size:clamp(2rem,3vw,3.2rem);
  letter-spacing:0.34em;
  text-transform:uppercase;
  margin-right:-0.34em;
}
#screen-about-cities .about-section{
  margin-top:1.8rem;
}
#screen-about-cities .about-section p{
  font-size:0.9rem;
  line-height:1.8;
  color:rgba(226,232,240,0.9);
}
.about-cities-grid{
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:10px 32px;
  margin-top:1.2rem;
}
.about-cities-grid.about-cities-grid--3col{
  grid-template-columns:repeat(3,minmax(0,1fr));
  grid-template-rows:repeat(5,minmax(0,auto));
  grid-auto-flow:column;
}
.about-cities-item{
  display:flex;
  align-items:baseline;
  gap:10px;
  font-size:0.85rem;
  letter-spacing:0.12em;
  text-transform:uppercase;
}
.about-cities-index{
  font-family:system-ui,-apple-system,BlinkMacSystemFont,'SF Pro Display';
  font-weight:600;
  font-size:0.75rem;
  opacity:0.6;
}
.about-cities-name{
  font-weight:700;
}
.about-cities-name-cn{
  font-size:0.75rem;
  opacity:0.7;
}
#screen-about-cities .about-cities-top-hint{
  position:absolute;
  top:32px;
  right:140px;
  display:flex;
  align-items:center;
  gap:6px;
  padding:4px 8px;
  background:transparent;
  border:none;
  font-size:0.75rem;
  font-weight:600;
  letter-spacing:0.14em;
  text-transform:uppercase;
  color:rgba(148,163,184,0.75);
  cursor:default;
  pointer-events:none;
  z-index:4;
}
#screen-about-cities .about-cities-top-hint-arrow{
  font-size:0.8rem;
}
#screen-about-cities .about-close{
  position:absolute;
  top:32px;
  right:40px;
  padding:0;
  background:none;
  border:none;
  outline:none;
  font-size:0.8rem;
  font-weight:600;
  letter-spacing:0.16em;
  text-transform:uppercase;
  color:rgba(148,163,184,0.8);
  cursor:none;
  z-index:5;
  pointer-events:auto;
}
#screen-about-cities .about-close:hover{
  color:#e5e7eb;
}
@media (max-width:768px){
  #screen-about-cities .about-cities-inner{
    left:30px;
    right:24px;
    bottom:48px;
    max-width:none;
  }
}

/* 城市一览 / 收尾页左栏：可滚动 */
#about-cities-scroll{
  max-height:calc(100vh - 140px);
  overflow-y:auto;
  overflow-x:hidden;
  -webkit-overflow-scrolling:touch;
  pointer-events:none;
  padding-right:10px;
}
#screen-site-end #site-end-scroll{
  max-height:min(48vh,560px);
  overflow-y:auto;
  overflow-x:hidden;
  -webkit-overflow-scrolling:touch;
  pointer-events:auto;
  padding-right:10px;
}
#about-cities-scroll .about-cities-bottom-hint{
  margin-top:2rem;
  font-size:0.75rem;
  letter-spacing:0.16em;
  text-transform:uppercase;
  color:rgba(148,163,184,0.75);
  display:flex;
  align-items:center;
  gap:10px;
}

/* 收尾页：与「当前支持城市」同一套版式类名；背景为列车模拟站台灰（Tailwind gray-300） */
#screen-site-end{
  position:fixed;
  inset:0;
  z-index:9660;
  background:#d1d5db;
  color:#0f172a;
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  overflow:visible;
  display:none;
  will-change:transform,opacity;
  transform:translateY(0);
  opacity:1;
}
#screen-site-end .about-cities-bg-word{
  position:absolute;
  bottom:-16.5%;
  right:-4%;
  font-size:22vw;
  font-weight:900;
  letter-spacing:-0.06em;
  color:rgba(15,23,42,0.06);
  pointer-events:none;
  z-index:0;
}
#screen-site-end .site-end-layout{
  position:absolute;
  inset:0;
  z-index:2;
  display:flex;
  flex-direction:column;
  box-sizing:border-box;
  padding:72px 0 0 0;
  min-height:0;
  overflow:visible;
}
/* 文案在页面下方（原位）；z-index 高于站台，不被遮挡 */
#screen-site-end .site-end-text-wrap{
  flex:0 0 auto;
  margin-top:auto;
  min-height:0;
  padding:0 80px 72px 80px;
  box-sizing:border-box;
  max-width:100%;
  width:100%;
  position:relative;
  z-index:10;
  pointer-events:none;
}
#screen-site-end .site-end-text-wrap .about-cities-inner{
  pointer-events:auto;
}
#screen-site-end .about-cities-inner{
  position:relative;
  left:auto;
  bottom:auto;
  max-width:620px;
  width:100%;
}
#screen-site-end .site-end-title-en{
  margin:0.5rem 0 0;
  font-size:0.78rem;
  font-weight:600;
  letter-spacing:0.28em;
  text-transform:uppercase;
  color:rgba(15,23,42,0.55);
}
#screen-site-end .about-cities-subtitle{
  font-size:0.8rem;
  font-weight:700;
  letter-spacing:0.24em;
  text-transform:uppercase;
  opacity:0.65;
  margin-bottom:0.75rem;
  color:#0f172a;
}
#screen-site-end .about-cities-title{
  font-weight:900;
  font-size:clamp(2rem,3vw,3.2rem);
  letter-spacing:0.34em;
  text-transform:uppercase;
  margin-right:-0.34em;
  color:#020617;
}
#screen-site-end .about-section{
  margin-top:1.8rem;
}
#screen-site-end .about-section p{
  font-size:0.9rem;
  line-height:1.8;
  color:rgba(15,23,42,0.88);
}
#screen-site-end .site-end-contact-note{
  margin-top:1.1rem;
  font-size:0.82rem;
  line-height:1.7;
  color:rgba(15,23,42,0.72);
}
#screen-site-end .site-end-legal{
  margin-top:2rem;
  font-size:0.75rem;
  letter-spacing:0.08em;
  color:rgba(15,23,42,0.55);
}
#screen-site-end .site-end-legal a{
  color:rgba(15,23,42,0.82);
  text-decoration:none;
  cursor:pointer;
}
#screen-site-end .site-end-legal a:hover{
  color:#020617;
  text-decoration:underline;
}
#screen-site-end .site-end-copyright{
  margin-top:1.25rem;
  font-size:0.72rem;
  letter-spacing:0.06em;
  color:rgba(15,23,42,0.5);
}
/* 站台+轨道+列车：整体逆时针 120°。viz 高度须与视口同量级，否则 50% 旋转中心会落在视口外，整段旋出屏幕 */
#screen-site-end .site-end-viz{
  position:absolute;
  /* 相对原先左上留白：整体上移、右移，使旋转后轨道末端更易伸出屏外 */
  top:-56px;
  left:clamp(40px,10vw,160px);
  width:min(520px,92vw);
  max-width:520px;
  height:100vh;
  max-height:100dvh;
  flex:none;
  margin:0;
  padding:0;
  overflow:visible;
  z-index:5;
  pointer-events:none;
}
#screen-site-end .site-end-viz-rot{
  position:relative;
  width:100%;
  height:100%;
  transform:rotate(-120deg);
  transform-origin:50% 50%;
  will-change:transform;
}
#screen-site-end .site-end-rail{
  position:relative;
  width:100%;
  height:100%;
  overflow:hidden;
  pointer-events:none;
  z-index:1;
}
/* 收尾页：与 train-sim.html 一致 — 站台灰 + 32px 白轨道 + 蓝车厢 + 乘客点 */
#screen-site-end .site-end-sim-root{
  --fixed-train-width:32px;
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  overflow:hidden;
}
#screen-site-end .site-end-platform-bg{
  position:absolute;
  inset:0;
  width:calc(100% - var(--fixed-train-width));
  background:#c5cad0;
}
#screen-site-end .site-end-platform-passengers-inner{
  position:absolute;
  left:0;
  width:100%;
  display:flex;
  flex-direction:column;
}
#screen-site-end .site-end-track-strip{
  position:absolute;
  inset:0;
  left:calc(100% - var(--fixed-train-width));
  width:var(--fixed-train-width);
  background:#fff;
}
#screen-site-end .site-end-train{
  position:absolute;
  left:calc(100% - var(--fixed-train-width));
  width:var(--fixed-train-width);
  top:0;
  display:flex;
  flex-direction:column;
  z-index:2;
}
#screen-site-end .site-end-blue-car{
  width:100%;
  border-radius:0.375rem;
  background:#60a5fa;
}
#screen-site-end .site-end-pass-dot{
  width:0.5rem;
  height:0.5rem;
  border-radius:9999px;
  background:#000;
  flex-shrink:0;
}
#screen-site-end .site-end-dots-rows{
  position:absolute;
  right:0;
  top:0;
  bottom:0;
  width:7rem;
  z-index:30;
  display:flex;
  flex-direction:column;
  justify-content:space-around;
  padding:0.5rem;
  box-sizing:border-box;
}
#screen-site-end .site-end-dot-row{
  display:flex;
  justify-content:flex-end;
  width:100%;
  gap:0.25rem;
}
#screen-site-end .site-end-dot-section{
  width:100%;
  display:flex;
  align-items:stretch;
  position:relative;
  overflow:hidden;
}
#screen-site-end .site-end-alighting-dot{
  position:absolute;
  width:8px;
  height:8px;
  border-radius:9999px;
  background-color:#ef4444;
  z-index:20;
  top:50%;
  transform:translateY(-50%);
  opacity:0;
  transition:left 0.5s linear, opacity 0.5s ease-out;
}
#screen-site-end .about-cities-top-hint{
  position:absolute;
  top:32px;
  right:140px;
  display:flex;
  align-items:center;
  gap:6px;
  padding:4px 8px;
  background:transparent;
  border:none;
  font-size:0.75rem;
  font-weight:600;
  letter-spacing:0.14em;
  text-transform:uppercase;
  color:rgba(71,85,105,0.85);
  cursor:default;
  pointer-events:none;
  z-index:4;
}
#screen-site-end .about-close{
  position:absolute;
  top:32px;
  right:40px;
  padding:0;
  background:none;
  border:none;
  outline:none;
  font-size:0.8rem;
  font-weight:600;
  letter-spacing:0.16em;
  text-transform:uppercase;
  color:rgba(71,85,105,0.9);
  cursor:none;
  z-index:5;
}
#screen-site-end .about-close:hover{
  color:#020617;
}
#screen-site-end .site-end-corner-en{
  position:absolute;
  right:32px;
  bottom:28px;
  z-index:6;
  font-size:0.78rem;
  font-weight:700;
  letter-spacing:0.35em;
  text-transform:uppercase;
  color:rgba(71,85,105,0.8);
  pointer-events:none;
}
@media (max-width:900px){
  #screen-site-end .site-end-layout{
    padding:64px 0 0 0;
  }
  #screen-site-end .site-end-viz{
    top:-56px;
    left:clamp(24px,8vw,120px);
    width:min(92vw,480px);
  }
  #screen-site-end .site-end-text-wrap{
    padding:0 24px 56px 24px;
  }
  #screen-site-end .site-end-corner-en{
    right:20px;
    bottom:12px;
  }
  #screen-site-end .about-cities-top-hint{
    right:120px;
  }
}
@media (max-width:768px){
  #screen-site-end .about-cities-inner{
    max-width:none;
  }
}

/* 地铁博物馆界面 */
#screen-museum{
  position:fixed;
  inset:0;
  z-index:9500;
  background:#020617;
  color:#e5e7eb;
  font-family:'Noto Sans SC','SF Pro Display','PingFang SC',system-ui,sans-serif;
  overflow:hidden;
  display:flex;
  flex-direction:column;
}
#screen-museum .museum-header{
  padding:24px 40px 12px;
  display:flex;
  justify-content:space-between;
  align-items:flex-start;
  gap:40px;
}
#screen-museum .museum-title-block{
  max-width:520px;
}
#screen-museum .museum-subtitle{
  font-size:0.8rem;
  font-weight:700;
  letter-spacing:0.18em;
  text-transform:uppercase;
  opacity:0.7;
  margin-bottom:0.5rem;
}
#screen-museum .museum-title{
  font-weight:900;
  font-size:clamp(2rem,3vw,3.2rem);
  letter-spacing:0.34em;
  text-transform:uppercase;
  margin-right:-0.34em;
  margin-bottom:1rem;
}
#screen-museum .museum-desc{
  font-size:0.85rem;
  line-height:1.7;
  color:rgba(226,232,240,0.88);
  margin-bottom:0.85rem;
}
#screen-museum .museum-data-note{
  font-size:0.8rem;
  line-height:1.6;
  color:rgba(148,163,184,0.95);
}
#screen-museum .museum-data-note a{
  color:#93c5fd;
  text-decoration:none;
  border-bottom:1px solid rgba(147,197,253,0.4);
}
#screen-museum .museum-data-note a:hover{
  color:#bfdbfe;
  border-bottom-color:rgba(191,219,254,0.9);
}
#screen-museum .museum-controls{
  min-width:260px;
  max-width:420px;
  display:flex;
  flex-direction:column;
  gap:10px;
}
#screen-museum .museum-year-row{
  display:flex;
  justify-content:space-between;
  align-items:center;
}
#screen-museum .museum-year-label{
  font-size:0.8rem;
  letter-spacing:0.16em;
  text-transform:uppercase;
  color:rgba(148,163,184,0.9);
}
#screen-museum .museum-year-value{
  font-size:1.15rem;
  font-weight:700;
  letter-spacing:0.12em;
}
#screen-museum .museum-year-slider{
  width:100%;
}
#screen-museum .museum-play-row{
  display:flex;
  align-items:center;
  gap:10px;
}
#screen-museum .museum-play-btn{
  padding:6px 14px;
  border-radius:999px;
  border:1px solid rgba(148,163,184,0.8);
  background:transparent;
  color:#e5e7eb;
  font-size:0.8rem;
  letter-spacing:0.12em;
  text-transform:uppercase;
  cursor:none;
}
#screen-museum .museum-play-btn:hover{
  background:rgba(15,23,42,0.85);
}
#screen-museum .museum-play-hint{
  font-size:0.75rem;
  line-height:1.5;
  color:rgba(148,163,184,0.95);
}
#screen-museum .museum-map-wrap{
  flex:1;
  padding:0 24px 24px;
}
#museum-map{
  width:100%;
  height:100%;
  border-radius:18px;
  overflow:hidden;
  background:#020617;
}
#screen-museum .museum-close{
  position:absolute;
  top:24px;
  right:40px;
  padding:0;
  background:none;
  border:none;
  outline:none;
  font-size:0.8rem;
  font-weight:600;
  letter-spacing:0.16em;
  text-transform:uppercase;
  color:rgba(148,163,184,0.9);
  cursor:none;
}
#screen-museum .museum-close:hover{
  color:#e5e7eb;
}
@media (max-width:768px){
  #screen-museum .museum-header{
    flex-direction:column;
    padding:16px 20px 10px;
  }
  #screen-museum .museum-map-wrap{
    padding:0 12px 16px;
  }
  #screen-museum .museum-close{
    right:20px;
  }
}

/* Dome Showcase：/intro 十二图与介绍（首页下滑首屏） */
#screen-dome-showcase{
  position:fixed;
  inset:0;
  z-index:9600;
  display:none;
  will-change:transform,opacity;
  transform:translateY(0);
  opacity:1;
  background-color:#000000;
  background-image:radial-gradient(rgba(255,255,255,0.08) 1px,transparent 1px);
  background-size:18px 18px;
  background-attachment:local;
  color:#ffffff;
  overflow:auto;
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
}
#screen-dome-showcase .dome-showcase-corner-veil{
  position:absolute;
  left:0;
  top:0;
  width:min(34.56vw,307px);
  height:min(26.88vh,230px);
  transform:none;
  background:rgba(255,0,0,0.5);
  pointer-events:none;
  z-index:2;
}
#screen-dome-showcase .dome-showcase-top{
  position:relative;
  z-index:3;
  max-width:min(96vw,1680px);
  margin:28px auto 12px;
  padding:0 13px;
  display:flex;
  justify-content:flex-end;
}
#screen-dome-showcase .dome-showcase-close{
  position:static;
  border:none;
  background:none;
  padding:4px 0;
  font-size:13px;
  letter-spacing:0.06em;
  color:rgba(255,255,255,0.55);
  cursor:pointer;
}
#screen-dome-showcase .dome-showcase-close:hover{
  color:#ffffff;
}
#screen-dome-showcase .dome-showcase-content{
  position:relative;
  z-index:1;
  max-width:min(96vw,1680px);
  margin:0 auto 120px;
  padding:0 13px 220px;
}
.dome-showcase-layout{
  display:grid;
  grid-template-columns:minmax(0,440px) minmax(0,1fr);
  gap:calc(clamp(24px,4vw,48px) + 80px);
  align-items:stretch;
  box-sizing:border-box;
}
.dome-showcase-text-column{
  display:flex;
  flex-direction:column;
  gap:0;
  min-width:0;
  max-width:440px;
  width:100%;
  justify-self:start;
  align-self:stretch;
  min-height:0;
}
.dome-showcase-hero{
  flex-shrink:0;
  text-align:right;
  padding-right:clamp(6px,1.2vw,16px);
  box-sizing:border-box;
}
.dome-showcase-hero-title{
  margin:0;
  font-size:clamp(2.75rem,8vw,5.5rem);
  font-weight:900;
  line-height:1.08;
  letter-spacing:0.02em;
  color:#ffffff;
}
.dome-showcase-hero-desc{
  margin-top:clamp(0.9rem,2vw,1.35rem);
}
.dome-showcase-hero-desc p{
  margin:0.85rem 0 0;
  font-size:clamp(12px,1.15vw,15px);
  line-height:1.6;
  font-weight:400;
  color:rgba(255,255,255,0.9);
}
.dome-showcase-hero-desc p:first-child{
  margin-top:0;
}
.dome-showcase-sections-bottom{
  display:flex;
  flex-direction:column;
  gap:clamp(2.5rem,5vw,4rem);
  margin-top:auto;
  padding-top:clamp(1.75rem,4vw,3rem);
}
.dome-showcase-intro-block{
  position:relative;
  z-index:0;
  min-width:0;
  padding-right:clamp(6px,1.2vw,16px);
  box-sizing:border-box;
}
.dome-showcase-bg-num{
  position:absolute;
  right:-0.05em;
  left:auto;
  top:50%;
  transform:translateY(-52%);
  z-index:0;
  font-size:clamp(3rem,10vw,7rem);
  font-weight:900;
  line-height:1;
  letter-spacing:-0.04em;
  color:rgba(255,255,255,0.06);
  pointer-events:none;
  user-select:none;
}
.dome-showcase-intro-inner{
  position:relative;
  z-index:1;
  text-align:right;
}
.dome-showcase-intro-block h2{
  margin:0;
  font-size:clamp(16px,1.45vw,22px);
  line-height:1.25;
  font-weight:700;
  color:#ffffff;
}
.dome-showcase-intro-block p{
  margin:0.85rem 0 0;
  font-size:clamp(12px,1.05vw,14px);
  line-height:1.55;
  font-weight:400;
  color:rgba(255,255,255,0.92);
}
.dome-showcase-photos-grid{
  display:grid;
  grid-template-columns:repeat(3,1fr);
  gap:clamp(10px,1.4vw,18px);
  width:100%;
  min-width:0;
  box-sizing:border-box;
}
.dome-showcase-media-cell{
  min-width:0;
  border-radius:0;
  aspect-ratio:1/1;
  display:flex;
  align-items:stretch;
  justify-content:stretch;
}
.dome-showcase-photo-frame{
  display:block;
  width:100%;
  height:100%;
  max-width:100%;
  overflow:hidden;
  border-radius:0;
  box-sizing:border-box;
  line-height:0;
}
.dome-showcase-photo-frame--placeholder{
  display:flex;
  align-items:center;
  justify-content:center;
  min-height:100%;
  padding:8px 10px;
  background:rgba(255,255,255,0.08);
  font-weight:600;
  font-size:clamp(11px,1.1vw,14px);
  text-align:center;
  color:rgba(255,255,255,0.75);
  line-height:1.2;
}
.dome-showcase-photo-frame--media img,
.dome-showcase-photo-frame--media video{
  width:100%;
  height:100%;
  object-fit:contain;
  object-position:center center;
  display:block;
}
@media (max-width:900px){
  .dome-showcase-layout{
    grid-template-columns:1fr;
    gap:1.75rem;
    align-items:start;
  }
  .dome-showcase-text-column{
    max-width:none;
    min-height:0;
  }
  .dome-showcase-hero-title{
    font-size:clamp(2rem,9vw,3.25rem);
  }
  .dome-showcase-sections-bottom{
    margin-top:clamp(1.5rem,4vw,2.5rem);
    padding-top:0;
  }
  .dome-showcase-intro-block h2{
    font-size:clamp(15px,4vw,21px);
  }
  .dome-showcase-intro-block p{
    font-size:clamp(12px,3.2vw,14px);
  }
  #screen-dome-showcase .dome-showcase-content{
    padding-left:13px;
    padding-right:13px;
  }
  .dome-showcase-photos-grid{
    grid-template-columns:repeat(3,1fr);
    max-width:100%;
  }
}

/* 票面选择中间界面 */
#screen-ticket{
  position:fixed;
  inset:0;
  z-index:9998;
  background:#020617;
  color:#f9fafb;
  display:none;
  overflow:hidden;
  font-family:'Noto Sans SC','SF Pro Display','PingFang SC',system-ui,sans-serif;
}
#screen-ticket .ticket-bg{
  position:absolute;
  inset:0;
  /* 允许内部元素（如左上角返回箭头）接收点击事件 */
  pointer-events:auto;
}
#screen-ticket .ticket-big-num{
  position:absolute;
  bottom:-5%;
  left:-2%;
  font-size:25vw;
  font-weight:900;
  font-style:italic;
  line-height:0.8;
  letter-spacing:-0.06em;
  color:rgba(248,250,252,0.12);
}
#screen-ticket .ticket-meta{
  position:absolute;
  top:4rem;
  left:4rem;
  max-width:none;
  z-index:10;
}
#screen-ticket .ticket-meta h1{
  font-size:4.5rem;
  line-height:0.8;
  font-weight:900;
  font-style:normal;
  letter-spacing:0.34em;
}
#screen-ticket #ticket-city{
  white-space:nowrap;
  overflow:visible;
}
#screen-ticket .ticket-meta p{
  margin-top:4.5rem;
  max-width:22rem;
  font-size:0.95rem;
  line-height:1.6;
  opacity:0.9;
  border-left:4px solid rgba(248,250,252,0.5);
  padding-left:1rem;
}
#screen-ticket .ticket-brand{
  position:absolute;
  top:1.5rem;
  right:2rem;
  font-size:1.5rem;
  font-weight:700;
  font-style:italic;
  opacity:0.75;
}
#ticket-fan-root{
  position:absolute;
  bottom:0;
  right:0;
  width:100%;
  height:100%;
  pointer-events:auto;
  perspective:1800px;
  transform-style:preserve-3d;
}
#screen-ticket[data-ready="0"] #ticket-fan-root{
  opacity:0;
}
#screen-ticket[data-ready="1"] #ticket-fan-root{
  opacity:1;
  transition:opacity 0.4s ease;
}
.ticket-card-shell{
  position:absolute;
  bottom:0;
  right:0;
  transform-origin:bottom right;
  transform-style:preserve-3d;
}
.ticket-card{
  position:relative;
  transform:translate(-50%,-50%);
  width:320px;
  height:440px;
  border-radius:24px;
  box-shadow:0 24px 80px rgba(0,0,0,0.65);
  overflow:hidden;
  cursor:pointer;
  pointer-events:auto;
  z-index:50;
  padding:32px;
  display:flex;
  flex-direction:column;
  /* 卡片已有不透明底色，去掉 backdrop-filter 可显著减轻 GPU 合成压力 */
  backface-visibility:hidden;
}
.ticket-card-inner{
  position:absolute;
  inset:0;
  padding:32px;
  display:flex;
  flex-direction:column;
}
.ticket-card-inner > div{
  /* 强制移除卡片内部各区块的所有边框，彻底避免倾斜时出现穿过卡片中心的细线 */
  border:none !important;
}
.ticket-card-inner > div:nth-child(2){
  /* 确保卡片中间区域没有任何上下边框，避免倾斜时出现一条灰线 */
  border-top:none !important;
  border-bottom:none !important;
}
.ticket-chip{
  font-size:10px;
  font-weight:700;
  padding:4px 10px;
  border-radius:999px;
  background:rgba(15,23,42,0.3);
  color:rgba(248,250,252,0.9);
}
.ticket-arrow{
  width:36px;
  height:36px;
  border-radius:999px;
  border:1px solid rgba(248,250,252,0.35);
  display:flex;
  align-items:center;
  justify-content:center;
  font-size:18px;
}
.ticket-title{
  margin:1.5rem 0 0.75rem;
  font-size:2.5rem;
  line-height:0.9;
  font-family:serif;
}
.ticket-sub{
  font-size:11px;
  opacity:0.7;
}
.ticket-id-block{
  margin-top:auto;
  display:flex;
  justify-content:space-between;
  align-items:flex-end;
}
.ticket-id-main{
  font-size:3.5rem;
  line-height:1;
  font-family:serif;
}
.ticket-valid{
  font-size:10px;
  letter-spacing:0.25em;
  transform-origin:bottom right;
  transform:rotate(-90deg) translateX(16px);
  opacity:0.6;
}
.ticket-glow{
  position:absolute;
  inset:0;
  border-radius:24px;
  pointer-events:none;
  /* 关闭高光层，避免在卡片倾斜时出现残留的亮线 */
  background:none;
  display:none;
}
.ticket-border{
  position:absolute;
  inset:0;
  border-radius:24px;
  /* 关闭外边框，避免倾斜时产生视觉上的中间细线 */
  border:none;
  pointer-events:none;
  display:none;
}
.ticket-help{
  position:absolute;
  bottom:2.5rem;
  left:4rem;
  font-size:12px;
  letter-spacing:0.15em;
  text-transform:uppercase;
  opacity:0.6;
}

/* 城市选择 */
#screen-city{position:fixed;inset:0;z-index:9999;background:var(--bg);
  display:none;flex-direction:column;align-items:center;justify-content:flex-start;gap:24px;
  overflow-y:auto;-webkit-overflow-scrolling:touch;
  padding:max(20px, env(safe-area-inset-top)) max(16px, env(safe-area-inset-right)) max(28px, env(safe-area-inset-bottom)) max(16px, env(safe-area-inset-left));
  box-sizing:border-box;}

/* 移动端提示页（仅在 JS 判断为移动端时展示） */
#screen-mobile-tip{
  position:fixed;
  inset:0;
  z-index:10000;
  display:none;
  align-items:center;
  justify-content:center;
  padding:24px;
  background:rgba(10,10,12,0.85);
  -webkit-backdrop-filter:blur(10px);
  backdrop-filter:blur(10px);
}
#screen-mobile-tip .mobile-tip-card{
  width:min(520px, 92vw);
  border-radius:18px;
  padding:22px 18px;
  background:rgba(255,255,255,0.92);
  box-shadow:0 18px 60px rgba(0,0,0,0.45);
  color:#0b0b0c;
  text-align:center;
}
#screen-mobile-tip .mobile-tip-title{
  font-weight:900;
  letter-spacing:0.18em;
  font-size:18px;
  opacity:0.92;
}
#screen-mobile-tip .mobile-tip-desc{
  margin-top:12px;
  font-weight:800;
  font-size:16px;
  letter-spacing:0.08em;
}
#screen-mobile-tip .mobile-tip-actions{
  margin-top:18px;
  display:flex;
  justify-content:center;
}
#screen-mobile-tip .mobile-tip-btn{
  appearance:none;
  border:none;
  border-radius:999px;
  padding:10px 16px;
  font-weight:900;
  letter-spacing:0.16em;
  background:#111827;
  color:#fff;
  cursor:pointer;
}
#screen-mobile-tip .mobile-tip-btn:active{
  transform:translateY(1px);
}
.ch{flex-shrink:0;}
.ch h1{font-size:22px;font-weight:200;letter-spacing:10px;margin-bottom:18px;text-align:center;}
.ch p{font-size:9px;color:var(--t4);letter-spacing:4px;text-align:center;}
.city-grid{display:grid;grid-template-columns:repeat(4, minmax(0, 1fr));gap:1px;background:var(--bd2);
  width:100%;max-width:920px;box-sizing:border-box;}
.cc{background:var(--bg);padding:22px 18px;cursor:pointer;transition:background .15s;min-width:0;position:relative;}
@media (max-width:900px){
  .city-grid{grid-template-columns:repeat(2, minmax(0, 1fr));}
  .cc{padding:16px 14px;}
}
@media (max-width:400px){
  .city-grid{grid-template-columns:1fr;}
}
.cc:hover{background:var(--bg3);}
.cc-name{font-size:15px;font-weight:400;font-style:normal;letter-spacing:5px;margin-bottom:4px;}
.cc-pop{font-size:9px;color:var(--t3);letter-spacing:1px;}
.cc-tag{position:absolute;top:9px;right:9px;font-size:8px;color:var(--t4);}

/* 主界面 */
#screen-game{
  position:fixed;
  inset:0;
  display:none;
  padding-bottom:0; /* 地图铺满到屏幕最底部，由底部导航悬浮覆盖 */
}
#map-placeholder{width:100%;height:100%;background:#1a1a1a;}
/* 客流排队提示：与 #notif-box .notif.notif-compact 同宽（220px 帽 + min(320,vw-32)），高度随换行向下拉长；z-index 高于 #notif-box，保证「置顶」在上层 */
.flow-admission-pin{
  position:fixed;
  top:max(16px, env(safe-area-inset-top, 0px));
  right:max(16px, env(safe-area-inset-right, 0px));
  z-index:3010;
  width:min(320px, calc(100vw - 32px));
  max-width:220px;
  box-sizing:border-box;
  pointer-events:none;
  animation:nIn .2s ease;
}
.flow-admission-pin-inner{
  width:100%;
  box-sizing:border-box;
  padding:7px 10px;
  background:#ffffff;
  border-radius:0;
  border-left:3px solid #ef4444;
  font-size:11px;
  line-height:1.35;
  color:#111827;
  box-shadow:0 8px 20px rgba(15,23,42,0.25);
}
.flow-admission-pin-title{
  font-size:11px;
  font-weight:700;
  letter-spacing:0.02em;
  color:#111827;
  margin:0 0 6px;
  line-height:1.35;
  white-space:normal;
  overflow:visible;
  word-break:break-word;
  overflow-wrap:anywhere;
}
.flow-admission-pin-detail{
  font-size:11px;
  line-height:1.45;
  color:#374151;
  white-space:normal;
  overflow:visible;
  text-overflow:clip;
  word-break:break-word;
  overflow-wrap:anywhere;
}
.flow-admission-pin-detail .flow-admission-pin-p{
  margin:0 0 6px;
}
.flow-admission-pin-detail .flow-admission-pin-p:last-child{
  margin-bottom:0;
}
.flow-admission-pin-detail strong{
  color:#b91c1c;
  font-weight:600;
}
/* MapLibre/OSM 版权信息：左下、无白底，略抬高避开底部导航（margin-bottom 越小越靠下） */
#map-placeholder .maplibregl-ctrl-bottom-left{
  margin:0 0 54px 10px;
}
#map-placeholder .maplibregl-ctrl-attrib,
#map-placeholder .maplibregl-ctrl-attrib.maplibregl-compact{
  background:transparent !important;
  box-shadow:none !important;
  border:none !important;
}
#map-placeholder .maplibregl-ctrl-attrib-inner{
  background:transparent !important;
  box-shadow:none !important;
}
#map-placeholder .maplibregl-ctrl-attrib,
#map-placeholder .maplibregl-ctrl-attrib a{
  color:rgba(22,22,28,0.92);
  text-shadow:
    0 0 6px rgba(255,255,255,1),
    0 0 2px rgba(255,255,255,0.95),
    0 1px 3px rgba(0,0,0,0.45);
}
#map-placeholder .maplibregl-ctrl-attrib a:hover{
  color:rgba(10,10,14,0.98);
}
/* 地图加载失败：与 #hint-wrap / confirm-line-bar 同系的深色浮层卡片，不挡死底部导航（容器 pointer-events:none） */
.map-load-error-ui{
  position:fixed;
  inset:0;
  z-index:1001;
  display:none;
  align-items:center;
  justify-content:center;
  padding:24px 16px 96px;
  box-sizing:border-box;
  pointer-events:none;
}
.map-load-error-card{
  pointer-events:auto;
  width:100%;
  max-width:min(320px,calc(100vw - 32px));
  background:rgba(8,8,8,0.96);
  border:1px solid var(--bd3);
  border-radius:16px;
  padding:20px 20px 16px;
  box-shadow:0 8px 32px rgba(0,0,0,0.55),0 0 0 1px rgba(255,255,255,0.05);
}
.map-load-error-kicker{
  font-size:9px;
  letter-spacing:0.28em;
  text-transform:uppercase;
  color:var(--t4);
  margin-bottom:8px;
}
.map-load-error-title{
  margin:0 0 10px;
  font-size:15px;
  font-weight:600;
  letter-spacing:0.06em;
  color:var(--t1);
  line-height:1.35;
}
.map-load-error-desc{
  margin:0 0 16px;
  font-size:11px;
  line-height:1.55;
  color:var(--t3);
  letter-spacing:0.04em;
}
.map-load-error-retry{
  display:flex;
  align-items:center;
  justify-content:center;
  width:100%;
  padding:11px 16px;
  font-size:11px;
  font-weight:600;
  letter-spacing:0.14em;
  cursor:pointer;
  border-radius:12px;
  border:1px solid rgba(148,163,184,0.45);
  background:rgba(15,23,42,0.85);
  color:rgba(248,250,252,0.95);
  transition:border-color .15s,background .15s,transform .12s;
}
.map-load-error-retry:hover:not(:disabled){
  border-color:rgba(248,250,252,0.55);
  background:rgba(30,41,59,0.95);
  transform:translateY(-1px);
}
.map-load-error-retry:disabled{
  opacity:0.65;
  cursor:wait;
}
.map-load-error-foot{
  margin:12px 0 0;
  font-size:9px;
  line-height:1.5;
  color:var(--t4);
  letter-spacing:0.06em;
}
/* 存档加载 Loader（转换双坐标 + 客流模型加载） */
.screen-save-load-ui{
  position:fixed;
  inset:0;
  z-index:1002; /* 高于底部导航栏（1000）与地图状态层（1001） */
  display:none;
  align-items:center;
  justify-content:center;
  padding:0;
  box-sizing:border-box;
  background:rgba(255,255,255,0.62);
  backdrop-filter:blur(10px);
  -webkit-backdrop-filter:blur(10px);
}
.screen-save-load-card{
  width:100%;
  height:100%;
  max-width:none;
  background:transparent;
  border:none;
  border-radius:0;
  padding:0;
  box-shadow:none;
  text-align:center;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  gap:18px;
}
.screen-save-load-title{
  margin:0;
  font-size:20px;
  font-weight:700;
  letter-spacing:0.02em;
  color:#0f172a;
  line-height:1.3;
}
.screen-save-load-desc{
  margin:0;
  max-width:min(760px,84vw);
  font-size:12px;
  line-height:1.5;
  color:rgba(15,23,42,0.75);
  word-break:break-word;
  display:none;
}
.screen-save-load-spinner{
  width:40px;
  height:40px;
  margin:0;
  border-radius:50%;
  border:3px solid rgba(15,23,42,0.12);
  border-top-color:rgba(15,23,42,0.8);
  animation:screenSaveSpin .9s linear infinite;
}
@keyframes screenSaveSpin{
  0%{transform:rotate(0deg);}
  100%{transform:rotate(360deg);}
}
/* 自定义地图缩放控件：右下角，沿用倍速按钮风格 */
#custom-zoom-control{
  position:fixed;
  right:12px !important;   /* 与右下角 menu 按钮右缘对齐 */
  bottom:74px !important;  /* 再往下移一段，使中间位置更贴近 menu 按钮 */
  z-index:1001;
  display:flex;
  flex-direction:column;
  gap:6px;
}
/* 缩放按钮略大于倍速按钮 */
#custom-zoom-control .sp-btn{
  width:32px !important;
  height:32px !important;
  font-size:16px !important; /* 放大 + / − 符号 */
}
/* 线路客流量 1.5km 覆盖图例：右下角、在底栏与缩放按钮之上，z-index 低于 #bottombar(1000)/#custom-zoom-control(1001) 以免挡点击 */
#ridership-line-coverage-legend{
  bottom:calc(154px + env(safe-area-inset-bottom, 0px));
}
@media (max-width:768px){
  #ridership-line-coverage-legend{
    bottom:calc(168px + env(safe-area-inset-bottom, 0px));
  }
}
/* 底部导航栏（极简圆形按钮布局） */
#bottombar{
  position:fixed;
  left:0;
  right:0;
  bottom:0;
  z-index:1000;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:10px 12px;
  pointer-events:none; /* 只让内部按钮响应点击 */
}
#bottombar > div{
  pointer-events:auto;
}
.bb-strip{
  flex:1;
  max-width:none;
  width:100%;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:16px;
  padding:0;
  border-radius:0;
  background:transparent;
  border:none;
  box-shadow:none;
  backdrop-filter:none;
  font-size:11px;
  color:#0f172a;
}
.bb-left,
.bb-right{
  display:flex;
  align-items:center;
  gap:10px;
}
.bb-left{
  flex:1;
}
.bb-right{
  flex-shrink:0;
}
.bb-tools{
  display:flex;
  align-items:center;
  gap:8px;
  margin:0 10px;
}
.bb-tool-btn{
  width:28px;
  height:28px;
  padding:0;
  border-radius:999px;
  border:1px solid rgba(31,41,55,0.7);
  background:rgba(15,23,42,0.7);
  cursor:pointer;
  color:rgba(249,250,251,0.9);
  display:flex;
  align-items:center;
  justify-content:center;
  transition:background .16s ease-out,border-color .16s ease-out,color .16s ease-out;
}
.bb-tool-btn:hover{
  border-color:rgba(249,250,251,0.9);
  background:rgba(15,23,42,0.9);
  color:#fff;
}
.bb-tool-btn.on{
  border-color:rgba(249,250,251,0.95);
  background:rgba(15,23,42,1);
  color:#fff;
}
.bb-tool-btn img{
  width:12px;
  height:12px;
  display:block;
  filter:brightness(0) invert(1);
}
.bb-tool-icon svg{
  width:14px;
  height:14px;
  display:block;
}
.bb-tool-icon{
  font-size:11px;
  line-height:1;
  font-weight:600;
  display:inline-block;
  vertical-align:middle;
}
.bb-tool-icon-line{
  font-size:11px;
}
/* 城市名：简洁文本标签 */
.bb-brand{
  display:flex;
  align-items:center;
  padding:0;
  border-radius:0;
  background:transparent;
  border:none;
}
.bb-brand .tbl{
  display:none;
}
.bb-brand .tbc{
  margin:0;
  border-right:none;
  padding:0;
  font-size:11px;
  letter-spacing:1px;
  color:#ffffff;
}
.bb-stats{
  display:none;
}
.bb-lines{
  display:none;
}
.bb-net-length{
  margin-left:auto;
  margin-right:4px;
  display:flex;
  align-items:baseline;
  font-size:11px;
  color:#fff;
  letter-spacing:.12em;
}
.bb-net-length-label{
  text-transform:uppercase;
  color:#fff;
}
.bb-net-length-val{
  margin-left:4px;
  color:#fff;
  font-size:11px;
  font-weight:500;
}
.bb-modes{
  display:flex;
  gap:6px;
}

.tbl{font-size:9px;color:var(--t4);letter-spacing:4px;padding-right:12px;border-right:1px solid var(--bd2);margin-right:12px;}
.tbc{font-size:12px;font-weight:500;color:var(--t1);letter-spacing:2px;padding-right:12px;border-right:1px solid var(--bd2);margin-right:12px;}
.tbs{display:flex;flex-direction:column;padding:0 10px;border-right:1px solid var(--bd2);}
.tbs-l{font-size:7px;color:var(--t4);letter-spacing:1.5px;text-transform:uppercase;margin-bottom:1px;}
.tbs-v{font-size:11px;font-weight:400;color:var(--t1);}

/* Metro line style nav buttons */
.metro-line-card{
  display:flex;
  align-items:flex-end;
  gap:22px;
}
.metro-line-point{
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:4px;
}
.metro-line-point > div{
  width:8px;
  height:8px;
  border-radius:50%;
  background:#fff;
}
.metro-line-point p{
  font-size:10px;
  color:var(--t1);
  white-space:nowrap;
}

/* 时间块 */
#time-block{
  display:flex;
  align-items:center;
  gap:6px;
  padding:0 8px;
}
#time-block > .time-wrap{
  display:flex;
  align-items:center;
  gap:4px;
}
#time-display{
  font-size:11px;
  font-weight:300;
  letter-spacing:2px;
  color:#e5e7eb;
}
#day-display{
  display:none;
}

/* 地图样式为浅色时，底部导航栏关键文字仍保持白色（时间、里程、城市名、城市名缩写） */
body.ui-light #time-display{
  color:#ffffff;
}
body.ui-light .bb-net-length,
body.ui-light .bb-net-length-label,
body.ui-light .bb-net-length-val{
  color:#ffffff;
}
body.ui-light .tbc{
  color:#ffffff;
}
/* 地图样式为「标准」时：文字全部改为黑色 */
body.ui-standard #time-display,
body.ui-standard .bb-net-length,
body.ui-standard .bb-net-length-label,
body.ui-standard .bb-net-length-val,
body.ui-standard .tbc,
body.ui-standard .bb-brand .tbc{
  color:#111827;
}
/* 地图样式为指定浅色主题时（标准/月光银/远山黛/马卡龙）：底部关键文字统一黑色 */
body.ui-nav-black #time-display,
body.ui-nav-black .bb-net-length,
body.ui-nav-black .bb-net-length-label,
body.ui-nav-black .bb-net-length-val,
body.ui-nav-black .tbc,
body.ui-nav-black .bb-brand .tbc{
  color:#111827;
}

#peak-badge{display:none;}
#peak-badge.peak{background:rgba(200,151,58,0.15);color:var(--peak);border:1px solid rgba(200,151,58,0.3);}
#peak-badge.offpeak{background:rgba(74,158,106,0.12);color:var(--offpeak);border:1px solid rgba(74,158,106,0.25);}
.speed-btns{
  display:flex;
  gap:6px;
  align-items:center;
}
.sp-btn{
  width:26px;
  height:26px;
  padding:0;
  border-radius:999px;
  background:rgba(0,0,0,0.7);
  border:1px solid rgba(31,41,55,0.7);
  color:rgba(249,250,251,0.9);
  font-size:11px;
  cursor:pointer;
  transition:all .12s;
  display:flex;
  align-items:center;
  justify-content:center;
}
.sp-btn:hover{
  border-color:rgba(249,250,251,0.9);
  box-shadow:0 0 0 1px rgba(148,163,184,0.8);
}
.sp-btn.on{
  background:rgba(15,23,42,1);
  color:#fff;
  border-color:rgba(249,250,251,0.95);
}
.speed-slider{
  display:flex;
  flex-direction:column;
  gap:0;
  margin-left:-13px;
  user-select:none;
}
.speed-track{
  position:relative;
  display:flex;
  align-items:center;
  height:24px;
  padding:0 8px;
  cursor:pointer;
  border-radius:999px;
  background:rgba(15,23,42,0.7);
  border:1px solid rgba(31,41,55,0.7);
}
.speed-bubble{
  position:absolute;
  top:-24px;
  left:0;
  transform:translateX(-50%);
  min-width:40px;
  height:20px;
  padding:0 6px;
  border-radius:999px;
  background:rgba(15,23,42,0.95);
  color:#fff;
  display:flex;
  align-items:center;
  justify-content:center;
  font-size:10px;
  box-shadow:0 4px 10px rgba(0,0,0,0.25);
  pointer-events:none;
}
.speed-bubble-hidden{
  opacity:0;
  transform:translateX(-50%) translateY(4px);
  transition:opacity .15s ease,transform .15s ease;
}
.speed-bubble:not(.speed-bubble-hidden){
  opacity:1;
  transform:translateX(-50%) translateY(0);
}
.speed-bars{
  display:flex;
  align-items:flex-end;
  gap:4px;
  width:140px;
  height:9px;
}
.speed-bar{
  flex:0 0 3px;
  width:3px;
  border-radius:999px;
  height:100%;
  background:rgba(156,163,175,0.9); /* 灰色竖条 */
  transition:background-color .15s ease;
}
.speed-bar.active{
  background:rgba(255,255,255,1); /* 选中为纯白 */
}
.speed-current{
  font-size:10px;
  color:rgba(249,250,251,0.9);
}

@media (max-width:768px){
  :root{
    /* 面板等 UI 在小屏上按视口宽度等比缩小，避免盖住地图过多 */
    --ui-scale: min(1, calc(100vw / 414));
  }
  html,body{
    height:auto;
    min-height:100%;
    overflow:auto;
    overflow-x:hidden;
  }
  #screen-ticket{
    position:fixed;
    inset:0;
    overflow:hidden;
  }
  #screen-ticket .ticket-meta{
    top:max(1.25rem, env(safe-area-inset-top));
    left:max(1rem, env(safe-area-inset-left));
    right:max(1rem, env(safe-area-inset-right));
    max-width:none;
  }
  #screen-ticket .ticket-meta h1{
    font-size:2.4rem;
    letter-spacing:0.18em;
  }
  #screen-ticket .ticket-meta p{
    margin-top:1.5rem;
    font-size:0.85rem;
  }
  #screen-ticket .ticket-brand{
    top:1rem;
    right:1.5rem;
    font-size:1.1rem;
  }
  #ticket-fan-root{
    bottom:0;
    right:0;
  }
  /* 票面尺寸由脚本按视口与扇面半径同步设置，避免固定高度与扇形几何错位 */
  .ticket-help{
    left:max(1rem, env(safe-area-inset-left));
    right:max(1rem, env(safe-area-inset-right));
    bottom:max(1rem, env(safe-area-inset-bottom));
    text-align:center;
    font-size:10px;
    letter-spacing:0.1em;
    line-height:1.4;
  }
  #screen-game{
    padding-bottom:0;
  }
  #bottombar{
    padding:8px max(8px, env(safe-area-inset-left)) max(8px, env(safe-area-inset-bottom)) max(8px, env(safe-area-inset-right));
    bottom:0;
  }
  .bb-strip{
    gap:8px;
    align-items:center;
  }
  .bb-left{
    flex:1;
    min-width:0;
    flex-wrap:nowrap;
    row-gap:0;
    overflow:hidden;
  }
  .bb-right{
    gap:6px;
    flex-shrink:0;
  }
  .bb-brand .tbc{
    max-width:min(120px, 26vw);
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap;
    font-size:11px;
  }
  .bb-net-length-label{
    display:none;
  }
  .bb-net-length-val{
    font-size:10px;
  }
  #time-display{
    font-size:10px;
    white-space:nowrap;
  }
  .speed-slider{
    flex:1 1 100px;
    min-width:72px;
    max-width:160px;
  }
  .bb-tools{
    overflow-x:auto;
    padding-bottom:4px;
    -webkit-overflow-scrolling:touch;
    flex-shrink:0;
  }
  .bb-tool-btn{
    width:32px;
    height:32px;
    flex-shrink:0;
  }
  /* 移动端面板：基础位置约束（尺寸由 openPanel() JS 强制覆盖，无需在此重复） */
  .panel{
    top:8px;
    left:8px;
    right:auto;
    transform:none;
  }
  #custom-zoom-control{
    right:10px !important;
    bottom:88px !important;
  }
}

/* =============================
   移动端：底部“更多”（三点）弹窗
   收纳：左侧功能按钮 + 时间轴（speed slider）
   桌面端不显示，避免影响布局/交互
   ============================= */
#nav-btn-more{
  display:none;
}
.mobile-nav-menu{
  position:fixed;
  left:max(10px, env(safe-area-inset-left));
  bottom:62px;
  z-index:1001;
  width:112px; /* 收紧窗口宽度，让右侧空白更少 */
  display:none;
  flex-direction:column;
  justify-content:flex-start;
  gap:0px;
  padding:4px 4px 4px; /* 上下留白与左右一致 */
  height:fit-content; /* 强制自适应内容，避免出现莫名大空隙 */
  border-radius:12px;
  background:rgba(0,0,0,0.86);
  border:1px solid rgba(31,41,55,0.7);
  box-shadow:0 10px 35px rgba(0,0,0,0.55),0 0 0 1px rgba(255,255,255,0.04);
  overflow:visible;
  pointer-events:none;
}
.mobile-nav-menu.open{
  display:flex;
  pointer-events:auto;
}
.mobile-nav-menu-content{
  display:flex;
  flex-direction:column;
  gap:2px; /* 行距加大 */
  margin-top:0;
}
.mobile-nav-menu-close{
  position:absolute;
  top:6px;
  right:6px;
  width:26px;
  height:26px;
  border-radius:999px;
  border:1px solid rgba(31,41,55,0.7);
  background:rgba(15,23,42,0.5);
  color:rgba(249,250,251,0.95);
  cursor:pointer;
  display:flex;
  align-items:center;
  justify-content:center;
  font-size:16px;
  line-height:1;
}
.mobile-nav-menu-close:hover{
  border-color:rgba(249,250,251,0.9);
  background:rgba(15,23,42,0.8);
  color:#fff;
}

/* 用户要求：隐藏叉叉（关闭按钮） */
.mobile-nav-menu-close{
  display:none;
}

/* 弹窗内部紧凑布局（3列圆形按钮 + 紧凑间距） */
.mobile-nav-menu .bb-tools{
  display:grid;
  grid-template-columns:repeat(3, 32px);
  gap:3px 3px; /* 行距（竖向）加大，列距保持紧凑 */
  margin:0;
  padding:0;
  overflow:hidden;
}
.mobile-nav-menu .bb-tool-btn{
  width:32px;
  height:32px;
  flex-shrink:0;
}

/* 移动端建线快捷按钮（站点旁 ✓ / ✕），风格与 navigation 圆按钮保持一致 */
.mobile-place-action-btn{
  width:28px;
  height:28px;
  border-radius:999px;
  border:1px solid rgba(31,41,55,0.7);
  background:rgba(15,23,42,0.86);
  color:rgba(249,250,251,0.95);
  display:flex;
  align-items:center;
  justify-content:center;
  box-shadow:0 6px 18px rgba(0,0,0,0.38),0 0 0 1px rgba(255,255,255,0.04);
  font-size:13px;
  font-weight:700;
  line-height:1;
}

/* 弹窗内缩小 speed slider，避免撑大窗口宽度 */
.mobile-nav-menu .speed-slider{
  margin-left:0;
  width:102px;           /* 让时间轴更贴近右侧边缘 */
  /* 注意：父容器是 flex-column，flex-basis 影响“高度”。
     不要把 92px 当作竖向高度，否则会产生你看到的巨大空隙。 */
  flex:0 0 auto;
  margin-top:0;
  margin-bottom:0;
  position:relative;
  height:auto;          /* 让高度由内容决定，避免 labels 绝对定位导致“中间留空” */
  display:flex;
  flex-direction:column;
  gap:0;
  justify-content:flex-start;
}
.mobile-nav-menu .speed-track{
  height:18px;
  padding:0 4px;
}
.mobile-nav-menu .speed-bars{
  width:auto;          /* 由 speed-track 内容区撑满 */
  flex:1 1 auto;
  height:6px;
  gap:0;               /* 用 space-between 均匀分布竖片 */
  justify-content:space-between;
}
.mobile-nav-menu .speed-bar{
  flex:0 0 2px;
  width:2px;
}
.mobile-nav-menu .speed-bubble{
  top:-20px;
}
.mobile-nav-menu #time-display{
  display:none;
}

/* speed slider 两端文字：暂停（左）与 300X（右） */
.mobile-speed-ends-labels{
  display:flex;
  justify-content:space-between;
  align-items:center;
  width:102px;
  padding:0 3px;
  margin-top:0;
  position:static;      /* 走正常流，避免在 speed-track 下方“留一大格” */
  margin-top:0px;       /* 与上方时间轴保持一致的行距 */
  font-size:8px;
  letter-spacing:0.02em;
  color:rgba(249,250,251,0.9);
  pointer-events:none;
}

/* 与 JS isTouchFirstDevice 对齐：仅「窄视口 + 无悬停能力」时显示「更多」入口，避免电脑缩窄窗口仍出现移动端按钮 */
@media (max-width:768px) and (hover: none){
  #nav-btn-more{
    display:flex;
    align-items:center;
    justify-content:center;
    pointer-events:auto;
    margin-left:6px; /* 紧贴城市名右侧，仍保持在左侧 */
    flex-shrink:0;
    position:relative;
  }
  /* 三点字形基线偏下：微调到圆形按钮内部垂直居中 */
  #nav-btn-more .bb-tool-icon{
    position:absolute;
    inset:0;
    display:flex;
    align-items:center;
    justify-content:center;
    line-height:1;
    font-size:16px;
    /* “...” 字形基线略偏：用极小偏移把它对齐圆心 */
    transform:translateY(-1px);
  }
  /* 保留：#nav-btn-more 已在上方设置 position:relative */
  /* 初始进入地图：在“三点”右侧显示当前时间 */
  #time-display{
    display:block;
    margin-left:6px;
    font-size:10px;
    line-height:1;
    white-space:nowrap;
  }
}
.pause-btn{
  width:28px;
  height:28px;
  padding:0;
  border-radius:999px;
  background:rgba(15,23,42,0.8);
  border:1px solid rgba(31,41,55,0.9);
  color:#f9fafb;
  font-size:13px;
  cursor:pointer;
  transition:all .12s;
  display:flex;
  align-items:center;
  justify-content:center;
}
.pause-btn:hover,.pause-btn.on{border-color:rgba(255,255,255,0.4);}

.tbr{margin-left:auto;display:flex;gap:5px;}
.tb-btn{
  width:28px;
  height:28px;
  padding:0;
  border-radius:999px;
  background:rgba(15,23,42,0.7);
  border:1px solid rgba(31,41,55,0.7);
  color:rgba(249,250,251,0.9);
  font-size:16px;
  letter-spacing:.5px;
  cursor:pointer;
  display:flex;
  align-items:center;
  justify-content:center;
}
.tb-btn:hover{
  color:#fff;
  border-color:rgba(249,250,251,0.95);
  background:rgba(15,23,42,0.9);
}

/* 线路区（底部导航中的横向块，模拟地铁线路牌） */
.sb-sec{padding:0;}
.sb-sec-title{font-size:7px;color:var(--t4);letter-spacing:2px;text-transform:uppercase;margin-bottom:6px;}
.btn-nl{padding:6px 10px;background:var(--bg3);border:1px solid var(--bd3);
  color:var(--t2);font-size:9px;letter-spacing:1.5px;cursor:pointer;transition:all .12s;text-align:left;}
.btn-nl:hover{background:var(--bg4);color:var(--t1);}
#lines-scroll{
  display:flex;
  flex-direction:row;
  align-items:center;
  gap:4px;
  overflow-x:auto;
  padding:0 4px;
  max-width:32vw;
}
.line-row{
  padding:5px 8px;margin-bottom:0;cursor:pointer;
  border:1px solid var(--bd2);transition:all .12s;
  border-radius:999px;background:rgba(12,12,12,0.9);
}
.line-row:hover,.line-row.active{
  border-color:var(--t2);background:var(--bg3);
}
.lr-top{display:flex;align-items:center;gap:6px;margin-bottom:3px;}
.lr-dot{
  width:14px;height:14px;border-radius:50%;flex-shrink:0;
  border:2px solid rgba(0,0,0,0.7);
  box-shadow:0 0 0 1px rgba(0,0,0,0.6);
}
.lr-name{font-size:11px;font-weight:500;color:var(--t1);flex:1;}
.lr-btns{display:flex;gap:2px;}
.lr-ibtn{background:none;border:none;color:var(--t4);cursor:pointer;font-size:11px;padding:1px 3px;transition:color .12s;line-height:1;}
.lr-ibtn:hover{color:var(--t1);}
.lr-sub{font-size:9px;color:var(--t3);padding-left:15px;}
.sb-tips{display:none;}
.sb-tip{font-size:8px;color:var(--t4);line-height:2.2;}

/* 确认创建该线路 条（浮在底部导航上方） */
.confirm-line-bar{position:fixed;bottom:66px;left:50%;transform:translateX(-50%);z-index:1000;
  background:rgba(8,8,8,0.95);border:1px solid var(--bd3);padding:8px 14px;border-radius:12px;
  box-shadow:0 4px 20px rgba(0,0,0,0.4);}
.confirm-line-bar .m-btn.pri{padding:8px 20px;font-size:11px;letter-spacing:2px;}
/* 提示条：容器可点击关闭按钮 */
#hint-wrap{position:fixed;bottom:80px;left:50%;transform:translateX(-50%);z-index:1000;
  background:rgba(8,8,8,0.95);border:1px solid var(--bd3);
  padding:5px 28px 5px 14px;font-size:9px;color:var(--t3);letter-spacing:1px;
  white-space:nowrap;display:flex;align-items:center;gap:6px;box-sizing:border-box;}
#hint{flex:1;}
#hint-close{position:absolute;top:50%;right:6px;transform:translateY(-50%);
  background:none;border:none;color:var(--t4);cursor:pointer;font-size:12px;line-height:1;padding:2px 4px;border-radius:6px;}
#hint-close:hover{color:var(--t1);background:rgba(255,255,255,0.08);}

/* 弹窗基础：形状 16–24px 圆角，质感 扁平+阴影层级，宽度 320px，位置 top 12px left 12px */
.panel{
  position:fixed;z-index:2000;background:rgba(0,0,0,0.8);
  border:1px solid var(--bd2);display:none;flex-direction:column;
  top:12px;left:12px;
  width:min(320px,calc(100vw - 24px));
  max-height:calc(100vh - 96px);
  border-radius:20px;
  box-shadow:0 12px 40px rgba(0,0,0,0.5),0 0 0 1px rgba(255,255,255,0.06);
  overflow:hidden;
}
.ph{padding:10px 12px;border-bottom:1px solid var(--bd2);display:flex;justify-content:space-between;align-items:center;flex-shrink:0;}
.ph-title{font-size:9px;color:var(--t3);letter-spacing:2px;text-transform:uppercase;}
.ph-close{background:none;border:none;color:var(--t4);cursor:pointer;font-size:14px;line-height:1;transition:color .12s;border-radius:10px;padding:4px;}
.ph-close:hover{color:var(--t1);background:rgba(255,255,255,0.06);}
.pb{padding:12px;overflow-y:auto;flex:1;}

/* 线路创建/编辑弹窗 */
#modal-line,#modal-operate{
  top:12px;left:12px;transform:none;width:320px;max-height:calc(100vh - 96px);
}
/* 添加线路 - 双卡片设计（第一版） */
#modal-line.panel{
  background:transparent;border:none;display:none;flex-direction:column;gap:8px;padding:0;
  /* 不用 .panel 的外阴影：线路设置由内部卡片承担视觉，避免整组叠一层大投影 */
  box-shadow:none;
}
#modal-line .modal-line-layout{
  display:flex;flex-direction:row;align-items:stretch;gap:8px;width:100%;
}
#modal-line .modal-line-main{
  flex:0 0 auto;width:100%;max-width:320px;
}
#modal-line.panel.modal-line--palette-open{
  width:min(568px,calc(100vw - 24px)) !important;
  max-width:min(568px,calc(100vw - 24px));
  overflow:visible;
}
#modal-line.panel.modal-line--palette-overlay{
  display:flex !important;
  /* overlay 模式下只显示配色抽屉：宽度与抽屉一致，避免额外阴影/空白 */
  width:240px !important;
  max-width:min(240px,calc(100vw - 24px));
  background:transparent !important;
  border:none !important;
  box-shadow:none !important;
  /* 避免 .panel 的 overflow:hidden 裁切配色卡片四周阴影 */
  overflow:visible !important;
  z-index:2100;
}
#modal-line.panel.modal-line--palette-overlay .modal-line-layout{
  gap:0;
}
#modal-line.panel.modal-line--palette-overlay .modal-line-main{
  display:none;
}
#modal-line.panel.modal-line--palette-overlay .modal-line-close{
  display:none;
}
#modal-line .line-color-palette-drawer{
  display:none;flex:0 0 240px;width:240px;max-width:calc(100vw - 360px);
  max-height:calc(100vh - 96px);
  /* 与左侧主栏等高会拉出一截空白，改为按内容高度贴合 */
  align-self:flex-start;
}
#modal-line.modal-line--palette-open .line-color-palette-drawer{
  display:flex;flex-direction:column;
}
#modal-line .line-color-palette-inner{
  flex:0 1 auto;min-height:0;max-height:calc(100vh - 96px);overflow-y:auto;overflow-x:hidden;
  background:rgba(0,0,0,0.8);border:1px solid #333;border-radius:20px;padding:16px 14px;color:#fff;
  /* 暂时取消面板外阴影（恢复时改回 0 0 22px … + inset） */
  box-shadow:none;
}
#modal-line .line-color-palette-hd{
  font-size:11px;font-weight:700;letter-spacing:0.12em;text-transform:uppercase;color:#888;margin-bottom:12px;
}
#modal-line .line-color-palette-sec{margin-bottom:14px;}
#modal-line .line-color-palette-sec:last-child{margin-bottom:0;}
#modal-line .line-color-palette-sec-title{
  font-size:11px;color:#9ca3af;font-weight:600;margin-bottom:8px;
}
#modal-line .line-official-color-empty{
  font-size:11px;color:#6b7280;line-height:1.5;margin:0;
}
#modal-line .line-official-color-grid{
  display:flex;flex-direction:column;gap:4px;max-height:min(280px,40vh);
  overflow-y:auto;padding-right:4px;margin:0 -2px 0 0;
}
#modal-line .line-official-swatch{
  display:flex;align-items:center;gap:8px;width:100%;
  padding:6px 8px;border:none;border-radius:10px;background:#222;
  cursor:pointer;color:#e5e7eb;font-size:11px;text-align:left;
  border:1px solid transparent;transition:background .15s,border-color .15s,box-shadow .15s;
}
#modal-line .line-official-swatch:hover{background:#2a2a2a;}
#modal-line .line-official-swatch.active{
  border-color:rgba(255,255,255,0.35);
  box-shadow:0 0 0 1px rgba(255,255,255,0.06);
}
#modal-line .line-official-swatch-dot{
  width:14px;height:14px;border-radius:4px;flex-shrink:0;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,0.12);
}
#modal-line .line-official-swatch-txt{
  flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
#modal-line .line-color-palette-sec--custom .line-color-palette-sec-title{
  margin-bottom:6px;
}
#modal-line .line-custom-color-tools{
  display:flex;align-items:center;justify-content:flex-start;
}
#modal-line .line-custom-color-input[type="color"]{
  width:26px;height:26px;padding:0;
  border:1px solid rgba(255,255,255,0.14);border-radius:7px;
  cursor:pointer;background:rgba(0,0,0,0.45);
  -webkit-appearance:none;appearance:none;
  box-shadow:0 1px 3px rgba(0,0,0,0.35),inset 0 1px 0 rgba(255,255,255,0.06);
  transition:border-color .15s,box-shadow .15s,transform .12s;
}
#modal-line .line-custom-color-input[type="color"]:hover{
  border-color:rgba(255,255,255,0.28);
  box-shadow:0 2px 6px rgba(0,0,0,0.4),inset 0 1px 0 rgba(255,255,255,0.08);
}
#modal-line .line-custom-color-input[type="color"]::-webkit-color-swatch-wrapper{
  padding:2px;border-radius:5px;
}
#modal-line .line-custom-color-input[type="color"]::-webkit-color-swatch{
  border:none;border-radius:4px;
}
#modal-line .line-custom-color-input[type="color"]::-moz-color-swatch{
  border:none;border-radius:4px;
}
#modal-line .line-color-palette-toggle{
  width:22px;height:22px;min-width:22px;border-radius:6px;
  border:1px solid #444;background:#1a1a1a;color:#9ca3af;
  display:inline-flex;align-items:center;justify-content:center;
  padding:0;cursor:pointer;flex-shrink:0;
  opacity:0.9;transition:opacity .15s,border-color .15s,color .15s,background .15s;
}
#modal-line .line-color-palette-toggle:hover{
  opacity:1;color:#e5e7eb;border-color:#555;background:#222;
}
#modal-line .line-color-palette-toggle svg{display:block;}
#modal-line .modal-line-close{
  position:absolute;top:8px;right:8px;z-index:30;background:rgba(0,0,0,0.3);border:none;color:#fff;
  width:28px;height:28px;border-radius:50%;cursor:pointer;font-size:16px;line-height:1;transition:background .2s;
}
#modal-line .modal-line-close:hover{background:rgba(0,0,0,0.5);}
#modal-line .card-container{
  width:100%;
  max-width:320px;
  display:flex;
  flex-direction:column;
  gap:8px;
}
#modal-line .visual-card{
  background:rgba(0,0,0,0.8);border:1px solid #333;border-radius:20px;padding:24px;position:relative;overflow:hidden;
  height:200px;color:#fff;
  /* 暂时取消面板外阴影 */
  box-shadow:none;
}
#modal-line .visual-card::before{
  content:'';position:absolute;top:0;left:0;right:0;height:5px;
  background:var(--theme-color,#3b82f6);border-radius:20px 20px 0 0;
}
/* 俯视图轨道 */
#modal-line .track-line{
  position:absolute;left:0;right:0;top:55%;height:2px;background:rgba(255,255,255,0.3);
}
/* 枕木动画 (模拟速度) */
#modal-line .sleeper{
  position:absolute;top:50%;height:8px;width:2px;background:rgba(255,255,255,0.3);
  transform:translateY(-50%);
}
#modal-line #line-sleeper-container{
  position:absolute;left:0;right:0;top:55%;height:8px;pointer-events:none;overflow:visible;
}
/* 俯视图列车容器 */
#modal-line .top-down-train{
  position:absolute;top:55%;left:50%;transform:translate(-50%,-50%);
  display:flex;gap:4px;z-index:10;
}
/* 1. 车厢的基础形状、颜色、发光效果 */
#modal-line .train-car{
  /* 宽和高在JS里动态控制，这里是基础样式 */
  background:var(--theme-color);
  border-radius:2px;
  box-shadow:0 0 15px var(--glow-color);
  transition:all 0.4s cubic-bezier(0.175,0.885,0.32,1.275);
  position:relative;
}
/* 2. 车窗细节 (用伪元素画出来的黑色半透明方块) */
#modal-line .train-car::after{
  content:'';
  position:absolute;
  top:2px;left:2px;right:2px;height:40%;
  background:rgba(0,0,0,0.4);
  border-radius:1px;
}
@keyframes lineModalFadeIn{from{opacity:0;}to{opacity:1;}}
#modal-line .visual-header{
  position:absolute;top:24px;left:24px;right:24px;display:flex;justify-content:space-between;align-items:flex-start;z-index:20;
}
#modal-line .visual-header .line-config-lbl{
  font-size:10px;font-weight:700;opacity:0.6;text-transform:uppercase;letter-spacing:0.1em;margin-bottom:4px;color:#fff;
}
#modal-line .visual-header .line-name-inp{
  background:transparent;font-size:1.875rem;font-weight:900;color:#fff;outline:none;width:8em;
  border:none;border-bottom:1px solid rgba(255,255,255,0.2);padding-bottom:4px;
  letter-spacing:0.02em;
}
#modal-line .visual-header .line-name-inp::placeholder{color:rgba(255,255,255,0.5);}
#modal-line .visual-capacity{
  position:absolute;bottom:24px;right:24px;z-index:20;color:#fff;text-align:right;
}
#modal-line .visual-capacity .cap-lbl{font-size:10px;opacity:0.6;font-weight:700;margin-bottom:2px;}
#modal-line .visual-capacity .cap-val{font-size:14px;font-weight:700;}
#modal-line .control-card{
  background:rgba(0,0,0,0.8);border:1px solid #333;border-radius:20px;padding:20px;color:#fff;
  /* 暂时取消面板外阴影 */
  box-shadow:none;
}
#modal-line .list-row{
  display:flex;align-items:center;justify-content:space-between;padding:14px 0;border-bottom:1px solid #222;
}
#modal-line .list-row:last-child{border-bottom:none;padding-bottom:0;}
#modal-line .list-row:first-child{padding-top:0;}
#modal-line .row-label{font-size:12px;color:#888;font-weight:500;}
#modal-line .toggle-capsule{
  background:#222;border-radius:10px;padding:3px;display:flex;gap:2px;box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);
}
#modal-line .toggle-item{
  padding:4px 10px;font-size:11px;color:#666;border-radius:8px;cursor:pointer;transition:all .2s;font-weight:600;
}
#modal-line .toggle-item:hover{color:#999;}
#modal-line .toggle-item.active{background:#444;color:#fff;box-shadow:0 2px 6px rgba(0,0,0,0.3);}
#modal-line .line-color-row{display:flex;gap:12px;align-items:center;flex-wrap:wrap;}
#modal-line .color-selector{
  width:16px;height:16px;border-radius:4px;cursor:pointer;transition:transform .2s,opacity .2s,box-shadow .2s;opacity:0.4;
}
#modal-line .color-selector:hover{opacity:0.8;}
#modal-line .color-selector.preset-swatch.active{opacity:1;transform:scale(1.2) rotate(45deg);box-shadow:0 0 10px var(--theme-color);}
#modal-line .action-btn{
  margin-top:16px;
  width:100%;
  background:transparent;
  border:none;
  padding:0;
  cursor:pointer;
  display:flex;
  justify-content:flex-end;
  align-items:center;
}
#modal-line .action-btn span{
  font-weight:700;
  font-size:12px;
  letter-spacing:2px;
  color:#e5e7eb;
  margin-right:12px;
}
#modal-line .action-btn .start-pill{
  width:32px;
  height:32px;
  border-radius:999px;
  background:var(--theme-color,#3b82f6);
  display:flex;
  align-items:center;
  justify-content:center;
  box-shadow:0 6px 18px rgba(0,0,0,0.4);
  color:#000;
}
#modal-line .action-btn:hover .start-pill{
  transform:translateY(-1px);
  box-shadow:0 10px 24px rgba(0,0,0,0.5);
}
#modal-line .line-freq-row-wrap{display:none;}
#modal-line .line-freq-row-wrap.show{display:flex;align-items:center;justify-content:space-between;padding:14px 0;border-bottom:1px solid #222;}
.form-row{margin-bottom:10px;}
.form-lbl{font-size:8px;color:var(--t4);letter-spacing:1.5px;text-transform:uppercase;margin-bottom:4px;}
.form-input{width:100%;padding:7px 0;background:transparent;border:none;border-bottom:1px solid var(--bd3);
  color:var(--t1);font-size:13px;outline:none;letter-spacing:1px;transition:border-color .12s;}
.form-input:focus{border-bottom-color:var(--t3);}
.type-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;margin-top:4px;}
.type-card{padding:8px;background:var(--bg3);border:1px solid var(--bd3);cursor:pointer;transition:all .12s;text-align:center;}
.type-card:hover,.type-card.sel{border-color:var(--t3);background:var(--bg4);}
.type-card .tc-name{font-size:10px;color:var(--t1);margin-bottom:2px;}
.type-card .tc-sub{font-size:8px;color:var(--t3);}
.cars-row{display:flex;gap:4px;margin-top:4px;}
.car-btn{flex:1;padding:6px;background:var(--bg3);border:1px solid var(--bd3);color:var(--t3);
  font-size:9px;cursor:pointer;transition:all .12s;text-align:center;}
.car-btn:hover,.car-btn.sel{border-color:var(--t3);color:var(--t1);background:var(--bg4);}
.freq-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-top:4px;}
.freq-item{padding:8px;background:var(--bg3);border:1px solid var(--bd3);}
.freq-lbl{font-size:8px;color:var(--t4);letter-spacing:1px;margin-bottom:5px;}
.freq-ctrl{display:flex;align-items:center;gap:6px;}
.freq-ctrl button{width:20px;height:20px;background:none;border:1px solid var(--bd3);
  color:var(--t3);cursor:pointer;font-size:12px;line-height:1;transition:all .12s;}
.freq-ctrl button:hover{border-color:var(--t3);color:var(--t1);}
.freq-val{font-size:13px;color:var(--t1);min-width:28px;text-align:center;}
.color-row{display:flex;flex-wrap:wrap;gap:5px;margin-top:4px;}
.csw{width:22px;height:22px;cursor:pointer;border:2px solid transparent;transition:all .12s;border-radius:50%;}
.csw:hover,.csw.sel{border-color:rgba(255,255,255,0.6);}
.m-btns{display:flex;gap:6px;margin-top:12px;}
.m-btn{flex:1;padding:7px;background:transparent;border:1px solid var(--bd3);
  color:var(--t3);font-size:9px;letter-spacing:1px;cursor:pointer;transition:all .12s;
  border-radius:10px;box-shadow:0 1px 3px rgba(0,0,0,0.2);}
.m-btn.pri{background:var(--t1);color:var(--bg);border-color:var(--t1);box-shadow:0 2px 8px rgba(0,0,0,0.25);}
.m-btn:hover{border-color:var(--t3);color:var(--t1);box-shadow:0 2px 6px rgba(0,0,0,0.3);}
.m-btn.pri:hover{background:#ddd;box-shadow:0 4px 12px rgba(0,0,0,0.3);}

/* 站点编辑 */
#modal-station-edit{top:12px;left:12px;transform:none;width:320px;}

/* 线路设置 / 删除线路：与人口与出行数据面板同风格 */
#modal-line-edit.panel,#modal-line-delete.panel{
  display:none;flex-direction:column;position:fixed;top:12px;left:12px;right:auto;
  width:320px;max-height:calc(100vh - 96px);
  background:rgba(0,0,0,0.8);border-radius:20px;border:1px solid #222;
  box-shadow:0 12px 40px rgba(0,0,0,0.5),0 0 0 1px rgba(255,255,255,0.04);
  padding:0;overflow:hidden;
}
#modal-line-edit .line-edit-header,#modal-line-delete .line-edit-header{
  position:relative;padding:18px 20px 10px 20px;color:#f9fafb;background:rgba(0,0,0,0.8);
}
#modal-line-edit .line-edit-title,#modal-line-delete .line-edit-title{
  font-size:18px;font-weight:700;margin-bottom:4px;
}
#modal-line-edit .line-edit-close,#modal-line-delete .line-edit-close{
  position:absolute;top:12px;right:16px;background:none;border:none;
  color:#6b7280;font-size:18px;cursor:pointer;line-height:1;
}
#modal-line-edit .line-edit-close:hover,#modal-line-delete .line-edit-close:hover{color:#fff;}
#modal-line-edit .line-edit-body,#modal-line-delete .line-edit-body{
  padding:12px 20px 16px 20px;color:#e5e7eb;font-size:12px;background:rgba(0,0,0,0.8);
}
#modal-line-edit .line-edit-body .line-edit-lbl{font-size:11px;color:#9ca3af;margin-bottom:6px;display:block;}
#modal-line-edit .line-edit-body .line-edit-hint{font-size:10px;color:#6b7280;margin-top:4px;}
#modal-line-edit .line-edit-body input[type="text"]{
  width:100%;padding:8px 12px;font-size:13px;background:#111;border:1px solid #27272a;
  border-radius:8px;color:#f9fafb;box-sizing:border-box;
}
#modal-line-edit .line-edit-body input[type="text"]::placeholder{color:#6b7280;}
#modal-line-edit .line-edit-color-row{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:4px;}
#modal-line-edit .line-edit-color-swatch{width:28px;height:28px;border-radius:6px;cursor:pointer;border:2px solid transparent;transition:transform .15s,box-shadow .15s;}
#modal-line-edit .line-edit-color-swatch:hover{transform:scale(1.1);box-shadow:0 0 10px rgba(255,255,255,0.3);}
#modal-line-edit .line-edit-color-swatch.active{border-color:#fff;box-shadow:0 0 10px rgba(255,255,255,0.4);}
#modal-line-edit .line-color-palette-toggle{
  width:28px;height:28px;min-width:28px;border-radius:8px;
  border:1px solid #444;background:#1a1a1a;color:#9ca3af;
  display:inline-flex;align-items:center;justify-content:center;
  padding:0;cursor:pointer;flex-shrink:0;
  opacity:0.9;transition:opacity .15s,border-color .15s,color .15s,background .15s;
}
#modal-line-edit .line-color-palette-toggle:hover{
  opacity:1;color:#e5e7eb;border-color:#555;background:#222;
}
#modal-line-edit .line-color-palette-toggle svg{display:block;}
#modal-line-edit .line-edit-color-custom-wrap{margin-top:8px;display:flex;align-items:center;gap:8px;}
#modal-line-edit .line-edit-color-custom-wrap input[type="color"]{width:36px;height:36px;padding:0;border:1px solid #27272a;border-radius:8px;cursor:pointer;background:#111;}
#modal-line-edit .line-edit-body .line-edit-row{margin-bottom:14px;}
#modal-line-edit .line-edit-body .line-edit-btns{display:flex;gap:8px;margin-top:18px;}
#modal-line-edit .line-edit-body .line-edit-btn{
  flex:1;padding:8px 12px;font-size:12px;border-radius:999px;border:1px solid #27272a;
  background:#111;color:#a1a1aa;cursor:pointer;transition:all .15s;
}
#modal-line-edit .line-edit-body .line-edit-btn:hover{border-color:#444;color:#e5e7eb;}
#modal-line-edit .line-edit-body .line-edit-btn.pri{background:#f9fafb;color:#000;border-color:#f9fafb;}
#modal-line-edit .line-edit-body .line-edit-btn.pri:hover{background:#e5e7eb;}
#modal-line-edit .line-edit-body .line-edit-delete-wrap{margin-top:16px;padding-top:16px;border-top:1px solid #27272a;}
#modal-line-edit .line-edit-body .line-edit-btn.danger{width:100%;border-color:#7f1d1d;background:transparent;color:#fca5a5;}
#modal-line-edit .line-edit-body .line-edit-btn.danger:hover{background:#7f1d1d;color:#fff;}
#modal-line-delete .line-edit-body .line-edit-msg{font-size:12px;color:#9ca3af;line-height:1.6;margin-bottom:16px;}
#modal-line-delete .line-edit-body .line-edit-btns{display:flex;gap:8px;}
#modal-line-delete .line-edit-body .line-edit-btn{flex:1;padding:8px 12px;font-size:12px;border-radius:999px;border:1px solid #27272a;background:#111;color:#a1a1aa;cursor:pointer;transition:all .15s;}
/* 删除线路确认：白底红字 */
#modal-line-delete .line-edit-body .line-edit-btn.line-delete-confirm{
  background:#fff;color:#b91c1c;border-color:#fecaca;font-weight:600;
}
#modal-line-delete .line-edit-body .line-edit-btn.line-delete-confirm:hover{background:#fef2f2;border-color:#fca5a5;color:#991b1b;}
/* 删除站点确认（动态注入 .m-btn）：白底红字 */
.m-btn.station-delete-confirm{
  background:#fff !important;color:#b91c1c !important;border:1px solid #fecaca !important;
  box-shadow:none !important;font-weight:600;
}
.m-btn.station-delete-confirm:hover{
  background:#fef2f2 !important;border-color:#fca5a5 !important;color:#991b1b !important;
}
/* 车站操作面板：与 .line-info-side-panel（运营时间等）视觉统一 */
#modal-station-actions.panel.station-actions-side-modal{
  width:min(280px,calc(100vw - 24px));
  max-width:280px;
  background:rgba(0,0,0,0.82);
  border:1px solid #333;
  box-shadow:0 8px 24px rgba(0,0,0,0.45),inset 0 1px 0 rgba(255,255,255,0.04);
  padding:20px 18px 16px;
  overflow:hidden;
}
#modal-station-actions .station-actions-scroll{
  flex:1;
  min-height:0;
  overflow-x:hidden;
  overflow-y:auto;
  -webkit-overflow-scrolling:touch;
}
#modal-station-actions .line-info-side-close{top:8px;right:8px;}
#modal-station-actions .line-info-side-title{padding-right:32px;}
#modal-station-actions .station-actions-intro{margin-bottom:12px;}
#modal-station-actions .station-actions-line-row{
  display:flex;
  flex-direction:column;
  gap:10px;
  margin-bottom:14px;
}
#modal-station-actions .station-actions-line-row + .station-actions-line-row{
  padding-top:14px;
  border-top:1px solid #27272a;
}
#modal-station-actions .station-actions-line-label{
  font-size:13px;
  font-weight:700;
  color:#f4f4f5;
  line-height:1.35;
}
#modal-station-actions .station-actions-line-btns{
  display:flex;
  gap:10px;
  align-items:stretch;
}
#modal-station-actions .station-actions-bulk{
  margin-top:2px;
  padding-top:14px;
  border-top:1px solid #27272a;
  display:flex;
  flex-direction:column;
  gap:10px;
}
#modal-station-actions .station-actions-btn{
  flex:1;
  min-width:0;
  padding:8px 14px;
  border-radius:10px;
  font-size:12px;
  font-weight:700;
  cursor:pointer;
  border:1px solid #52525b;
  transition:background .15s ease,border-color .15s ease,color .15s ease,opacity .15s ease;
  font-family:inherit;
}
#modal-station-actions .station-actions-btn--block{
  flex:none;
  width:100%;
}
#modal-station-actions .station-actions-btn--primary{
  background:#27272a;
  color:#fff;
  border-color:#52525b;
}
#modal-station-actions .station-actions-btn--primary:hover{
  background:#3f3f46;
  border-color:#71717a;
}
#modal-station-actions .station-actions-btn--danger{
  background:rgba(127,29,29,0.2);
  color:#fecaca;
  border-color:#7f1d1d;
}
#modal-station-actions .station-actions-btn--danger:hover{
  background:rgba(153,27,27,0.45);
  border-color:#991b1b;
  color:#fff;
}
/* 色带点击后：左上角，与车站操作小窗同款质感 */
#modal-band-add-choice.panel.station-actions-side-modal.modal-band-add-choice{
  top:12px;
  left:12px;
  right:auto;
  width:min(360px,calc(100vw - 24px));
  max-width:360px;
  max-height:calc(100vh - 96px);
  border-radius:20px;
  background:rgba(0,0,0,0.82);
  border:1px solid #333;
  box-shadow:0 8px 24px rgba(0,0,0,0.45),inset 0 1px 0 rgba(255,255,255,0.04);
  padding:20px 18px 16px;
  overflow:hidden;
  z-index:2001;
}
#modal-band-add-choice .station-actions-scroll{
  flex:1;
  min-height:0;
  overflow-x:hidden;
  overflow-y:auto;
  -webkit-overflow-scrolling:touch;
}
#modal-band-add-choice .line-info-side-close{
  top:8px;
  right:8px;
}
#modal-band-add-choice .line-info-side-title{
  font-size:16px;
  font-weight:700;
  color:#fff;
  padding-right:32px;
  margin-bottom:10px;
}
#modal-band-add-choice .station-actions-intro{
  margin-bottom:14px;
  font-size:12px;
  color:#a1a1aa;
  line-height:1.6;
}
#modal-band-add-choice .station-actions-line-btns{
  display:flex;
  gap:10px;
  align-items:stretch;
}
#modal-band-add-choice .station-actions-line-btns--stack{flex-direction:column;}
#modal-band-add-choice .station-actions-btn{
  flex:1;
  min-width:0;
  padding:9px 14px;
  border-radius:10px;
  font-size:12px;
  font-weight:700;
  cursor:pointer;
  border:1px solid #52525b;
  transition:background .15s ease,border-color .15s ease,color .15s ease,opacity .15s ease;
  font-family:inherit;
}
#modal-band-add-choice .station-actions-btn--block{
  flex:none;
  width:100%;
}
#modal-band-add-choice .station-actions-btn--primary{
  background:#27272a;
  color:#fff;
  border-color:#52525b;
}
#modal-band-add-choice .station-actions-btn--primary:hover{
  background:#3f3f46;
  border-color:#71717a;
}
.station-transfer-modal{
  display:none;
  flex-direction:column;
  position:fixed;
  top:12px;
  left:12px;
  right:auto;
  width:320px;
  max-height:calc(100vh - 96px);
  background:rgba(0,0,0,0.8);
  border-radius:20px;
  border:1px solid #222;
  box-shadow:0 12px 40px rgba(0,0,0,0.5),0 0 0 1px rgba(255,255,255,0.04);
  padding:0;
  overflow:hidden;
}
.station-transfer-modal .ph{
  background:rgba(0,0,0,0.8);
  padding:16px 20px 8px 20px;
}
.station-transfer-modal .pb{
  padding:12px 20px 16px 20px;
}
.station-transfer-modal .m-btns{
  display:flex;
  gap:8px;
}
.station-transfer-modal .m-btn{
  flex:1;
}
.station-transfer-modal .m-btn.pri{
  color:#000 !important;
}
.station-transfer-modal .m-btn.pri:hover{
  color:#000 !important;
}

/* 信息面板：与其它弹窗统一左上布局和宽度 */
#panel-station,#panel-line{
  top:12px;left:12px;right:auto;width:320px;max-height:calc(100vh - 96px);
}
/* 线路色带 A 模式：强制压住 #panel-station，避免任意 JS/CSS 把站点面板显示回来 */
#panel-station.panel-station--band-edit-hidden{
  display:none !important;
  visibility:hidden !important;
  pointer-events:none !important;
}

/* 列车信息面板：与人口与出行数据同风格 */
#panel-train.panel{
  display:none;flex-direction:column;position:fixed;top:12px;left:12px;right:auto;
  width:320px;max-height:calc(100vh - 96px);
  background:rgba(0,0,0,0.8);border-radius:20px;border:1px solid #222;
  box-shadow:0 12px 40px rgba(0,0,0,0.5),0 0 0 1px rgba(255,255,255,0.04);
  padding:0;overflow:hidden;
}
#panel-train .train-panel-header{
  position:relative;padding:18px 20px 10px 20px;color:#f9fafb;background:rgba(0,0,0,0.8);
}
#panel-train .train-panel-title{font-size:18px;font-weight:700;margin-bottom:4px;}
#panel-train .train-panel-close{
  position:absolute;top:12px;right:16px;background:none;border:none;
  color:#6b7280;font-size:18px;cursor:pointer;line-height:1;
}
#panel-train .train-panel-close:hover{color:#fff;}
#panel-train .train-panel-body{
  padding:12px 20px 16px 20px;color:#e5e7eb;font-size:12px;background:rgba(0,0,0,0.8);
}
#panel-train .train-panel-body .ti-row{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:8px;}
#panel-train .train-panel-body .ti-l{font-size:11px;color:#9ca3af;}
#panel-train .train-panel-body .ti-v{font-size:13px;font-weight:600;color:#f9fafb;}
#panel-train .train-panel-body .sec-lbl{font-size:11px;color:#9ca3af;margin-top:12px;margin-bottom:6px;}
#panel-train .train-panel-body .pax-bar-bg{height:8px;background:#27272a;border-radius:999px;overflow:hidden;}
#panel-train .train-panel-body .pax-bar-fill{height:100%;border-radius:999px;background:#f9fafb;transition:width .2s;}
#panel-train .train-panel-body .train-panel-follow{margin-top:14px;}
#panel-train .train-panel-body .train-panel-btn{
  padding:8px 14px;font-size:12px;border-radius:999px;border:1px solid #27272a;
  background:#111;color:#a1a1aa;cursor:pointer;transition:all .15s;width:100%;
}
#panel-train .train-panel-body .train-panel-btn:hover{border-color:#444;color:#e5e7eb;}
#panel-train .train-panel-body .train-panel-btn.pri{background:#f9fafb;color:#000;border-color:#f9fafb;}
#panel-train .train-panel-body .train-panel-btn.pri:hover{background:#e5e7eb;}
#panel-train .train-panel-body .train-panel-btn.danger{border-color:#8b3333;color:#c66;}
#panel-train .train-panel-body .train-panel-btn.danger:hover{background:rgba(139,51,51,0.2);border-color:#a33;color:#e88;}
#panel-train .train-panel-body .train-panel-follow .train-panel-btn{margin-top:8px;}
#panel-train .train-panel-body .train-panel-follow .train-panel-btn:first-child{margin-top:0;}

/* 线路客流面板：与设计规范一致 320px / 大圆角 / 阴影 */
#panel-ridership.panel{
  display:none;flex-direction:column;width:320px;top:12px;left:12px;right:auto;
  background:rgba(0,0,0,0.8);height:auto;max-height:calc(100vh - 96px);padding:0;overflow:hidden;
  border-radius:20px;border:1px solid #222;
  box-shadow:0 12px 40px rgba(0,0,0,0.5),0 0 0 1px rgba(255,255,255,0.04);
}
#panel-ridership .ridership-close{
  position:absolute;top:12px;right:12px;z-index:30;background:none;border:none;color:#71717a;
  font-size:20px;cursor:pointer;line-height:1;}
#panel-ridership .ridership-close:hover{color:#fff;}
#panel-ridership .ridership-header{
  flex:none;padding:24px 24px 24px 24px;background:rgba(0,0,0,0.8);z-index:20;
}
#panel-ridership .ridership-tabs{display:flex;align-items:baseline;gap:16px;margin-bottom:8px;}
#panel-ridership .ridership-tab{
  position:relative;background:none;border:none;padding:0;cursor:pointer;font-family:system-ui,sans-serif;
  font-size:2.25rem;font-weight:900;letter-spacing:-0.05em;transition:color .3s;
  color:#27272a;
}
#panel-ridership .ridership-tab:hover{color:#52525b;}
#panel-ridership .ridership-tab.active{color:#fff;}
#panel-ridership .ridership-tab.active::after{
  content:'';position:absolute;bottom:-8px;left:0;right:0;height:4px;background:#fff;
}
#panel-ridership .ridership-scroll{
  flex:1;overflow-y:auto;padding-bottom:48px;width:100%;
}
#panel-ridership .ridership-scroll::-webkit-scrollbar{width:0;background:transparent;}
#panel-ridership .ridership-item{
  position:relative;width:100%;cursor:pointer;transition:all .3s ease-out;display:flex;align-items:center;
  height:52px;opacity:1;transform:scale(1);padding-left:24px;padding-right:24px;z-index:1;
}
#panel-ridership .ridership-list.has-hover .ridership-item:not(.hovered){opacity:.2;}
#panel-ridership .ridership-item.hovered{
  height:96px;transform:scale(1.02);z-index:10;
}
#panel-ridership .ridership-item-bar{
  position:absolute;left:0;top:0;bottom:0;z-index:0;width:4px;background:#222;
  transition:width .5s cubic-bezier(0.16,1,0.3,1),background-color .5s;
}
#panel-ridership .ridership-item.hovered .ridership-item-bar{width:100%;background:var(--item-color);}
#panel-ridership .ridership-item-body{position:relative;z-index:10;width:100%;display:flex;justify-content:space-between;align-items:center;}
#panel-ridership .ridership-item-left{display:flex;flex-direction:column;justify-content:center;}
#panel-ridership .ridership-item-top{display:flex;align-items:center;gap:8px;overflow:hidden;}
#panel-ridership .ridership-item-index{
  font-family:monospace;font-weight:700;font-size:12px;color:#444;width:0;opacity:0;overflow:hidden;
  transition:all .3s;
}
#panel-ridership .ridership-item.hovered .ridership-item-index{
  width:auto;opacity:1;color:rgba(0,0,0,0.5);transform:translateX(0);
}
#panel-ridership .ridership-item-name{
  font-weight:700;font-size:15px;line-height:1;color:#eee;letter-spacing:0;max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  transition:all .3s;
  display:inline-flex;
  align-items:center;
  flex-wrap:nowrap;
}
#panel-ridership .ridership-item.hovered .ridership-item-name{
  font-size:28px;color:#000;letter-spacing:-1px;
}
#panel-ridership .ridership-item-sub{
  font-size:10px;font-weight:500;letter-spacing:.05em;text-transform:uppercase;margin-top:4px;
  color:transparent;height:0;opacity:0;overflow:hidden;transition:all .3s;
}
#panel-ridership .ridership-item.hovered .ridership-item-sub{color:rgba(0,0,0,0.6);height:auto;opacity:1;}
#panel-ridership .ridership-item-right{display:flex;flex-direction:column;align-items:flex-end;justify-content:center;}
#panel-ridership .ridership-item-row2{display:flex;align-items:center;gap:8px;}
#panel-ridership .ridership-item-arrow{
  width:28px;height:28px;opacity:0;transform:rotate(0deg) scale(0);transition:all .3s;
}
#panel-ridership .ridership-item.hovered .ridership-item-arrow{opacity:1;transform:rotate(45deg);}
#panel-ridership .ridership-item-arrow svg{width:100%;height:100%;stroke:#000;}
#panel-ridership .ridership-item-num{
  font-weight:700;font-size:15px;color:#666;font-family:"Impact",sans-serif;letter-spacing:.5px;font-variant-numeric:tabular-nums;transition:all .3s;
}
#panel-ridership .ridership-item.hovered .ridership-item-num{font-size:36px;color:#000;}
#panel-ridership .ridership-item-prog{
  height:2px;background:#27272a;margin-top:8px;border-radius:999px;width:80px;overflow:hidden;transition:all .3s;
  box-sizing:border-box;
}
#panel-ridership .ridership-item.hovered .ridership-item-prog{opacity:0;transform:translateX(20px);}
#panel-ridership .ridership-item-prog-inner{
  display:block;
  height:100%;
  width:100%;
  border-radius:0;
  box-sizing:border-box;
}
#panel-ridership .ridership-item-prog-fill{
  display:block;
  height:100%;
  min-height:2px;
  flex:0 0 auto;
  border-radius:0;
  box-sizing:border-box;
  margin:0;
  padding:0;
}
/* 线路小方块：固定高度包裹层，保证多块严格同一水平线 */
#panel-ridership .station-line-chips-wrap{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  height:14px;
  gap:4px;
  flex-shrink:0;
  margin-left:4px;
  vertical-align:middle;
}
#panel-ridership .station-line-chip{
  display:flex;
  align-items:center;
  justify-content:center;
  height:14px;
  flex-shrink:0;
  font-size:9px;
  font-weight:600;
  color:#000;
  border-radius:0;
  box-sizing:border-box;
  line-height:1;
  white-space:nowrap;
  padding:0;
}
#panel-ridership .station-line-chip-num{
  width:14px;
}
#panel-ridership .station-line-chip-text{
  width:auto;
  min-width:14px;
  padding:0 4px;
}
#panel-ridership .ridership-item.hovered .station-line-chip{display:none !important;}
#panel-ridership .ridership-foot{height:96px;display:flex;align-items:center;justify-content:center;gap:4px;}
#panel-ridership .ridership-foot span{width:4px;height:4px;background:#27272a;border-radius:50%;}

#panel-ridership .ridership-24h-foot{
  position:absolute;bottom:12px;right:16px;z-index:25;
  font-size:11px;color:#71717a;display:none;flex-direction:row;align-items:center;gap:4px;
}
#panel-ridership .ridership-24h-foot.visible{display:flex;}
#panel-ridership .ridership-24h-foot .ridership-24h-value{color:#a1a1aa;font-variant-numeric:tabular-nums;}

/* 实时客流数据大屏：全屏 + About 风格（大字 STATISTICS），图标靠左 */
#panel-flow-dashboard.panel{
  position:fixed;
  top:0;left:0;right:0;bottom:0;
  width:100%;
  height:100vh;
  min-height:100vh;
  padding:0;
  background:#000;
  color:#e5e7eb;
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  overflow:hidden;
  z-index:9500;
  display:none;
  will-change:transform,opacity;
}
#panel-flow-dashboard .flow-dashboard-close{
  position:absolute;
  top:32px;
  right:40px;
  padding:0;
  background:none;
  border:none;
  outline:none;
  font-size:0.8rem;
  font-weight:600;
  letter-spacing:0.16em;
  text-transform:uppercase;
  color:rgba(148,163,184,0.8);
  cursor:pointer;
  z-index:10;
}
#panel-flow-dashboard .flow-dashboard-close:hover{
  color:#e5e7eb;
}
#panel-flow-dashboard .flow-dashboard-shell{
  position:relative;
  z-index:2;
  display:flex;
  flex-direction:column;
  height:100%;
  min-height:0;
}
#panel-flow-dashboard .flow-dashboard-header{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:24px;
  padding:32px 48px 20px 80px;
  flex-wrap:wrap;
}
#panel-flow-dashboard .flow-dashboard-header-inner{
  display:flex;
  flex-direction:column;
  align-items:flex-start;
  max-width:640px;
}
#panel-flow-dashboard .flow-dashboard-kicker{
  font-size:0.8rem;
  font-weight:700;
  letter-spacing:0.24em;
  text-transform:uppercase;
  opacity:0.6;
  margin-bottom:0.75rem;
}
#panel-flow-dashboard .flow-dashboard-title{
  margin:0;
  font-weight:900;
  font-size:clamp(1.75rem,2.5vw,2.5rem);
  letter-spacing:0.12em;
  color:#fff;
}
#panel-flow-dashboard .flow-dashboard-filters{
  display:flex;
  align-items:center;
  gap:8px;
  flex-wrap:wrap;
  padding:0 80px 16px;
  justify-content:flex-start;
}
#panel-flow-dashboard .flow-dashboard-filter-btn{
  border:none;
  border-radius:6px;
  padding:8px 14px;
  background:rgba(30,41,59,0.9);
  color:#cbd5e1;
  cursor:pointer;
  font-size:0.75rem;
  font-weight:700;
  letter-spacing:0.1em;
  text-transform:uppercase;
  transition:background .18s ease,color .18s ease,border-color .18s ease;
  border:1px solid rgba(71,85,105,0.4);
}
#panel-flow-dashboard .flow-dashboard-filter-btn:hover{
  background:rgba(51,65,85,0.95);
  color:#e5e7eb;
}
#panel-flow-dashboard .flow-dashboard-filter-btn.active{
  color:#0f172a;
  background:rgba(248,250,252,0.95);
  border-color:rgba(248,250,252,0.6);
}
#panel-flow-dashboard .flow-dashboard-scroll{
  flex:1;
  min-height:0;
  overflow:auto;
  padding:0 80px 48px;
}
#panel-flow-dashboard .flow-dashboard-scroll::-webkit-scrollbar{width:6px;}
#panel-flow-dashboard .flow-dashboard-scroll::-webkit-scrollbar-thumb{
  background:rgba(148,163,184,0.24);
  border-radius:999px;
}
#panel-flow-dashboard .flow-dashboard-section{
  margin-top:28px;
}
#panel-flow-dashboard .flow-dashboard-section-head{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:16px;
  margin-bottom:12px;
}
#panel-flow-dashboard .flow-dashboard-section-head-with-legend{
  align-items:center;
}
#panel-flow-dashboard .flow-dashboard-section-title{
  margin:0;
  font-size:18px;
  font-weight:700;
  letter-spacing:0.08em;
  color:#f5f5f5;
}
#panel-flow-dashboard .flow-dashboard-hour-legend{
  flex-shrink:0;
}
#panel-flow-dashboard .flow-dashboard-hour-legend-svg{
  display:block;
  height:28px;
  width:auto;
}
/* 分线路环形图：每站小圆圈 0–23 小时，刻度颜色/长短表示客流；保证不被弦图挤掉 */
#panel-flow-dashboard .flow-dashboard-lines{
  display:flex;
  flex-direction:column;
  gap:24px;
  margin-top:24px;
  min-height:120px;
  padding-bottom:32px;
}
#panel-flow-dashboard .flow-dashboard-line-block{
  padding:20px 0;
  border-bottom:1px solid rgba(71,85,105,0.3);
}
#panel-flow-dashboard .flow-dashboard-line-block:last-child{
  border-bottom:none;
}
#panel-flow-dashboard .flow-dashboard-line-head{
  display:flex;
  align-items:center;
  gap:10px;
  margin-bottom:14px;
}
#panel-flow-dashboard .flow-dashboard-line-title-row{
  display:flex;
  align-items:center;
  gap:10px;
  flex-wrap:wrap;
  margin-left:10px;
}
#panel-flow-dashboard .flow-dashboard-line-badge{
  width:12px;
  height:12px;
  border-radius:2px;
}
#panel-flow-dashboard .flow-dashboard-line-title{
  font-size:1.1rem;
  font-weight:900;
  letter-spacing:0.06em;
  color:#fff;
}
#panel-flow-dashboard .flow-dashboard-station-grid{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(100px,1fr));
  gap:16px;
}
#panel-flow-dashboard .flow-dashboard-station-wheel{
  position:relative;
  min-height:120px;
  padding:6px 6px 8px;
  cursor:pointer;
  transition:transform .18s ease,box-shadow .18s ease;
}
#panel-flow-dashboard .flow-dashboard-station-wheel:hover{
  transform:translateY(-2px);
  box-shadow:0 12px 28px rgba(0,0,0,0.35);
}
#panel-flow-dashboard .flow-dashboard-station-svg{
  width:100%;
  height:88px;
  display:block;
}
#panel-flow-dashboard .flow-dashboard-wheel-center{
  position:absolute;
  left:0;
  right:0;
  top:6px;
  height:88px;
  pointer-events:none;
}
#panel-flow-dashboard .flow-dashboard-wheel-name{
  position:absolute;
  top:0;left:50%;right:auto;
  bottom:0;
  width:70px;
  margin-left:-35px;
  display:flex;
  align-items:center;
  justify-content:center;
  text-align:center;
  max-width:70px;
  box-sizing:border-box;
  color:#fff;
  font-size:0.75rem;
  font-weight:800;
  line-height:1.2;
  word-break:break-word;
  letter-spacing:0.02em;
}
#panel-flow-dashboard .flow-dashboard-wheel-transfer{
  position:absolute;
  bottom:27px;
  left:0;
  right:0;
  text-align:center;
  font-size:0.55rem;
  font-weight:700;
  letter-spacing:.12em;
  text-transform:uppercase;
  color:rgba(125,211,252,0.9);
}
#panel-flow-dashboard .flow-dashboard-wheel-footer{
  display:none;
}
#panel-flow-dashboard .flow-dashboard-tooltip{
  position:fixed;
  z-index:3200;
  pointer-events:none;
  opacity:0;
  transform:translate(-50%,-12px);
  transition:opacity .12s ease,transform .12s ease;
  padding:10px 12px;
  border-radius:6px;
  border:1px solid rgba(71,85,105,0.5);
  background:rgba(15,23,42,0.96);
  color:#f8fafc;
  font-size:12px;
  line-height:1.5;
  box-shadow:0 14px 36px rgba(0,0,0,0.5);
  white-space:nowrap;
}
#panel-flow-dashboard .flow-dashboard-tooltip.is-visible{
  opacity:1;
  transform:translate(-50%,-18px);
}
@media (max-width:768px){
  #panel-flow-dashboard .flow-dashboard-header{
    padding-left:30px;
    padding-right:24px;
  }
  #panel-flow-dashboard .flow-dashboard-filters,
  #panel-flow-dashboard .flow-dashboard-scroll{
    padding-left:30px;
    padding-right:24px;
  }
  #panel-flow-dashboard .flow-dashboard-station-grid{
    grid-template-columns:repeat(auto-fill,minmax(88px,1fr));
  }
  #panel-flow-dashboard .flow-dashboard-section-head-with-legend{
    flex-wrap:wrap;
  }
}
#panel-poptravel.panel{
  display:none;flex-direction:column;position:fixed;top:12px;left:12px;right:auto;
  width:320px;max-height:calc(100vh - 96px);
  background:rgba(0,0,0,0.8);border-radius:20px;border:1px solid #222;
  box-shadow:0 12px 40px rgba(0,0,0,0.5),0 0 0 1px rgba(255,255,255,0.04);
  padding:0;overflow:hidden;
}
#panel-poptravel .poptravel-header{
  position:relative;padding:18px 20px 10px 20px;color:#f9fafb;background:transparent;
}
#panel-poptravel .poptravel-title{
  font-size:18px;font-weight:700;margin-bottom:4px;
}
#panel-poptravel .poptravel-sub{
  font-size:11px;color:#9ca3af;
}
#panel-poptravel .poptravel-tabs{
  display:flex;gap:8px;margin-top:12px;
}
#panel-poptravel .poptravel-tab{
  flex:1;padding:6px 10px;font-size:12px;border-radius:999px;
  border:1px solid #27272a;background:#111;color:#a1a1aa;
  cursor:pointer;transition:all .15s;white-space:nowrap;
}
#panel-poptravel .poptravel-tab.active{
  background:#f9fafb;color:#000;border-color:#f9fafb;
}
#panel-poptravel .poptravel-close{
  position:absolute;top:12px;right:16px;background:none;border:none;
  color:#6b7280;font-size:18px;cursor:pointer;line-height:1;
}
#panel-poptravel .poptravel-close:hover{color:#fff;}
#panel-poptravel .poptravel-body{
  padding:12px 20px 16px 20px;color:#e5e7eb;font-size:12px;background:transparent;
}
#panel-poptravel .poptravel-chongqing-notice{
  display:none;flex-shrink:0;margin:0;padding:10px 20px 14px 20px;font-size:10px;line-height:1.45;color:#6b7280;
  border-top:1px solid rgba(255,255,255,0.06);
}
#panel-poptravel .poptravel-desc{
  font-size:11px;color:#9ca3af;margin-bottom:10px;
}
#panel-poptravel .poptravel-legend{
  margin-top:8px;font-size:10px;color:#9ca3af;
}
#panel-poptravel .poptravel-legend-bar{
  display:flex;align-items:center;gap:4px;margin-top:4px;
}
#panel-poptravel .poptravel-legend-swatch{
  width:18px;height:10px;border-radius:3px;background:#ff0000;
}
#panel-poptravel .poptravel-legend-caption{
  font-size:10px;color:#6b7280;margin-top:4px;
}
#panel-poptravel .poptravel-legend-pop{
  background:transparent;margin-top:10px;
}
#panel-poptravel .poptravel-legend-pop .poptravel-legend-title{
  display:block;font-size:11px;color:#e5e7eb;margin-bottom:6px;
}
#panel-poptravel .poptravel-legend-pop-list{
  display:flex;flex-direction:column;gap:2px;
}
#panel-poptravel .poptravel-legend-pop-row{
  display:flex;align-items:center;gap:8px;font-size:10px;color:#9ca3af;
}
#panel-poptravel .poptravel-legend-pop-row .poptravel-legend-swatch{
  width:14px;height:10px;flex-shrink:0;border-radius:2px;
}

/* 地图样式面板：复用“人口与出行数据”面板风格 */
#panel-mapstyle.panel{
  display:none;flex-direction:column;position:fixed;top:12px;left:12px;right:auto;
  width:320px;max-height:calc(100vh - 96px);
  background:rgba(0,0,0,0.8);border-radius:20px;border:1px solid #222;
  box-shadow:0 12px 40px rgba(0,0,0,0.5),0 0 0 1px rgba(255,255,255,0.04);
  padding:0;overflow:hidden;
}
#panel-mapstyle .poptravel-header{
  position:relative;padding:18px 20px 10px 20px;color:#f9fafb;background:transparent;
}
#panel-mapstyle .poptravel-title{
  font-size:18px;font-weight:700;margin-bottom:4px;
}
#panel-mapstyle .poptravel-sub{
  font-size:11px;color:#9ca3af;
}
#panel-mapstyle .poptravel-tabs{
  display:flex;gap:8px;margin-top:12px;
}
#panel-mapstyle .poptravel-tab{
  flex:1;padding:6px 10px;font-size:12px;border-radius:999px;
  border:1px solid #27272a;background:#111;color:#a1a1aa;
  cursor:pointer;transition:all .15s;white-space:nowrap;
}
#panel-mapstyle .poptravel-tab.active{
  background:#f9fafb;color:#000;border-color:#f9fafb;
}
#panel-mapstyle .poptravel-close{
  position:absolute;top:12px;right:16px;background:none;border:none;
  color:#6b7280;font-size:18px;cursor:pointer;line-height:1;
}
#panel-mapstyle .poptravel-close:hover{color:#fff;}
#panel-mapstyle .poptravel-body{
  padding:12px 20px 16px 20px;color:#e5e7eb;font-size:12px;background:transparent;
}
#panel-mapstyle .poptravel-desc{
  font-size:11px;color:#9ca3af;margin-bottom:10px;
}
#panel-mapstyle .mapstyle-engine-row{
  display:flex;flex-wrap:wrap;gap:8px;align-items:center;
  margin-bottom:28px;
}
#panel-mapstyle .mapstyle-grid{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:8px;
  margin-top:0;
}
#panel-mapstyle .mapstyle-btn{
  padding:10px 10px;
  border-radius:14px;
  background:#0b1220;
  border:1px solid #1f2937;
  color:#e5e7eb;
  cursor:pointer;
  transition:all .15s;
  text-align:left;
  line-height:1.25;
}
#panel-mapstyle .mapstyle-btn:hover{border-color:#334155;transform:translateY(-1px);}
#panel-mapstyle .mapstyle-btn.active{
  border-color:#f9fafb;
  box-shadow:0 0 0 1px rgba(249,250,251,0.5);
}
#panel-mapstyle .mapstyle-btn .ms-name{font-size:12px;font-weight:700;color:#f9fafb;}
#panel-mapstyle .mapstyle-btn .ms-id{font-size:10px;color:#94a3b8;margin-top:4px;word-break:break-all;}
#panel-mapstyle .mapstyle-input-row{display:flex;gap:8px;margin-top:10px;}
#panel-mapstyle input[type="text"].mapstyle-input{
  flex:1;
  padding:8px 10px;
  border-radius:12px;
  border:1px solid #27272a;
  background:#111;
  color:#f9fafb;
  font-size:12px;
  outline:none;
}
#panel-mapstyle input[type="text"].mapstyle-input:focus{border-color:#64748b;}
#panel-mapstyle .mapstyle-apply{
  padding:8px 12px;
  border-radius:999px;
  border:1px solid #27272a;
  background:#f9fafb;
  color:#000;
  cursor:pointer;
  font-size:12px;
  font-weight:700;
  white-space:nowrap;
}
#panel-mapstyle .mapstyle-apply:hover{background:#e5e7eb;}
#panel-mapstyle .mapstyle-apply.active{background:#e5e7eb;}
#panel-mapstyle .mapstyle-opt-row{
  display:flex;
  gap:8px;
  margin-top:14px;
  padding-top:10px;
  border-top:1px solid #111827;
}
#panel-mapstyle .mapstyle-toggle-btn{
  flex:1;
  padding:8px 12px;
  border-radius:12px;
  background:#0b1220;
  border:1px solid #1f2937;
  color:#e5e7eb;
  font-size:12px;
  font-weight:600;
  cursor:pointer;
  transition:all .15s;
}
#panel-mapstyle .mapstyle-toggle-btn:hover{border-color:#334155;}
#panel-mapstyle .mapstyle-toggle-btn.active{
  border-color:#3b82f6;
  background:rgba(59,130,246,0.15);
  color:#93c5fd;
}
#panel-mapstyle .mapstyle-poi-row{
  margin-top:14px;
  padding-top:10px;
  border-top:1px solid #111827;
}
#panel-mapstyle .mapstyle-poi-label{
  display:inline-flex;
  align-items:center;
  gap:6px;
  font-size:12px;
  color:#e5e7eb;
  cursor:pointer;
}
#panel-mapstyle .mapstyle-poi-label input[type="checkbox"]{
  width:14px;
  height:14px;
}

#panel-poptravel .timeline-row{
  display:flex;align-items:center;gap:8px;margin-top:8px;
}
#panel-poptravel .timeline-row input[type=range]{
  flex:1;
}
#panel-poptravel .timeline-time{
  font-family:monospace;font-size:13px;min-width:40px;text-align:right;
}
#panel-poptravel .timeline-btn{
  width:28px;height:28px;border-radius:999px;border:1px solid #374151;
  background:#111;color:#e5e7eb;cursor:pointer;font-size:13px;
  display:flex;align-items:center;justify-content:center;
}
#panel-poptravel .timeline-btn.playing{
  background:#f9fafb;color:#000;border-color:#f9fafb;
}

/* 人口数据地图：街道点击 tooltip（黑底半透明、白字、整体缩小） */
.pop-grid-tooltip{
  background:rgba(0,0,0,0.82);
  color:#fff;
  padding:6px 10px;
  font-size:11px;
  line-height:1.4;
  min-width:100px;
  max-width:180px;
  border-radius:6px;
  border:1px solid rgba(255,255,255,0.12);
  box-shadow:0 4px 12px rgba(0,0,0,0.4);
}
.pop-grid-tooltip .pop-grid-tooltip-name{font-weight:700;color:#fff;margin-bottom:4px;}
.pop-grid-tooltip .pop-grid-tooltip-row{color:rgba(255,255,255,0.95);font-size:10px;}
/* 自定义人口 tooltip 时去掉高德默认白底 */
.amap-info-contentContainer:has(.pop-grid-tooltip),.amap-info-content:has(.pop-grid-tooltip){background:transparent!important;border:none!important;box-shadow:none!important;}

/* OpenStreetMap（MapLibre）人口悬浮 Popup：去掉库默认白底/阴影，与 .pop-grid-tooltip 一致 */
.maplibregl-popup.metro-pop-maplibre-popup .maplibregl-popup-content{
  background:transparent!important;
  box-shadow:none!important;
  padding:0!important;
}
.maplibregl-popup.metro-pop-maplibre-popup.maplibregl-popup-anchor-top .maplibregl-popup-tip,
.maplibregl-popup.metro-pop-maplibre-popup.maplibregl-popup-anchor-top-left .maplibregl-popup-tip,
.maplibregl-popup.metro-pop-maplibre-popup.maplibregl-popup-anchor-top-right .maplibregl-popup-tip{
  border-bottom-color:rgba(0,0,0,0.82)!important;
}
.maplibregl-popup.metro-pop-maplibre-popup.maplibregl-popup-anchor-bottom .maplibregl-popup-tip,
.maplibregl-popup.metro-pop-maplibre-popup.maplibregl-popup-anchor-bottom-left .maplibregl-popup-tip,
.maplibregl-popup.metro-pop-maplibre-popup.maplibregl-popup-anchor-bottom-right .maplibregl-popup-tip{
  border-top-color:rgba(0,0,0,0.82)!important;
}
.maplibregl-popup.metro-pop-maplibre-popup.maplibregl-popup-anchor-left .maplibregl-popup-tip{
  border-right-color:rgba(0,0,0,0.82)!important;
}
.maplibregl-popup.metro-pop-maplibre-popup.maplibregl-popup-anchor-right .maplibregl-popup-tip{
  border-left-color:rgba(0,0,0,0.82)!important;
}

/* 高德地图标识与比例尺：按需隐藏或下移，避免与导航重叠 */
.amap-logo{display:none!important;}
.amap-scalecontrol{display:none!important;}
.amap-copyright{bottom:48px!important;left:12px!important;}

/* 线路信息面板：双卡片规范 + 管线监控视觉 */
#panel-line-info.panel{
  display:none;flex-direction:column;position:fixed;top:12px;left:12px;width:480px;max-height:calc(100vh - 96px);height:auto;
  background:rgba(0,0,0,0.8);border:1px solid #333;border-radius:20px;
  box-shadow:0 8px 24px rgba(0,0,0,0.4),inset 0 1px 0 rgba(255,255,255,0.04);
  color:#e4e4e7;overflow:hidden;z-index:1000;
}
#panel-line-info .line-info-close{
  position:absolute;top:8px;right:8px;z-index:30;background:rgba(0,0,0,0.3);border:none;color:#fff;
  width:28px;height:28px;border-radius:50%;cursor:pointer;font-size:16px;line-height:1;
}
#panel-line-info .line-info-close:hover{background:rgba(0,0,0,0.5);}
#panel-line-info .line-info-header{
  flex:none;padding:24px 44px 20px 24px;background:rgba(0,0,0,0.8);border-bottom:1px solid #333;
  display:flex;align-items:center;justify-content:space-between;gap:16px;
}
#panel-line-info .line-info-header-main{
  display:flex;align-items:center;justify-content:space-between;gap:16px;flex:1;min-width:0;
}
#panel-line-info .line-info-header-setting{flex:1;min-width:0;padding-right:8px;}
/* 设置快线：主标题区仅显示「设置快线」，隐藏方向箭头、终点站中英文与线路牌 */
#panel-line-info.line-info-mode-express .line-info-header-main{display:none!important;}
#panel-line-info.line-info-mode-express .line-info-header-setting{display:block!important;width:100%;padding-right:44px;}
#panel-line-info .line-info-title.line-info-title-mode{font-size:1.25rem;font-weight:700;color:#fff;line-height:1.25;letter-spacing:-0.02em;}
#panel-line-info .line-info-header-inner{display:flex;align-items:center;gap:16px;cursor:pointer;user-select:none;flex:1;min-width:0;}
#panel-line-info .line-info-badge{
  flex-shrink:0;display:flex;align-items:center;gap:6px;padding:8px 14px;
  background:var(--line-info-color,#a3e635);
  border-radius:10px;color:#fff;
}
#panel-line-info .line-info-badge-num{font-size:2.25rem;font-weight:800;line-height:1;}
.line-info-badge-num.line-info-badge-num-text{
  display:flex;
  flex-direction:column;
  align-items:flex-start;
  font-size:1rem;
  line-height:1.0;
}
#panel-line-info .line-info-badge-right{display:flex;flex-direction:column;align-items:flex-start;line-height:1.2;}
#panel-line-info .line-info-badge-txt{font-size:13px;font-weight:700;}
#panel-line-info .line-info-badge-en{
  font-size:10px;
  font-weight:600;
  opacity:.95;
}
.line-info-badge-num.line-info-badge-num-text .line-info-badge-en{
  margin-top:4px;
}
#panel-line-info .line-info-header-inner:hover .line-info-arrow{opacity:.9;}
#panel-line-info .line-info-arrow{flex-shrink:0;display:block;transition:transform .2s ease;stroke:var(--line-info-color,#a3e635);}
#panel-line-info.line-info-direction-down .line-info-arrow{transform:rotate(180deg);}
#panel-line-info .line-info-title{font-size:1.875rem;font-weight:700;color:#fff;letter-spacing:-0.02em;line-height:1.1;}
#panel-line-info .line-info-subtitle{font-size:12px;font-weight:700;color:#71717a;font-family:monospace;margin-top:4px;}
/* 上线列车数：放在滚动区内最前，可加减，不包含主线路 */
#panel-line-info .line-info-capacity-row{
  display:flex;align-items:center;justify-content:space-between;gap:16px;
  padding:12px 24px;margin:0 0 8px;background:#1a1a1a;border-radius:6px;border:1px solid #2a2a2a;
}
#panel-line-info .line-info-capacity-lbl{font-size:11px;font-weight:700;color:#888;text-transform:uppercase;letter-spacing:.05em;}
#panel-line-info .line-info-capacity-cols{display:flex;gap:20px;}
#panel-line-info .line-info-capacity-item{display:flex;flex-direction:column;align-items:center;gap:4px;}
#panel-line-info .line-info-capacity-item-top{display:flex;align-items:center;justify-content:center;gap:8px;}
#panel-line-info .line-info-capacity-tag{font-size:10px;color:#71717a;font-weight:600;}
#panel-line-info .line-info-capacity-val{font-size:14px;font-weight:800;color:#fff;min-width:20px;text-align:center;}
#panel-line-info .line-info-capacity-btns{display:flex;align-items:center;gap:4px;}
#panel-line-info .line-info-capacity-btn{width:24px;height:24px;border:1px solid #444;background:#222;color:#fff;border-radius:4px;cursor:pointer;font-size:14px;line-height:1;display:inline-flex;align-items:center;justify-content:center;transition:all .15s;}
#panel-line-info .line-info-capacity-btn:hover{background:#2a2a2a;border-color:#555;}
#panel-line-info .line-info-capacity-headway{font-size:10px;color:#52525b;text-align:center;width:100%;}
#panel-line-info .line-info-pipeline-wrap{flex:1 1 auto;min-height:0;overflow-y:auto;position:relative;}
#panel-line-info .line-info-pipeline-wrap::-webkit-scrollbar{width:0;}
#panel-line-info .line-info-list{position:relative;z-index:10;padding:0 0 48px;min-height:0;}
#panel-line-info .line-info-pipeline-bar{
  position:absolute;left:174px;top:0;height:100%;width:12px;
  background:var(--line-info-color,#a3e635);z-index:0;pointer-events:none;
}
/* 沿管线移动的列车位置小点 */
#panel-line-info .line-info-floating-train{
  position:absolute;
  left:0;
  width:160px;
  display:flex;
  align-items:center;
  justify-content:flex-end;
  padding-right:24px;
  gap:8px;
  transform:translateY(-50%);
  will-change:top;
}
#panel-line-info .line-info-row{display:flex;align-items:center;min-height:60px;padding:0 24px 0 0;}
/* 快线设置：未纳入当前快线停靠的站行变淡 */
#panel-line-info .line-info-row.line-info-row--express-dim{opacity:0.38;transition:opacity .15s ease;}
#panel-line-info .line-info-row.line-info-row--express-dim .line-info-node{opacity:0.55;}
#panel-line-info .line-info-train{width:160px;display:flex;align-items:center;justify-content:flex-end;padding-right:24px;gap:8px;}
#panel-line-info .line-info-train-nums{text-align:right;display:flex;flex-direction:column;align-items:flex-end;}
#panel-line-info .line-info-train-nums .n{font-size:10px;font-family:monospace;font-weight:700;}
#panel-line-info .line-info-train-nums .n.hi{color:#ef4444;}
#panel-line-info .line-info-train-nums .n.lo{color:#fff;}
#panel-line-info .line-info-train-nums .id{font-size:9px;color:#71717a;font-family:monospace;}
#panel-line-info .line-info-train-nums .extra{
  font-size:9px;
  color:#a1a1aa;
  margin-left:4px;
}
#panel-line-info .line-info-node-wrap{width:40px;flex-shrink:0;display:flex;align-items:center;justify-content:center;position:relative;}
#panel-line-info .line-info-node{
  position:relative;width:24px;height:24px;border-radius:50%;background:#18181b;border:5px solid var(--line-info-color,#a3e635);box-sizing:border-box;
}
#panel-line-info .line-info-transfer-bar{position:absolute;left:50%;top:50%;transform:translateY(-50%);height:8px;width:20px;z-index:0;}
#panel-line-info .line-info-station{flex:1;padding-left:16px;display:flex;align-items:center;justify-content:space-between;}
#panel-line-info .line-info-name{font-size:16px;font-weight:700;color:#fff;}
#panel-line-info .line-info-tag{
  font-size:10px;
  font-weight:800;
  width:18px;
  height:18px;
  padding:0;
  border-radius:2px;
  margin-left:8px;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  line-height:1;
}
#panel-line-info .line-info-tag.line-info-tag-text{
  width:auto;
  min-width:18px;
  padding:0 6px;
}
#panel-line-info .line-info-en{font-size:10px;color:#71717a;font-weight:700;margin-top:4px;}
#panel-line-info .line-info-crowd{font-size:14px;font-weight:700;color:#a1a1aa;font-variant-numeric:tabular-nums;}
#panel-line-info .line-info-foot{
  height:48px;
  flex:none;
  background:linear-gradient(to top,#18181b,transparent);
  pointer-events:auto;
  display:flex;
  align-items:flex-end;
  justify-content:space-between;
  padding:0 12px 10px;
  gap:12px;
}
#panel-line-info .line-info-length-signature{
  font-size:10px;
  font-family:monospace;
  color:#a1a1aa;
  letter-spacing:.18em;
  opacity:.9;
  flex-shrink:0;
  pointer-events:none;
}
.line-info-foot-tools{
  display:flex;
  align-items:center;
  gap:8px;
  flex-shrink:0;
  isolation:isolate;
  transform:translateZ(0);
  backface-visibility:hidden;
}
.line-info-foot-btn{
  width:28px;
  height:28px;
  padding:0;
  border-radius:999px;
  border:1px solid rgba(249,250,251,0.85);
  background:transparent;
  color:#fff;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  cursor:pointer;
  touch-action:manipulation;
  -webkit-tap-highlight-color:transparent;
  transition:background .15s ease,border-color .15s ease,opacity .15s ease;
  box-shadow:0 4px 14px rgba(0,0,0,0.35);
}
.line-info-foot-btn:hover{
  border-color:#fff;
  background:rgba(15,23,42,0.75);
}
.line-info-foot-btn.is-active{
  border-color:#fff;
  background:rgba(39,39,42,0.9);
}
.line-info-foot-btn .line-info-foot-ico{
  display:block;
  flex-shrink:0;
  shape-rendering:geometricPrecision;
}

/* 线路信息右侧附层面板 */
.line-info-side-stack{
  display:none;
  position:fixed;
  z-index:1001;
  top:12px;
  left:504px;
  width:280px;
  max-height:calc(100vh - 96px);
  pointer-events:auto;
}
.line-info-side-stack.is-open{
  display:block;
}
.line-info-side-panel{
  position:relative;
  background:rgba(0,0,0,0.82);
  border:1px solid #333;
  border-radius:20px;
  box-shadow:0 8px 24px rgba(0,0,0,0.45),inset 0 1px 0 rgba(255,255,255,0.04);
  color:#e4e4e7;
  padding:20px 18px 16px;
}
.line-info-side-close{
  position:absolute;
  top:8px;
  right:8px;
  z-index:2;
  width:28px;
  height:28px;
  border-radius:50%;
  border:none;
  background:rgba(0,0,0,0.35);
  color:#fff;
  font-size:16px;
  line-height:1;
  cursor:pointer;
  display:flex;
  align-items:center;
  justify-content:center;
}
.line-info-side-close:hover{background:rgba(0,0,0,0.55);}
.line-info-side-title{
  font-size:15px;
  font-weight:700;
  color:#fff;
  padding-right:28px;
  margin-bottom:8px;
}
.line-info-side-desc{
  font-size:11px;
  color:#71717a;
  line-height:1.45;
  margin-bottom:14px;
}
.line-info-side-placeholder{
  font-size:12px;
  color:#a1a1aa;
  line-height:1.5;
}
.line-info-side-field{margin-bottom:12px;}
.line-info-side-time-row{
  display:flex;
  align-items:center;
  gap:6px;
}
.line-info-side-time-sep{
  font-size:14px;
  font-weight:700;
  color:#71717a;
  flex:0 0 auto;
  user-select:none;
}
.line-info-side-time-row .line-info-side-select-hm{
  flex:1 1 0;
  min-width:0;
  width:auto;
  max-width:none;
}
.line-info-side-lbl{
  display:block;
  font-size:10px;
  font-weight:700;
  color:#888;
  text-transform:uppercase;
  letter-spacing:.06em;
  margin-bottom:6px;
}
.line-info-side-select{
  width:100%;
  max-width:100%;
  padding:8px 10px;
  border-radius:8px;
  border:1px solid #3f3f46;
  background:#18181b;
  color:#fff;
  font-size:13px;
  font-weight:600;
  font-variant-numeric:tabular-nums;
  cursor:pointer;
  -webkit-appearance:none;
  appearance:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23a1a1aa' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;
  background-position:right 10px center;
  padding-right:32px;
}
.line-info-side-select:focus{
  outline:none;
  border-color:var(--line-info-accent,#a3e635);
  box-shadow:0 0 0 1px var(--line-info-accent,#a3e635);
}
.line-info-side-hint{
  font-size:10px;
  color:#52525b;
  margin-top:6px;
  line-height:1.35;
}
.line-info-side-error{
  min-height:18px;
  font-size:11px;
  color:#f87171;
  margin:8px 0 4px;
  line-height:1.35;
}
.line-info-side-error:empty{display:none;}
.line-info-side-actions{
  display:flex;
  justify-content:flex-end;
  align-items:center;
  gap:10px;
  margin-top:12px;
}
.line-info-side-cancel{
  padding:8px 16px;
  border-radius:10px;
  border:1px solid #52525b;
  background:transparent;
  color:#e4e4e7;
  font-size:12px;
  font-weight:700;
  cursor:pointer;
  transition:background .15s ease,border-color .15s ease;
}
.line-info-side-cancel:hover{
  background:rgba(39,39,42,0.85);
  border-color:#71717a;
}
.line-info-side-confirm{
  padding:8px 20px;
  border-radius:10px;
  border:1px solid #52525b;
  background:#27272a;
  color:#fff;
  font-size:12px;
  font-weight:700;
  cursor:pointer;
  transition:background .15s ease,opacity .15s ease;
}
.line-info-side-confirm:hover:not(:disabled){
  background:#3f3f46;
  border-color:#71717a;
}
.line-info-side-confirm:disabled{
  opacity:0.45;
  cursor:not-allowed;
}
.line-info-routing-icon-btn{
  width:32px;height:32px;border-radius:999px;border:1px solid #52525b;background:#27272a;color:#fff;font-size:16px;
  line-height:1;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;
  transition:background .15s ease,border-color .15s ease;
}
.line-info-routing-icon-btn .line-info-routing-act-svg{display:block;pointer-events:none;}
.line-info-routing-icon-btn:hover{border-color:#71717a;background:#3f3f46;}
.line-info-routing-icon-btn-add{color:#e4e4e7;}
.line-info-routing-icon-btn-del{color:#e4e4e7;}
.line-info-express-stops{display:flex;flex-direction:column;gap:8px;margin-bottom:6px;max-height:220px;overflow-y:auto;}
.line-info-express-row{display:flex;align-items:center;gap:8px;}
.line-info-express-row .line-info-side-select{flex:1;min-width:0;}
.line-info-express-toolbar{display:flex;justify-content:flex-end;margin-bottom:4px;}
#line-info-cap-target-wrap{margin:0 0 8px;padding:0 24px;}
#line-info-cap-target-wrap .line-info-side-lbl{margin-bottom:6px;}
#line-info-cap-target-wrap .line-info-side-select{padding:6px 10px;font-size:12px;}

@media (max-width:768px){
  .line-info-side-stack{
    left:8px;
    right:8px;
    width:auto;
    top:auto;
    bottom:88px;
    max-height:min(42vh,320px);
  }
}

.ti-row{display:flex;justify-content:space-between;margin-bottom:6px;font-size:11px;}
.ti-l{color:var(--t3);}
.ti-v{color:var(--t1);font-weight:500;}
.sec-lbl{font-size:7px;color:var(--t4);letter-spacing:2px;text-transform:uppercase;margin:9px 0 5px;}
.pax-bar-bg{height:2px;background:var(--bg4);margin:5px 0 8px;}
.pax-bar-fill{height:2px;background:var(--t2);transition:width .3s;}
.ctrl-row{display:flex;gap:3px;margin-bottom:7px;}
.ctrl-btn{flex:1;padding:4px;background:transparent;border:1px solid var(--bd3);
  color:var(--t4);font-size:8px;cursor:pointer;transition:all .12s;text-align:center;
  border-radius:10px;box-shadow:0 1px 2px rgba(0,0,0,0.2);}
.ctrl-btn:hover,.ctrl-btn.on{border-color:var(--t3);color:var(--t2);background:var(--bg3);box-shadow:0 2px 4px rgba(0,0,0,0.25);}

/* 通知（warning 提示）：右上角位置；客流置顶条可见时由 JS 设置 top，叠在其下方 */
#notif-box{
  position:fixed;
  top:16px;
  right:16px;
  z-index:3000;
  display:flex;
  flex-direction:column;
  gap:4px;
  align-items:flex-end;
}
.notif{
  padding:7px 10px;
  background:#ffffff;
  border-radius:0;
  border-left:3px solid #ef4444; /* 红色强调条，表示 warning */
  font-size:11px;
  line-height:1.25;
  color:#111827; /* 深色文字 */
  box-shadow:0 8px 20px rgba(15,23,42,0.25);
  max-width:220px;
  animation:nIn .2s ease;
}
.notif-compact{
  width:min(320px,calc(100vw - 32px));
}
.notif-main{
  display:flex;
  align-items:center;
  gap:8px;
  cursor:default;
}
.notif-text{
  flex:1;
  min-width:0;
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}
.notif-actions{
  display:flex;
  align-items:center;
  gap:6px;
}
.notif-more{
  font-size:12px;
  line-height:1;
  color:#dc2626;
  font-weight:700;
  min-width:20px;
  text-align:right;
}
.notif-toggle{
  border:none;
  background:transparent;
  color:#111827;
  font-size:12px;
  line-height:1;
  padding:0;
  cursor:pointer;
}
.notif-list{
  margin-top:8px;
  padding-top:8px;
  border-top:1px solid rgba(17,24,39,0.15);
  display:flex;
  flex-direction:column;
  gap:6px;
  max-height:180px;
  overflow:auto;
}
.notif-item{
  font-size:12px;
  line-height:1.35;
  color:#374151;
}
@keyframes nIn{
  from{opacity:0;transform:translateY(-6px);}
  to{opacity:1;transform:translateY(0);}
}

/* 导航按钮 Tooltip：显示在 icon 上方 */
.nav-tooltip{position:fixed;z-index:3100;padding:4px 8px;background:rgba(0,0,0,0.9);
  border:1px solid rgba(255,255,255,0.15);border-radius:4px;font-size:9px;color:#fff;
  white-space:nowrap;pointer-events:none;animation:navTipIn .15s ease;}
@keyframes navTipIn{from{opacity:0;transform:translateY(4px);}to{opacity:1;transform:translateY(0);}}

/* 旅客圆点层（Canvas 覆盖层，用于列车点、站名、候车人数） */
#pax-canvas{position:fixed;inset:0;pointer-events:none;z-index:500;}

/* 峰值指示条 */
#peak-bar{
  position:fixed;left:0;top:0;right:0;height:2px;z-index:999;
  background:transparent;transition:background .5s;
}
#peak-bar.peak{background:rgba(200,151,58,0.5);}
#peak-bar.offpeak{background:rgba(74,158,106,0.3);}

/* 取消地图默认聚焦虚线框，避免点击街道时闪一下长方形轮廓 */
.map-interactive:focus{
  outline:none;
}

/* 滚动条 */
::-webkit-scrollbar{width:3px;}
::-webkit-scrollbar-track{background:transparent;}
::-webkit-scrollbar-thumb{background:var(--bd3);border-radius:2px;}

/* 模式标识 */
#mode-badge{position:fixed;left:50%;bottom:88px;transform:translateX(-50%);
  z-index:1001;background:rgba(8,8,8,0.9);border:1px solid var(--bd3);
  padding:4px 12px;font-size:9px;color:var(--t3);letter-spacing:1px;display:none;}
#mode-badge.show{display:block;}

/* 产品导览 overlay（方案二：气泡+箭头） */
#tutorial-overlay{position:fixed;inset:0;z-index:12000;pointer-events:none;display:flex;align-items:center;justify-content:center;}
#tutorial-overlay.show{display:flex;}
#tutorial-backdrop{position:absolute;inset:0;background:transparent;pointer-events:none;}
#tutorial-card{position:fixed;max-width:320px;padding:1rem 1.25rem;border-radius:8px;box-shadow:0 4px 20px rgba(0,0,0,0.4);background:var(--bg3);color:var(--t1);pointer-events:auto;z-index:12001;}
#tutorial-card .tutorial-card-title{font-size:1rem;font-weight:700;margin-bottom:8px;}
#tutorial-card .tutorial-card-body{font-size:13px;line-height:1.5;color:var(--t2);margin-bottom:14px;}
#tutorial-card .tutorial-card-actions{display:flex;gap:8px;flex-wrap:wrap;}
#tutorial-card .tutorial-btn{padding:6px 12px;font-size:12px;border:1px solid var(--bd2);background:var(--bg4);color:var(--t1);border-radius:4px;cursor:pointer;}
#tutorial-card .tutorial-btn:hover{background:var(--bd2);}
#tutorial-card .tutorial-btn-primary{background:var(--accent);border-color:var(--accent);color:#fff;}
#tutorial-card .tutorial-btn-primary:hover{opacity:0.9;}
#tutorial-card .tutorial-btn-skip{color:var(--t3);}
#tutorial-card.arrow-bottom::before{content:'';position:absolute;left:50%;bottom:-8px;margin-left:-8px;border:8px solid transparent;border-top-color:var(--bg3);}
#tutorial-card.arrow-top::before{content:'';position:absolute;left:50%;top:-8px;margin-left:-8px;border:8px solid transparent;border-bottom-color:var(--bg3);}
#tutorial-card .tutorial-btn[disabled]{opacity:0.7;cursor:not-allowed;}
.tutorial-highlight{outline:3px solid var(--accent);outline-offset:2px;position:relative;z-index:10;}
#tutorial-card .tutorial-key{display:inline-block;padding:3px 10px;margin-right:6px;border-radius:6px;background:var(--bg4);border:1px solid var(--bd2);font-size:12px;font-weight:700;font-family:inherit;color:var(--t1);}
#tutorial-card .tutorial-shortcut-row{margin-bottom:8px;line-height:1.5;}
#tutorial-card .tutorial-shortcut-row:last-child{margin-bottom:0;}

        /* 站点面板内 Tailwind 类等效样式，避免依赖 cdn.tailwindcss.com */
        #panel-station .flex{display:flex;}
        #panel-station .flex-1{flex:1;}
        #panel-station .flex-col{flex-direction:column;}
        #panel-station .flex-shrink-0{flex-shrink:0;}
        #panel-station .justify-between{justify-content:space-between;}
        #panel-station .items-start{align-items:flex-start;}
        #panel-station .items-center{align-items:center;}
        #panel-station .items-baseline{align-items:baseline;}
        #panel-station .space-x-1>*+*{margin-left:0.25rem;}
        #panel-station .space-x-2>*+*{margin-left:0.5rem;}
        #panel-station .space-y-2>*+*{margin-top:0.5rem;}
        #panel-station .space-y-4>*+*{margin-top:1rem;}
        #panel-station .text-xs{font-size:0.75rem;}
        #panel-station .text-sm{font-size:0.875rem;}
        #panel-station .text-base{font-size:1rem;}
        #panel-station .text-xl{font-size:1.25rem;line-height:1;}
        #panel-station .leading-none{line-height:1;}
        #panel-station .font-medium{font-weight:500;}
        #panel-station .font-semibold{font-weight:600;}
        #panel-station .text-gray-400{color:var(--text-muted,#a0a0a0);}
        #panel-station .text-gray-500{color:#6b7280;}
        #panel-station .text-gray-300{color:#d1d5db;}
        #panel-station .text-white{color:#fff;}
        #panel-station .text-green-500{color:var(--highlight-green,#34C759);}
        #panel-station .hover\:text-white:hover{color:#fff;}
        #panel-station .mr-1{margin-right:0.25rem;}
        #panel-station .mr-2{margin-right:0.5rem;}
        #panel-station .mb-1{margin-bottom:0.25rem;}
        #panel-station .mb-2{margin-bottom:0.5rem;}
        #panel-station .mb-3{margin-bottom:0.75rem;}
        #panel-station .mb-4{margin-bottom:1rem;}
        #panel-station .mt-2{margin-top:0.5rem;}
        #panel-station .py-3{padding-top:0.75rem;padding-bottom:0.75rem;}
        #panel-station .pb-4{padding-bottom:1rem;}
        #panel-station .px-1{padding-left:0.25rem;padding-right:0.25rem;}
        #panel-station .text-right{text-align:right;}
        #panel-station .block{display:block;}
        #panel-station .hidden{display:none;}
        #panel-station .relative{position:relative;}
        #panel-station .h-28{height:7rem;}
        #panel-station .h-full{height:100%;}
        #panel-station .w-full{width:100%;}
        #panel-station .bg-gray-700{background-color:#374151;}
        #panel-station .rounded-lg{border-radius:0.5rem;}
        #panel-station .overflow-hidden{overflow:hidden;}
        #panel-station .border{border-width:1px;}
        #panel-station .border-gray-600{border-color:#4b5563;}
        #panel-station .station-waiting-count,#panel-station .next-arrival-time,#panel-station .occupancy-display{color:#d4d4d8;}
        /* 车站“列车动态”每个方向：第一行只放方向；第二行放到站/候车/列车载客信息 */
        #panel-station .station-train-dir-block{display:flex;flex-direction:column;gap:4px;}
        #panel-station .station-train-dir-bottom{flex-wrap:wrap;}
        /* “到达时间”固定靠左；“候车人数 + 载客人数”整体靠右，且右侧布局不随数字长度抖动 */
        #panel-station .station-train-dir-right{margin-left:auto;display:flex;align-items:center;justify-content:flex-end;gap:1rem;min-width:0;}
        #panel-station .occupancy-display{display:inline-block;min-width:11ch;text-align:right;font-variant-numeric:tabular-nums;font-feature-settings:"tnum";}
        #panel-station .station-waiting-count{white-space:nowrap;}
        #panel-station .next-arrival-time{white-space:nowrap;flex:0 0 auto;}

       :root {
            --bg-dark: #1A1A1A;
            --panel-bg: #222222;
            --section-bg: #2A2A2A;
            --text-light: #E0E0E0;
            --text-heading: #FFFFFF;
            --text-muted: #A0A0A0;
            --border-dark: #3A3A3A;
            --accent-blue: #007AFF;
            --accent-blue-hover: #005BC0;
            --highlight-green: #34C759;
            --accent-red: #FF3B30;
            --accent-yellow: #FFD60A;
        }

#panel-station .panel-container {
            font-family: -apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
            /* 与其它面板保持一致：80% 透明度黑色 */
            background: rgba(0,0,0,0.8);
            color: var(--text-light);
            width: 100%;
            max-width: 100%;
            height: 92vh;
            overflow-y: auto;
            position: relative;
            border-radius: 16px;
            border: 1px solid var(--border-dark);
            box-shadow: 0 4px 15px rgba(0, 0, 0, 0.4);
            display: flex;
            flex-direction: column;
            box-sizing: border-box;
        }
        #panel-station .panel-container::-webkit-scrollbar {
            width: 6px;
        }
        #panel-station .panel-container::-webkit-scrollbar-thumb {
            background: rgba(255, 255, 255, 0.2);
            border-radius: 3px;
        }
        #panel-station .panel-container::-webkit-scrollbar-track {
            background: transparent;
        }
        #panel-station .station-name-input-wrap{
            position:relative;
            padding-right:34px;
        }
        #panel-station .station-name-refresh-btn{
            position:absolute;
            right:4px;
            top:50%;
            transform:translateY(-50%);
            width:24px;
            height:24px;
            border:1px solid rgba(255,255,255,0.14);
            border-radius:999px;
            background:rgba(255,255,255,0.04);
            color:#9ca3af;
            display:flex;
            align-items:center;
            justify-content:center;
            cursor:pointer;
            transition:all .15s ease;
        }
        #panel-station .station-name-refresh-btn svg{
            width:14px;
            height:14px;
            stroke:currentColor;
            fill:none;
            stroke-width:2;
            stroke-linecap:round;
            stroke-linejoin:round;
        }
        #panel-station .station-name-refresh-btn:hover{
            color:#fff;
            border-color:rgba(255,255,255,0.35);
            background:rgba(255,255,255,0.1);
        }
        #panel-station .station-name-refresh-btn:disabled{
            opacity:.6;
            cursor:default;
        }
        #panel-station .station-name-refresh-btn.is-loading svg{
            animation:station-name-spin .8s linear infinite;
        }
        @keyframes station-name-spin{
            from{transform:rotate(0deg);}
            to{transform:rotate(360deg);}
        }

        .interactive-btn {
            background-color: transparent;
            border: none;
            padding: 6px 10px;
            border-radius: 6px;
            font-size: 0.8rem;
            color: var(--text-muted);
            transition: background-color 0.2s ease, color 0.2s ease, transform 0.2s ease;
        }
        .interactive-btn:hover {
            background-color: #333333;
            color: var(--text-heading);
            transform: translateY(-1px);
        }

        .status-dot {
            width: 9px;
            height: 9px;
            border-radius: 50%;
            background-color: var(--highlight-green);
            box-shadow: 0 0 6px rgba(52, 199, 89, 0.6);
            animation: pulse-dot 2s infinite alternate;
        }
        @keyframes pulse-dot {
            0% { transform: scale(0.9); opacity: 0.7; }
            50% { transform: scale(1.1); opacity: 1; }
            100% { transform: scale(0.9); opacity: 0.7; }
        }

        @keyframes fade-in-up {
            from { opacity: 0; transform: translateY(5px); }
            to { opacity: 1; transform: translateY(0); }
        }
        .occupancy-number {
            animation: fade-in-up 0.5s ease-out forwards;
            display: inline-block;
        }

        .line-indicator-block {
            display: inline-flex;
            align-items: center;
            justify-content: center;
            padding: 4px 8px;
            border-radius: 6px;
            color: var(--text-heading);
            font-weight: 600;
            min-width: 55px;
            text-align: center;
            font-size: 0.9rem;
            height: 28px;
        }
        .line-1-bg { background-color: var(--accent-red); }
        .line-2-bg { background-color: var(--accent-blue); }

        .radio-tab-group {
            display: flex;
            border: 1px solid var(--border-dark);
            border-radius: 8px;
            overflow: hidden;
        }
        .radio-tab-item {
            flex: 1;
            text-align: center;
            padding: 8px 12px;
            font-size: 0.85rem;
            color: var(--text-muted);
            background-color: var(--section-bg);
            cursor: pointer;
            transition: all 0.2s ease;
            user-select: none;
        }
        .radio-tab-item:hover {
            background-color: #333333;
            color: var(--text-light);
        }
        input[type="radio"].hidden:checked + .radio-tab-item {
            background-color: #FFFFFF;
            color: var(--bg-dark);
            font-weight: 600;
        }
        input[type="radio"].hidden:checked + .radio-tab-item:hover {
            background-color: #F0F0F0;
            color: var(--bg-dark);
        }
        .radio-tab-item + .radio-tab-item {
            border-left: 1px solid var(--border-dark);
        }

        .traffic-bar {
            transition: transform 0.15s ease, filter 0.15s ease;
            border-radius: 2px;
            height: 100%;
        }
        .traffic-bar.peak {
            opacity: 1;
        }
        .traffic-bar:hover {
            transform: scaleY(1.05);
            filter: brightness(1.15);
        }

        /* ========== 24h 客流概览 · 新样式 ========== */
        #panel-station .traffic-overview-block {
            padding-bottom: 1.25rem;
        }
        #panel-station .traffic-overview-title {
            font-size: 1rem;
            font-weight: 600;
            color: #f4f4f5;
            margin: 0 0 0.25rem 0;
            letter-spacing: 0.02em;
        }
        #panel-station .traffic-overview-subtitle {
            font-size: 0.8125rem;
            color: #a1a1aa;
            margin: 0 0 0.75rem 0;
        }
        #panel-station .traffic-charts-card {
            background: linear-gradient(180deg, rgba(39,39,42,0.95) 0%, rgba(24,24,27,0.98) 100%);
            border: 1px solid rgba(63,63,70,0.8);
            border-radius: 10px;
            padding: 0.75rem 0.5rem 0.5rem;
            display: flex;
            flex-direction: column;
            gap: 0.75rem;
        }
        #panel-station .traffic-chart-unit {
            display: flex;
            flex-direction: column;
            gap: 0.35rem;
        }
        #panel-station .traffic-chart-header {
            display: flex;
            align-items: center;
            gap: 0.4rem;
        }
        #panel-station .traffic-chart-dot {
            width: 6px;
            height: 6px;
            border-radius: 50%;
        }
        #panel-station .traffic-chart-dot-in {
            background: #3b82f6;
            box-shadow: 0 0 8px rgba(59,130,246,0.4);
        }
        #panel-station .traffic-chart-dot-total {
            background: #3b82f6;
            box-shadow: 0 0 8px rgba(59,130,246,0.4);
        }
        #panel-station .traffic-chart-dot-transfer {
            background: #a855f7;
            box-shadow: 0 0 8px rgba(168,85,247,0.35);
        }
        #panel-station .traffic-chart-name {
            font-size: 0.75rem;
            font-weight: 600;
            color: #d4d4d8;
        }
        #panel-station .traffic-chart-canvas {
            height: 48px;
            display: flex;
            align-items: flex-end;
            justify-content: space-between;
            gap: 2px;
        }
        #panel-station .traffic-axis {
            display: flex;
            justify-content: space-between;
            margin-top: 0.5rem;
            padding: 0 2px;
            font-size: 0.6875rem;
            color: #71717a;
            letter-spacing: 0.02em;
        }
        /* 柱条容器 */
        #panel-station .traffic-bar-wrap {
            flex: 1;
            min-width: 0;
            max-width: 24px;
            height: 100%;
            display: flex;
            align-items: flex-end;
            position: relative;
        }
        /* 客流柱条：颜色由 JS 根据线路主题色注入，此处仅做 fallback 与结构 */
        #panel-station .traffic-bar.traffic-bar-total {
            background: #3b82f6 !important;
            border-radius: 3px 3px 0 0;
            min-height: 6px;
            box-shadow: 0 -1px 0 rgba(0,0,0,0.15);
        }
        #panel-station .traffic-bar.traffic-bar-transfer {
            background: #a855f7 !important;
            border-radius: 3px 3px 0 0;
            min-height: 6px;
            box-shadow: 0 -1px 0 rgba(0,0,0,0.15);
        }
        /* Tooltip */
        #panel-station .traffic-tooltip {
            position: fixed;
            z-index: 9999;
            padding: 6px 10px;
            font-size: 12px;
            line-height: 1.35;
            color: #fafafa;
            background: rgba(24,24,27,0.96);
            border: 1px solid rgba(63,63,70,0.9);
            border-radius: 6px;
            box-shadow: 0 4px 12px rgba(0,0,0,0.4);
            pointer-events: none;
            opacity: 0;
            transform: translate(-50%, 0);
            transition: opacity 0.12s ease, transform 0.12s ease;
            white-space: nowrap;
        }
        #panel-station .traffic-tooltip.is-visible {
            opacity: 1;
            transform: translate(-50%, -8px);
        }

        .section-block {
            padding: 20px;
            border-bottom: 1px solid var(--border-dark);
        }
        .section-block:last-child {
            border-bottom: none;
        }
        .section-block h2 {
            color: var(--text-heading);
            margin-bottom: 1rem;
        }
        .section-block label {
            color: var(--text-muted);
        }

/* ================================================================
   客流加载失败提示 toast
   ================================================================ */
.flow-error-toast{
  position:fixed;
  bottom:92px;
  left:50%;
  transform:translateX(-50%) translateY(16px);
  z-index:1015;
  display:flex;
  align-items:center;
  gap:8px;
  padding:9px 10px 9px 14px;
  padding-right:28px;
  background:#ffffff;
  border-radius:999px;
  box-shadow:0 4px 24px rgba(0,0,0,0.14),0 1px 6px rgba(0,0,0,0.08),0 0 0 1px rgba(0,0,0,0.05);
  pointer-events:none;
  opacity:0;
  transition:opacity 0.3s cubic-bezier(0.34,1.56,0.64,1),
             transform 0.3s cubic-bezier(0.34,1.56,0.64,1);
  white-space:nowrap;
  will-change:transform,opacity;
}
.flow-error-toast-close{
  position:absolute;
  top:5px;
  right:8px;
  width:16px;
  height:16px;
  border:none;
  background:transparent;
  color:#64748b;
  font-size:14px;
  line-height:16px;
  padding:0;
  cursor:pointer;
  border-radius:999px;
  transition:background .15s,color .15s;
}
.flow-error-toast-close:hover{
  background:rgba(100,116,139,0.16);
  color:#334155;
}
.flow-error-toast[aria-hidden="false"]{
  opacity:1;
  transform:translateX(-50%) translateY(0);
  pointer-events:auto;
}
.flow-error-toast-text{
  font-size:13px;
  font-weight:500;
  color:#1e293b;
  letter-spacing:0.01em;
  line-height:1;
}
.flow-error-toast-btn{
  padding:6px 14px;
  font-size:12px;
  font-weight:600;
  letter-spacing:0.05em;
  color:#ffffff;
  background:#1e293b;
  border:none;
  border-radius:999px;
  cursor:pointer;
  flex-shrink:0;
  line-height:1;
  transition:background 0.15s,transform 0.12s,opacity 0.15s;
}
.flow-error-toast-btn:hover:not(:disabled){
  background:#334155;
  transform:scale(1.05);
}
.flow-error-toast-btn:active:not(:disabled){
  transform:scale(0.96);
}
.flow-error-toast-btn:disabled{
  opacity:0.55;
  cursor:wait;
}
