
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
:root{--fs-2xs:clamp(10px,.42rem + .14vw,11px);--fs-xs:clamp(10.5px,.46rem + .18vw,12px);--fs-sm:clamp(11px,.5rem + .2vw,13px);--fs-md:clamp(12px,.55rem + .24vw,14px);--fs-lg:clamp(13px,.6rem + .26vw,15px);--fs-lg2:clamp(14px,.65rem + .28vw,16px);--fs-xl:clamp(15px,.72rem + .32vw,17.5px);--fs-2xl:clamp(17px,.8rem + .4vw,20px);
  --bg:#0f1220;--card:#171b2e;--card-h:#1d2340;
  --ink:#eef1fa;--sub:#8b93b0;--line:#262d4d;
  --pri:#f59e0b;--pri-d:#d97706;--sec:#06b6d4;--ok:#10b981;
  --cat-white:#f8fafc;--cat-grey:#171b24;--cat-dark:#374151; /* 黑白相间：灰=黑斑，白=胸腹爪 */
  --violet:#a78bfa;
  --cw:min(100vw - 24px, 880px);
  --gap:6px;
  --cp:clamp(12px,3vw,22px);
  --cat:min(54vmin,50dvh);
  --ring:linear-gradient(135deg,rgba(255,194,75,.95),rgba(65,209,255,.75),rgba(167,139,250,.85));
}
html,body{height:100%}
body{
  font-family:'PingFang SC','MiSans','Source Han Sans SC','Microsoft YaHei',-apple-system,'Segoe UI',sans-serif;
  background:
    radial-gradient(120% 70% at 50% -8%, rgba(88,66,255,.35), transparent 55%),
    radial-gradient(82% 50% at 94% 112%, rgba(65,209,255,.16), transparent 60%),
    radial-gradient(70% 45% at 2% 100%, rgba(255,122,80,.12), transparent 60%),
    linear-gradient(rgba(130,150,255,.045) 1px, transparent 1px),
    linear-gradient(90deg, rgba(130,150,255,.045) 1px, transparent 1px),
    linear-gradient(160deg,#0b1026 0%,#101a3c 52%,#0a0e22 100%);
  background-size:auto,auto,auto,60px 60px,60px 60px,auto;
  color:var(--ink);display:flex;justify-content:center;align-items:flex-start;
  padding:clamp(8px,2.4vmin,26px);overflow-y:auto;overflow-x:hidden;
}
.container{
  position:relative;z-index:1;width:100%;max-width:var(--cw);height:auto;min-height:100dvh;overflow:visible;
  display:flex;flex-direction:column;justify-content:flex-start;gap:var(--gap);
  padding-top:env(safe-area-inset-top);padding-bottom:env(safe-area-inset-bottom);
}

.bg-sym{position:fixed;pointer-events:none;z-index:0;opacity:.1;font-weight:700;animation:flt 8s ease-in-out infinite;color:var(--sub);text-shadow:0 0 30px rgba(120,150,255,.5)}
.bg-sym:nth-child(1){top:5%;left:4%;font-size:5vw;animation-delay:0s;color:var(--pri)}
.bg-sym:nth-child(2){top:12%;right:6%;font-size:6vw;animation-delay:1.4s;color:var(--sec)}
.bg-sym:nth-child(3){top:48%;left:2%;font-size:5vw;animation-delay:2.8s}
.bg-sym:nth-child(4){bottom:20%;right:4%;font-size:6vw;animation-delay:.7s;color:var(--violet)}
.bg-sym:nth-child(5){bottom:7%;left:7%;font-size:5vw;animation-delay:3.5s}
.bg-sym:nth-child(6){top:52%;right:1%;font-size:4vw;animation-delay:2s}
.bg-sym:nth-child(7){top:26%;left:42%;font-size:7vw;animation-delay:4.2s;color:var(--sec);opacity:.06}
.bg-sym:nth-child(8){bottom:42%;right:14%;font-size:4vw;animation-delay:1.1s}
@keyframes flt{0%,100%{transform:translateY(0) rotate(0deg)}50%{transform:translateY(-18px) rotate(10deg)}}

.card{
  position:relative;width:100%;background:var(--card);
  border:1px solid rgba(150,170,255,.16);border-radius:clamp(18px,2.6vw,30px);
  padding:var(--cp);box-shadow:0 30px 80px rgba(0,0,0,.5),0 0 0 1px rgba(0,0,0,.3) inset;
  backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);overflow:hidden;
  display:flex;flex-direction:column;
  animation:cardIn .6s cubic-bezier(.2,.8,.25,1) both;
}
@keyframes cardIn{0%{opacity:0;transform:translateY(16px) scale(.98)}100%{opacity:1;transform:none}}
.card::before{content:'';position:absolute;inset:0 0 auto 0;height:4px;background:var(--ring)}
.card::after{content:'';position:absolute;inset:-60% -30% auto -30%;height:120%;pointer-events:none;opacity:.5;
  background:radial-gradient(60% 40% at 30% 0%, rgba(120,130,255,.18), transparent 70%)}

.topbar{position:relative;display:flex;align-items:center;justify-content:space-between;gap:8px;order:3;margin-top:var(--gap);margin-bottom:0;flex-wrap:wrap}
.badge{display:inline-flex;align-items:center;gap:5px;background:linear-gradient(135deg,rgba(245,158,11,.16),rgba(245,158,11,.08));color:var(--pri);border:1px solid rgba(245,158,11,.35);padding:0 clamp(12px,3vw,16px);border-radius:999px;font-size:var(--fs-sm);font-weight:800;height:clamp(32px,8vw,42px);box-shadow:0 0 20px rgba(245,158,11,.12) inset;letter-spacing:.5px}
.badge .dot{width:7px;height:7px;border-radius:50%;background:var(--pri);animation:beacon 1.6s ease-in-out infinite}
@keyframes beacon{0%,100%{box-shadow:0 0 0 0 rgba(245,158,11,.5)}50%{box-shadow:0 0 0 6px rgba(245,158,11,0)}}
.home-btn{display:inline-flex;align-items:center;gap:5px;background:var(--card-h);border:1px solid var(--line);color:var(--sub);padding:0 clamp(12px,2.8vw,15px);border-radius:clamp(9px,2vw,12px);font-size:var(--fs-sm);font-weight:700;text-decoration:none;transition:all .15s;height:clamp(32px,8vw,42px);box-shadow:0 2px 8px rgba(0,0,0,.25)}
.home-btn:hover{border-color:var(--pri);color:var(--pri);transform:translateY(-1px)}

.user-switch{display:flex;gap:5px;align-items:center}
.user-switch .us{display:inline-flex;align-items:center;gap:4px;min-height:30px;padding:0 9px;border-radius:999px;border:1.5px solid var(--line);background:var(--card-h);color:var(--sub);font-size:var(--fs-xs);font-weight:600;cursor:pointer;transition:all .15s;font-family:inherit}
.user-switch .us .uav{width:18px;height:18px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:var(--fs-2xs);font-weight:700;color:#fff}
.user-switch .us.active{border-color:var(--pri);background:rgba(245,158,11,.14);color:var(--pri)}

h1{font-weight:900;text-align:center;margin:2px 0 1px;letter-spacing:.5px;font-size:clamp(18px,5.4vw,26px);
  text-shadow:0 2px 30px rgba(120,130,255,.25)}
h1 .glow{background:linear-gradient(135deg,var(--violet),var(--pri) 40%,var(--sec));-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
.sub{text-align:center;font-size:var(--fs-xs);color:var(--sub);margin-bottom:calc(var(--gap)*.4)}

/* 猫舞台 */





/* 角色层默认隐藏，由外层类控制显示 */


/* 通用动画 */
.breathe{animation:breathe 4s ease-in-out infinite}
@keyframes breathe{0%,100%{transform:scale(1)}50%{transform:scale(1.015)}}
.tail{transform-origin:270px 290px;animation:tailWag 2.4s ease-in-out infinite}
@keyframes tailWag{0%,100%{transform:rotate(0deg)}25%{transform:rotate(8deg)}75%{transform:rotate(-6deg)}}
.ear-left{transform-origin:170px 110px;animation:earTwitchL 4.2s ease-in-out infinite}
.ear-right{transform-origin:230px 110px;animation:earTwitchR 4.6s ease-in-out infinite}
@keyframes earTwitchL{0%,100%{transform:rotate(0)}5%{transform:rotate(-6deg)}10%{transform:rotate(0)}}
@keyframes earTwitchR{0%,100%{transform:rotate(0)}52%{transform:rotate(5deg)}58%{transform:rotate(0)}}
.blink{animation:blink 3.6s infinite;transform-origin:center}
@keyframes blink{0%,45%,55%,100%{transform:scaleY(1)}50%{transform:scaleY(.1)}}

/* 喝水/埋沙专用动画 */
.tongue{transform-origin:200px 210px;animation:lap .35s ease-in-out infinite alternate}
@keyframes lap{0%{transform:translateY(0)}100%{transform:translateY(5px)}}

@keyframes sweep{0%{transform:rotate(0) translateX(0)}100%{transform:rotate(-18deg) translateX(-8px)}}
.thought{animation:hoverBob 3s ease-in-out infinite}
@keyframes hoverBob{0%,100%{transform:translateY(0)}50%{transform:translateY(-6px)}}

/* 角色标签（横幅式，置于猫上方独立一行，避免与背景文字/猫重叠） */





/* 漂浮名言 = 毛线球 */










25%{transform:translate(6px,-10px) rotate(2deg)}50%{transform:translate(-4px,6px) rotate(-2deg)}75%{transform:translate(8px,4px) rotate(1deg)}}


50%{transform:scale(1.2) rotate(180deg)}100%{transform:scale(0) rotate(360deg);opacity:0}}

/* 名人名言主展示区 */







50%{transform:translateY(-6px) rotate(5deg)}}






@keyframes wobble{0%,100%{transform:rotate(0deg)}25%{transform:rotate(-12deg)}75%{transform:rotate(12deg)}}

.actions{display:flex;gap:clamp(10px,2.6vw,16px);justify-content:center;margin-top:var(--gap);flex-wrap:wrap}
.btn{display:inline-flex;align-items:center;gap:6px;padding:clamp(8px,1.9vw,11px) clamp(18px,5vw,28px);border-radius:999px;text-decoration:none;font-size:var(--fs-md);font-weight:800;transition:all .2s;border:none;cursor:pointer;letter-spacing:.5px}
.btn-primary{background:linear-gradient(135deg,var(--pri),#fbbf24);color:#1f1200;box-shadow:0 4px 16px rgba(245,158,11,.25)}
.btn-primary:hover{transform:translateY(-2px);box-shadow:0 8px 24px rgba(245,158,11,.4)}
.btn-secondary{background:var(--card-h);color:var(--sub);border:1.5px solid var(--line)}
.btn-secondary:hover{border-color:var(--pri);color:var(--pri);transform:translateY(-2px)}

/* 版本页脚 + 更新日志弹窗（深色主题） */
.math-foot{display:flex;align-items:center;justify-content:center;gap:clamp(8px,2vw,14px);flex-wrap:wrap;font-size:var(--fs-xs);color:var(--sub);margin-top:clamp(3px,1vw,6px)}
.math-foot .vnum{color:var(--pri);font-weight:700}
.math-foot .foot-home{padding:3px 14px;font-size:var(--fs-xs);text-decoration:none}
.math-foot .foot-easter{opacity:.75;letter-spacing:.5px}
.math-foot .qr-btn{width:clamp(30px,7vw,38px);height:clamp(30px,7vw,38px);padding:5px;border-radius:10px;border:1.5px solid var(--line);background:var(--card-h);color:var(--sub);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;font-family:inherit;line-height:0}
.math-foot .qr-btn:hover{border-color:var(--pri);color:var(--pri)}
.math-foot .changelog-link{color:var(--sec);font-weight:600;cursor:pointer;border:1px solid var(--line);padding:3px 12px;border-radius:999px;background:var(--card-h);transition:.15s}
.math-foot .changelog-link:hover{border-color:var(--sec)}
.modal-mask{position:fixed;inset:0;background:rgba(4,7,20,.72);backdrop-filter:blur(6px);display:none;align-items:center;justify-content:center;z-index:50;padding:16px}
#shotDetailMask{z-index:70}
#shotLightbox{z-index:80}
.modal{width:100%;max-width:520px;max-height:84vh;overflow:auto;background:var(--card);border:1px solid var(--line);border-radius:18px;box-shadow:0 20px 60px rgba(0,0,0,.6);border-top:4px solid var(--ring)}
.modal-h{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;font-size:var(--fs-lg2);font-weight:800;color:var(--ink);border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--card)}
.modal-x{background:none;border:none;color:var(--sub);font-size:22px;cursor:pointer;line-height:1}
.modal-x:hover{color:var(--pri)}
.modal-body{padding:14px 18px}

/* ===== 横屏（手机/讯飞PAD横着用）：收紧纵向 ===== */
@media (orientation:landscape){
  :root{--cat:min(38vmin,44dvh);--gap:4px}
  body{padding:clamp(6px,2vh,16px)}
}

/* ===== 平板宽度往上（竖屏 521–1180）：适度放大 ===== */
@media (orientation:portrait) and (min-width:521px) and (max-width:1180px){
  :root{--cw:min(100vw - 36px, 980px);--cat:min(44vmin,44dvh)}
  h1{font-size:clamp(24px,4vw,32px)}
  .badge,.home-btn{height:clamp(36px,5vw,48px);font-size:var(--fs-lg)}

  .btn{font-size:var(--fs-lg2);padding:clamp(9px,1.2vw,12px) clamp(24px,3vw,32px)}
}

/* ===== 1080p 笔记本横屏（≤1100px 高）：紧凑值，适合 50-70cm 正常距离观看 ===== */
@media (min-width:1181px) and (orientation:landscape) and (max-height:1100px){
  /* ★ 关键：覆写字号令牌上限，让所有用 --fs-* 的文字自动缩小 */
  :root{
    --fs-2xs:clamp(9px,.4rem + .1vw,10px);
    --fs-xs:clamp(9.5px,.42rem + .12vw,10.5px);
    --fs-sm:clamp(10px,.45rem + .14vw,11.5px);
    --fs-md:clamp(10.5px,.48rem + .16vw,12px);
    --fs-lg:clamp(11px,.5rem + .18vw,12.5px);
    --fs-lg2:clamp(11.5px,.53rem + .2vw,13px);
    --fs-xl:clamp(12px,.55rem + .22vw,13.5px);
    --fs-2xl:clamp(13px,.6rem + .26vw,15px);
    --cw:min(100vw - 28px, 1060px);
    --gap:3px;
    --cp:clamp(8px,.9vw,14px);
  }
  body{padding:clamp(6px,.8vh,12px);font-size:14px}
  h1{font-size:clamp(16px,1.3vw,22px)}
  .card{border-radius:clamp(12px,1.4vw,18px)}
  .topbar{gap:5px}
  .badge,.home-btn{height:clamp(26px,2vw,32px);font-size:var(--fs-sm)}
  .badge{padding:0 clamp(7px,2vw,11px)}
  .home-btn{padding:0 clamp(7px,1.8vw,10px)}
  .fl-plan-h .qr-btn{height:clamp(26px,2vw,32px)!important;width:clamp(26px,2vw,32px)!important}
  .btn{font-size:var(--fs-md);padding:clamp(4px,.5vw,7px) clamp(14px,1.6vw,22px)}
  .fl-h1{font-size:clamp(16px,1.4vw,22px)}
  .fl-headline{padding:clamp(3px,.8vw,6px) 6vw;border-radius:12px}
  .fl-src-card{padding:clamp(6px,1.2vw,10px);margin-top:4px;border-radius:12px}
  #flSourceCards{max-height:62vh}
  .fl-plan-grid{gap:5px}
  .fl-chip-item{padding:2px 7px;font-size:var(--fs-2xs)}
  .fl-slot,.fl-dg{padding:2px 5px;font-size:var(--fs-2xs);border-radius:8px}
  .modal{max-width:420px;border-radius:14px}
  .modal-h{padding:8px 12px;font-size:var(--fs-md)}
  .modal-body{padding:8px 12px}
  /* ★ 展开其余 9 个 → 飞行路线图之间的空间压到 25%（30px → 7px）—— 用 #flPlan 压过 .fl-card 的 padding 简写 */
  #flPlan{padding-bottom:2px}
  #flPlan .fl-plan-grid{padding-bottom:0}
  .pl-more-btn{margin-bottom:-2px}
  /* ★ 飞行路线图整体缩到 80%（限 SVG 容器宽度 → height:auto 自然缩，不脱离文档流，零溢出） */
  .fl-map-card .fl-map .map-fig{max-width:80%;margin-inline:auto}
}

/* ===== 平板/桌面横屏（≥1101px 高，大显示器 / 讯飞 A10 2000×1200 等）：适配横板 ===== */
@media (min-width:1181px) and (orientation:landscape) and (min-height:1101px){
  :root{--cw:min(100vw - 40px, 1180px)}
  h1{font-size:clamp(26px,2.4vw,34px)}
  .badge,.home-btn{height:clamp(42px,3.4vw,54px);font-size:var(--fs-xl)}


  .btn{font-size:var(--fs-xl);padding:clamp(10px,1.1vw,14px) clamp(28px,2.6vw,36px)}


}

/* ===== 2K 竖屏大屏（1440×2560 / 2160×3840）：整体放大、留白从容 ===== */
@media (orientation:portrait) and (min-width:1181px) and (min-height:1800px){
  :root{--cw:1180px;--cat:min(30vmin,34dvh);--gap:16px;
    --fs-2xs:13.5px;--fs-xs:14.5px;--fs-sm:15.5px;--fs-md:16.5px;--fs-lg:17.5px;--fs-lg2:18.5px;--fs-xl:20px;--fs-2xl:23px}
  /* 2K 竖屏超长网页：整体用浏览器滚动条滚动，容器不做内嵌滚动/限高 */
  html,body{height:auto;min-height:100%;overflow:auto}
  .container{height:auto;min-height:100dvh;justify-content:flex-start;overflow:visible;border:2px solid rgba(150,170,255,.22);border-radius:clamp(22px,2.2vw,32px);padding:clamp(8px,1vw,16px)}
  body{padding:clamp(28px,3vh,48px)}
  .card{height:auto;min-height:0;overflow:visible;padding:clamp(30px,2.4vw,46px);display:flex;flex-direction:column}
  .topbar{gap:16px;margin-top:18px;margin-bottom:0}
  .flight-panel{flex:1 1 auto;overflow:visible;min-height:0}
  /* 2K 竖屏：搜索设置内容自适应高度，不使用内嵌滚动栏 */
  #flSourceCards{max-height:none;overflow:visible;padding-right:0}
  #flSourceCards::-webkit-scrollbar{display:none}
  .fl-plan-grid{grid-template-columns:repeat(2,1fr);gap:8px 14px}
  .fl-headline{margin-bottom:calc(var(--gap) - 4px);padding-top:2px;padding-bottom:6px}
  /* 2K 竖屏：监控计划间距覆写已下移到基准规则之后（见文末同名媒体查询），避免被级联覆盖 */





  .badge{height:60px;padding:0 26px;font-size:20px}
  .home-btn{height:60px;padding:0 26px;font-size:20px;border-radius:16px}
  .qr-btn{height:60px;width:60px}
  .fl-h1{font-size:clamp(30px,2.6vw,40px)}
  .flight-panel .sub{font-size:var(--fs-lg2)}




  .btn{font-size:20px;padding:13px 28px;border-radius:999px}
  .actions{gap:20px;margin-top:12px}
  /* 2K 竖屏：页脚「回平台首页 / 失败日志」及同行文字图标放大 ~50% */
  .math-foot{font-size:var(--fs-xl);gap:clamp(14px,3vw,22px)}
  .math-foot .foot-home,.math-foot .foot-faillog{padding:7px 24px;font-size:var(--fs-xl)}
  .math-foot .qr-btn{width:clamp(48px,11vw,60px);height:clamp(48px,11vw,60px)}
  .math-foot .changelog-link{padding:7px 20px;font-size:var(--fs-xl)}
  .math-foot .ver,.math-foot .vnum,.math-foot .foot-easter{font-size:var(--fs-xl)}

  /* 2K 竖屏同程截图：截图定时标签及其后方时间设置同行、相邻，不换行不折行 */
  .ts-row3{flex-wrap:nowrap!important;gap:8px}
  .ts-iv-grp,.ts-iv-body{flex-wrap:nowrap!important;gap:8px}

  /* 2K 竖屏：整页可滚动，监控计划默认折叠规则已上移为全视口统一基准规则（默认显示 4 个） */
  /* 隐藏内部滚动条（保留滚动能力），整页仍用原生滚动 */
  html,body{scrollbar-width:none;-ms-overflow-style:none}
  html::-webkit-scrollbar,body::-webkit-scrollbar{display:none}
  *{scrollbar-width:none;-ms-overflow-style:none}
  *::-webkit-scrollbar{width:0;height:0;display:none}

  /* 2K 竖屏：同程截图采集排行表列宽更宽松 */
  .sr-row,.sr-head{grid-template-columns:1.5fr .72fr .72fr 1.05fr .88fr .72fr .68fr;font-size:var(--fs-lg2);padding:9px 12px}
  .sr-op{padding:3px 12px;font-size:var(--fs-lg)}







}

@media (prefers-reduced-motion: reduce){
  *{animation:none !important;transition:none !important}
}

/* ===== 融合布局：机票面板（上方常驻）+ 猫猫面板（下方）===== */
/* 默认（所有屏）：上下堆叠、页面可滚动；机票常驻上方、猫猫在下方，无需点按钮切换。*/
.flight-panel{display:flex;flex-direction:column;gap:var(--gap);min-height:0;width:100%;order:1}







/* 窄屏（手机）：猫与侧栏改为上下堆叠，避免挤压 */
@media (max-width:560px){


  .fl-src-grid{grid-template-columns:1fr}
  .src-grid{grid-template-columns:repeat(2,1fr)}
  .fl-plan-grid{grid-template-columns:1fr}
}

.fl-h1{text-align:center;font-weight:900;font-size:clamp(18px,5vw,24px);margin:2px 0 1px;position:relative;display:inline-block}
.fl-h1 .glow{background:linear-gradient(135deg,var(--violet),var(--pri) 40%,var(--sec));-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;filter:drop-shadow(0 0 8px rgba(245,158,11,.45)) drop-shadow(0 0 22px rgba(34,211,238,.32));letter-spacing:.08em}
.flight-panel .sub{text-align:center;margin-bottom:var(--gap)}
.fl-card{background:var(--card-h);border:1px solid var(--line);border-radius:16px;padding:clamp(10px,2.4vw,16px);margin-top:var(--gap)}
.fl-card-h{font-weight:800;font-size:var(--fs-xl);color:var(--ink);margin-bottom:8px;display:flex;align-items:center;gap:6px}
.fl-routes{display:flex;flex-direction:column;gap:8px}
.fl-route{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:8px 10px}
.fl-route .r-top{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap}
.fl-route .r-line{font-weight:800;font-size:var(--fs-md);color:var(--ink)}
.fl-route .r-meta{font-size:var(--fs-xs);color:var(--sub);margin-top:3px}
.fl-chip{display:inline-block;background:rgba(6,182,212,.14);color:#67e8f9;border:1px solid rgba(6,182,212,.3);border-radius:999px;padding:1px 8px;font-size:var(--fs-2xs);margin-left:4px}
.fl-kv{display:flex;flex-direction:column;gap:6px;font-size:var(--fs-sm)}
.fl-kv .row{display:flex;justify-content:space-between;gap:10px;border-bottom:1px dashed var(--line);padding-bottom:5px}
.fl-kv .k{color:var(--sub)} .fl-kv .v{color:var(--ink);text-align:right;font-weight:700}
.fl-form{display:flex;flex-direction:column;gap:6px}
.fl-label{font-size:var(--fs-sm);color:var(--sub);margin-top:4px;font-weight:700}
.fl-hint{color:var(--sec);font-weight:600;font-size:var(--fs-2xs)}
.fl-input{background:var(--card);border:1px solid var(--line);color:var(--ink);border-radius:10px;padding:8px 10px;font-size:var(--fs-md);font-family:inherit;width:100%}
.fl-input:focus{outline:none;border-color:var(--pri)}
.fl-radio{display:flex;gap:14px;flex-wrap:wrap}
.fl-radio label{font-size:var(--fs-md);color:var(--ink);display:flex;align-items:center;gap:5px;cursor:pointer}
.fl-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}
.fl-msg{font-size:var(--fs-xs);margin-top:6px;min-height:14px}
.fl-msg.ok{color:var(--ok)} .fl-msg.err{color:#f87171}
.fl-results{display:flex;flex-direction:column;gap:6px}
.fl-res{display:flex;justify-content:space-between;align-items:center;gap:8px;background:var(--card);border:1px solid var(--line);border-radius:10px;padding:7px 10px}
.fl-res.below{border-color:rgba(16,185,129,.5);background:rgba(16,185,129,.08)}
.fl-res .rr{font-size:var(--fs-sm);color:var(--ink);font-weight:700}
.fl-res .rp{font-weight:800;font-size:var(--fs-md)}
.fl-res .rp.below{color:var(--ok)} .fl-res .rp.above{color:var(--sub)}
.fl-res .rb{font-size:9px;padding:1px 6px;border-radius:999px;font-weight:800;white-space:nowrap}
.fl-res .rb.below{background:rgba(16,185,129,.2);color:var(--ok)}
.fl-res .rb.above{background:rgba(139,147,176,.18);color:var(--sub)}
.fl-empty{color:var(--sub);font-size:var(--fs-sm);text-align:center;padding:8px}
.fl-times{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
.fl-time{display:flex;flex-direction:column;gap:3px}
.fl-time label{font-size:var(--fs-xs);color:var(--sub);font-weight:700;text-align:center}
.fl-time input{background:var(--card);border:1px solid var(--line);color:var(--ink);border-radius:10px;padding:7px 6px;font-size:var(--fs-md);font-family:inherit;text-align:center;width:100%}
.fl-time input:focus{outline:none;border-color:var(--pri)}
.fl-times-hint{color:var(--sec);font-weight:600;font-size:var(--fs-2xs)}

/* ===== 折叠面板（数据源/配额 · 正在搜索的范围 · 搜索设置）===== */
.fl-acc{background:var(--card-h);border:1px solid var(--line);border-radius:16px;margin-top:var(--gap);overflow:hidden}
.fl-acc-h{font-weight:800;font-size:var(--fs-md);color:var(--ink);padding:clamp(10px,2.4vw,14px);cursor:pointer;list-style:none;display:flex;align-items:center;gap:6px;user-select:none}
.fl-acc-h .acc-arrow{margin-left:auto;color:var(--sub);transition:transform .22s;font-size:.9em;flex-shrink:0}
.fl-acc.open .fl-acc-h .acc-arrow{transform:rotate(180deg)}
/* 折叠：收起时至少显示前 2 行内容，其余折叠（渐隐遮罩）；展开后完整可滚动 */
.fl-acc .fl-acc-body{max-height:4.4em;overflow:hidden;transition:max-height .22s ease;position:relative}
.fl-acc .fl-acc-body::after{content:'';position:absolute;left:0;right:0;bottom:0;height:1.5em;background:linear-gradient(transparent,var(--card-h));pointer-events:none}
.fl-acc.open .fl-acc-body{max-height:52vh;overflow:auto}
.fl-acc.open .fl-acc-body::after{display:none}
.fl-acc-body{padding:0 clamp(10px,2.4vw,14px) clamp(10px,2.4vw,14px)}

/* 战果（常驻，占原「正在搜索」黄金位置） */
.fl-battle-list{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
.fl-battle-row{display:flex;flex-direction:row;align-items:center;gap:6px;background:var(--card);border:1px solid var(--line);border-radius:8px;padding:5px 8px;min-width:0}
.fl-battle-row.below{border-color:rgba(16,185,129,.5);background:rgba(16,185,129,.08)}
.fl-battle-row .b-top{display:flex;align-items:center;justify-content:space-between;gap:6px;min-width:0}
.fl-battle-row .b-rank{font-weight:900;color:var(--pri);font-size:var(--fs-sm);flex:none}
.fl-battle-row .b-route{font-weight:800;font-size:var(--fs-sm);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.fl-battle-row .b-line{font-weight:800;font-size:var(--fs-sm);min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1}
.fl-battle-row .b-price{font-weight:900;font-size:var(--fs-lg);color:var(--ink);flex:none}
.fl-battle-row.below .b-price{color:var(--ok)}
.fl-battle-row .rb{font-size:9px;padding:0 6px;border-radius:999px;font-weight:800;white-space:nowrap;flex:none}
.fl-battle-row .rb.below{background:rgba(16,185,129,.2);color:var(--ok)}
.fl-battle-row .rb.above{background:rgba(139,147,176,.18);color:var(--sub)}
.fl-battle-empty{grid-column:1/-1;display:flex;align-items:center;justify-content:center;gap:8px;color:var(--sub);font-size:var(--fs-sm);padding:4px 2px;white-space:nowrap}
.fl-battle-row .b-meta{flex:none;display:flex;gap:4px;align-items:center}
.fl-battle-row .b-date{flex:0 0 auto;font-size:var(--fs-2xs);color:var(--sub);font-weight:700;white-space:nowrap;letter-spacing:.2px}
.fl-battle-row .b-time{font-size:9.5px;color:var(--sub);font-weight:700;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;flex:none;white-space:nowrap}
.fl-battle-toggle{grid-column:1/-1;justify-self:center;margin-top:2px;font-size:var(--fs-xs);font-weight:800;color:var(--pri);background:transparent;border:1px dashed rgba(245,158,11,.45);border-radius:999px;padding:2px 14px;cursor:pointer}
/* 价格曲线：信息行（<单人> 路线 · 价格）独立成行；表头只保留 数据源名 + 接入状态 */
.sc-sub{display:block;margin:0 0 2px;font-weight:700;color:var(--sub);font-size:var(--fs-xs);text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;letter-spacing:.2px}
.fl-card-sub{font-weight:600;font-size:var(--fs-xs);color:var(--sub);margin-left:auto}

/* 监控实况（常驻，4 行） */
.fl-monitor{display:flex;flex-direction:column;gap:6px}
.fl-mon-row{display:grid;grid-template-columns:auto 1fr auto;gap:6px 10px;align-items:center;background:var(--card);border:1px solid var(--line);border-radius:10px;padding:7px 10px;font-size:var(--fs-sm)}
.fl-mon-row .m-dot{font-size:var(--fs-lg)}
.fl-mon-row .m-name{font-weight:700;color:var(--ink);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fl-mon-row .m-status{font-weight:800}
.fl-mon-row .m-info{grid-column:2 / 4;color:var(--sub);font-size:var(--fs-2xs);line-height:1.4}
.fl-mon-row.st-ok .m-status{color:var(--ok)}
.fl-mon-row.st-fail .m-status{color:#f87171}
.fl-mon-row.st-run .m-status{color:var(--sec)}
.fl-mon-row.st-none .m-status{color:var(--sub)}

/* 数据源清单徽标 */
.src-row{display:flex;justify-content:space-between;align-items:center;gap:8px;border-bottom:1px dashed var(--line);padding-bottom:5px}
.src-row .src-name{color:var(--ink);font-weight:700}
.src-badge{font-size:var(--fs-xs);padding:2px 8px;border-radius:999px;font-weight:800;white-space:nowrap}
.src-badge.ok{background:rgba(16,185,129,.2);color:var(--ok)}
.src-badge.planned{background:rgba(139,147,176,.18);color:var(--sub)}
/* 数据源/配额：四个源同一行紧凑排列 */
.src-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px;margin-bottom:8px}
.src-cell{display:flex;align-items:center;justify-content:space-between;gap:6px;background:var(--card);border:1px solid var(--line);border-radius:10px;padding:6px 10px}
.src-cell .src-name{color:var(--ink);font-weight:800;font-size:var(--fs-sm);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* Tab 交互 */
.fl-tabs{display:flex;gap:8px;margin:calc(var(--gap)*.6) 0 0}
.fl-tab{flex:1;background:var(--card-h);border:1.5px solid var(--line);border-radius:12px;padding:clamp(8px,2vw,11px);color:var(--sub);font-weight:800;font-size:var(--fs-md);cursor:pointer;font-family:inherit;transition:all .18s}
.fl-tab.active{background:rgba(245,158,11,.16);border-color:var(--pri);color:var(--pri)}
.fl-tab-pane{display:none;margin-top:var(--gap)}
.fl-tab-pane.active{display:block}
/* 缩小「飞常省↔监控计划」「监控计划↔飞行路线图」之间纵向空白 40%（随 --gap 自适应移动/桌面） */
#flPlan{margin-top:calc(var(--gap)*.7)}
/* 监控计划 ↔ 飞行路线图视觉无缝连接：取消中间的黑缝（两块卡片直接相接） */
#flPaneOverview{margin-top:0}
.fl-map-card{margin-top:0}
/* 「计划有变」按钮：位于监控计划标题靠右，字号放大 + 金色雷电动画 */
.fl-settings-btn{flex:0 0 auto;white-space:nowrap;padding:4px 16px;font-size:var(--fs-xl);font-weight:900;color:#8a6d00;background:linear-gradient(120deg,#fff6dc,#ffe9ae);border:2px solid #f5c518;border-radius:14px;position:relative;overflow:hidden;cursor:pointer;font-family:inherit;box-shadow:0 0 10px rgba(245,197,24,.5);animation:flGoldSpark 2s ease-in-out infinite;text-shadow:0 0 6px rgba(245,197,24,.45)}
.fl-settings-btn::after{content:"";position:absolute;left:-140%;top:-20%;width:55%;height:140%;background:linear-gradient(105deg,transparent,rgba(255,255,255,.85),transparent);transform:skewX(-20deg);animation:flBoltSweep 1.7s ease-in-out infinite;pointer-events:none}
.fl-settings-btn.active{background:linear-gradient(120deg,#ffe9a8,#ffd76a);border-color:#ffde40}
/* 「监控计划」头部二维码按钮：与择期发射按钮同款金色风格（金色渐变 + 闪烁光晕 + 电光扫过） */
.fl-plan-h .qr-btn{flex:0 0 auto;width:40px;height:40px;padding:0;background:linear-gradient(120deg,#fff6dc,#ffe9ae);color:#8a6d00;border:2px solid #f5c518;border-radius:14px;position:relative;overflow:hidden;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;box-shadow:0 0 10px rgba(245,197,24,.5);animation:flGoldSpark 2s ease-in-out infinite;transition:transform .12s, box-shadow .12s, border-color .12s}
.fl-plan-h .qr-btn::after{content:"";position:absolute;left:-140%;top:-20%;width:55%;height:140%;background:linear-gradient(105deg,transparent,rgba(255,255,255,.85),transparent);transform:skewX(-20deg);animation:flBoltSweep 1.7s ease-in-out infinite;pointer-events:none}
.fl-plan-h .qr-btn:hover{border-color:#ffde40;box-shadow:0 0 18px rgba(245,197,24,.85);transform:translateY(-1px)}
.fl-plan-h .qr-btn svg{width:22px;height:22px;stroke-width:2.2}
.fl-plan-h .qr-btn:active{transform:scale(.96)}
.fl-plan-h .qr-btn::selection{background:transparent}
@keyframes flGoldSpark{0%,100%{box-shadow:0 0 8px 1px rgba(245,197,24,.45);border-color:#f5c518}50%{box-shadow:0 0 22px 6px rgba(245,197,24,.9);border-color:#ffe180}}
@keyframes flBoltSweep{0%{left:-140%}55%{left:150%}100%{left:150%}}
.src-pm-pick{appearance:auto;-webkit-appearance:auto;background:var(--card-h);border:1.5px solid var(--line);border-radius:8px;color:var(--ink);font-weight:700;font-size:var(--fs-sm);padding:2px 6px;font-family:inherit;cursor:pointer;line-height:1.4}
/* 阈值行：总价/单人价单选下拉 + 最高价输入（阈值 0~最高价） */
.fl-thr-bar{display:inline-flex;align-items:center;gap:5px;font-size:var(--fs-xs);color:var(--sub);font-weight:700}
.fl-thr-bar input{width:130px;background:var(--card-h);border:1.5px solid var(--line);color:var(--ink);border-radius:8px;padding:5px 7px;font-size:var(--fs-sm);font-family:inherit}
/* 监控计划 */
/* 监控计划标题栏：圆形图标徽标 + 标题 + 状态（右对齐两行） + 计划有变（最右），整体对称 */
.fl-plan .fl-card-h.fl-plan-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding-bottom:7px;margin-bottom:9px;border-bottom:1px solid var(--line)}
.fl-plan-ico{width:28px;height:28px;flex:0 0 auto;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:var(--fs-lg2);line-height:1;background:linear-gradient(135deg,rgba(245,158,11,.26),rgba(245,158,11,.07));border:1.5px solid rgba(245,158,11,.5);box-shadow:0 0 9px rgba(245,197,24,.2)}
.fl-plan-title{font-weight:900;color:var(--ink);font-size:var(--fs-xl);letter-spacing:.6px;line-height:1}
.fl-plan .fl-plan-status{margin-left:auto;display:flex;flex-direction:row;align-items:center;gap:8px;font-size:var(--fs-xs);color:var(--ink);font-weight:600}
.fl-plan-status .fl-ns-no{color:var(--pri);font-weight:900}
.fl-plan-status .ps-run{font-weight:800;white-space:nowrap;line-height:1.3}
.fl-plan-status .ps-run .warn{white-space:nowrap}
.fl-plan-status .ps-last{color:var(--sub);font-size:.86em;white-space:nowrap;line-height:1.3}
.fl-plan-status .ps-last .ps-lt{color:#fbbf24;font-weight:900;font-size:.92em}
.fl-plan .fl-settings-btn{margin-left:auto}
.fl-plan .fl-head-actions{display:inline-flex;align-items:center;gap:0;margin-left:auto}
.fl-plan .fl-head-actions .fl-settings-btn{margin-left:0}
.fl-plan .fl-plan-hint{color:var(--sub);font-size:.92em;font-weight:600}
.fl-plan .countdown{
  position:relative;color:#39feff;font-weight:900;font-size:clamp(22px,5.8vw,27px);
  font-family:'Courier New',ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  letter-spacing:1.5px;white-space:nowrap;
  background:linear-gradient(180deg,rgba(0,255,255,.10),rgba(255,0,255,.06));
  border:1px solid rgba(0,255,255,.45);border-radius:4px;padding:1px 8px;margin-left:2px;
  text-shadow:0 0 6px rgba(57,254,255,.95),0 0 14px rgba(57,254,255,.65);
  box-shadow:inset 0 0 8px rgba(0,255,255,.30),0 0 12px rgba(255,0,255,.28);
  animation:cpGlow 2s ease-in-out infinite;
}
.fl-plan .countdown .fl-ns-no{color:#ff5cf0;text-shadow:0 0 6px rgba(255,92,240,.95),0 0 14px rgba(255,92,240,.6);letter-spacing:1px}
@keyframes cpGlow{
  0%,100%{box-shadow:inset 0 0 5px rgba(0,255,255,.25),0 0 8px rgba(0,255,255,.30);text-shadow:0 0 6px rgba(57,254,255,.8),0 0 12px rgba(57,254,255,.4)}
  50%{box-shadow:inset 0 0 14px rgba(0,255,255,.6),0 0 18px rgba(255,0,255,.5);text-shadow:0 0 12px rgba(57,254,255,1),0 0 24px rgba(57,254,255,.8)}
}
.fl-plan-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(420px,1fr));gap:8px 10px;padding:clamp(8px,2vw,10px) clamp(10px,2.4vw,14px)}
/* 监控计划：所有视口统一默认显示前 4 个任务，其余折叠（展开按钮由 JS 注入） */
.pl-limit:not(.pl-expanded) > .pl-src:nth-child(n+5){display:none}
.pl-more-btn{grid-column:1 / -1;margin:2px auto 0;padding:6px 20px;border-radius:999px;border:1px solid var(--line);background:var(--card-h);color:var(--sec);font-weight:800;font-size:var(--fs-md);cursor:pointer;font-family:inherit}
.pl-more-btn:hover{color:var(--pri);border-color:var(--pri);box-shadow:0 0 8px rgba(245,158,11,.25)}
.pl-src{display:flex;flex-direction:column;gap:4px;padding:8px 10px;background:var(--card);border:1px solid var(--line);border-radius:12px;min-width:0;min-height:104px;position:relative}
.pl-head{display:flex;align-items:center;justify-content:space-between;gap:6px;margin-bottom:2px;flex-wrap:wrap;row-gap:4px}
.pl-head > *{min-width:0}
.pl-name{font-weight:900;color:var(--pri);font-size:var(--fs-md)}
.pl-line{display:flex;align-items:baseline;gap:8px;font-size:var(--fs-xs);line-height:1.5;flex-wrap:wrap;row-gap:2px}
.pl-k{flex:0 0 auto;color:var(--sub);font-weight:800;min-width:42px}
.pl-v{color:var(--ink);font-weight:600;word-break:break-word;flex:1 1 auto;min-width:0}
.pl-v-right{margin-left:auto;flex:0 0 auto;white-space:nowrap;text-align:right}
/* 监控计划/截图任务里的金额输入框：窄、深底色、紧凑 */
.pl-num-input{width:62px;padding:2px 4px;border-radius:6px;border:1px solid rgba(100,116,139,.35);background:var(--card-h);color:var(--ink);font-family:inherit;font-size:var(--fs-md);font-weight:700;text-align:right;line-height:1.2;transition:border-color .15s,box-shadow .15s}
.pl-num-input:focus{outline:none;border-color:var(--pri);box-shadow:0 0 0 2px rgba(245,158,11,.28)}
.pl-num-input::-webkit-outer-spin-button,.pl-num-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.pl-num-input[type=number]{-moz-appearance:textfield}
/* 行程行里的机场（英文简称+中文名）：加粗高亮；与日期段之间用小圆点分隔 */
.pl-rt{font-weight:900;color:var(--pri);white-space:normal;max-width:100%;overflow:visible;text-overflow:initial;vertical-align:bottom;display:inline}
.pl-sep{color:var(--sub);font-weight:600}
/* 监控计划卡片首行：同程 / 去哪儿 logo 徽标（真实公司 favicon 缩小） */
.pl-jt-ico{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;height:16px;background:transparent;border:none;box-shadow:none;opacity:1}
.pl-jt-ico img{display:block}
.pl-logo-img{width:16px;height:16px;object-fit:contain;image-rendering:-webkit-optimize-contrast;border-radius:2px}
.pl-jt-ico svg{display:block}
/* 阈值右对齐到「行程」行 */
.pl-line .mt-thr{margin-left:auto;display:inline-flex;align-items:center;gap:4px;white-space:nowrap;flex:0 0 auto}
.pl-line .mt-thr .mt-thr-ok{color:#22c55e;font-size:var(--fs-sm)}
/* 监控计划任务卡 hover 任务详情浮层 */
.pl-tip{display:none;position:absolute;z-index:50;left:50%;top:calc(100% + 8px);transform:translateX(-50%);width:max-content;max-width:min(320px,86vw);padding:9px 11px;background:rgba(8,12,30,.97);border:1px solid rgba(94,234,212,.4);border-radius:10px;box-shadow:0 10px 28px rgba(0,0,0,.6);font-size:var(--fs-xs);line-height:1.6;color:#cbd5e1;pointer-events:none;text-align:left}
.pl-tip .tt-row{display:flex;gap:6px;white-space:nowrap}
.pl-tip .tt-k{flex:0 0 auto;color:#7dd3fc;font-weight:800;min-width:52px}
.pl-tip .tt-v{color:#e2e8f0;font-weight:600;word-break:break-word;white-space:normal}
.pl-src:hover .pl-tip{display:block}
/* 监控实况①：每源 2×2 方块 */
.fl-src-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}
.fl-src-cell{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:8px 10px;min-width:0}
.fl-src-cell.disabled{opacity:.55}
/* 价格曲线折叠按钮：默认显示前 2 组，其余折叠 */
.pc-more{grid-column:1 / -1;margin:2px auto 0;padding:6px 20px;border-radius:999px;border:1px solid var(--line);background:var(--card-h);color:var(--sec);font-weight:800;font-size:var(--fs-md);cursor:pointer;font-family:inherit}
.pc-more:hover{color:var(--pri);border-color:var(--pri);box-shadow:0 0 8px rgba(245,158,11,.25)}
.sc-h{display:flex;align-items:center;justify-content:flex-start;gap:8px;margin-bottom:2px;flex-wrap:nowrap;min-width:0}
.sc-name{font-weight:900;color:var(--ink);font-size:var(--fs-sm);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sc-no{flex:0 0 auto;color:var(--sec);font-weight:900;font-size:.82em;background:rgba(56,189,248,.14);border:1px solid rgba(56,189,248,.42);padding:0 5px;border-radius:4px;letter-spacing:.3px;white-space:nowrap}
.sc-sub{display:inline;margin:0;font-weight:600;color:var(--sub);font-size:var(--fs-xs);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.sc-h .src-badge{margin-left:auto;flex:0 0 auto}
.sc-meta{font-size:var(--fs-xs);color:var(--sub);line-height:1.5}
.sc-px{margin-top:5px;border-top:1px dashed var(--line);padding-top:5px;font-size:var(--fs-xs)}
.sc-px .px{color:var(--ink);line-height:1.5}
.sc-px .px.below{color:var(--ok)}
.sc-px .px.none{color:var(--sub)}
/* 价格曲线①：说明性文案已移除，界面保持整洁 */
.fl-src-grid{grid-template-columns:repeat(2,1fr)}
.fl-src-cell{width:100%}
.pc-body{display:flex;flex-direction:column;gap:8px;margin-top:4px}
.pc-title{font-weight:800;color:var(--ink);font-size:var(--fs-xs);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pc-dates{color:var(--sub);font-weight:700;font-size:.9em}
.pc-svg{display:block;width:100%;background:linear-gradient(180deg,rgba(34,211,238,.06),transparent);border:1px solid var(--line);border-radius:8px}
.pc-empty{color:var(--sub);font-size:var(--fs-2xs);line-height:1.4}
.pc-none{color:var(--sub);font-size:var(--fs-xs);padding:4px 0}
/* 同程截图采集：按任务排行（价格从低到高，最低价绿色高亮） */
.shot-rank{display:flex;flex-direction:column;gap:5px}
.sr-head,.sr-row{display:grid;grid-template-columns:1.3fr .72fr .72fr .9fr .78fr .75fr minmax(200px,.9fr);gap:8px;align-items:center;border-radius:10px}
.sr-head{font-size:var(--fs-xs);color:var(--sub);font-weight:800;line-height:1.3;font-variant-numeric:tabular-nums;padding:10px 10px}
.sr-row{background:var(--card);border:1px solid var(--line);font-size:var(--fs-xs);font-weight:900;cursor:pointer;transition:border-color .15s,background .15s;line-height:1.3;padding:10px 10px}
.sr-row:hover{border-color:var(--pri);background:rgba(245,158,11,.06)}
.sr-row.sr-best{border-color:rgba(16,185,129,.5);background:rgba(16,185,129,.08)}
.sr-route{font-weight:800;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sr-task{display:inline-block;margin-left:6px;padding:1px 7px;border-radius:999px;background:rgba(245,158,11,.16);border:1px solid rgba(245,158,11,.35);color:#fbbf24;font-size:var(--fs-2xs);font-weight:900;letter-spacing:.3px;vertical-align:1px;white-space:nowrap}
/* 三列价格 + 表头统一：居中、等宽数字、同字号 */
.sr-head>:nth-child(2),.sr-head>:nth-child(3),.sr-head>:nth-child(6),
.sr-price,.sr-latest,.sr-trend{text-align:center;font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1}
/* 操作列：表头居中对齐（正对下方按钮组的中间那颗，通常就是「修改」；数据行按钮组仍靠右） */
.sr-head>:nth-child(7){text-align:center}
/* 采集时间列：表头左对齐（与 .sr-ts 一致） */
.sr-head>:nth-child(5){text-align:left}
/* 所有 grid 子项：强制不拉伸，文本居中于各自 grid 单元格，消除行高差导致的基线偏移 */
.sr-head>*,.sr-row>*{align-self:center}
.sr-price{color:var(--ink);white-space:nowrap;font-weight:900}
.sr-latest{color:var(--sub);font-weight:800}
.sr-row.sr-best .sr-price{color:var(--ok)}
.sr-date,.sr-ts{color:var(--sub);font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sr-trend{white-space:nowrap;font-weight:900}
.sr-trend.up{color:#f87171}
.sr-trend.down{color:var(--ok)}
.sr-trend.flat{color:var(--sub)}
.sr-ops{display:flex;gap:5px;justify-content:flex-end;flex-wrap:nowrap;min-width:0}
.sr-op{flex-shrink:0;background:var(--card-h);border:1px solid var(--line);color:var(--sec);border-radius:8px;padding:2px 9px;font-size:var(--fs-2xs);font-weight:800;cursor:pointer;font-family:inherit;text-decoration:none;line-height:1.5;transition:all .15s}
.sr-op:hover{border-color:var(--pri);color:var(--pri)}
.sr-op.sr-mod{color:#38bdf8;border-color:rgba(56,189,248,.4)}
.sr-op.sr-mod:hover{background:rgba(56,189,248,.12);color:#38bdf8}
.sr-op.sr-en{color:#22c55e;border-color:rgba(34,197,94,.45)}
.sr-op.sr-en:hover{background:rgba(34,197,94,.12);color:#22c55e}
.sr-op.sr-en.off{color:#94a3b8;border-color:var(--line)}
.sr-op.sr-en.off:hover{background:rgba(148,163,184,.12);color:#cbd5e1;border-color:#94a3b8}
.sr-op:disabled{opacity:.5;cursor:default}
/* 采集排行折叠：默认显示 3 行，其余 `+N 展开` 切换 */
.sr-more{display:contents}
.sr-toggle{display:inline-flex;align-items:center;gap:4px;align-self:flex-end;margin-top:4px;padding:4px 12px;border:1px dashed var(--line);border-color:rgba(56,189,248,.45);color:var(--sec);border-radius:999px;font-size:var(--fs-xs);font-weight:800;cursor:pointer;background:rgba(56,189,248,.06);user-select:none;transition:all .15s}
.sr-toggle:hover{border-color:var(--pri);color:var(--pri);background:rgba(245,158,11,.08)}
/* ② 日志滚动条（始终可见） */
.fl-mon-log{scrollbar-width:thin;scrollbar-color:rgba(148,163,184,.5) transparent}
.fl-mon-log::-webkit-scrollbar{width:8px}
.fl-mon-log::-webkit-scrollbar-thumb{background:rgba(148,163,184,.45);border-radius:4px}
.fl-mon-log::-webkit-scrollbar-track{background:transparent}
/* 世界地图：飞行路线 */
/* 科幻未来风世界地图 · 深空蓝海洋 + 霓虹大陆 + 经纬网格 + HUD 边角 */
.fl-map-card .fl-map{position:relative;background:radial-gradient(140% 100% at 50% 4%,#06305f 0%,#041a44 45%,#01091f 100%);border:1px solid rgba(56,189,248,.42);border-radius:12px;padding:6px;overflow:hidden;box-shadow:inset 0 0 46px rgba(14,116,233,.22),0 0 26px rgba(34,211,238,.14)}
.fl-map-card .fl-map::before,.fl-map-card .fl-map::after{content:'';position:absolute;width:16px;height:16px;pointer-events:none;z-index:7}
.fl-map-card .fl-map::before{top:4px;left:4px;border-top:2px solid rgba(34,211,238,.95);border-left:2px solid rgba(34,211,238,.95)}
.fl-map-card .fl-map::after{top:4px;right:4px;border-top:2px solid rgba(34,211,238,.95);border-right:2px solid rgba(34,211,238,.95)}
.map-fig{position:relative;overflow:hidden}
.map-svg{width:100%;height:auto;display:block}
.map-img{opacity:.9;filter:brightness(.92) contrast(1.05) saturate(.85)}
/* 多边形大陆底图（与机场点共用 mapXY 投影，取代 worldmap.jpg） */
.map-sea{fill:url(#oceanGrad)}
/* 经纬网格：统一细网格，无突兀高亮 */
.map-grat{stroke:rgba(56,189,248,.18);stroke-width:.55}
.map-grat-g{filter:drop-shadow(0 0 2px rgba(34,211,238,.28))}
/* 大陆：深空填充 + 青色霓虹描边 + 组级辉光 */
.map-land-g{filter:drop-shadow(0 0 7px rgba(34,211,238,.42))}
.map-land{fill:rgba(18,46,82,.96);stroke:#2bd4f8;stroke-width:1;stroke-linejoin:round}
.map-lake{fill:#0c5a88;stroke:rgba(94,234,212,.9);stroke-width:.6;stroke-linejoin:round}
.map-border{stroke:rgba(148,205,240,.30);stroke-width:.55;stroke-dasharray:2.5 2.5;fill:none;stroke-linejoin:round;opacity:.85}
.map-cont-label{fill:rgba(125,240,255,.95);font-size:13px;font-weight:900;letter-spacing:4px;text-anchor:middle;paint-order:stroke;stroke:rgba(3,10,26,.8);stroke-width:3;pointer-events:none;filter:drop-shadow(0 0 5px rgba(34,211,238,.75))}
/* 地图视图切换：左下角圆形图标按钮 + hover 提示 */
.map-scope-btn{position:absolute;left:10px;bottom:10px;z-index:6;width:34px;height:34px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:rgba(7,30,62,.76);border:1.5px solid rgba(56,189,248,.62);color:#67e8f9;cursor:pointer;transition:all .18s;box-shadow:0 0 12px rgba(34,211,238,.28);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);padding:0}
.map-scope-btn:hover{border-color:#22d3ee;color:#a5f3fc;box-shadow:0 0 20px rgba(34,211,238,.55)}
.map-scope-btn svg{width:19px;height:19px;display:block;pointer-events:none}
.map-scope-tip{position:absolute;left:50%;bottom:54px;z-index:6;transform:translate(-50%,4px);white-space:nowrap;padding:5px 10px;font-size:11px;font-weight:700;line-height:1.5;color:#e0f2fe;background:rgba(3,15,34,.9);border:1px solid rgba(56,189,248,.42);border-radius:7px;opacity:0;visibility:hidden;transition:all .18s;pointer-events:none}
.map-scope-btn:hover~.map-scope-tip{opacity:1;visibility:visible;transform:translate(-50%,0)}
/* 机场标记脉冲光环（电波感） */
.map-pulse{fill:none;stroke:rgba(34,211,238,.55);stroke-width:1;transform-box:fill-box;transform-origin:center;animation:pulseRing 2.6s ease-out infinite}
@keyframes pulseRing{0%{transform:scale(.35);opacity:.9}100%{transform:scale(1.7);opacity:0}}
@media (prefers-reduced-motion:reduce){.map-pulse{animation:none}}
.map-land-dot{fill:currentColor}
.map-land-stroke{stroke:rgba(94,234,212,.35);stroke-width:.5;stroke-linejoin:round;fill:none}
.map-route{stroke-width:1.9;stroke-linecap:round;opacity:.95;fill:none;stroke-dasharray:7 5;animation:routeFlow 1.05s linear infinite;filter:drop-shadow(0 0 3px currentColor)}
.map-km{fill:#a5f3fc;font-size:8.5px;font-weight:800;paint-order:stroke;stroke:rgba(3,10,26,.95);stroke-width:2.6;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
.map-km-lead{stroke:rgba(165,243,252,.4);stroke-width:.8;stroke-dasharray:2 3}
.map-apt{stroke:rgba(4,14,30,.9);stroke-width:1.3;cursor:pointer;pointer-events:all}
.map-pulse{pointer-events:all;cursor:pointer}
.map-apt.orig{fill:#60a5fa;filter:url(#aptGlow)}
.map-apt.dest{fill:#fbbf24;filter:url(#aptGlow)}
.map-code{fill:#eaf9ff;font-size:9.5px;font-weight:900;paint-order:stroke;stroke:rgba(3,10,26,.92);stroke-width:2.8;letter-spacing:.5px;filter:drop-shadow(0 0 2px rgba(103,232,249,.7))}
.map-island-label{fill:#e2e8f0;font-size:9px;font-weight:700;paint-order:stroke;stroke:rgba(6,11,26,.85);stroke-width:2.2;opacity:.92}
.map-spot{fill:#f472b6;filter:url(#aptGlow)}
.map-spot-t{fill:#f9a8d4;font-size:8.5px;font-weight:700}
/* 机场悬浮卡：中文名 + 概况 + 主体建筑空中俯视图 */
.map-tip{position:absolute;left:0;top:0;width:300px;max-width:calc(100vw - 32px);max-height:calc(100vh - 32px);transform:translate(-50%,calc(-100% - 14px));pointer-events:none;z-index:9;background:linear-gradient(160deg,rgba(6,24,46,.97),rgba(3,12,30,.97));border:1px solid rgba(56,189,248,.55);border-radius:14px;padding:11px 13px;box-shadow:0 8px 30px rgba(0,0,0,.55),0 0 16px rgba(34,211,238,.22);opacity:0;visibility:hidden;transition:opacity .15s,visibility .15s;backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px);overflow:hidden;box-sizing:border-box}
.map-tip.show{opacity:1;visibility:visible}
.map-tip .mt-h{display:flex;align-items:baseline;gap:8px}
.map-tip .mt-code{font-weight:900;font-size:18px;color:#67e8f9;letter-spacing:.6px}
.map-tip .mt-cn{font-weight:900;font-size:16px;color:#f0fdfa}
.map-tip .mt-ctry{margin-left:auto;font-size:13px;color:#7dd3fc;font-weight:800}
.map-tip .mt-img{width:100%;max-height:170px;object-fit:cover;border-radius:10px;margin-top:9px;border:1px solid rgba(94,234,212,.35);background:rgba(56,189,248,.08);display:block}
.map-tip .mt-intro{font-size:13px;line-height:1.7;color:#e0f2fe;margin-top:8px;font-weight:600}
@media (max-width:560px){.map-tip{width:230px}.map-tip .mt-code{font-size:15px}.map-tip .mt-cn{font-size:14px}.map-tip .mt-img{max-height:140px}.map-tip .mt-intro{font-size:12px}}
.map-meta{display:flex;flex-wrap:wrap;gap:6px 12px;align-items:center;margin-top:6px;font-size:var(--fs-xs);color:var(--sub)}
.map-legends{display:inline-flex;gap:10px;flex-wrap:wrap}
.map-legend{display:inline-flex;align-items:center;gap:4px;color:var(--ink);font-weight:700}
.map-legend i{width:10px;height:10px;border-radius:50%;display:inline-block}
/* 地图底部：目的地当地时间走时 */
.map-clock-row{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center;margin-top:6px;font-size:var(--fs-xs);color:var(--sub)}
.map-clock-list{display:inline-flex;flex-wrap:wrap;gap:8px 14px}
.map-clock-item{color:var(--ink);font-weight:700;white-space:nowrap}
.map-clock{color:#67e8f9;font-weight:800;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
.map-clock-row .mc-lbl{color:var(--sub);font-weight:700;flex:0 0 auto}
.map-clock-toggle{flex:0 0 auto;background:var(--card-h);border:1px solid var(--line);color:var(--sec);border-radius:999px;padding:2px 10px;font-size:var(--fs-2xs);font-weight:800;cursor:pointer;font-family:inherit;line-height:1.5;transition:all .15s}
.map-clock-toggle:hover{border-color:var(--pri);color:var(--pri)}
/* 欧亚非+大洋洲视图：机场时间对角线分布——左下短文字贴下边、右上长文字贴上边 */
.map-clock-cols{position:absolute;inset:0;pointer-events:none;z-index:5;display:flex;justify-content:space-between;align-items:stretch;padding:0 8px}
.map-clock-col{display:flex;flex-direction:column;gap:7px}
.map-clock-col.left{justify-content:flex-end;align-items:flex-start;padding-bottom:56px}   /* 左下：短文字贴下边、左对齐，整体上移至地球图标(34px+10px)上方，避免遮挡 */
.map-clock-col.right{justify-content:flex-start;align-items:flex-end;padding-top:10px}     /* 右上：长文字贴上边、右对齐 */
.map-clock-cols .map-clock-item{color:var(--ink);font-weight:700;white-space:nowrap;font-size:var(--fs-2xs);text-shadow:0 1px 3px rgba(2,10,26,.9)}
.map-clock-cols .map-clock{color:#67e8f9;font-weight:800;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
.map-legend i.m-ori{background:#3b82f6;box-shadow:0 0 6px #3b82f6}
.map-legend i.m-des{background:#fbbf24;box-shadow:0 0 6px #fbbf24}
/* 飞行路线图 / 航司截图 切换 */
.fl-map-tabs{display:flex;gap:8px;padding:10px 10px 6px}
.fl-map-tab{flex:1;background:var(--card-h);border:1.5px solid var(--line);border-radius:12px;padding:9px 12px;color:#fff;font-weight:800;font-size:var(--fs-xl);cursor:pointer;font-family:inherit;transition:all .18s;text-shadow:0 1px 3px rgba(0,0,0,.45)}
.fl-map-tab.active{background:rgba(245,158,11,.2);border-color:var(--pri);color:#fff;font-weight:800}
.fl-map-pane{display:none;margin-top:8px}
.fl-map-pane.active{display:block}
.fl-map-pane .fl-card-sub{padding:0 12px 6px;color:var(--sub);font-size:var(--fs-2xs);font-weight:700}
.fl-shots{position:relative;min-height:clamp(180px,42vw,320px);padding:6px}
.fl-shot{position:absolute;inset:6px;opacity:0;visibility:hidden;transition:opacity .45s;z-index:0}
.fl-shot.active{opacity:1;visibility:visible;z-index:1}
.fl-shot img{width:100%;height:100%;object-fit:contain;border:1px solid var(--line);border-radius:8px;background:#0b1026;display:block}
.fl-shot .shot-cap{position:absolute;left:6px;right:6px;bottom:6px;background:rgba(11,16,38,.88);color:var(--ink);font-size:var(--fs-xs);text-align:center;padding:6px 8px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border-radius:0 0 8px 8px;border-top:1px solid var(--line)}
.fl-shot .shot-price{position:absolute;top:8px;right:8px;background:rgba(11,16,38,.88);color:#ef4444;font-size:var(--fs-md);font-weight:900;padding:3px 9px;border-radius:999px;border:1px solid var(--line)}
.fl-shots-empty{color:var(--sub);font-size:var(--fs-sm);text-align:center;padding:18px 12px;line-height:1.6}
.fl-shots-empty code{background:var(--card-h);border:1px solid var(--line);border-radius:6px;padding:1px 6px;color:var(--ink);font-size:.92em}
.fl-shot-ind{position:absolute;bottom:8px;left:50%;transform:translateX(-50%);display:flex;gap:5px;z-index:2}
.fl-shot-ind i{width:7px;height:7px;border-radius:50%;background:var(--line);cursor:pointer}
.fl-shot-ind i.active{background:var(--pri)}
.map-continent-label{fill:rgba(148,163,184,.45);font-size:7px;font-weight:600;letter-spacing:1px}
.map-loading{display:flex;align-items:center;justify-content:center;height:260px;color:var(--sub);font-size:var(--fs-lg);font-weight:700}
.map-bg-layer{pointer-events:none}
@keyframes routeFlow{to{stroke-dashoffset:-13}}
/* 监控计划配额 */
.pl-quota{font-size:var(--fs-2xs);color:var(--sec);font-weight:700}
.fl-quota-alert{background:linear-gradient(135deg,#fde68a,#fca5a5);color:#7c2d12;border:1px solid #f59e0b;border-radius:10px;padding:10px 12px;margin:0 0 12px;font-size:var(--fs-xs);font-weight:700;display:flex;align-items:center;gap:8px;box-shadow:0 2px 10px rgba(245,158,11,.25);animation:flAlertPulse 1.6s ease-in-out infinite}
@keyframes flAlertPulse{0%,100%{opacity:1}50%{opacity:.72}}
/* 低价机票更新日志弹窗 */
.cl-title{font-size:var(--fs-lg2);font-weight:900;color:var(--pri);margin-bottom:10px}
.cl-item{margin-bottom:12px;border-left:3px solid var(--line);padding-left:10px}
  .fl-log-item{margin-bottom:10px;border-left:3px solid #ef4444;padding:6px 10px;background:rgba(239,68,68,.06);border-radius:6px}
  .fl-log-t{font-size:var(--fs-sm);color:var(--sub);font-weight:700;margin-bottom:3px}
  .fl-log-tag{display:inline-block;background:#7f1d1d33;color:#fca5a5;border-radius:999px;padding:0 8px;font-size:var(--fs-xs);margin-left:6px}
  .fl-log-task{display:inline-block;margin-left:6px;padding:0 7px;border-radius:999px;background:rgba(245,158,11,.16);border:1px solid rgba(245,158,11,.35);color:#fbbf24;font-size:var(--fs-xs);font-weight:900;letter-spacing:.3px}
  .fl-log-msg{color:var(--ink);font-size:var(--fs-md);line-height:1.5}
  .fl-log-detail{color:var(--sub);font-size:var(--fs-xs);margin-top:4px;white-space:pre-wrap;word-break:break-word;max-height:160px;overflow:auto}
  .fl-log-clear{background:none;border:1px solid var(--line);color:var(--sub);font-size:var(--fs-sm);border-radius:8px;padding:2px 10px;margin-right:8px;cursor:pointer}
  .fl-log-clear:hover{color:#ef4444;border-color:#ef4444}
.cl-v{font-weight:800;color:var(--ink);font-size:var(--fs-md)}
.cl-t{color:var(--sub);font-weight:600;font-size:.85em;margin-left:6px}
.cl-item ul{margin:6px 0 0;padding-left:18px;color:var(--ink);font-size:var(--fs-sm);line-height:1.7}
.cl-load{color:var(--sub)}

/* 常用机场 chips（带悬浮国家/中文名） */
.fl-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:2px}
.fl-chip-item{background:rgba(6,182,212,.14);color:#67e8f9;border:1px solid rgba(6,182,212,.3);border-radius:999px;padding:4px 11px;font-size:var(--fs-sm);font-weight:700;cursor:pointer;font-family:inherit;transition:all .15s}
.fl-chip-item:hover{border-color:var(--pri);color:var(--pri);transform:translateY(-1px)}
.fl-chip-item.copied{background:rgba(16,185,129,.2);color:var(--ok);border-color:rgba(16,185,129,.5)}
.fl-tip{position:fixed;z-index:60;background:#0b1026;border:1px solid var(--pri);color:var(--ink);padding:5px 10px;border-radius:8px;font-size:var(--fs-xs);font-weight:700;pointer-events:none;box-shadow:0 6px 20px rgba(0,0,0,.5);white-space:nowrap;display:none}
.pc-tip{white-space:normal;text-align:left;line-height:1.55;font-weight:700;min-width:120px;max-width:260px}
.pc-tip .pc-tip-p{font-size:var(--fs-lg2);font-weight:900;color:#38bdf8}
.pc-tip .pc-tip-r{color:#cbd5e1;font-size:var(--fs-xs);margin-bottom:2px}
.pc-tip .pc-tip-t{color:var(--sub);font-size:var(--fs-2xs);margin-top:2px}

/* 常用机场：出发与目的同一行 */
.fl-chips-row{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:2px}
.fl-chip-sep{color:var(--pri);font-weight:800;font-size:var(--fs-xl);flex:0 0 auto}
/* 表单双列布局 */
.fl-two{display:flex;gap:14px;flex-wrap:wrap;margin:2px 0}
.fl-two .fl-field{flex:1 1 180px;min-width:150px}
.fl-range{display:flex;gap:12px;flex-wrap:wrap;margin:2px 0}
.fl-range .fl-field{flex:1 1 120px;min-width:108px}
.fl-field{display:flex;flex-direction:column;gap:4px}
/* 监控实况：大文本框（总结 + 滚动日志） */
.fl-monitor-card .fl-card-h{justify-content:center;text-align:center}
.fl-monitor-card .fl-mon-box{display:flex;flex-direction:column;gap:12px}
.fl-mon-part{display:flex;flex-direction:column;gap:6px}
.fl-mon-title{font-weight:800;color:var(--pri);font-size:var(--fs-xl);display:flex;align-items:center;gap:8px}
.fl-mon-title .badge-live{font-size:var(--fs-2xs);padding:1px 7px;border-radius:999px;background:rgba(6,182,212,.18);color:#67e8f9;font-weight:800}
.fl-mon-log{background:#0b1026;border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin:0;max-height:240px;overflow-y:scroll;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:var(--fs-xs);line-height:1.5;color:#9fe7c4;white-space:pre-wrap}

/* ===== 按数据源独立配置卡片 ===== */
.fl-src-card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:clamp(10px,2.4vw,14px);margin-top:10px}
.fl-src-card.disabled{opacity:.6;filter:grayscale(.35)}
.fl-src-card .unplug-badge{display:none}
.fl-src-card.disabled .unplug-badge{display:inline-block}
.fl-src-h{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding-bottom:8px;border-bottom:1px dashed var(--line);margin-bottom:8px}
.fl-src-h .fl-src-name{font-weight:800;color:var(--ink);font-size:var(--fs-md)}
.fl-src-h .fl-src-thr{margin-left:auto;color:var(--sec);font-weight:700;font-size:var(--fs-xs)}
.fl-src-h-l{display:flex;align-items:center;gap:10px;flex-wrap:wrap;min-width:0}
.fl-src-h-r{margin-left:auto;display:flex;align-items:center;gap:clamp(8px,2vw,14px);flex-wrap:wrap;justify-content:flex-end}
.fl-enable{display:flex;align-items:center;gap:5px;font-size:var(--fs-sm);color:var(--ink);cursor:pointer;font-weight:700}
.fl-src-body{display:flex;flex-direction:column;gap:10px}
.fl-field>.fl-label{font-size:var(--fs-sm);color:var(--sub);font-weight:700}
.fl-dest-row{display:flex;flex-wrap:wrap;gap:6px;margin-top:2px}
.fl-src-body .fl-radio{display:flex;gap:14px;flex-wrap:wrap;align-items:center}
/* 价格模式：单选标签 + OTA 锁定提示（置于启用行右侧） */
.fl-pm-pick{display:inline-flex;align-items:center;gap:10px}
.pm-opt{display:inline-flex;align-items:center;gap:4px;font-size:var(--fs-sm);color:var(--ink);font-weight:700;cursor:pointer}
.pm-locked{display:inline-flex;align-items:center;font-size:var(--fs-xs);color:#f59e0b;font-weight:700;background:rgba(245,158,11,.14);border:1px solid rgba(245,158,11,.4);border-radius:999px;padding:2px 10px;cursor:help}
.fl-thr-in{display:flex;align-items:center;gap:5px;font-size:var(--fs-xs);color:var(--sub);font-weight:700}
.fl-thr-in input{width:96px;background:var(--card-h);border:1px solid var(--line);color:var(--ink);border-radius:8px;padding:5px 7px;font-size:var(--fs-sm);font-family:inherit}
.fl-dg{display:flex;align-items:center;gap:6px;background:var(--card-h);border:1px solid var(--line);border-radius:10px;padding:5px 8px;flex:1 1 auto;min-width:0;flex-wrap:wrap}
.fl-dg label{display:flex;align-items:center;gap:3px;font-size:var(--fs-2xs);color:var(--sub);font-weight:700;white-space:nowrap}
.fl-dg input{background:var(--card);border:1px solid var(--line);color:var(--ink);border-radius:8px;padding:4px 6px;font-size:var(--fs-xs);font-family:inherit}
.fl-dg input[type=date]{width:118px} .fl-dg input[type=number]{width:56px}
.fl-dg .dg-flex-dep,.fl-dg .dg-flex-ret{background:var(--card);border:1px solid var(--line);color:var(--ink);border-radius:8px;padding:3px 4px;font-size:var(--fs-2xs);font-family:inherit;min-width:44px}
.fl-dg .dg-flex-group{display:inline-flex;align-items:center;gap:2px;font-size:var(--fs-2xs);color:var(--sub);font-weight:700;white-space:nowrap}
.fl-dg .dg-flex-group select{min-width:42px;padding:2px 3px;font-size:var(--fs-2xs)}
.fl-slots{display:flex;flex-wrap:wrap;gap:8px;margin-top:2px}
.fl-slot{display:flex;align-items:center;gap:5px;background:var(--card-h);border:1px solid var(--line);border-radius:10px;padding:5px 8px;transition:opacity .15s}
.fl-slot.off{opacity:.5}
.fl-slot .slot-idx{font-weight:800;color:var(--sub);font-size:var(--fs-xs)}
.fl-slot select,.fl-slot input{background:var(--card);border:1px solid var(--line);color:var(--ink);border-radius:8px;padding:4px 6px;font-size:var(--fs-xs);font-family:inherit}
.fl-slot input[type=time]{width:88px}

/* 搜索设置：卡片可滚动，四个源不致溢出看不见 */
#flSourceCards{max-height:48vh;overflow:auto;padding-right:6px;margin-top:8px}
#flSourceCards::-webkit-scrollbar{width:8px}
#flSourceCards::-webkit-scrollbar-thumb{background:var(--line);border-radius:8px}
.fl-src-collapse{margin:10px auto 0;display:block;padding:8px 24px;border-radius:999px;border:1px solid var(--line);background:var(--card-h);color:var(--sec);font-weight:800;font-size:var(--fs-md);cursor:pointer;transition:all .15s}
.fl-src-collapse:hover{color:#fff;border-color:rgba(245,158,11,.55);background:rgba(245,158,11,.1)}

/* 时间段 A·B 同行（nofwrap：四个段收缩为一行，不换行） */
.fl-dg-row{display:flex;gap:5px;flex-wrap:nowrap;margin-top:2px;align-items:stretch}
.fl-dg-row .fl-dg{flex:1 1 0;min-width:0}
/* 自定义段含日期输入，占比更大，确保四段单行内完整显示与功能 */
.fl-dg-row .fl-dg.dg-custom{flex:2.4 1 0;white-space:nowrap}
  .fl-dg-presets{display:flex;gap:6px;flex-wrap:nowrap;align-items:center;white-space:nowrap}
  .fl-dg-presets .fl-dg{flex:0 0 auto;min-width:0;margin:0;white-space:nowrap}
  .fl-dg-presets .dg-flex-group{width:auto;min-width:auto}
  .fl-period-inline{display:flex;align-items:center;gap:6px;flex:0 0 auto}
  .fl-period-inline > .fl-label{margin-right:2px}
  .fl-period-row .fl-label{margin-right:6px}
/* 出发地 + 目的地 同一行 */
.fl-od-row{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
/* 出发地 ⇄ 目的地 一键交换（搜索设置数据源卡） */
.fl-od-swap{flex:0 0 auto;background:var(--card-h);border:1px solid var(--line);color:var(--sub);border-radius:10px;padding:7px 10px;font-size:var(--fs-lg);font-weight:900;line-height:1;cursor:pointer;font-family:inherit;margin-bottom:2px;transition:all .15s}
.fl-od-swap:hover{border-color:var(--pri);color:var(--pri);background:rgba(245,158,11,.12)}
.fl-od-col{flex:0 1 auto;min-width:0}
.fl-dg.off{opacity:.45;filter:grayscale(.4)}
.fl-dg .dg-disable{display:flex;align-items:center;gap:4px;font-size:var(--fs-xs);color:var(--sub);font-weight:700;cursor:pointer}
.fl-dg .dg-fix{font-size:8.5px;color:var(--sec);border:1px solid rgba(6,182,212,.4);border-radius:999px;padding:0 6px;font-weight:700;cursor:help}

/* 阈值区间（min-max 同行） */
.fl-range-item{display:flex;align-items:center;gap:5px;font-size:var(--fs-xs);color:var(--sub);font-weight:700}
.fl-range-item input:disabled{opacity:.4;cursor:not-allowed}
.fl-mode-note{display:inline-block;margin-left:8px;font-size:var(--fs-2xs);color:#f59e0b;font-weight:600}
.fl-range-item input{width:96px;background:var(--card-h);border:1px solid var(--line);color:var(--ink);border-radius:8px;padding:5px 7px;font-size:var(--fs-sm);font-family:inherit}
/* 行程类型（单程/往返）单选：与价格阈值同行 */
.fl-trip-item{display:flex;align-items:center;gap:6px;font-size:var(--fs-xs);color:var(--sub);font-weight:700}
.fl-trip-item .trip-opt{display:inline-flex;align-items:center;gap:3px;font-weight:700;color:var(--ink);cursor:pointer;white-space:nowrap}
.fl-trip-item .trip-opt input{width:auto;margin:0}
.fl-direct-item{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-xs);color:var(--sub);font-weight:700;white-space:nowrap}
.fl-direct-item input{width:auto;margin:0;cursor:pointer}
/* 任务级「模糊日期」下拉（行程类型之后） */
.src-flex{padding:1px 5px;border-radius:7px;border:1px solid var(--line);background:var(--card-h);color:var(--ink);font-weight:700;font-size:var(--fs-xs);font-family:inherit;cursor:pointer}
.src-flex:hover{border-color:var(--pri)}
/* 同源多任务：新增 / 删除任务按钮（与阈值等控件同尺寸同风格） */
.fl-task-actions{display:inline-flex;align-items:center;gap:6px;flex-wrap:nowrap}
.fl-task-add,.fl-task-del{background:var(--card-h);border:1.5px solid var(--line);color:var(--ink);font-weight:700;font-size:var(--fs-xs);padding:3px 9px;border-radius:8px;cursor:pointer;font-family:inherit;line-height:1.4;white-space:nowrap;transition:all .15s}
.fl-task-add:hover{border-color:var(--pri);color:var(--pri);background:rgba(245,158,11,.12)}
.fl-task-del{background:#7f1d1d22;border-color:#7f1d1d55;color:#f87171}
.fl-task-del:hover{background:#7f1d1d44;border-color:#f87171;color:#fecaca}
/* 往返箭头（上下两横向平行箭头，上一右下一左，互不接触），与单程 → 区分 */
.rt-arrow{display:inline-block;vertical-align:middle;width:1em;height:1em;color:var(--pri);margin:0 .3em;flex:0 0 auto}
.rt-arrow.rt-ow{width:auto;color:var(--sub);font-weight:900}

/* 监控实况：实时滚动行 + 清空按钮 */
.fl-live-line{background:#0b1026;border:1px solid var(--pri);border-radius:8px;padding:6px 10px;margin-bottom:6px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:var(--fs-xs);color:#67e8f9;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fl-clear{margin-left:auto;background:rgba(248,113,113,.15);border:1px solid rgba(248,113,113,.4);color:#f87171;border-radius:999px;padding:2px 12px;font-size:var(--fs-xs);font-weight:800;cursor:pointer;font-family:inherit}
.fl-clear:hover{background:rgba(248,113,113,.28)}


/* 品牌代言人 */
.fl-sub2{text-align:center;font-size:var(--fs-xs);color:var(--sub);margin-bottom:6px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,"Cascadia Mono",monospace;letter-spacing:.14em;display:inline-flex;align-items:center;gap:clamp(4px,1.2vw,8px);text-shadow:0 0 8px rgba(34,211,238,.35)}
.fl-sub2 em{font-style:normal;color:#67e8f9;font-weight:800}
.fl-sub2 .sl-slash{color:var(--sec);opacity:.9}
.fl-sub2 .sl-s{color:var(--violet);opacity:.85}
.fl-slogan{text-align:center;font-size:var(--fs-lg);font-weight:700;color:var(--sec);margin:2px 0 10px;letter-spacing:.3px;font-style:italic;text-shadow:0 0 14px rgba(245,158,11,.35)}
.fl-headline{display:flex;flex-wrap:wrap;justify-content:center;align-items:baseline;column-gap:clamp(6px,1.6vw,12px);row-gap:2px;text-align:center;margin:0 0 var(--gap);position:relative;padding:clamp(6px,1.6vw,10px) 6vw;border-radius:14px;border-bottom:1px solid rgba(150,170,255,.22);background:linear-gradient(180deg,rgba(88,66,255,.16),rgba(34,211,238,.06) 46%,rgba(10,14,34,.4) 100%)}
.fl-headline::before,.fl-headline::after{content:'';position:absolute;top:50%;height:1px;width:5vw;background:linear-gradient(90deg,transparent,var(--pri));opacity:.45;transform:translateY(-50%)}
.fl-headline::before{left:0}
.fl-headline::after{right:0;background:linear-gradient(90deg,var(--pri),transparent)}
.fl-headline .fl-h1{margin:0}
.fl-headline .fl-sub2{margin:0}
.fl-headline .fl-slogan{margin:0}
.fl-dot{color:var(--violet);font-weight:900;align-self:center;filter:drop-shadow(0 0 6px rgba(139,92,246,.8))}

/* 推送榜：每行可点击，外观只显示航线+价格 */
.fl-battle-row{cursor:pointer;transition:background .15s}
.fl-battle-row:hover,.fl-battle-row:focus{background:rgba(245,158,11,.08);outline:none}
.fl-battle-row .b-route{flex:1 1 auto;font-weight:800;font-size:var(--fs-md);color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.fl-battle-row .b-price{flex:0 0 auto;font-weight:900;font-size:var(--fs-lg2);color:var(--ok);white-space:nowrap}

/* 推送详情弹窗 */
.bd-detail{display:flex;flex-direction:column;gap:10px;font-size:var(--fs-lg);color:var(--ink)}
.bd-detail .bd-line{display:flex;justify-content:space-between;gap:12px;border-bottom:1px dashed var(--line);padding-bottom:6px}
.bd-detail .bd-k{color:var(--sub);font-weight:700;flex:0 0 auto}
.bd-detail .bd-v{font-weight:800;text-align:right;flex:1 1 auto;word-break:break-word}

/* 监控计划：桌面端摘要隐藏 */
.pl-summary{display:none}

/* ===== 手机竖屏兼容：计划/曲线/推送单列紧凑 ===== */
@media (max-width:560px){
  /* ---- 监控计划：手风琴（折叠=单行概览，展开=纵向明细） ---- */
  .fl-plan-grid{grid-template-columns:1fr;gap:6px}
  .fl-card-h .fl-settings-btn{margin-top:2px}
  /* 监控计划标题栏：手机端倒计时缩小与标题/按钮同行，不独占整行 */
  .fl-plan .fl-plan-status{order:3;margin-left:4px;flex:0 1 auto;flex-direction:row;align-items:center;gap:4px;min-width:0}
  .fl-plan .fl-settings-btn{order:4;margin-left:auto}
  .fl-plan .fl-head-actions{order:4;margin-left:auto}
  .fl-plan-status .ps-run,.fl-plan-status .ps-last{white-space:normal;word-break:break-word;line-height:1.25;font-size:var(--fs-2xs)}
  .fl-plan-status .ps-run .countdown{white-space:normal;word-break:break-word;letter-spacing:.3px;font-size:var(--fs-xl)}
  /* 监控计划网格：手机端默认直接显示（折叠=单行摘要，点卡片展开明细）；
     不再整体 display:none（旧版藏到标题点击后才出现，导致「监控计划啥都看不见」） */
  .pl-src{position:relative;display:flex;flex-direction:row;align-items:center;gap:6px;padding:7px 26px 7px 10px;overflow:hidden;min-width:0;min-height:0;cursor:pointer;-webkit-tap-highlight-color:transparent}
  .pl-head{flex:1 1 auto;display:flex;align-items:center;gap:5px;margin-bottom:0;min-width:0;flex-wrap:wrap;row-gap:3px;max-width:100%}
  .pl-name{font-size:var(--fs-xs);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  /* 折叠态：只保留 logo/任务号 + 单行摘要，操作按钮（立即执行/修改/删除）展开后才显示，避免挤爆单行 */
  .pl-src:not(.pl-open) .pl-head .fl-run-now,
  .pl-src:not(.pl-open) .pl-head .mt-edit,
  .pl-src:not(.pl-open) .pl-head .mt-del{display:none}
  .pl-line{display:none}
  .pl-summary{display:flex;align-items:baseline;justify-content:flex-end;gap:5px;flex:1 1 auto;min-width:0;white-space:nowrap;font-size:var(--fs-xs);text-align:right}
  .pl-summary .ps-route{font-weight:800;color:var(--ink);flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis}
  .pl-summary .ps-scan{color:var(--sub);font-size:var(--fs-2xs);flex:0 0 auto}
  /* 折叠箭头：右侧垂直居中 */
  .pl-src::after{content:'▸';position:absolute;right:9px;top:50%;transform:translateY(-50%);color:var(--sub);font-size:var(--fs-2xs);line-height:1;pointer-events:none}
  /* 展开态：纵向排列，隐藏概览行、显示明细行，箭头移至右上角 */
  .pl-src.pl-open{flex-direction:column;align-items:stretch;gap:4px;padding:8px 26px 9px 10px;border-color:rgba(245,158,11,.45);background:var(--card-h)}
  .pl-src.pl-open > .pl-head{max-width:100%;margin-bottom:2px}
  .pl-src.pl-open > .pl-summary{display:none}
  .pl-src.pl-open > .pl-line{display:flex}
  .pl-src.pl-open::after{content:'▾';top:11px;transform:none;color:var(--pri)}
  /* 折叠态隐藏脚注徽标与排程告警（避免挤占单行概览），展开后显示 */
  .pl-src > .pl-shot-foot,.pl-src > .pl-sched-warn{display:none}
  .pl-src.pl-open > .pl-shot-foot{display:flex;margin-top:2px;padding-top:0}
  .pl-src.pl-open > .pl-sched-warn{display:block}

  /* ---- 价格曲线：单列，信息行独立成行 ---- */
  .fl-src-grid{grid-template-columns:1fr;gap:8px}
  .fl-src-cell{width:100%}
  .sc-sub{margin-bottom:1px}

  /* ---- 同程截图采集排行：手机端每任务 3 行卡片式 ---- */
  .sr-head{display:none}
  .sr-row{grid-template-columns:1fr 1fr;gap:2px 8px;padding:8px 10px}
  .sr-route{grid-column:1;grid-row:1}
  .sr-price{grid-column:2;grid-row:1;text-align:center}
  .sr-latest{grid-column:1;grid-row:2}
  .sr-date{grid-column:2;grid-row:2;text-align:right}
  .sr-trend{grid-column:1;grid-row:3}
  .sr-ts{grid-column:2;grid-row:3;text-align:right}
  .sr-ops{grid-column:1/-1;grid-row:4;justify-content:flex-end}
  .sr-latest::before{content:"最新 ";color:var(--sub);font-weight:700}
  .sr-trend::before{content:"平均 ";color:var(--sub);font-weight:700}

  .fl-battle-list{grid-template-columns:1fr;gap:6px}
  .fl-battle-list .fl-battle-row:nth-child(n+4){display:none}
  .fl-battle-row{min-height:42px;padding:8px 11px}
  .fl-battle-row .b-rank,.fl-battle-row .b-line,.fl-battle-row .b-meta,.fl-battle-row .b-time,.fl-battle-row .rb{display:none}

  /* ---- 手机端专项（V0.29）---- */
  /* 监控计划：手机端默认只显示 3 个，其余折叠 */
  .pl-limit:not(.pl-expanded) > .pl-src:nth-child(n+4){display:none}
  /* 监控计划：手机端为只读视图，隐藏「立即执行 / 修改 / 删除」与阈值输入框（编辑请在电脑端进行） */
  .pl-src .fl-run-now,.pl-src .mt-edit,.pl-src .mt-del,.pl-src .mt-thr input{display:none}
  /* 择期发射：2K 竖屏/手机端均保留「距下次任务」倒计时与「上次完成」时间（2026-09-14 修复：旧版 display:none 太激进） */
  /* countdown/ps-last 不再隐藏，靠 L819-820 的字号缩小 + 允许换行适配窄屏 */
  /* 飞行路线图：手机端不需要目的地时间行 */
  .map-clock-row{display:none}
  /* 航司截图采集：手机端「最新价格」与「往返时间」互换位置（往返时间左、最新价格右） */
  .sr-latest{grid-column:2;grid-row:2;text-align:right}
  .sr-date{grid-column:1;grid-row:2;text-align:left}
  /* 脚本执行实况：手机端整块移除 */
  .fl-live-part{display:none}
  /* 手机端阈值只读文本样式 */
  .pl-line .mt-thr .mt-thr-val{color:var(--ink);font-size:var(--fs-lg);font-weight:800}
}

/* ---- 窄到中等（横屏手机/竖屏小平板 561–900px）：采集排行 7 列表在有 4~5 行、避免横向溢出 ---- */
@media (min-width:561px) and (max-width:900px){
  .sr-head{display:none}
  .sr-row{grid-template-columns:1fr 1fr;gap:2px 8px;padding:8px 10px}
  .sr-route{grid-column:1;grid-row:1}
  .sr-price{grid-column:2;grid-row:1;text-align:center}
  .sr-latest{grid-column:1;grid-row:2}
  .sr-date{grid-column:2;grid-row:2;text-align:right}
  .sr-trend{grid-column:1;grid-row:3}
  .sr-ts{grid-column:2;grid-row:3;text-align:right}
  .sr-ops{grid-column:1/-1;grid-row:4;justify-content:flex-end}
  .sr-latest::before{content:"最新 ";color:var(--sub);font-weight:700}
  .sr-trend::before{content:"平均 ";color:var(--sub);font-weight:700}
}

/* ---- 响应式溢出加固：任何视口下根容器不超宽、不产生横向整页滚动 ---- */
html,body{max-width:100%;overflow-x:hidden}
.container,.card,.flight-panel,.fl-card,.shot-rank,.fl-src-grid,.fl-battle-list{min-width:0;max-width:100%}

/* 多机场勾选 chip（搜索设置源卡片的出发地/目的地编辑） */
.fl-od-col-wide{flex:1 1 240px;min-width:200px}
.fl-chipset{display:flex;flex-wrap:wrap;gap:5px;margin-top:3px}
.fl-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border:1px solid #5a6472;border-radius:12px;font-size:var(--fs-sm);line-height:1.4;cursor:pointer;user-select:none;background:rgba(255,255,255,.04);transition:background .12s,border-color .12s}
.fl-chip:hover{border-color:#7c8aa0}
.fl-chip input{margin:0;vertical-align:middle}
.fl-chip:has(input:checked){background:rgba(80,150,255,.22);border-color:#5a9bff;color:#dceaff}
