/* Markdown 正文 */
.body{word-break:break-word;font-size:15px;margin-bottom:10px}
.body:empty{display:none}
.body p{margin:0 0 10px}
.body>*:last-child{margin-bottom:0}
.body h1,.body h2,.body h3{font-family:var(--song);font-weight:900;letter-spacing:.06em;margin:16px 0 8px;line-height:1.4}
.body h1{font-size:19px}.body h2{font-size:17px}.body h3{font-size:15.5px}
.body>h1:first-child,.body>h2:first-child,.body>h3:first-child{margin-top:2px}
.body blockquote{font-family:var(--kai);color:#4a5560;border-left:3px solid var(--rule);padding:2px 0 2px 12px;margin:10px 0}
.body ul,.body ol{padding-left:22px;margin:0 0 10px}
.body a{color:var(--pen)}
.body hr{border:0;border-top:1px dashed var(--rule);margin:14px 0}
.body code{font-family:var(--mono);font-size:13px;background:#E8EAE3;border-radius:4px;padding:1px 5px}
.body pre{background:#E8EAE3;border-radius:8px;padding:10px 12px;overflow-x:auto;margin:0 0 10px}
.body pre code{background:none;padding:0}
.body strong{font-weight:700}
/* 混排媒体 */
/* 手机(默认):全宽、自然高度;≥601px 桌面:统一 4:3 画框 + 模糊填充,横竖图外框严格等大 */
.mfig{margin:12px 0;cursor:zoom-in;width:100%}
.mfig .frame{position:relative;overflow:hidden;border-radius:8px;background:#E7E9E2}
.mfig .frame .bg{display:none}
.mfig img,.mfig video{position:relative;z-index:1;width:100%;height:auto;display:block;border-radius:8px}
.mfig video{cursor:default}
.mfig figcaption{font-family:var(--kai);font-size:12.5px;color:var(--lead);margin-top:6px;text-align:center}
@media(min-width:601px){
  .mfig .frame{aspect-ratio:4/3}
  .mfig .frame .bg{display:block;position:absolute;inset:-24px;background-size:cover;background-position:center;
    filter:blur(22px) saturate(.85) brightness(.92);transform:scale(1.08);opacity:.9}
  .mfig .frame::after{content:"";position:absolute;inset:0;box-shadow:inset 0 0 0 1px rgba(0,0,0,.06);pointer-events:none;z-index:2}
  /* 绝对定位铺满画框,object-fit:contain 做留白;drop-shadow 只跟随实际画面而非整个框(留白区透明) */
  /* 选择器写到 .body .mfig .frame 级别,压过 production.css 的 .body img{height:auto} */
  .body .mfig .frame img,.body .mfig .frame video{position:absolute;inset:0;width:100%;height:100%;max-width:none;max-height:none;object-fit:contain;
    padding:18px;box-sizing:border-box;filter:drop-shadow(0 2px 10px rgba(0,0,0,.28))}
  .body .mfig .frame video{padding:0;filter:none;background:#000}
}
.grid{display:grid;gap:6px;border-radius:8px;overflow:hidden}
.grid.n1{grid-template-columns:1fr}
.grid.n2{grid-template-columns:1fr 1fr}
.grid.n3{grid-template-columns:repeat(3,1fr)}
.cell{position:relative;cursor:zoom-in;background:#E7E9E2;overflow:hidden}
.grid.n2 .cell,.grid.n3 .cell{aspect-ratio:1}
.grid.n1 .cell{max-height:460px}
.cell img{width:100%;height:100%;object-fit:cover;display:block}
.grid.n1 .cell img{object-fit:contain;background:#E7E9E2}
.cell .play{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  color:#fff;font-size:34px;text-shadow:0 1px 8px rgba(0,0,0,.5);pointer-events:none}
.cell .cap{position:absolute;left:0;right:0;bottom:0;padding:14px 8px 5px;font-family:var(--kai);font-size:11px;line-height:1.4;color:#fff;
  background:linear-gradient(transparent,rgba(0,0,0,.6));white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:none}
.cell[data-kind="video"] .cap{padding-right:52px}
.cell .dur{position:absolute;right:6px;bottom:5px;font-family:var(--mono);font-size:10.5px;
  color:#fff;background:rgba(0,0,0,.45);border-radius:4px;padding:1px 6px}
.endnote{font-family:var(--kai);color:var(--lead);text-align:center;padding:36px 0 10px;font-size:14px}
.loading{font-family:var(--kai);color:var(--lead);text-align:center;padding:40px 0}


/* ---------- 地图(自绘纸墨风) ---------- */
#mapwrap{flex:1;display:none;position:relative}
#map{position:absolute;inset:0;background:#E6EAE3}
#mapnote{position:absolute;right:10px;bottom:8px;z-index:500;font-family:var(--mono);
  font-size:9.5px;color:var(--lead);letter-spacing:.14em;pointer-events:none}
#maploading{position:absolute;inset:0;z-index:501;display:flex;align-items:center;justify-content:center;
  font-family:var(--kai);color:var(--lead);font-size:15px;background:#E6EAE3;pointer-events:none;transition:opacity .4s}
.leaflet-container{font-family:var(--ui)}
.leaflet-popup-content-wrapper{background:var(--card);border:1px solid var(--rule);border-radius:10px;
  box-shadow:0 4px 16px rgba(42,49,56,.14);color:var(--ink)}
.leaflet-popup-tip{background:var(--card);border:1px solid var(--rule)}
.leaflet-popup-content{font-family:var(--ui);font-size:13px;line-height:1.6;margin:10px 14px}
.leaflet-popup-content .pp-place{font-family:var(--kai);color:var(--seal);font-size:13.5px}
.leaflet-popup-content .pp-date{font-family:var(--mono);font-size:10.5px;color:var(--lead)}
.leaflet-popup-content a{color:var(--pen)}
.leaflet-bar a{background:var(--card);color:var(--ink);border-bottom:1px solid var(--rule)}
.leaflet-bar a:hover{background:var(--paper)}
/* 朱砂印标记:单点 */
.seal-pin{background:var(--seal);border:2.5px solid #FAFAF6;border-radius:50%;
  box-shadow:0 1px 6px rgba(42,49,56,.4)}
/* 聚合章:红底白字计数 */
.seal-cluster{background:var(--seal);color:#FAF6F0;border:2.5px solid #FAFAF6;border-radius:50%;
  box-shadow:0 1px 8px rgba(42,49,56,.4);display:flex;align-items:center;justify-content:center;
  font-family:var(--mono);font-weight:700}

/* ---------- 单条行迹的轨迹小地图(静态) ---------- */
.trail{position:relative;width:100%;aspect-ratio:4/3;margin-top:10px;border-radius:8px;overflow:hidden;
  background:#E6EAE3;box-shadow:inset 0 0 0 1px rgba(0,0,0,.06);cursor:default}
@media(min-width:601px){.trail{aspect-ratio:16/9}}
.trail.leaflet-container{background:#E6EAE3}
.trail-pin{background:var(--seal);color:#FAF6F0;border:2px solid #FAFAF6;border-radius:10px;
  box-shadow:0 1px 5px rgba(42,49,56,.35);display:flex;align-items:center;justify-content:center;
  font-family:var(--mono);font-size:11px;font-weight:700;line-height:1;cursor:pointer;box-sizing:border-box}
.trail-pin.start,.trail-pin.end{background:#FAFAF6;color:var(--seal);border-color:var(--seal)}
.trail-note{position:absolute;right:8px;bottom:6px;z-index:500;font-family:var(--mono);
  font-size:9.5px;color:var(--lead);letter-spacing:.14em;pointer-events:none}


#composer{position:fixed;inset:0;background:rgba(42,49,56,.45);z-index:7;display:none;align-items:flex-end;justify-content:center}
#composer.on{display:flex}
#composer .panel{background:var(--card);border-radius:16px 16px 0 0;width:100%;max-width:660px;
  max-height:88vh;overflow-y:auto;padding:20px 20px calc(20px + env(safe-area-inset-bottom))}
#composer h3{font-family:var(--song);font-weight:900;font-size:17px;letter-spacing:.2em;margin-bottom:12px}
/* 编辑器:工具栏 + 编辑/预览切换 */
.ebar{display:flex;align-items:center;gap:8px;margin-bottom:8px;flex-wrap:wrap}
.etabs{display:flex;border:1px solid var(--rule);border-radius:7px;overflow:hidden}
.etabs button{font-size:12px;border:0;background:transparent;color:var(--lead);padding:4px 12px;cursor:pointer;font-family:var(--ui)}
.etabs button.on{background:var(--ink);color:#F4F6F2}
.ebar .sp{flex:1}
.tools{display:flex;gap:4px;flex-wrap:wrap}
.tools button{font-family:var(--ui);font-size:12px;border:1px solid var(--rule);border-radius:6px;
  background:var(--card);color:var(--ink);padding:3px 9px;cursor:pointer}
.tools button:hover{border-color:var(--lead)}
.tools button b{font-family:var(--song)}
#composer textarea{width:100%;border:1px solid var(--rule);border-radius:9px;background:var(--paper);
  font-family:var(--ui);font-size:15px;line-height:1.7;color:var(--ink);padding:10px 12px;
  min-height:130px;resize:vertical;outline:none}
#composer textarea:focus{border-color:var(--pen)}
#cpreview{display:none;border:1px dashed var(--rule);border-radius:9px;background:var(--paper);
  padding:12px 14px;min-height:130px}
#composer.preview textarea{display:none}
#composer.preview #cpreview{display:block}
/* 媒体 chip:缩略图 + 配文输入 + 操作行 */
#mlist{display:flex;flex-wrap:wrap;gap:10px;margin-top:12px}
.mchip{width:108px}
.mchip .thumb{position:relative;width:108px;height:84px;border-radius:8px;overflow:hidden;
  background:#E7E9E2;border:1px solid var(--rule)}
.mchip .thumb img{width:100%;height:100%;object-fit:cover;display:block}
.mchip .st{position:absolute;left:0;right:0;bottom:0;font-family:var(--mono);font-size:9.5px;
  color:#fff;background:rgba(0,0,0,.55);text-align:center;padding:2px 0}
.mchip .inuse{position:absolute;top:3px;left:3px;font-family:var(--mono);font-size:9px;letter-spacing:.06em;
  color:#fff;background:var(--pen);border-radius:4px;padding:1px 5px}
.mchip .cap{width:100%;margin-top:5px;border:1px solid var(--rule);border-radius:6px;background:var(--card);
  font-family:var(--kai);font-size:12px;color:var(--ink);padding:3px 7px;outline:none}
.mchip .cap:focus{border-color:var(--pen)}
.mchip .ops{display:flex;gap:3px;margin-top:4px}
.mchip .ops button{flex:1;font-size:11px;border:1px solid var(--rule);border-radius:5px;
  background:var(--card);color:var(--lead);padding:2px 0;cursor:pointer;font-family:var(--ui)}
.mchip .ops button:hover{color:var(--ink);border-color:var(--lead)}
.mchip .ops button.rm:hover{color:var(--seal);border-color:var(--seal)}
#composer .bar{display:flex;align-items:center;gap:10px;margin-top:14px;flex-wrap:wrap}
#composer .bar .sp{flex:1}
#composer .hint{font-family:var(--mono);font-size:10px;color:var(--lead);letter-spacing:.05em}
/* 地点行:手填地名搜索(优先级 手填 > 照片 GPS > IP 估算) */
.georow{display:flex;align-items:center;gap:10px;margin-top:12px;flex-wrap:wrap}
.geolabel{font-family:var(--song);font-size:12px;letter-spacing:.2em;color:var(--lead);flex:none}
.geobox{position:relative;flex:1;min-width:200px;display:flex;align-items:center;gap:6px}
.geobox input{flex:1;border:1px solid var(--rule);border-radius:7px;background:var(--paper);font-family:var(--kai);
  font-size:13px;color:var(--ink);padding:6px 9px;outline:none;min-width:0}
.geobox input:focus{border-color:var(--pen)}
.geobox input.picked{border-color:var(--pen);background:var(--card)}
#geosug{position:absolute;left:0;right:0;top:calc(100% + 4px);z-index:2;background:var(--card);border:1px solid var(--rule);
  border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.12);overflow:hidden;max-height:220px;overflow-y:auto}
#geosug button{display:block;width:100%;text-align:left;border:0;border-bottom:1px solid var(--rule);background:none;
  font-family:var(--kai);font-size:13px;color:var(--ink);padding:8px 10px;cursor:pointer}
#geosug button:last-child{border-bottom:0}
#geosug button:hover,#geosug button:focus{background:var(--paper);outline:none}
#geosug button small{display:block;font-family:var(--mono);font-size:9.5px;color:var(--lead);margin-top:2px}
#geosug .empty{font-family:var(--mono);font-size:10px;color:var(--lead);padding:8px 10px}
/* IP 兜底的地名前带 ≈,提示只是发布时所在城市的估算 */
.place.approx{color:var(--lead)}
.place.approx::before{content:"≈ "}

/* ---------- 灯箱 / 口令 / toast ---------- */
#lightbox{position:fixed;inset:0;background:rgba(20,23,26,.93);z-index:9;display:none;align-items:center;justify-content:center}
#lightbox.on{display:flex}
#lightbox img,#lightbox video{max-width:96vw;max-height:86vh;border-radius:4px}
#lightbox .lbcap{font-family:var(--kai);font-size:14px;color:#D8DCD4;text-align:center;margin-top:10px}
#lightbox .nav{position:fixed;top:50%;transform:translateY(-50%);font-size:34px;color:#fff;opacity:.7;cursor:pointer;user-select:none;padding:20px}
#lightbox .prev{left:0}#lightbox .next{right:0}
#lightbox .x{position:fixed;top:14px;right:22px;font-size:26px;color:#fff;opacity:.8;cursor:pointer}
#gate{position:fixed;inset:0;background:rgba(42,49,56,.45);display:none;align-items:center;justify-content:center;z-index:10}
#gate.on{display:flex}
#gate .box{background:var(--card);border-radius:14px;padding:34px 44px;text-align:center}
#gate h2{font-family:var(--song);font-weight:900;font-size:20px;letter-spacing:.24em;margin-bottom:16px}
#gate input{font-family:var(--mono);font-size:17px;letter-spacing:.3em;text-align:center;width:170px;
  padding:8px 12px;border:1px solid var(--rule);border-radius:8px;background:var(--paper);color:var(--ink);outline:none}
#gate input:focus{border-color:var(--pen)}
#gate .err{font-family:var(--kai);font-size:13px;color:var(--seal);margin-top:10px;min-height:20px}
#gate .row{display:flex;gap:8px;justify-content:center}
#gate .go{font-family:var(--ui);font-size:14px;padding:0 16px;border-radius:8px;border:1px solid var(--ink);
  background:var(--ink);color:#F4F6F2;cursor:pointer}
.toast{position:fixed;left:50%;bottom:34px;transform:translateX(-50%) translateY(80px);opacity:0;
  background:var(--ink);color:#F4F6F2;font-size:13px;padding:8px 18px;border-radius:8px;
  transition:all .25s;pointer-events:none;z-index:11}
.toast.on{transform:translateX(-50%);opacity:1}
