:root{
  --bg:#FAF9F5;
  --bg-2:#F3F0E7;
  --surface:#FFFFFF;
  --ink:#1F1E1D;
  --ink-2:#57534A;
  --ink-3:#8E8A7E;
  --line:#E7E2D6;
  --line-2:#D8D2C2;
  --accent:#C96442;
  --accent-soft:#FAEDE6;
  --serif:"Copernicus","Tiempos Text",Charter,"Iowan Old Style",Georgia,"Songti SC","STSong",serif;
  --sans:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  --mono:ui-monospace,"SFMono-Regular","JetBrains Mono",Consolas,monospace;
  --r:14px;
}
*{box-sizing:border-box;margin:0;padding:0}
html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
body{background:var(--bg);color:var(--ink);font-family:var(--sans);font-size:17px;line-height:1.72}
::selection{background:#F2DFD4;color:var(--ink)}
a{color:inherit;text-decoration:none}
img{display:block;max-width:100%}
.wrap{max-width:760px;margin:0 auto;padding:0 32px}

/* header */
.nav{height:80px;display:flex;align-items:center;justify-content:space-between}
.brand{font-family:var(--serif);font-size:20px;letter-spacing:.01em;display:flex;align-items:baseline;gap:9px}
.brand i{font-family:var(--sans);font-style:normal;font-size:10.5px;letter-spacing:.14em;color:var(--ink-3);text-transform:uppercase}
/* 品牌副标槽位：暂不启用。想加回身份词时，在 HTML 里写 <i>E-COMMERCE</i> 即可 */
.links{display:flex;gap:26px;font-size:14px}
.links a{color:var(--ink-2);position:relative;transition:color .18s}
.links a:hover{color:var(--ink)}
.links a.on{color:var(--ink);font-weight:500}
.links a.on::after{content:"";position:absolute;left:0;right:0;bottom:-6px;height:2px;border-radius:2px;background:var(--accent);opacity:.9}

/* hero */
.hero{padding-top:96px;padding-bottom:84px}
.eyebrow{display:inline-flex;align-items:center;gap:9px;font-size:11px;letter-spacing:.16em;color:var(--ink-3);text-transform:uppercase;margin-bottom:30px}
.eyebrow::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--accent)}

/* section */
.sec{padding-bottom:68px}
.sec-h{display:flex;align-items:baseline;justify-content:space-between;padding-bottom:15px;border-bottom:1px solid var(--line)}
.sec-h h2{font-family:var(--serif);font-size:19px;font-weight:400;letter-spacing:.01em}
.sec-h span{font-family:var(--mono);font-size:11.5px;color:var(--ink-3);letter-spacing:.04em}

/* list */
.list{list-style:none}
.list li{border-bottom:1px solid var(--line)}
.list a{display:grid;grid-template-columns:92px 56px 1fr;gap:16px;padding:21px 0;align-items:baseline;transition:opacity .18s}
.list a:hover{opacity:.55}
.d{font-family:var(--mono);font-size:12px;color:var(--ink-3)}
.t{font-family:var(--mono);font-size:11px;color:var(--accent);letter-spacing:.04em}
.tt{font-size:16.5px;line-height:1.55}

/* entries */
.entries{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.entries a{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:26px 22px 24px;transition:border-color .2s,transform .2s,box-shadow .2s}
.entries a:hover{border-color:var(--line-2);transform:translateY(-2px);box-shadow:0 8px 22px rgba(31,30,29,.055)}
.entries .n{font-family:var(--mono);font-size:11px;color:var(--accent);letter-spacing:.08em;display:block;margin-bottom:16px}
.entries h3{font-family:var(--serif);font-size:18px;font-weight:400;margin-bottom:4px}

/* page title */
.ptitle{padding-top:84px;padding-bottom:48px}
.ptitle h1{font-family:var(--serif);font-size:38px;font-weight:400;letter-spacing:-.012em;line-height:1.25}

/* travel cards */
.travel-list{display:flex;flex-direction:column;gap:56px;padding:44px 0 80px}
.tcard{display:block}
.tcard .cover{aspect-ratio:16/9;border-radius:var(--r);overflow:hidden;display:flex;align-items:center;justify-content:center;font-size:11px;letter-spacing:.2em;color:#B3AD9E;background:var(--bg-2);border:1px dashed var(--line-2);transition:opacity .25s}
.tcard:hover .cover{opacity:.85}
.tcard .cap{display:flex;gap:16px;align-items:baseline;margin-top:20px}
.tcard h2{font-family:var(--serif);font-size:22px;font-weight:400;line-height:1.45}
.tcard .ex{margin-top:10px;font-size:14.5px;color:var(--ink-2);line-height:1.8;max-width:580px}

/* work list */
.work-list{list-style:none;padding:36px 0 76px}
.work-list li{border-bottom:1px solid var(--line)}
.work-list a{display:block;padding:28px 0;transition:opacity .18s}
.work-list a:hover{opacity:.55}
.work-list .ym{font-family:var(--mono);font-size:11px;color:var(--ink-3);letter-spacing:.1em;margin-bottom:10px}
.work-list h2{font-family:var(--serif);font-size:20px;font-weight:400;line-height:1.5}
.work-list p{margin-top:9px;font-size:13.5px;color:var(--ink-2);line-height:1.75;max-width:560px}

/* tools */
.tools{display:grid;grid-template-columns:repeat(2,1fr);gap:16px;margin:44px 0 0}
.tools a{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:24px 24px 22px;transition:border-color .2s,transform .2s,box-shadow .2s}
.tools a:hover{border-color:var(--line-2);transform:translateY(-2px);box-shadow:0 8px 22px rgba(31,30,29,.055)}
.tools h2{font-family:var(--serif);font-size:18px;font-weight:400;margin-bottom:8px}
.tools p{font-size:13px;color:var(--ink-3);line-height:1.72}
.tag{display:inline-block;margin-top:20px;font-size:11px;letter-spacing:.06em;color:var(--accent);background:var(--accent-soft);border-radius:999px;padding:4px 11px}

/* article */
.article{padding:72px 0 0}
.article h1{font-family:var(--serif);font-size:40px;font-weight:400;line-height:1.32;letter-spacing:-.012em}
.meta{margin-top:22px;padding-bottom:28px;border-bottom:1px solid var(--line);font-family:var(--mono);font-size:12px;color:var(--ink-3);display:flex;gap:22px;letter-spacing:.04em;flex-wrap:wrap}
.body{padding:38px 0 84px;font-size:17.5px;line-height:1.88}
.body p{margin-bottom:1.5em}
.body h2{font-family:var(--serif);font-size:21px;font-weight:400;margin:2.4em 0 .85em}
.body blockquote{border-left:2px solid var(--accent);padding-left:22px;color:var(--ink-2);font-family:var(--serif);font-size:18.5px;line-height:1.8;margin:0 0 1.7em}
.body .fig{margin:2.3em 0}
.body .fig figcaption{margin-top:12px;font-size:12.5px;color:var(--ink-3)}

/* tool page */
.tool{padding:44px 0 80px}
.tool-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px 24px;margin-bottom:36px}
.field label{display:block;font-size:12.5px;color:var(--ink-3);margin-bottom:8px}
.field input{width:100%;font-family:var(--mono);font-size:15px;padding:11px 14px;background:var(--surface);border:1px solid var(--line);border-radius:10px;color:var(--ink);outline:none;transition:border-color .2s,box-shadow .2s}
.field input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.result{border-top:1px solid var(--line);padding-top:28px;display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
.result div span{display:block;font-size:11px;color:var(--ink-3);letter-spacing:.1em;margin-bottom:10px;font-family:var(--mono);text-transform:uppercase}
.result div strong{font-family:var(--serif);font-size:27px;font-weight:400}
.result .neg strong{color:var(--accent)}
.hint{margin-top:28px;font-size:12.5px;color:var(--ink-3);line-height:1.85}

/* framework placeholders */
.slot{border:1px dashed var(--line-2);border-radius:12px;background:var(--bg-2);color:#A69F8F;font-size:12.5px;letter-spacing:.04em;display:flex;align-items:center;justify-content:center;text-align:center;padding:18px 22px;line-height:1.9}
.slot.hero-slot{min-height:158px;font-family:var(--serif);font-size:19px;line-height:1.6;letter-spacing:0;color:#A9A292;padding:36px 40px}
.empty{background:var(--bg-2);border:1px dashed var(--line-2);border-radius:var(--r);padding:56px 26px;text-align:center;color:#A29B8B;font-size:13.5px;line-height:2;margin-top:30px}
.empty b{display:block;font-size:10.5px;letter-spacing:.2em;color:var(--ink-3);margin-bottom:13px;text-transform:uppercase;font-weight:500}
.sk{background:#EDE8DA;border-radius:3px;display:block}
.sk-title{height:16px;width:60%;background:#E4DECC}
.sk-line{height:9px;margin-top:13px;background:#EFEADB}
.sk-date{height:9px;width:54px;background:#EFEADB;flex:none}
.sk-cover{aspect-ratio:16/9;border:1px dashed var(--line-2);border-radius:var(--r);display:flex;align-items:center;justify-content:center;font-size:10.5px;letter-spacing:.2em;color:#B7B1A1;background:var(--bg-2)}
.cap-note{margin-top:16px;font-family:var(--mono);font-size:10.5px;letter-spacing:.12em;color:#B7B1A1;text-align:center}
.sk-card .cap{display:flex;gap:16px;align-items:center;margin-top:20px}
.sk-row{display:grid;grid-template-columns:92px 1fr;gap:16px;align-items:center;padding:26px 0;border-bottom:1px solid var(--line)}
.tool-slot{border:1px dashed var(--line-2);border-radius:10px;min-height:48px;display:flex;align-items:center;justify-content:center;font-family:var(--mono);font-size:10.5px;letter-spacing:.16em;color:#B7B1A1;background:var(--bg-2)}
.result-slot .sk-box{border:1px dashed var(--line-2);border-radius:10px;height:76px;display:flex;align-items:center;justify-content:center;font-family:var(--mono);font-size:11px;letter-spacing:.16em;color:#B7B1A1;background:var(--bg-2)}

/* pager + footer */
.pager{display:flex;justify-content:space-between;border-top:1px solid var(--line);padding:26px 0 68px;font-family:var(--mono);font-size:12px;color:var(--ink-3);letter-spacing:.04em}
.pager a:hover{color:var(--ink)}
footer{margin-top:20px}
.fnav{display:flex;justify-content:space-between;padding-top:32px;padding-bottom:60px;font-family:var(--mono);font-size:11px;color:#A29B8B;letter-spacing:.06em;border-top:1px solid var(--line)}
.fnav a:hover{color:var(--ink)}

@media(max-width:680px){
  body{font-size:16px}
  .wrap{padding:0 22px}
  .nav{height:68px}
  .links{gap:16px;font-size:13px}
  .hero{padding-top:60px;padding-bottom:52px}
  .slot.hero-slot{min-height:120px;font-size:17px;padding:26px 24px}
  .entries{grid-template-columns:1fr}
  .tools{grid-template-columns:1fr}
  .list a{grid-template-columns:78px 50px 1fr;gap:12px}
  .ptitle{padding-top:56px;padding-bottom:34px}
  .ptitle h1{font-size:30px}
  .article{padding:52px 0 0}
  .article h1{font-size:29px}
  .body{font-size:16.5px}
  .tool-grid{grid-template-columns:1fr}
  .result{grid-template-columns:1fr;gap:20px}
  .fnav{flex-direction:column;gap:12px;align-items:flex-start}
}

/* 404 */
.e404{padding-top:110px;padding-bottom:150px;max-width:520px}
.e404 h1{font-family:var(--serif);font-size:40px;font-weight:400;line-height:1.3;letter-spacing:-.012em;margin-top:18px}
.e404 p{margin-top:16px;font-size:15px;color:var(--ink-2);line-height:1.85}
.e404-links{margin-top:34px;display:flex;gap:24px;font-family:var(--mono);font-size:11px;letter-spacing:.08em}
.e404-links a{color:var(--accent);border-bottom:1px solid transparent;padding-bottom:2px;transition:border-color .2s}
.e404-links a:hover{border-bottom-color:var(--accent)}

/* ==========================================================================
   旅游板块 · 立体专辑 + 横向时间线
   —— 封面是纯 CSS 生成的抽象画面，换成真实照片时替换 .art-* 的 background
   为 url(...) 即可，其余布局不用动。
   ========================================================================== */

body.tv-home{
  background-color:var(--bg);
  background-image:radial-gradient(120% 46% at 66% 0,#F6EFDF 0,rgba(250,249,245,0) 62%);
  background-repeat:no-repeat;
}

/* ---- 顶部：立体专辑 ---- */
.tv-hero{padding:40px 0 54px}
.tv-hero-in{display:grid;grid-template-columns:1fr 300px;gap:24px;align-items:center}
.tv-copy .eyebrow{margin-bottom:0}
.tv-copy h1{font-family:var(--serif);font-size:46px;font-weight:400;line-height:1.14;letter-spacing:-.015em;margin-top:16px}
.tv-lead{margin-top:16px;font-size:14.5px;line-height:1.9;color:var(--ink-2);max-width:298px}
.tv-stat{margin-top:24px;display:flex;gap:22px;align-items:baseline;font-family:var(--mono);font-size:9.5px;letter-spacing:.14em;color:var(--ink-3);text-transform:uppercase}
.tv-stat b{font-family:var(--serif);font-size:15px;font-weight:400;color:var(--ink);letter-spacing:0;margin-right:6px}

.tv-stage{position:relative;width:300px;height:286px;perspective:1100px;perspective-origin:44% 46%}
.deck{position:absolute;left:10px;top:30px;width:236px;height:236px;transform-style:preserve-3d;
  transform:rotateX(7deg) rotateY(20deg) rotateZ(-1.5deg);--sp:1;
  transition:transform .65s cubic-bezier(.22,.61,.36,1)}
.tv-stage:hover .deck{--sp:1.7;transform:rotateX(5deg) rotateY(16deg) rotateZ(-2.5deg)}

.sleeve{position:absolute;inset:0;border-radius:4px;overflow:hidden;
  box-shadow:0 18px 30px -20px rgba(31,30,29,.5),0 2px 5px rgba(31,30,29,.1);
  transform:translate3d(calc(var(--i) * 21px * var(--sp)),calc(var(--i) * -7px * var(--sp)),calc(var(--i) * -24px * var(--sp))) rotate(calc(var(--i) * 1.1deg));
  transition:transform .65s cubic-bezier(.22,.61,.36,1)}
.sleeve.front{overflow:visible;box-shadow:0 28px 44px -24px rgba(31,30,29,.5),0 3px 8px rgba(31,30,29,.14)}

/* 黑胶唱片：平时露出一点，悬停抽出 */
.vinyl{position:absolute;top:2%;left:0;width:96%;height:96%;border-radius:50%;
  transform:translateX(-20%);
  transition:transform .7s cubic-bezier(.22,.61,.36,1);
  background:
    radial-gradient(circle at 50% 50%,#B4553A 0 15.2%,#8E3D27 15.6% 16.6%,rgba(0,0,0,0) 17%),
    repeating-radial-gradient(circle at 50% 50%,#1D1B19 0 1.1px,#2A2724 1.1px 2.3px,#201E1B 2.3px 3.5px);
  box-shadow:0 12px 24px -12px rgba(31,30,29,.6),inset 0 0 0 1px rgba(255,255,255,.06)}
.vinyl::before{content:"";position:absolute;inset:0;border-radius:50%;
  background:conic-gradient(from 200deg,rgba(255,255,255,0),rgba(255,255,255,.13) 45deg,rgba(255,255,255,0) 95deg,rgba(255,255,255,.09) 235deg,rgba(255,255,255,0) 290deg)}
.vinyl::after{content:"";position:absolute;left:50%;top:50%;width:6.5%;height:6.5%;border-radius:50%;background:#F1EBDE;transform:translate(-50%,-50%)}
.tv-stage:hover .vinyl{transform:translateX(-36%) rotate(22deg)}

.tv-floor{position:absolute;left:4%;right:0;bottom:2px;height:20px;filter:blur(6px);
  background:radial-gradient(50% 50% at 50% 50%,rgba(31,30,29,.22),rgba(31,30,29,0) 74%)}

/* 封面画面（可替换为照片） */
.art{position:absolute;inset:0;border-radius:inherit;overflow:hidden}
.art::before{content:"";position:absolute;inset:0;
  box-shadow:inset 10px 0 16px -9px rgba(0,0,0,.55),inset 0 0 0 1px rgba(255,255,255,.13)}
.art::after{content:"";position:absolute;inset:0;opacity:.14;mix-blend-mode:multiply;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)'/%3E%3C/svg%3E")}

.art-1{background:radial-gradient(circle at 63% 54%,#F7D9B6 0 7.5%,rgba(247,217,182,0) 8%),
  linear-gradient(180deg,#2E2119 0%,#5E3727 30%,#AC5840 52%,#DD9573 69%,#8B4128 69.4%,#3A271D 100%)}
.art-2{background:radial-gradient(circle at 30% 42%,#F3E5C2 0 6.5%,rgba(243,229,194,0) 7%),
  linear-gradient(180deg,#39421F 0%,#55683A 32%,#8D9B5C 60%,#CFC98C 75%,#48542C 75.4%,#2B331D 100%)}
.art-3{background:radial-gradient(circle at 50% 39%,rgba(226,236,238,.5) 0 5%,rgba(226,236,238,0) 5.4%),
  linear-gradient(180deg,#25303A 0%,#3E5160 38%,#7E98A3 60%,#B3C3C4 67%,#2A3843 67.4%,#1A232A 100%)}
.art-4{background:radial-gradient(circle at 66% 30%,rgba(255,246,214,.5) 0 9%,rgba(255,246,214,0) 9.4%),
  linear-gradient(158deg,#D8B14A 0%,#C1922A 36%,#9C7520 60%,#63490F 100%)}
.art-5{background:linear-gradient(180deg,#7C5B58 0%,#A87F79 30%,#D3B3A6 56%,#E9D7C8 64%,#6B4A45 64.4%,#3E2B28 100%)}
.art-6{background:radial-gradient(circle at 70% 34%,rgba(201,100,66,.5) 0 11%,rgba(201,100,66,0) 11.4%),
  linear-gradient(180deg,#161514 0%,#292624 44%,#3D362F 70%,#201D1A 100%)}
.art-7{background:radial-gradient(circle at 44% 61%,rgba(240,238,220,.55) 0 6%,rgba(240,238,220,0) 6.4%),
  linear-gradient(180deg,#2B3A3C 0%,#41605C 30%,#7E9C8C 58%,#C6C9A8 66%,#384A45 66.4%,#1E2A28 100%)}

.print{position:absolute;left:11px;bottom:9px;z-index:2;font-family:var(--mono);font-size:9px;
  letter-spacing:.2em;text-transform:uppercase;color:rgba(255,255,255,.74);text-shadow:0 1px 3px rgba(0,0,0,.35)}

/* ---- 横向时间线 ---- */
.tv-band{border-top:1px solid var(--line);padding-bottom:6px}
.tv-band-head{display:flex;justify-content:space-between;align-items:baseline;padding-top:26px}
.tv-band-head h2{font-family:var(--serif);font-size:16px;font-weight:400;color:var(--ink-2);letter-spacing:.01em}
.tv-hint{font-family:var(--mono);font-size:9px;letter-spacing:.16em;color:var(--ink-3);text-transform:uppercase}

.track{
  overflow-x:auto;overflow-y:hidden;
  scroll-snap-type:x proximity;
  padding:32px max(32px,calc((100vw - 696px) / 2)) 44px;
  scroll-padding-left:max(32px,calc((100vw - 696px) / 2));
  cursor:grab;scrollbar-width:none;-ms-overflow-style:none;
}
.track::-webkit-scrollbar{display:none}
.track.dragging{cursor:grabbing;scroll-snap-type:none;user-select:none}
.track a{-webkit-user-drag:none}

.stops{--art:172px;list-style:none;display:flex;gap:30px;position:relative;width:max-content}
.stops::before{content:"";position:absolute;left:0;right:0;top:calc(var(--art) + 34px);height:1px;background:var(--line-2)}
.stops li{flex:none;width:var(--art);scroll-snap-align:start;perspective:820px}

.stop{display:flex;flex-direction:column;align-items:center;text-align:center}
.stop-art{display:block;position:relative;width:var(--art);height:var(--art);border-radius:4px;overflow:hidden;
  transform:rotateY(-9deg) rotateX(2deg);
  box-shadow:0 16px 26px -18px rgba(31,30,29,.55),0 1px 2px rgba(31,30,29,.12);
  transition:transform .45s cubic-bezier(.22,.61,.36,1),box-shadow .45s}
.stop-art .art::after{opacity:.1}
.stop:hover .stop-art{transform:rotateY(0) rotateX(0) translateY(-6px);
  box-shadow:0 24px 34px -20px rgba(31,30,29,.5),0 2px 4px rgba(31,30,29,.12)}
.stop-stem{width:1px;height:34px;background:var(--line-2)}
.stop-dot{display:block;width:7px;height:7px;border-radius:50%;background:var(--accent);
  margin:-4px auto 0;box-shadow:0 0 0 4px var(--bg);transition:transform .3s}
.stop:hover .stop-dot{transform:scale(1.35)}
.stop-date{display:block;margin-top:14px;font-family:var(--mono);font-size:10px;letter-spacing:.16em;color:var(--ink-3)}
.stop-name{display:block;margin-top:6px;font-family:var(--serif);font-size:17px;line-height:1.4;color:var(--ink)}
.stop-count{display:block;margin-top:3px;font-size:11px;color:var(--ink-3);letter-spacing:.02em}

/* ---- 地点详情 ---- */
.back{display:inline-block;margin-top:34px;font-family:var(--mono);font-size:10.5px;letter-spacing:.12em;color:var(--ink-3)}
.back:hover{color:var(--ink)}

.place{padding-top:40px}
.place-head{display:grid;grid-template-columns:248px 1fr;gap:36px;align-items:end}
.sleeve-flat{position:relative;width:100%;aspect-ratio:1;border-radius:4px;overflow:hidden;
  transform:rotate(-1.2deg);
  box-shadow:0 26px 40px -26px rgba(31,30,29,.55),0 2px 6px rgba(31,30,29,.12)}
.place-info h1{font-family:var(--serif);font-size:40px;font-weight:400;letter-spacing:-.012em;line-height:1.2;margin-top:14px}
.place-lead{margin-top:14px;font-size:15px;line-height:1.85;color:var(--ink-2);max-width:380px}
.facts{list-style:none;margin-top:22px;display:flex;flex-wrap:wrap;gap:9px 26px;
  font-family:var(--mono);font-size:11px;color:var(--ink-2)}
.facts li{display:flex;gap:8px;align-items:baseline}
.facts span{font-size:9px;letter-spacing:.14em;color:var(--ink-3);text-transform:uppercase}

.place-sec{padding-top:56px}
.place-sec .sec-h{margin-bottom:24px}
.prose{font-size:17px;line-height:1.9;max-width:600px}
.prose p{margin-bottom:1.35em}
.slot-p{border:1px dashed var(--line-2);border-radius:10px;padding:15px 17px;
  color:#A79F8F;font-size:13.5px;line-height:1.8}

.gal{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.gal figure{margin:0}
.gal .g-full{grid-column:1 / -1}
.shot{display:block;width:100%;position:relative;border:0;padding:0;margin:0;font:inherit;
  border-radius:6px;overflow:hidden;background:var(--bg-2);cursor:zoom-in;isolation:isolate}
.shot::after{content:"";position:absolute;inset:0;z-index:2;opacity:0;transition:opacity .3s;
  background:linear-gradient(180deg,rgba(0,0,0,0) 40%,rgba(0,0,0,.3))}
.shot:hover::after{opacity:1}
.shot:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.shot-16x9{aspect-ratio:16 / 9}
.shot-3x2{aspect-ratio:3 / 2}
.shot-1x1{aspect-ratio:1 / 1}
.gal figcaption{margin-top:9px;font-family:var(--mono);font-size:11px;color:var(--ink-3);letter-spacing:.03em}

.place-nav{display:grid;grid-template-columns:1fr 1fr;gap:16px;padding-top:64px}
.place-nav a{display:block;border-top:1px solid var(--line);padding-top:16px;transition:opacity .2s}
.place-nav a:hover{opacity:.6}
.place-nav .nx{text-align:right}
.place-nav span{display:block;font-family:var(--mono);font-size:9.5px;letter-spacing:.14em;color:var(--ink-3);text-transform:uppercase}
.place-nav b{display:block;margin-top:7px;font-family:var(--serif);font-size:17px;font-weight:400}
.place-nav a.off{opacity:.35;pointer-events:none}

/* ---- 灯箱 ---- */
.lb{position:fixed;inset:0;z-index:99;display:flex;align-items:center;justify-content:center;
  background:rgba(24,22,20,.93);opacity:0;visibility:hidden;transition:opacity .26s,visibility .26s}
.lb.on{opacity:1;visibility:visible}
.lb-stage{width:min(80vw,840px)}
.lb-art{position:relative;aspect-ratio:3 / 2;border-radius:4px;overflow:hidden;
  box-shadow:0 40px 80px -40px #000}
.lb-cap{margin-top:14px;text-align:center;font-family:var(--mono);font-size:11px;
  letter-spacing:.06em;color:rgba(255,255,255,.6);min-height:16px}
.lb button{background:none;border:0;padding:10px;cursor:pointer;color:rgba(255,255,255,.7);
  font-family:var(--sans);line-height:1;transition:color .2s}
.lb button:hover{color:#fff}
.lb-x{position:absolute;top:16px;right:20px;font-size:20px}
.lb-prev,.lb-next{position:absolute;top:50%;transform:translateY(-50%);font-size:26px}
.lb-prev{left:12px}
.lb-next{right:12px}

@media(max-width:680px){
  .tv-hero{padding:22px 0 34px}
  .tv-hero-in{grid-template-columns:1fr;gap:4px}
  .tv-copy h1{font-size:33px;margin-top:12px}
  .tv-lead{font-size:13.5px;max-width:none}
  .tv-stat{margin-top:18px}
  .tv-stage{width:100%;height:236px;perspective-origin:50% 46%;margin-top:8px}
  .deck{left:calc(50% - 92px);top:16px;width:184px;height:184px}
  .tv-floor{bottom:-4px}
  .track{padding:26px 22px 36px;scroll-padding-left:22px}
  .stops{--art:132px;gap:18px}
  .stop-name{font-size:15.5px}
  .place{padding-top:26px}
  .place-head{grid-template-columns:150px 1fr;gap:20px;align-items:center}
  .place-info h1{font-size:28px}
  .place-lead{font-size:13.5px;margin-top:10px}
  .facts{margin-top:14px;gap:6px 16px;font-size:10px}
  .place-sec{padding-top:40px}
  .prose{font-size:16px}
  .place-nav{grid-template-columns:1fr;gap:22px;padding-top:44px}
  .place-nav .nx{text-align:left}
  .lb-stage{width:88vw}
}

/* ==========================================================================
   旅游 · 足迹地图
   底图由 _geo/build_section.py 从 DataV 中国标准地图 GeoJSON 投影生成
   ========================================================================== */
.tm{margin-top:104px}
.tm-head{display:flex;align-items:baseline;justify-content:space-between;
  border-bottom:1px solid var(--line);padding-bottom:14px;margin-bottom:26px}
.tm-head h2{font-family:var(--serif);font-size:26px;font-weight:400;letter-spacing:.01em}
.tm-count{font-size:12.5px;color:var(--ink-3);letter-spacing:.06em}
.tm-count b{color:var(--accent);font-weight:500;margin-right:2px}

.tm-box{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);
  padding:14px 8px 8px;overflow:hidden}
.tm-svg{display:block;width:100%;height:auto}

.m-fill path{fill:#F1EDE2;stroke:none}
.m-prov path{fill:none;stroke:var(--line);stroke-width:.55}
.m-land path{fill:none;stroke:#CFC7B4;stroke-width:1}
.m-jd path{fill:none;stroke:#BDB39C;stroke-width:1.3}

.pin{cursor:pointer}
.pin-dot{fill:var(--accent);stroke:var(--bg);stroke-width:1.6;
  transition:r .18s ease}
.pin-halo{fill:var(--accent);opacity:0;transition:opacity .18s ease}
.pin-label{font-family:var(--sans);font-size:11px;fill:var(--ink-2);
  paint-order:stroke;stroke:var(--bg);stroke-width:3;stroke-linejoin:round;
  transition:fill .18s ease}
.pin-lead{stroke:var(--ink-3);stroke-width:.6;opacity:.5}
.pin:hover .pin-halo{opacity:.14}
.pin:hover .pin-dot{r:4.4}
.pin:hover .pin-label{fill:var(--accent)}

.tm-note{margin-top:12px;font-size:12px;color:var(--ink-3);letter-spacing:.04em}
.tm-list{display:none}

@media(max-width:640px){
  .tm{margin-top:64px}
  .tm-head h2{font-size:21px}
  .tm-box{padding:8px 4px 4px}
  .pin-label{display:none}
  .pin-dot{r:5}
  .pin-halo{r:15}
  .tm-note{display:none}
  .tm-list{display:block;margin-top:16px;border-top:1px solid var(--line)}
  .tm-list a{display:flex;align-items:baseline;gap:11px;padding:12px 2px;
    border-bottom:1px solid var(--line);transition:opacity .2s}
  .tm-list a:active{opacity:.55}
  .tm-list i{font-family:var(--mono);font-size:10px;font-style:normal;
    color:var(--ink-3);letter-spacing:.08em}
  .tm-list b{font-family:var(--serif);font-size:17px;font-weight:400}
  .tm-list em{font-style:normal;font-size:11.5px;color:var(--ink-3);
    margin-left:auto;letter-spacing:.06em}
}

/* ==========================================================================
   工作板块 · 编年史 + 随记
   —— 编年史：纵向时间线，按年分段，只渲染有事件的月份
   —— 随记：双列便签流，窄屏单列
   —— 两者都由 data/*.json 驱动，新增内容不用改 HTML
   ========================================================================== */

/* 栏目内切换 */
.subnav{display:flex;gap:8px;margin-top:24px}
.subnav a{font-size:13px;line-height:1;padding:9px 16px;border-radius:999px;
  border:1px solid var(--line);color:var(--ink-2);
  transition:border-color .2s,color .2s,background .2s}
.subnav a:hover{border-color:var(--line-2);color:var(--ink)}
.subnav a.on{background:var(--accent-soft);border-color:transparent;color:var(--accent);font-weight:500}

/* 编年史 */
.ch{padding:2px 0 92px}
.ch-year{padding-top:46px}
.ch-year:first-child{padding-top:0}

.ch-yhead{display:flex;align-items:baseline;justify-content:space-between;
  padding-bottom:14px;border-bottom:1px solid var(--line-2)}
.ch-yhead h2{font-family:var(--serif);font-size:30px;font-weight:400;
  line-height:1;letter-spacing:-.01em}
.ch-ycount{font-family:var(--mono);font-size:11px;color:var(--ink-3);letter-spacing:.06em}

.ch-month{display:grid;grid-template-columns:74px 1fr}
.ch-mlab{padding-top:19px;font-family:var(--mono);font-size:10px;color:var(--ink-3);
  letter-spacing:.08em;line-height:1.5}
.ch-mlab b{display:block;font-size:16px;font-weight:400;color:var(--ink);
  letter-spacing:0;line-height:1.1;margin-bottom:3px}

.ch-evs{border-left:1px solid var(--line-2);padding:24px 0 32px 30px}
.ch-month:last-child .ch-evs{padding-bottom:0}

.ch-ev{position:relative;padding-bottom:26px}
.ch-ev:last-child{padding-bottom:0}
.ch-ev::before{content:"";position:absolute;left:-35px;top:5px;width:9px;height:9px;
  border-radius:50%;background:var(--bg);border:1.5px solid var(--line-2);
  transition:border-color .18s,background .18s}
.ch-ev.is-link:hover::before{border-color:var(--accent);background:var(--accent)}

.ch-in{display:block}
a.ch-in:hover{opacity:.6}

.ch-ev-meta{display:flex;align-items:center;gap:10px;margin-bottom:8px;
  font-family:var(--mono);font-size:10.5px;letter-spacing:.06em;color:var(--ink-3)}
.ch-ev-meta i{font-style:normal;color:var(--accent)}
.ch-ev h3{font-family:var(--serif);font-size:18.5px;font-weight:400;
  line-height:1.5;letter-spacing:.004em}
.ch-ev p{margin-top:8px;font-size:13.5px;line-height:1.82;color:var(--ink-2);max-width:560px}
.ch-more{display:inline-block;margin-top:10px;font-size:10.5px;letter-spacing:.08em;color:var(--accent)}

/* 随记 */
.nt-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;
  align-items:start;padding:4px 0 88px}
.nt{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);
  padding:22px 22px 20px}
.nt time{display:block;font-family:var(--mono);font-size:10.5px;
  letter-spacing:.08em;color:var(--ink-3)}
.nt p{margin-top:13px;font-size:14.5px;line-height:1.88;white-space:pre-wrap}
.nt-tags{margin-top:15px;display:flex;flex-wrap:wrap;gap:6px}
.nt-tags span{font-size:10.5px;letter-spacing:.03em;color:var(--accent);
  background:var(--accent-soft);border-radius:999px;padding:3px 9px}

/* 加载与出错 */
.ch-state{padding:64px 0 96px;text-align:center;font-size:13.5px;
  line-height:2;color:var(--ink-3)}

/* 示例数据提示 */
.data-note{margin-top:28px;padding-top:16px;border-top:1px dashed var(--line);
  font-family:var(--mono);font-size:10.5px;letter-spacing:.06em;color:#B7B1A1}
.data-note b{font-weight:400;color:var(--ink-3)}

/* 上下条标题可能很长，截断而不是换行 */
.pager a{max-width:47%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

@media(max-width:680px){
  .subnav{margin-top:20px}
  .ch{padding-bottom:64px}
  .ch-year{padding-top:36px}
  .ch-yhead h2{font-size:25px}
  .ch-month{grid-template-columns:52px 1fr}
  .ch-mlab{padding-top:16px}
  .ch-mlab b{font-size:14px}
  .ch-evs{padding:20px 0 26px 20px}
  .ch-ev{padding-bottom:22px}
  .ch-ev::before{left:-24.5px;top:5px;width:8px;height:8px}
  .ch-ev h3{font-size:17px}
  .ch-ev p{font-size:13px}
  .nt-grid{grid-template-columns:1fr;gap:12px;padding-bottom:64px}
  .pager{flex-direction:column;gap:14px}
  .pager a{max-width:100%}
}

/* ==========================================================================
   首页 · 报头 + 最近
   ========================================================================== */
.home-hero{padding-top:84px;padding-bottom:66px}
/* 首页的页头不再重复 "Zico"：大报头已经承担了它 */
.home .nav .brand{visibility:hidden}
.mast{font-family:var(--serif);font-weight:400;font-size:66px;line-height:1;letter-spacing:-.025em}
.mast-sub{margin-top:22px;font-family:var(--mono);font-size:11.5px;letter-spacing:.24em;color:var(--ink-3)}
.mast-bio{margin-top:28px;max-width:29em;font-size:15.5px;line-height:1.95;color:var(--ink-2)}

.recent{margin-top:2px}
.rc{display:grid;grid-template-columns:86px 1fr auto;gap:18px;align-items:baseline;
  padding:19px 0;border-bottom:1px solid var(--line);transition:color .18s}
.rc time{font-family:var(--mono);font-size:11px;letter-spacing:.05em;color:var(--ink-3)}
.rc-body{display:block;min-width:0}
.rc b{display:block;font-family:var(--serif);font-size:17px;font-weight:400;line-height:1.55;
  transition:color .18s}
.rc p{margin-top:5px;font-size:13px;line-height:1.8;color:var(--ink-2)}
.rc.is-note b{font-family:var(--sans);font-size:14.5px;line-height:1.78;color:var(--ink-2)}
.rc em{font-style:normal;font-family:var(--mono);font-size:10px;letter-spacing:.1em;color:var(--ink-3);
  border:1px solid var(--line-2);border-radius:999px;padding:3px 8px;white-space:nowrap;transition:color .18s,border-color .18s}
.rc:hover b{color:var(--accent)}
.rc:hover em{color:var(--accent);border-color:var(--accent)}
.rc-empty{padding:30px 0 6px;font-size:13.5px;color:var(--ink-3);line-height:1.9}
.rc-note{margin-top:15px;font-family:var(--mono);font-size:10.5px;letter-spacing:.1em;color:#B7B1A1}

.home-entries{padding-bottom:84px}
.pad-b{padding-bottom:84px}
.card-desc{margin-top:10px;font-size:13px;line-height:1.8;color:var(--ink-3)}

/* 空白状态：不用虚线框，正式页面上只写一句话 */
.blank{padding:32px 0 10px;font-size:14px;line-height:2;color:var(--ink-3)}
.ptitle-sub{margin-top:16px;font-size:15px;line-height:1.9;color:var(--ink-2);max-width:32em}

@media(max-width:640px){
  .home-hero{padding-top:54px;padding-bottom:46px}
  .mast{font-size:44px}
  .mast-sub{font-size:10.5px;letter-spacing:.2em;margin-top:16px}
  .mast-bio{margin-top:20px;font-size:14.5px}
  .rc{grid-template-columns:1fr;gap:0;padding:16px 0}
  .rc time{display:block;margin-bottom:7px;font-size:10.5px}
  .rc em{display:none}
  .rc b{font-size:16.5px}
  .rc.is-note b{font-size:14px}
  .home-entries{padding-bottom:60px}
  .card-desc{font-size:12.5px}
}
