/* 城市月洞窗：江西 11 城首屏右侧字标展台（r22）
   层次（后→前）：竖排拼音描边字 → 虚线外环 + 坐标字环 + 环行小袋 → 月洞窗（山水线漂移）→ 字标（破窗而出）→ 行李牌 */
@media (min-width:1101px){
  .ph-city .ph-in{grid-template-columns:minmax(0,1.08fr) minmax(0,.92fr)}
  .ph-city h1{font-size:clamp(38px,5vw,84px)}
}
.cmark{--c:#141414;position:relative;width:100%;max-width:560px;justify-self:end;aspect-ratio:1;--rx:0deg;--ry:0deg;--mx:0;--my:0}
.cm-stage{position:absolute;inset:0;transform:perspective(1000px) rotateX(var(--rx)) rotateY(var(--ry));transform-style:preserve-3d;transition:transform .6s cubic-bezier(.2,.8,.2,1)}

/* 背景：竖排城市拼音，描边空心字，缓慢上行 */
.cm-pin{position:absolute;top:-30%;bottom:-30%;right:-9%;width:1.1em;font:900 clamp(90px,9vw,150px)/1 var(--sans);overflow:hidden;pointer-events:none;
  -webkit-mask-image:linear-gradient(180deg,transparent,#000 22%,#000 78%,transparent);mask-image:linear-gradient(180deg,transparent,#000 22%,#000 78%,transparent)}
.cm-pin span{display:block;writing-mode:vertical-rl;letter-spacing:.06em;color:transparent;-webkit-text-stroke:1.5px rgba(20,20,20,.22);padding-bottom:.4em;animation:cm-up 28s linear infinite}
@keyframes cm-up{to{transform:translateY(-100%)}}

/* 外环：虚线 + 坐标字环（慢转）+ 环行的小袋子（袋走城市） */
.cm-ring{position:absolute;inset:0;width:100%;height:100%;overflow:visible}
.cm-dash{fill:none;stroke:var(--ink);stroke-width:1.5;stroke-dasharray:2 7;stroke-linecap:round;opacity:.7}
.cm-turn{transform-origin:200px 200px;animation:cm-spin 90s linear infinite}
.cm-ring text{font:700 12.5px/1 var(--sans);letter-spacing:.08em;fill:var(--ink)}
.cm-bag{transform-origin:200px 200px;animation:cm-spin 16s linear infinite}
@keyframes cm-spin{to{transform:rotate(360deg)}}

/* 月洞窗：米白圆窗、墨线描边、硬投影；里面是城市主色的山水线 */
.cm-moon{position:absolute;inset:9.5%;border-radius:50%;background:#fffbe6;border:2px solid var(--ink);box-shadow:10px 10px 0 var(--ink);overflow:hidden;
  transform:translateZ(0);animation:cm-open 1s cubic-bezier(.2,.8,.2,1) both}
.cm-moon::after{content:"";position:absolute;inset:7%;border-radius:50%;border:1px solid color-mix(in srgb,var(--c) 30%,transparent)}
.cm-wave{position:absolute;inset:0;width:100%;height:100%}
.cm-flow{animation:cm-flow 22s linear infinite}
.cm-hill{fill:color-mix(in srgb,var(--c) 12%,transparent)}
@keyframes cm-flow{to{transform:translateX(-600px)}}
@keyframes cm-open{from{clip-path:circle(0% at 50% 50%);transform:scale(.9)}to{clip-path:circle(75% at 50% 50%);transform:none}}

/* 字标：比圆窗更宽，两端破窗而出；进场像毛笔从左到右写出，之后轻轻浮动，鼠标移动时浮在最前层 */
.cm-logo{position:absolute;left:2%;top:50%;width:96%;height:auto;transform:translateZ(70px) translate(calc(var(--mx) * 14px),calc(var(--my) * 10px));
  filter:drop-shadow(0 14px 18px rgba(20,20,20,.16));
  -webkit-mask-image:linear-gradient(100deg,#000 45%,transparent 55%);mask-image:linear-gradient(100deg,#000 45%,transparent 55%);
  -webkit-mask-size:260% 100%;mask-size:260% 100%;-webkit-mask-position:100% 0;mask-position:100% 0;
  animation:cm-ink 1.5s .45s cubic-bezier(.6,.1,.3,1) forwards,cm-float 6s 2s ease-in-out infinite}
@keyframes cm-ink{to{-webkit-mask-position:0 0;mask-position:0 0}}
@keyframes cm-float{50%{translate:0 -8px}}

/* 行李牌：挂在圆窗左下沿外，绳子从窗沿垂下，轻轻摆动；放在字标下方不挡字 */
.cm-tag{position:absolute;left:5%;bottom:-5%;transform:translateZ(90px);transform-origin:50% -26px;background:var(--ink);color:var(--paper);border-radius:6px 6px 12px 12px;
  padding:16px 16px 12px;min-width:132px;max-width:46%;box-shadow:5px 5px 0 rgba(20,20,20,.18);animation:cm-drop .8s 1.2s cubic-bezier(.3,1.4,.5,1) both,cm-swing 5s 2s ease-in-out infinite}
.cm-tag::before{content:"";position:absolute;top:7px;left:50%;width:9px;height:9px;margin-left:-4.5px;border-radius:50%;background:#fffbe6;box-shadow:inset 0 0 0 2px var(--ink)}
.cm-tag::after{content:"";position:absolute;bottom:100%;left:50%;width:2px;height:26px;margin-left:-1px;background:var(--ink)}
.cm-tag small{display:block;margin-top:4px;font-size:11px;letter-spacing:.2em;color:var(--yellow)}
.cm-tag b{display:block;font:900 22px/1.25 var(--song);margin:2px 0}
.cm-tag span{display:block;font-size:12.5px;line-height:1.5;color:rgba(255,255,255,.78)}
@keyframes cm-drop{from{opacity:0;translate:0 -24px}to{opacity:1;translate:0 0}}
@keyframes cm-swing{0%,100%{rotate:-3deg}50%{rotate:2.5deg}}

/* 悬停：圆窗里的水流加快，提示可以“走进这座城” */
.cmark:hover .cm-flow{animation-duration:9s}

/* 窄屏：展台排到文字下面，居中；去掉竖排拼音 */
@media (max-width:1100px){
  .cmark{justify-self:center;max-width:440px;margin:clamp(28px,5vw,44px) 0 40px}
  .cm-pin{display:none}
}
@media (max-width:680px){
  .cmark{max-width:340px}
  .cm-moon{box-shadow:7px 7px 0 var(--ink)}
  .cm-ring text{font-size:14px}
  .cm-tag{padding:14px 12px 10px;min-width:112px}
  .cm-tag b{font-size:18px}
  .cm-tag span{font-size:11.5px}
}
/* 站点所有者要求：减少动态效果时只停视差（鼠标倾斜），其余动效照常 */
@media (prefers-reduced-motion:reduce){.cm-stage{transform:none}}

/* ───────── r23 城市邮票：文章页、文章列表页首屏右侧 ─────────
   齿孔边 = 背景上一排透明圆点（圆心落在纸边上），里层实色盖住中间；右上叠一枚城市邮戳 */
.cs-paper{display:block;padding:9px;background:radial-gradient(circle,transparent 4.2px,#fff 4.8px) -7px -7px/14px 14px;filter:drop-shadow(0 10px 14px rgba(20,20,20,.18)) drop-shadow(0 1px 1px rgba(20,20,20,.25))}
.cs-in{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;aspect-ratio:4/5;padding:12% 8% 9%;background:#fffbe6;box-shadow:inset 0 0 0 3px var(--c),inset 0 0 0 6px #fffbe6,inset 0 0 0 7px color-mix(in srgb,var(--c) 45%,transparent)}
.cs-logo{display:block;width:100%;height:auto;max-height:70%;object-fit:contain}
.cs-cap{font:700 11px/1.2 var(--sans);letter-spacing:.14em;color:var(--c);white-space:nowrap}
.cstamp{position:absolute;z-index:2;right:max(5vw,calc((100vw - 1280px) / 2 + 20px));top:62%;width:clamp(150px,14vw,210px);margin-top:calc(clamp(150px,14vw,210px) * -.62);
  rotate:-5deg;text-decoration:none;color:var(--ink);animation:cs-slam .55s .25s cubic-bezier(.3,1.5,.5,1) both;transition:rotate .35s,translate .35s}
.cstamp:hover{rotate:0deg;translate:0 -6px}
.cs-post{position:absolute;right:-30%;top:-14%;width:105%;height:auto;color:rgba(20,20,20,.78);mix-blend-mode:multiply;rotate:-14deg;pointer-events:none;
  animation:cs-ink .45s .85s cubic-bezier(.3,1.4,.5,1) both;transition:rotate .5s}
.cstamp:hover .cs-post{rotate:-4deg}
.cs-pt{font:700 9px/1 var(--sans);letter-spacing:.1em;fill:currentColor}
.cs-pn{font:900 19px/1 var(--song);fill:currentColor}
@keyframes cs-slam{from{opacity:0;scale:1.35;rotate:-16deg}to{opacity:1;scale:1;rotate:-5deg}}
@keyframes cs-ink{from{opacity:0;scale:1.25}to{opacity:1;scale:1}}
@media (min-width:1101px){
  .ph-art.has-stamp .art-head{padding-right:clamp(0px,calc(100vw - 1180px),230px)}
  .ph-small.has-stamp .ph-txt{max-width:calc(100% - 260px)}
}
/* 窄屏：文章页缩成作者行右侧的小邮票；列表页排在导语下方 */
@media (max-width:1100px){
  .ph-art.has-stamp .art-head{position:relative}
  .ph-art.has-stamp .byline{padding-right:96px}
  .ph-art .cstamp{right:22px;top:auto;bottom:-4px;margin:0;width:78px}
  .cstamp .cs-post{right:-22%;top:-18%;width:90%}
  .ph-small .cstamp{position:relative;right:auto;top:auto;display:block;margin:26px 0 0 6px;width:118px}
  .cstamp .cs-cap{display:none}
  .cs-paper{padding:6px;background-size:10px 10px;background-position:-5px -5px;background-image:radial-gradient(circle,transparent 3px,#fff 3.5px)}
  .cs-in{gap:0;padding:10% 8%}
}

/* ───────── r23 城市汇总页：11 扇月洞窗 ───────── */
.chubs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(16px,2vw,28px)}
.chub{display:grid;grid-template-rows:auto 1fr;border:2px solid var(--ink);border-radius:22px;background:var(--paper);color:var(--ink);text-decoration:none;overflow:hidden;
  box-shadow:6px 6px 0 var(--ink);transition:translate .3s,box-shadow .3s}
.chub:hover{translate:-3px -3px;box-shadow:9px 9px 0 var(--ink)}
.ch-win{position:relative;display:block;aspect-ratio:16/10;background:color-mix(in srgb,var(--c) 9%,#fffbe6);border-bottom:2px solid var(--ink)}
.ch-moon{position:absolute;left:50%;top:50%;height:82%;aspect-ratio:1;translate:-50% -50%;border-radius:50%;background:#fffbe6;border:2px solid var(--ink);overflow:hidden}
.ch-logo{position:absolute;left:8%;top:50%;width:84%;height:72%;object-fit:contain;translate:0 -50%;filter:drop-shadow(0 8px 10px rgba(20,20,20,.14));transition:scale .4s cubic-bezier(.2,.8,.2,1)}
.chub:hover .ch-logo{scale:1.06}
.chub:hover .cm-flow{animation-duration:8s}
.ch-txt{display:flex;flex-direction:column;gap:4px;padding:18px 22px 20px}
.ch-txt small{font-size:12px;font-weight:800;letter-spacing:.16em;color:var(--c)}
.ch-txt b{font:900 26px/1.2 var(--song)}
.ch-desc{font-size:14px;color:var(--grey)}
.ch-go{margin-top:auto;padding-top:10px;font-size:14px;font-weight:700}
@media (max-width:1100px){.chubs{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:680px){.ch-txt{padding:12px 14px 14px}.ch-txt b{font-size:20px}.ch-desc{display:none}.chub{border-radius:16px;box-shadow:4px 4px 0 var(--ink)}}

/* ───────── r23 城市首页底部“江西其他城市”：一排小邮票 ───────── */
.cminis{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:clamp(14px,2vw,30px) clamp(12px,1.6vw,24px)}
.cmini{display:flex;flex-direction:column;align-items:center;gap:10px;text-decoration:none;color:var(--ink)}
.cmini .cs-paper{width:100%;max-width:170px;transition:rotate .35s,translate .35s}
.cmini:nth-child(odd) .cs-paper{rotate:-2deg}.cmini:nth-child(even) .cs-paper{rotate:2deg}
.cmini:hover .cs-paper{rotate:0deg;translate:0 -6px}
.cmini .cs-in{aspect-ratio:5/4;padding:10% 10%}
.cmini b{font:900 18px/1.2 var(--song)}
@media (max-width:680px){.cminis{display:flex;flex-wrap:wrap;justify-content:center}.cmini{width:calc((100% - 24px) / 3)}.cmini b{font-size:15px}
  .cmini .cs-paper{padding:6px;background-size:10px 10px;background-position:-5px -5px;background-image:radial-gradient(circle,transparent 3px,#fff 3.5px)}}

/* 首屏右侧已有照片的页面（南昌影视拍摄）：邮票贴在照片右下角 */
.ph-split.has-stamp .ph-pic{position:relative;overflow:visible}
.ph-pic .cstamp{right:-14px;top:auto;bottom:-34px;margin:0;width:clamp(110px,10vw,150px)}
@media (max-width:1100px){.ph-pic .cstamp{position:absolute;right:16px;bottom:-26px;width:96px}}

/* r26 城市站价格卡 5 档（含年度战略合作） */
.cards.c5{grid-template-columns:repeat(5,minmax(0,1fr))}
@media (max-width:1100px){.cards.c5{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:680px){.cards.c5{grid-template-columns:repeat(2,minmax(0,1fr))}}
