:root{
  --ink:#07080a;
  --ink-1:#0c0e11;
  --ink-2:#12151a;
  --bone:#ece8e0;
  --dim:rgba(236,232,224,.56);
  --faint:rgba(236,232,224,.30);
  --line:rgba(236,232,224,.16);
  --line-soft:rgba(236,232,224,.09);
  --signal:#ff6a1a;
  --sans:"PingFang SC","Hiragino Sans GB","Microsoft YaHei UI","Microsoft YaHei","Noto Sans CJK SC",system-ui,-apple-system,sans-serif;
  --serif:"Songti SC","STSong","SimSun","Noto Serif CJK SC",Georgia,serif;
  --mono:ui-monospace,"SFMono-Regular","Cascadia Mono",Consolas,"Liberation Mono",monospace;
  --hud-h:58px;
}

*{box-sizing:border-box}
html,body{height:100%}
html{background:var(--ink)}
body{
  margin:0;background:var(--ink);color:var(--bone);
  font-family:var(--sans);-webkit-font-smoothing:antialiased;
  overflow:hidden;
}
button,input{font:inherit;color:inherit}
button{cursor:pointer;background:none;border:0}
a{color:inherit}
::selection{background:var(--signal);color:#07080a}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

#globe{position:fixed;inset:0;width:100%;height:100%;display:block;z-index:0}
.vignette{
  position:fixed;inset:0;z-index:1;pointer-events:none;
  background:
    radial-gradient(120% 90% at 50% 45%,transparent 32%,rgba(7,8,10,.42) 74%,rgba(7,8,10,.88) 100%),
    linear-gradient(90deg,rgba(7,8,10,.96) 0%,rgba(7,8,10,.90) 30%,rgba(7,8,10,.52) 52%,transparent 72%);
}
body.reporting .vignette{
  background:
    radial-gradient(120% 90% at 50% 45%,transparent 30%,rgba(7,8,10,.38) 76%,rgba(7,8,10,.82) 100%),
    linear-gradient(90deg,rgba(7,8,10,.66) 0%,rgba(7,8,10,.20) 34%,transparent 62%);
}

/* ---------- 载入幕 ---------- */
#boot{
  position:fixed;inset:0;z-index:100;background:var(--ink);
  display:grid;place-items:center;transition:opacity .7s ease,visibility .7s;
}
#boot.gone{opacity:0;visibility:hidden}
.boot-mark{font-size:42px;font-weight:700;letter-spacing:-.05em;position:relative;line-height:1}
.boot-dot{color:var(--signal);animation:breathe 1.6s cubic-bezier(.6,0,.2,1) infinite}
@keyframes breathe{0%,100%{opacity:1}50%{opacity:.28}}
.boot-note{
  position:absolute;top:calc(50% + 46px);left:0;right:0;text-align:center;
  font:10.5px/1.4 var(--mono);letter-spacing:.12em;color:var(--faint);
  text-transform:uppercase;margin:0;
}

/* ---------- HUD ---------- */
.hud{
  position:fixed;top:0;left:0;right:0;height:var(--hud-h);z-index:20;
  display:flex;align-items:center;gap:22px;padding:0 26px;
  border-bottom:1px solid var(--line);
  background:linear-gradient(180deg,rgba(7,8,10,.82),rgba(7,8,10,.36));
  backdrop-filter:blur(9px);
}
.wordmark{
  font-size:22px;font-weight:700;letter-spacing:-.06em;text-decoration:none;
  white-space:nowrap;line-height:1;
}
.wordmark span{color:var(--signal)}
.hud-readout{
  display:flex;align-items:center;gap:9px;flex:1;min-width:0;
  font:10px/1 var(--mono);letter-spacing:.11em;color:var(--faint);
  white-space:nowrap;overflow:hidden;
}
.hud-readout b{color:var(--bone);font-weight:500}
.hud-sep{color:rgba(236,232,224,.22)}
.led{
  display:inline-block;width:5px;height:5px;border-radius:50%;
  background:var(--signal);margin-right:7px;vertical-align:1px;
  box-shadow:0 0 8px rgba(255,106,26,.8);
}
.hud-nav{display:flex;gap:6px;flex-shrink:0}
.hud-nav button{
  font:10px/1 var(--mono);letter-spacing:.1em;color:var(--dim);
  padding:9px 12px;border:1px solid var(--line-soft);border-radius:2px;
  transition:color .2s,border-color .2s,background .2s;
}
.hud-nav button:hover{color:var(--bone);border-color:var(--line);background:rgba(236,232,224,.05)}

/* ---------- 舞台 ---------- */
#stage{position:relative;z-index:5;height:100%;pointer-events:none}
#stage > *{pointer-events:auto}

.eyebrow{
  display:flex;align-items:center;gap:9px;margin:0 0 26px;
  font:10.5px/1 var(--mono);letter-spacing:.18em;color:var(--faint);
  text-transform:uppercase;
}
.eyebrow .sq{width:6px;height:6px;background:var(--signal);display:inline-block;flex-shrink:0}
.eyebrow-cn{letter-spacing:.06em;color:var(--dim)}

/* ---------- 落地页 ---------- */
#landing{
  position:absolute;left:clamp(28px,7vw,110px);top:50%;transform:translateY(-50%);
  width:min(760px,calc(100vw - 56px));
  transition:opacity .55s ease,transform .55s cubic-bezier(.2,0,0,1),visibility .55s;
}
#landing.hidden{opacity:0;visibility:hidden;transform:translateY(-58%);pointer-events:none}
#landing h1{
  margin:0;font-size:clamp(48px,6.4vw,92px);font-weight:700;
  letter-spacing:-.055em;line-height:1.1;
}
#landing h1 em{
  font-family:var(--serif);font-style:italic;font-weight:400;
  color:var(--signal);letter-spacing:-.02em;padding-left:.04em;
}
.lede{
  margin:30px 0 0;font-size:clamp(14px,1.25vw,17px);line-height:1.9;
  color:var(--dim);letter-spacing:.01em;max-width:620px;
}
.search{
  display:flex;align-items:stretch;margin-top:38px;
  border:1px solid var(--line);background:rgba(7,8,10,.55);
  backdrop-filter:blur(6px);max-width:620px;height:56px;
  transition:border-color .2s;
}
.search:focus-within{border-color:rgba(255,106,26,.7)}
.search input{
  flex:1;min-width:0;background:none;border:0;outline:0;
  padding:0 18px;font-size:15px;letter-spacing:.01em;
}
.search input::placeholder{color:var(--faint)}
.search .locate,.search .go{
  display:flex;align-items:center;justify-content:center;gap:8px;
  border-left:1px solid var(--line);padding:0 18px;
  font:11px/1 var(--mono);letter-spacing:.1em;color:var(--dim);
  transition:color .2s,background .2s;
}
.search .locate{padding:0 15px}
.search .go{color:var(--bone);padding:0 24px;white-space:nowrap}
.search .go:hover,.search .locate:hover{background:rgba(236,232,224,.06);color:var(--bone)}
.search .go span{color:var(--signal);font-size:16px}
.search-status{min-height:18px;margin:10px 0 0;font:11px/1.5 var(--mono);color:var(--signal);letter-spacing:.04em}
.presets{display:flex;flex-wrap:wrap;align-items:center;gap:7px;margin-top:22px;max-width:660px}
.presets-label{font:10px/1 var(--mono);letter-spacing:.14em;color:var(--faint);margin-right:6px}
.presets button{
  font-size:12px;padding:7px 12px;border:1px solid var(--line-soft);
  color:var(--dim);border-radius:2px;transition:all .2s;
}
.presets button:hover{color:var(--bone);border-color:rgba(255,106,26,.55);background:rgba(255,106,26,.07)}
.landing-credit{
  margin:44px 0 0;font:10px/1.6 var(--mono);letter-spacing:.08em;
  color:var(--faint);text-transform:uppercase;
}

/* ---------- 报告 ---------- */
#report{
  position:absolute;right:0;top:var(--hud-h);bottom:0;
  width:min(440px,100vw);overflow-y:auto;overscroll-behavior:contain;
  padding:34px 30px 60px;
  background:linear-gradient(90deg,rgba(7,8,10,.72),rgba(7,8,10,.94) 26%);
  border-left:1px solid var(--line-soft);
  backdrop-filter:blur(14px);
  animation:slideIn .6s cubic-bezier(.2,0,0,1) both;
}
@keyframes slideIn{from{opacity:0;transform:translateX(28px)}to{opacity:1;transform:none}}
#report::-webkit-scrollbar{width:6px}
#report::-webkit-scrollbar-thumb{background:rgba(236,232,224,.16)}
.report-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}
.report-head .eyebrow{margin-bottom:16px}
.report-head h2{font-size:34px;margin:0;letter-spacing:-.04em;line-height:1.15;font-weight:700}
.coords{margin:9px 0 0;font:10.5px/1.5 var(--mono);letter-spacing:.09em;color:var(--faint)}
.again{
  flex-shrink:0;font:10px/1 var(--mono);letter-spacing:.08em;color:var(--dim);
  padding:9px 11px;border:1px solid var(--line-soft);border-radius:2px;transition:all .2s;
}
.again:hover{color:var(--bone);border-color:var(--line)}
.again span{color:var(--signal)}
.verdict{
  margin:30px 0 0;padding:20px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);
  font-size:19px;line-height:1.65;letter-spacing:-.01em;
}
.verdict b{color:var(--signal);font-weight:700;font-family:var(--serif);font-style:italic;font-size:1.22em}
.stats{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--line-soft);margin:22px 0 0;border:1px solid var(--line-soft)}
.stat{background:rgba(7,8,10,.82);padding:16px 15px}
.stat b{display:block;font:600 25px/1.1 var(--mono);letter-spacing:-.04em;color:var(--bone)}
.stat b.hl{color:var(--signal)}
.stat span{display:block;margin-top:8px;font:10px/1.5 var(--mono);letter-spacing:.07em;color:var(--faint)}
.filters{display:flex;flex-wrap:wrap;gap:6px;margin:26px 0 0}
.filters button{
  font-size:11px;padding:7px 10px;border:1px solid var(--line-soft);color:var(--dim);
  border-radius:2px;transition:all .2s;
}
.filters button:hover{color:var(--bone)}
.filters button.on{background:var(--bone);color:var(--ink);border-color:var(--bone)}
.filters button .n{font:10px var(--mono);opacity:.6;margin-left:5px}
.list-head{
  display:flex;justify-content:space-between;margin:30px 0 8px;padding-bottom:9px;
  border-bottom:1px solid var(--line);font:10px/1 var(--mono);
  letter-spacing:.14em;color:var(--faint);text-transform:uppercase;
}
.pass-list{list-style:none;margin:0;padding:0}
.pass-list li{border-bottom:1px solid var(--line-soft)}
.pass-list button{
  width:100%;text-align:left;display:grid;grid-template-columns:66px 1fr;gap:12px;
  padding:13px 4px;transition:background .18s;
}
.pass-list button:hover{background:rgba(236,232,224,.045)}
.pass-time{font:10.5px/1.6 var(--mono);color:var(--dim);letter-spacing:.03em;padding-top:2px}
.pass-name{font-size:14px;font-weight:600;line-height:1.4;letter-spacing:-.01em;color:var(--bone)}
.pass-meta{font:10px/1.55 var(--mono);color:var(--faint);margin-top:5px;letter-spacing:.03em}
.badge{
  display:inline-block;font:9px/1 var(--mono);letter-spacing:.08em;
  padding:4px 6px;border:1px solid currentColor;border-radius:2px;margin-top:7px;
}
.badge.photo{color:var(--signal)}
.badge.likely{color:#ffbe7a}
.badge.could{color:#d8c9a8}
.badge.sweep{color:#8fb8d8}
.badge.overhead{color:var(--faint)}
.list-more{font:10px/1.6 var(--mono);color:var(--faint);padding:16px 4px;letter-spacing:.05em}

/* ---------- 影像查看器 ---------- */
#viewer{
  position:absolute;left:clamp(24px,5vw,72px);bottom:44px;width:min(360px,38vw);
  animation:slideIn .6s .1s cubic-bezier(.2,0,0,1) both;
}
.viewer-frame{border:1px solid var(--line);background:var(--ink-1);position:relative}
.viewer-img{
  width:100%;aspect-ratio:1/1;background:#0e1116;overflow:hidden;position:relative;
  display:flex;align-items:center;justify-content:center;
}
.viewer-img img{width:100%;height:100%;object-fit:cover;display:block;filter:contrast(1.04) saturate(1.03)}
.img-loading{font:10px/1.6 var(--mono);letter-spacing:.1em;color:var(--faint);text-align:center;padding:20px}
.viewer-overlay{
  position:absolute;top:10px;left:10px;right:10px;display:flex;justify-content:space-between;
  align-items:flex-start;pointer-events:none;gap:8px;
}
.tag,.scale{
  font:9px/1 var(--mono);letter-spacing:.1em;color:var(--bone);
  background:rgba(7,8,10,.76);padding:6px 8px;border:1px solid var(--line-soft);
}
.scale{display:flex;align-items:center;gap:7px}
.scale i{display:block;width:34px;height:1px;background:var(--bone);position:relative}
.scale i::before,.scale i::after{content:"";position:absolute;width:1px;height:5px;background:var(--bone);top:-2px}
.scale i::before{left:0}.scale i::after{right:0}
.viewer-caption{
  padding:11px 12px;border-top:1px solid var(--line-soft);
  font:10px/1.6 var(--mono);letter-spacing:.05em;color:var(--dim);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.viewer-bar{
  display:flex;align-items:center;gap:6px;margin-top:9px;
  font:10px/1 var(--mono);letter-spacing:.08em;color:var(--faint);
}
.viewer-bar button{
  width:26px;height:24px;border:1px solid var(--line-soft);color:var(--dim);
  transition:all .2s;
}
.viewer-bar button:hover{color:var(--bone);border-color:var(--line)}
#photoIndex{min-width:46px;text-align:center}
.viewer-hint{margin-left:auto;letter-spacing:.03em}

/* ---------- 详情卡 ---------- */
#detail{
  position:absolute;left:clamp(24px,5vw,72px);top:calc(var(--hud-h) + 34px);
  width:min(320px,36vw);padding:22px;border:1px solid var(--line);
  background:rgba(9,11,14,.94);backdrop-filter:blur(16px);
  animation:slideIn .35s cubic-bezier(.2,0,0,1) both;
}
.detail-close{position:absolute;right:12px;top:9px;font-size:20px;color:var(--faint);line-height:1}
.detail-close:hover{color:var(--bone)}
.detail-eyebrow{margin:0 0 12px;font:10px/1 var(--mono);letter-spacing:.16em;color:var(--signal)}
#detail h3{margin:0;font-size:20px;letter-spacing:-.02em}
.detail-org{margin:7px 0 18px;font:10px/1.5 var(--mono);color:var(--faint);letter-spacing:.06em}
#detailRows{margin:0;display:grid;grid-template-columns:auto 1fr;gap:9px 16px}
#detailRows dt{font:10px/1.4 var(--mono);color:var(--faint);letter-spacing:.05em}
#detailRows dd{margin:0;font:11px/1.4 var(--mono);color:var(--bone);text-align:right}
.detail-note{margin:20px 0 0;padding-top:14px;border-top:1px solid var(--line-soft);font-size:12px;line-height:1.8;color:var(--dim)}

/* ---------- 进度 ---------- */
#progress{
  position:fixed;inset:0;z-index:60;display:grid;place-items:center;
  background:rgba(7,8,10,.80);backdrop-filter:blur(8px);
}
.progress-inner{width:min(460px,calc(100vw - 48px))}
.progress-eyebrow{margin:0 0 16px;font:10px/1 var(--mono);letter-spacing:.18em;color:var(--signal)}
.progress-phase{margin:0 0 20px;font-size:22px;letter-spacing:-.02em;font-weight:600}
.progress-track{height:2px;background:rgba(236,232,224,.14);overflow:hidden}
.progress-fill{height:100%;width:0;background:var(--signal);transition:width .18s ease}
.progress-meta{display:flex;justify-content:space-between;gap:16px;margin:12px 0 0;font:10px/1.5 var(--mono);letter-spacing:.06em;color:var(--faint)}

/* ---------- 关于 ---------- */
#about{
  position:fixed;inset:0;z-index:80;overflow-y:auto;
  background:rgba(7,8,10,.96);backdrop-filter:blur(12px);
  animation:fadeIn .3s ease both;
}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
.about-panel{width:min(1080px,calc(100vw - 64px));margin:0 auto;padding:52px 0 70px}
.about-top{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line);padding-bottom:16px}
.about-top .eyebrow{margin:0}
#aboutClose{font:10px/1 var(--mono);letter-spacing:.12em;color:var(--dim);padding:8px 0}
#aboutClose:hover{color:var(--signal)}
#aboutTitle{font-size:clamp(36px,5vw,64px);letter-spacing:-.05em;margin:40px 0 44px;line-height:1.1}
.about-cols{display:grid;grid-template-columns:1fr 1fr;gap:56px}
.about-cols h3{
  font:11px/1 var(--mono);letter-spacing:.16em;color:var(--signal);
  margin:0 0 14px;padding-bottom:10px;border-bottom:1px solid var(--line-soft);
}
.about-cols h3:not(:first-child){margin-top:38px}
.about-cols p{font-size:13.5px;line-height:1.95;color:var(--dim);margin:0 0 14px}
.about-cols b{color:var(--bone);font-weight:600}
.about-cols a{color:var(--bone);text-decoration:underline;text-decoration-color:var(--signal);text-underline-offset:3px}
.about-foot{margin:56px 0 0;padding-top:18px;border-top:1px solid var(--line);font:10px/1.6 var(--mono);letter-spacing:.1em;color:var(--faint)}

/* ---------- toast ---------- */
.toast{
  position:fixed;left:50%;bottom:34px;transform:translate(-50%,14px);z-index:90;
  font:11px/1 var(--mono);letter-spacing:.08em;padding:12px 18px;
  background:var(--bone);color:var(--ink);opacity:0;pointer-events:none;
  transition:opacity .25s,transform .25s;
}
.toast.show{opacity:1;transform:translate(-50%,0)}

/* ---------- 响应式 ---------- */
@media (max-width:1100px){
  .hud-item.wide{display:none}
  #viewer{width:min(300px,36vw)}
}
@media (max-width:820px){
  :root{--hud-h:52px}
  .hud{padding:0 14px;gap:12px}
  .hud-readout{font-size:9px;gap:6px}
  .hud-readout .hud-item:nth-of-type(n+2),.hud-readout .hud-sep{display:none}
  .hud-nav button{padding:8px 9px}
  #landing{left:22px;top:auto;bottom:60px;transform:none;width:calc(100vw - 44px)}
  #landing.hidden{transform:translateY(24px)}
  #landing h1{font-size:clamp(32px,10vw,42px);letter-spacing:-.05em}
  .lede{font-size:12.5px;margin-top:18px;line-height:1.8}
  .wide-br{display:none}
  .search{margin-top:22px;height:48px;width:100%;max-width:100%;overflow:hidden}
  .search input{font-size:13px;padding:0 11px}
  .search .locate{padding:0 10px}
  .search .go{padding:0 11px;font-size:10px;gap:4px}
  .presets{
    margin-top:14px;gap:5px;max-width:100%;flex-wrap:nowrap;
    overflow-x:auto;scrollbar-width:none;padding-bottom:2px;
  }
  .presets::-webkit-scrollbar{display:none}
  .presets button{flex:0 0 auto;padding:6px 9px;font-size:11px}
  .landing-credit{margin-top:24px;font-size:9px}
  #report{width:100%;background:rgba(7,8,10,.93);padding:24px 18px 80px;top:auto;height:62vh;bottom:0;border-left:0;border-top:1px solid var(--line)}
  #viewer{left:14px;bottom:auto;top:calc(var(--hud-h) + 14px);width:min(200px,46vw)}
  .viewer-caption{font-size:9px;padding:8px}
  .scale{display:none}
  #detail{left:14px;right:14px;width:auto;top:auto;bottom:calc(62vh + 12px)}
  .about-cols{grid-template-columns:1fr;gap:10px}
  .about-panel{width:calc(100vw - 40px);padding-top:28px}
  #aboutTitle{margin:26px 0 30px}
}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms !important;transition-duration:.01ms !important}
}
[hidden]{display:none !important}
