/* ======== 暗色系主题（Spatial Glass · 仅暗色） ======== */
:root{
  --bg:#0D0A08;--bg-2:#171210;--bg-3:#221C16;
  --glass:rgba(255,255,255,0.05);--glass-hover:rgba(255,255,255,0.10);
  --glass-border:rgba(255,255,255,0.10);--glass-blur:blur(28px) saturate(160%);
  --text:#F5F0E8;--text-soft:#C8BDA8;--text-faint:#8A7A5E;
  --earth:#C08A3E;--earth-deep:#D4A24A;--olive:#6E7B4B;--olive-deep:#7D8E56;
  --ochre:#A8552E;--beige:rgba(192,138,62,0.15);--line:rgba(255,255,255,0.08);
  --card:rgba(255,255,255,0.05);--shadow:0 8px 32px rgba(0,0,0,.40),inset 0 1px 0 rgba(255,255,255,0.05);
  --hl:#E8823A;
  --dim0:#C44D3C;--dim1:#C9A96E;--dim2:#B43B25;--dim3:#5F7D4A;--dim4:#E8823A;--dim5:#1C4E6F;
  --glass-alt:rgba(255,255,255,0.03);
}
*{box-sizing:border-box;margin:0;padding:0}
body{background:var(--bg);color:var(--text);font-family:"PingFang SC","Microsoft YaHei","Segoe UI",system-ui,sans-serif;line-height:1.7;-webkit-font-smoothing:antialiased}
.wrap{max-width:1080px;margin:0 auto;padding:0 22px}
h1,h2,h3,.serif{font-family:"Songti SC","STSong","SimSun",Georgia,serif}
a{color:var(--earth);text-decoration:none}
/* === 玻璃面板通用 === */
.glass{background:var(--glass);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--glass-border);box-shadow:var(--shadow)}
.glass-panel{background:var(--glass);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--glass-border);border-radius:16px;padding:20px;box-shadow:var(--shadow);transition:background .3s}
.glass-panel:hover{background:var(--glass-hover)}
@supports not (backdrop-filter:blur(1px)){.glass,.glass-panel{background:var(--bg-2)}}
/* NAV */
.topnav{position:sticky;top:0;z-index:50;background:var(--glass);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border-bottom:1px solid var(--glass-border);transition:background .3s}
.topnav .wrap{display:flex;align-items:center;gap:18px;height:54px;flex-wrap:wrap}
.topnav .brand{font-family:"Songti SC",serif;font-weight:800;color:var(--earth);font-size:17px}
.topnav .links{display:flex;gap:14px;flex-wrap:wrap;margin-left:auto;font-size:14px;align-items:center}
.topnav .links a{padding:4px 10px;border-radius:20px;color:var(--text-soft);transition:all .2s}
.topnav .links a:hover,.topnav .links a.cur{background:var(--beige);color:var(--text)}
.topnav select{font:inherit;font-size:13px;padding:3px 24px 3px 8px;border:1px solid var(--glass-border);border-radius:8px;background:#1a1510;color:#F5F0E8;appearance:auto;-webkit-appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23C8BDA8'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center}
.topnav select option{background:#1a1510;color:#F5F0E8;padding:4px 8px}
/* HERO */
.hero{position:relative;min-height:74vh;display:flex;align-items:flex-end;background:#0A0705 center/cover no-repeat}
.hero::before{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(0,0,0,.20) 0%,rgba(0,0,0,.45) 45%,rgba(0,0,0,.78) 100%);z-index:1}
.hero .wrap{position:relative;z-index:2;padding-top:60px;padding-bottom:52px;color:var(--text)}
.hero .kicker{color:var(--earth);letter-spacing:.18em;font-size:13px;margin-bottom:14px}
.hero h1{font-size:clamp(30px,5.4vw,56px);color:var(--text);padding:0 0 22px;text-shadow:0 2px 18px rgba(0,0,0,.45);font-weight:700;letter-spacing:.02em}
.hero .sub{font-size:clamp(15px,2.1vw,20px);max-width:720px;color:var(--text-soft);opacity:.95;margin-bottom:10px}
.hero-stats{display:flex;flex-wrap:wrap;gap:14px;margin-top:26px}
.hero-stat{flex:1 1 140px;background:var(--glass-alt);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--glass-border);border-radius:12px;padding:14px 16px;box-shadow:var(--shadow);transition:background .3s}
.hero-stat .v{font-size:clamp(20px,2.6vw,30px);font-weight:800;color:var(--earth);font-family:"Songti SC",serif}
.hero-stat .l{font-size:12.5px;color:var(--text-faint);opacity:.9;margin-top:2px}
/* HYPERFRAMES HERO (cinematic intro composition) */
.hf-hero{position:relative;width:100%;height:100vh;min-height:600px;background:#16120c;overflow:hidden}
.hf-frame{position:absolute;inset:0;width:100%;height:100%;border:0;display:block}
.scroll-cue{position:absolute;left:50%;bottom:18px;transform:translateX(-50%);color:var(--text-faint);font-size:12px;letter-spacing:.3em;opacity:.7;z-index:2}
/* SECTIONS */
section{padding:54px 0}
.sec-head{display:flex;align-items:baseline;gap:14px}
.sec-num{font-family:"Songti SC",serif;font-size:34px;color:var(--earth);font-weight:700;line-height:1;opacity:.7}
.sec-head h2{font-size:clamp(22px,3.2vw,30px);color:var(--text)}
.divider{height:3px;width:64px;background:linear-gradient(90deg,var(--earth),var(--olive));border-radius:3px;margin:16px 0 0}
.sec-sub{color:var(--text-soft);font-size:14.5px;margin-top:10px}
.lead{font-size:16.5px;color:var(--text-soft);max-width:820px}
.lead strong{color:var(--earth-deep)}
/* COMPOSITE + RADAR（玻璃面板） */
.composite{display:flex;align-items:center;gap:22px;background:var(--glass);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--glass-border);border-radius:16px;padding:22px 26px;margin-bottom:22px;box-shadow:var(--shadow)}
.composite .big{font-family:"Songti SC",serif;font-size:58px;font-weight:800;color:var(--earth);line-height:1}
.composite .meta{font-size:14px;color:var(--text-soft)}
.composite .meta b{color:var(--earth-deep)}
.radar-grid{display:grid;grid-template-columns:minmax(280px,380px) 1fr;gap:30px;align-items:center}
.radar-box{background:var(--glass);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--glass-border);border-radius:16px;padding:14px;box-shadow:var(--shadow);display:flex;justify-content:center;position:relative}
.radar-box.hl{box-shadow:0 0 0 3px var(--hl),var(--shadow)}
.dim-list{list-style:none}
.dim-list li{display:flex;align-items:center;gap:12px;margin:11px 0;cursor:default;background:var(--glass-alt);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--glass-border);border-radius:10px;padding:6px 12px;transition:background .3s}
.dim-list .name{flex:0 0 86px;font-size:14px;color:var(--text)}
.dim-list .bar{flex:1;height:12px;background:rgba(255,255,255,0.08);border-radius:6px;overflow:hidden}
.dim-list .bar i{display:block;height:100%;border-radius:6px;background:linear-gradient(90deg,var(--olive),var(--earth))}
.dim-list .val{flex:0 0 42px;text-align:right;font-weight:700;color:var(--earth-deep);font-family:"Songti SC",serif}
.note-model{display:inline-block;font-size:11px;background:rgba(255,255,255,0.08);color:var(--text-faint);border:1px solid var(--glass-border);border-radius:10px;padding:1px 7px;margin-left:6px;vertical-align:middle}
/* DIM FILTER (维度筛选) */
.dim-filter{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:6px 0 4px}
.dim-filter .lbl{font-size:13px;color:var(--text-soft);margin-right:4px}
.chip{font-size:13px;padding:5px 12px;border:1px solid var(--glass-border);border-radius:20px;background:var(--glass);color:var(--text-soft);cursor:pointer;user-select:none;transition:.15s;backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur)}
.chip[aria-pressed="true"]{background:var(--earth);color:#fff;border-color:var(--earth)}
.chip[data-idx="0"][aria-pressed="true"]{background:var(--dim0);border-color:var(--dim0)}
.chip[data-idx="1"][aria-pressed="true"]{background:var(--dim1);border-color:var(--dim1);color:var(--ink,#36291C)}
.chip[data-idx="2"][aria-pressed="true"]{background:var(--dim2);border-color:var(--dim2)}
.chip[data-idx="3"][aria-pressed="true"]{background:var(--dim3);border-color:var(--dim3)}
.chip[data-idx="4"][aria-pressed="true"]{background:var(--dim4);border-color:var(--dim4)}
.chip[data-idx="5"][aria-pressed="true"]{background:var(--dim5);border-color:var(--dim5)}
.chip:focus-visible{outline:2px solid var(--earth-deep);outline-offset:2px}
/* FEATURE（玻璃面板） */
.feature{display:grid;grid-template-columns:1fr 1fr;gap:26px;align-items:center;margin-top:26px}
.feature.alt{direction:rtl}.feature.alt>*{direction:ltr}
.feature .fig{background:linear-gradient(160deg,#3D2B1A,#1A1510);border-radius:16px;aspect-ratio:4/3;position:relative;overflow:hidden;box-shadow:var(--shadow);border:1px solid var(--glass-border)}
.feature .fig svg,.feature .fig canvas{position:absolute;inset:0;width:100%;height:100%}
.feature h3{font-size:21px;color:var(--text);margin-bottom:8px}
.feature p{color:var(--text-soft);font-size:15px;margin-bottom:14px}
.stat-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.stat{background:var(--glass);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--glass-border);border-radius:12px;padding:14px;box-shadow:var(--shadow)}

/* ---------- 名片（产业 / 文化） ---------- */
.namecard-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin-top:6px}
.namecard{background:var(--glass);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--glass-border);border-radius:14px;padding:14px 16px;box-shadow:var(--shadow);position:relative;overflow:hidden}
.namecard::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:linear-gradient(180deg,var(--accent),#E0A85B)}
.nc-top{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.nc-rank{font-size:14px;color:var(--accent);font-weight:700}
.nc-tag{font-size:11px;color:#F0D9A8;background:rgba(224,168,91,.14);border:1px solid rgba(224,168,91,.3);border-radius:20px;padding:2px 9px}
.nc-title{font-size:15px;font-weight:700;color:var(--text);line-height:1.35;margin-bottom:4px}
.nc-desc{font-size:13px;color:var(--text-soft);line-height:1.55}
.nc-bar{margin-top:10px;height:4px;border-radius:4px;background:rgba(255,255,255,.12);overflow:hidden}
.nc-bar>i{display:block;height:100%;border-radius:4px;background:linear-gradient(90deg,var(--accent),#E0A85B)}

/* ---------- 文化记忆富详情面板 ---------- */
.cultural-tag-detail{display:none;margin:8px 0 4px;border-radius:14px;overflow:hidden;background:var(--bg-2);border:1px solid var(--glass-border);box-shadow:var(--shadow)}
.cultural-tag-detail.open{display:flex;gap:0;animation:ctdIn .25s ease}
@keyframes ctdIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.ctd-fig{position:relative;flex:0 0 160px;min-height:120px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;border-radius:12px 0 0 12px;overflow:hidden}
.ctd-fig img{width:100%;height:100%;object-fit:cover;display:block}
.ctd-cat-overlay{position:absolute;left:10px;bottom:8px;z-index:2}
.ctd-emoji{font-size:42px;line-height:1;filter:drop-shadow(0 2px 6px rgba(0,0,0,.35))}
.ctd-cat{font-size:12px;color:#fff;background:rgba(0,0,0,.28);border-radius:20px;padding:2px 10px;font-weight:600}
.ctd-body{flex:1;padding:14px 16px;min-width:0}
.ctd-title{font-size:16px;font-weight:700;color:var(--text);margin-bottom:6px}
.ctd-short{font-size:14px;color:var(--text);line-height:1.6;margin:0 0 8px}
.ctd-long{font-size:13px;color:var(--text-soft);line-height:1.7;margin:0;border-top:1px solid var(--glass-border);padding-top:8px}

/* ---------- 留言板 ---------- */
.msg-board{background:var(--glass);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--glass-border);border-radius:16px;padding:18px;box-shadow:var(--shadow)}
.msg-form{display:flex;flex-direction:column;gap:10px}
.msg-name{background:var(--bg-2);border:1px solid var(--glass-border);border-radius:10px;padding:9px 12px;color:var(--text);font-size:14px;outline:none}
.msg-text{background:var(--bg-2);border:1px solid var(--glass-border);border-radius:10px;padding:10px 12px;color:var(--text);font-size:14px;min-height:72px;resize:vertical;outline:none;font-family:inherit}
.msg-name:focus,.msg-text:focus{border-color:var(--accent)}
.msg-send{align-self:flex-end;background:linear-gradient(135deg,var(--accent),#E0A85B);color:#fff;border:none;border-radius:10px;padding:9px 22px;font-size:14px;font-weight:600;cursor:pointer;transition:.15s}
.msg-send:hover{filter:brightness(1.08)}
.msg-hint{font-size:12px;color:var(--text-faint);margin:10px 0 0}
.msg-list{list-style:none;padding:0;margin:14px 0 0;display:flex;flex-direction:column;gap:10px}
.msg-item{background:var(--bg-2);border:1px solid var(--glass-border);border-radius:12px;padding:12px 14px}
.msg-meta{display:flex;justify-content:space-between;align-items:center;margin-bottom:5px}
.msg-author{font-size:13px;font-weight:700;color:var(--accent)}
.msg-time{font-size:11px;color:var(--text-faint)}
.msg-body{font-size:14px;color:var(--text);line-height:1.6;margin:0;white-space:pre-wrap;word-break:break-word}
.msg-empty{text-align:center;color:var(--text-faint);font-size:13px;padding:18px 0}
.stat .v{font-family:"Songti SC",serif;font-size:24px;font-weight:800;color:var(--earth)}
.stat .l{font-size:12.5px;color:var(--text-soft);margin-top:3px}
/* CHARTS 玻璃 */
.chart-card{background:var(--glass);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--glass-border);border-radius:16px;padding:20px;margin-top:20px;box-shadow:var(--shadow)}
.chart-card h3{font-size:18px;color:var(--text)}
.chart-card .cap{font-size:13px;color:var(--text-faint);margin:6px 0 10px}
/* 横向条形图 SVG：显式尺寸，避免依赖浏览器默认导致的高度塌陷 */
#hbarCity,#hbarTown{width:100%;height:auto;display:block}
/* 对比表 (.dim-table) */
.dim-table{width:100%;border-collapse:collapse;font-size:14px;line-height:1.6;overflow:hidden;border-radius:12px;background:var(--glass-alt);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur)}
.dim-table th,.dim-table td{padding:10px 12px;text-align:center;border-bottom:1px solid var(--glass-border)}
.dim-table thead tr{border-bottom:2px solid var(--earth)}
.dim-table td:first-child,.dim-table th:first-child{text-align:left;font-weight:600;padding-left:16px}
.dim-table td:last-child,.dim-table th:last-child{font-weight:700;color:var(--earth)}
.dim-table tbody tr:nth-child(odd){background:rgba(255,255,255,0.03)}
.dim-table tbody tr:nth-child(even){background:rgba(255,255,255,0.06)}
.dim-table tbody tr:hover{background:rgba(192,138,62,0.12)}
/* In-cell 数据条 */
.cell-bar{height:4px;border-radius:3px;margin-top:6px;opacity:.65;box-shadow:0 0 6px rgba(0,0,0,.15)}
/* PUBLIC SERVICE */
.cov{margin-top:18px;display:grid;gap:12px}
.cov .row{background:var(--glass);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--glass-border);border-radius:10px;padding:12px 16px;box-shadow:var(--shadow)}
.cov .top{display:flex;justify-content:space-between;font-size:14.5px;color:var(--text)}
.cov .top .p{font-family:"Songti SC",serif;font-weight:800;color:var(--earth)}
.cov .track{height:9px;background:rgba(255,255,255,0.08);border-radius:6px;margin-top:8px;overflow:hidden}
.cov .track i{display:block;height:100%;border-radius:6px;background:linear-gradient(90deg,var(--olive),var(--earth))}
/* CARDS 玻璃 */
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:16px;margin-top:18px}
.card{background:var(--glass);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--glass-border);border-radius:14px;padding:18px;box-shadow:var(--shadow);position:relative}
.card .step{position:absolute;top:14px;right:18px;font-family:"Songti SC",serif;font-size:22px;color:var(--text-faint);font-weight:800}
.card h4{font-size:16.5px;color:var(--earth);margin-bottom:6px;padding-right:34px}
.card p{font-size:13.5px;color:var(--text-soft)}
.card.hl{box-shadow:0 0 0 3px var(--hl),var(--shadow);animation:pop .6s ease}
@keyframes pop{0%{transform:scale(.97)}100%{transform:scale(1)}}
/* INSIGHT (AI 摘要) 玻璃 */
.insight{background:var(--glass);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--earth);border-left:6px solid var(--earth);border-radius:16px;padding:20px 24px;margin-top:18px;box-shadow:var(--shadow)}
.insight .tag{display:inline-block;font-size:12px;font-weight:700;color:#fff;background:var(--earth);border-radius:20px;padding:3px 12px;margin-bottom:10px;letter-spacing:.05em}
.insight p{font-size:16px;color:var(--text);margin:0}
.insight b{color:var(--earth-deep)}
.insight .weak{color:var(--ochre);font-weight:700}
/* CITY GRID 玻璃 */
.city-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:20px;margin-top:22px}
.city-card{background:var(--glass);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--glass-border);border-radius:16px;overflow:hidden;box-shadow:var(--shadow);transition:transform .15s}
.city-card:hover{transform:translateY(-4px);background:var(--glass-hover)}
.city-card.hl{box-shadow:0 0 0 3px var(--hl),var(--shadow);animation:pop .6s ease}
.city-card .ch{height:120px;background:linear-gradient(135deg,var(--earth),var(--ochre));position:relative}
.city-card .ch .t{position:absolute;left:18px;bottom:12px;color:#fff;font-family:"Songti SC",serif;font-size:24px;font-weight:800;text-shadow:0 2px 10px rgba(0,0,0,.5)}
.city-card .cb{padding:16px 18px}
.city-card .cb .row{display:flex;justify-content:space-between;font-size:13.5px;color:var(--text-soft);padding:5px 0;border-bottom:1px dashed var(--glass-border)}
.city-card .cb .row b{color:var(--earth);font-family:"Songti SC",serif}
.city-card .more{display:inline-block;margin-top:12px;font-size:14px;color:#fff;background:var(--earth);padding:7px 16px;border-radius:20px}
/* 编者按 */
.editorial{margin-top:18px}
.editorial .lead{font-size:17px;line-height:1.9}
/* Top3 卡片徽标 */
.top-card .ch .rank{position:absolute;right:14px;top:12px;background:rgba(0,0,0,.35);color:#FFD98A;font-size:13px;font-weight:700;padding:3px 10px;border-radius:14px;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);font-family:inherit;letter-spacing:.03em}
/* 浮动 测算 LEGEND 玻璃 */
.fmodel{position:fixed;right:52px;bottom:18px;z-index:60;background:var(--glass);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--glass-border);border-radius:12px;padding:10px 14px;box-shadow:var(--shadow);font-size:12.5px;color:var(--text-soft);max-width:240px;display:none}
.fmodel.show{display:block}
/* 潮汕近期动态 新闻卡片 */
.news-grid{grid-template-columns:repeat(auto-fill,minmax(320px,1fr))}
.news-card{display:block;background:var(--glass);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--glass-border);border-radius:16px;padding:18px 20px;box-shadow:var(--shadow);transition:transform .15s,border-color .15s;text-decoration:none;color:inherit}
.news-card:hover{transform:translateY(-4px);border-color:var(--hl);background:var(--glass-hover)}
.news-card .n-tag{display:inline-block;font-size:12px;color:#FFD98A;background:rgba(240,217,168,.12);border:1px solid rgba(240,217,168,.25);padding:3px 10px;border-radius:12px;margin-bottom:10px}
.news-card .n-title{font-family:"Songti SC",serif;font-size:19px;font-weight:800;color:var(--text);line-height:1.35;margin-bottom:8px}
.news-card .n-desc{font-size:14px;color:var(--text-soft);line-height:1.6;margin-bottom:14px}
.news-card .n-meta{display:flex;justify-content:space-between;font-size:12.5px;color:#BBA988;border-top:1px dashed var(--glass-border);padding-top:10px}
.news-card .n-meta .go{color:#E0A85B}
/* 首页新闻垂直滚动（无缝循环：内容复制一份，translateY -50%） */
.news-scroll{position:relative;height:440px;overflow:hidden;border-radius:16px;border:1px solid var(--glass-border);background:var(--glass-alt);box-shadow:var(--shadow);
  -webkit-mask-image:linear-gradient(180deg,transparent,#000 10%,#000 90%,transparent);
  mask-image:linear-gradient(180deg,transparent,#000 10%,#000 90%,transparent)}
.news-scroll-track{display:flex;flex-direction:column;gap:14px;padding:16px;animation:newsScroll 30s linear infinite}
.news-scroll:hover .news-scroll-track{animation-play-state:paused}
@keyframes newsScroll{from{transform:translateY(0)}to{transform:translateY(-50%)}}
@media (prefers-reduced-motion:reduce){
  .news-scroll{height:auto;overflow:visible;-webkit-mask-image:none;mask-image:none}
  .news-scroll-track{animation:none;display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px;padding:0}
}
.fmodel b{color:var(--earth)}
.fmodel .dot{display:inline-block;width:9px;height:9px;border-radius:50%;background:var(--earth);margin-right:5px;vertical-align:middle}
.fmodel .dot.m{background:var(--ochre)}
/* SKELETON SCREEN */
.skel{border-radius:12px;background:linear-gradient(100deg,rgba(255,255,255,0.06) 30%,rgba(255,255,255,0.10) 50%,rgba(255,255,255,0.06) 70%);background-size:200% 100%;animation:shimmer 1.2s infinite;min-height:16px}
@keyframes shimmer{0%{background-position:200% 0}100%{background-position:-200% 0}}
.skel.hero{position:absolute;inset:0}
.skel.radar{width:340px;height:340px;border-radius:50%;margin:auto}
.skel.line{width:100%;height:280px}
.skel.bar{width:100%;height:60px;margin:8px 0}
.skel.txt{height:14px;width:100%;margin:7px 0}
.skel.txt.w70{width:70%}.skel.txt.w50{width:50%}.skel.txt.w40{width:40%}
.skel.card{height:120px}
.skel-wrap{background:var(--glass);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--glass-border);border-radius:16px;padding:20px;margin-top:20px;box-shadow:var(--shadow)}
/* sr-only */
.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
/* FOOTER */
footer{background:var(--bg-2);border-top:1px solid var(--glass-border);color:var(--text-soft);padding:46px 0 60px;margin-top:30px;font-size:13px;line-height:1.7}
footer h4{color:var(--earth);margin:0 0 12px;font-size:15px;letter-spacing:.05em}
footer a{color:var(--earth)}
footer ul{list-style:none;padding-left:0}
footer li{margin:5px 0;color:var(--text-faint)}
.disclaimer{border-top:1px solid var(--glass-border);margin-top:26px;padding-top:16px;color:var(--text-faint);font-size:12px}
.reveal{opacity:0;transform:translateY(18px);transition:opacity .6s ease,transform .6s ease}
.reveal.show{opacity:1;transform:none}
/* SCROLLYTELLING — chart-section 淡入 */
.chart-section{opacity:0;transform:translateY(40px);transition:opacity .7s cubic-bezier(.25,.46,.45,.94),transform .7s cubic-bezier(.25,.46,.45,.94)}
.chart-section.in-view{opacity:1;transform:translateY(0)}
.chart-section:nth-child(2).in-view{transition-delay:.15s}
.chart-section:nth-child(3).in-view{transition-delay:.3s}
.chart-section:nth-child(4).in-view{transition-delay:.45s}
/* CULTURAL TAGS 玻璃 */
.cultural-tags{margin:24px 0 16px;padding:18px 22px;background:var(--glass);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--glass-border);border-left:5px solid var(--dim2);border-radius:14px;box-shadow:var(--shadow)}
.cultural-tags .ct-head{font-size:14px;color:var(--text-soft);display:flex;align-items:center;gap:8px;margin-bottom:14px}
.cultural-tags .ct-head .ct-badge{font-size:11px;font-weight:700;color:#fff;background:var(--dim2);border-radius:20px;padding:2px 10px}
.cultural-tag{display:inline-flex;align-items:center;gap:6px;padding:5px 14px 5px 12px;margin:5px 6px 5px 0;border-radius:20px;font-size:13px;font:inherit;font-size:13px;border:1px solid var(--glass-border);background:var(--glass);color:var(--text);cursor:pointer;transition:.15s;backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur)}
.cultural-tag:hover{background:var(--glass-hover);border-color:var(--earth)}
.cultural-tag .ct-close{font-size:15px;color:var(--text-faint);cursor:pointer}
.cultural-tag-desc{display:none;font-size:13px;color:var(--text-soft);background:var(--bg-2);border-radius:10px;padding:10px 14px;margin:6px 0 10px}
.cultural-tag-desc.open{display:block}
/* 文化记忆：两行小标签，多则无缝循环滚动 */
.cultural-tags .ct-head .ct-hint{font-size:12px;color:var(--text-faint);font-weight:400}
.cultural-tags .ct-tags{margin:4px 0 2px;overflow:hidden}
.cultural-tags .ct-row{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:8px}
.cultural-tags .ct-row.static{margin-bottom:0}
.cultural-tags .ct-tags.scroll .ct-row{flex-wrap:nowrap;width:max-content;margin-bottom:8px;animation:ctMarquee 32s linear infinite}
.cultural-tags .ct-tags.scroll .ct-row.r2{animation-duration:38s;animation-direction:reverse}
.cultural-tags .ct-tags.scroll:hover .ct-row,
.cultural-tags .ct-tags.scroll.paused .ct-row{animation-play-state:paused}
@keyframes ctMarquee{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@media (prefers-reduced-motion: reduce){
  .cultural-tags .ct-tags.scroll .ct-row{animation:none;flex-wrap:wrap;width:auto}
}
/* MAP 玻璃 */
.map-section{padding:48px 0 8px}
.map-container{
  background:
    radial-gradient(ellipse at 30% 20%, rgba(192,138,62,0.06) 0%, transparent 50%),
    radial-gradient(ellipse at 75% 70%, rgba(168,85,46,0.05) 0%, transparent 50%),
    var(--glass);
  backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);
  border:1px solid var(--glass-border);border-radius:18px;
  padding:28px 24px;box-shadow:var(--shadow);
  margin-top:18px;overflow:hidden;position:relative;
}
.map-container::before{content:"";position:absolute;inset:0;
  background-image:
    linear-gradient(rgba(255,255,255,.02) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,255,255,.02) 1px, transparent 1px);
  background-size:40px 40px;pointer-events:none;z-index:0;border-radius:17px}
.map-container::after{content:"粤东 · 沿海侨乡";position:absolute;right:20px;bottom:12px;font-size:11px;color:var(--text-faint);letter-spacing:.2em;opacity:.5;z-index:1}
.map-svg{width:100%;height:auto;display:block;max-height:580px;position:relative;z-index:1}
.city-label{font-family:"Songti SC",serif;font-weight:700;font-size:20px;letter-spacing:.2em;cursor:pointer;opacity:.85;transition:opacity .15s,color .15s;fill:var(--earth)!important}
.city-label:hover{opacity:1}
/* 县区卡片：玻璃质感 + hover 发光 */
.cnty{cursor:pointer;transition:all .22s cubic-bezier(.25,.46,.45,.94);transform-box:fill-box;transform-origin:center;opacity:.92}
a:hover .cnty{opacity:1;transform:scale(1.07);filter:drop-shadow(0 4px 16px rgba(192,138,62,.35))}
.cnty-name{font-family:"PingFang SC","Microsoft YaHei",sans-serif;font-weight:600;font-size:13.5px;fill:var(--text)!important;text-anchor:middle;pointer-events:none}
.cnty-score{font-family:"Songti SC",serif;font-weight:800;font-size:15px;fill:var(--text)!important;text-anchor:middle;pointer-events:none;letter-spacing:.02em}
.map-legend{display:flex;gap:20px;flex-wrap:wrap;font-size:13px;color:var(--text-soft);margin-top:20px;align-items:center;padding:12px 16px;background:rgba(255,255,255,.025);border-radius:10px;border:1px solid var(--glass-border)}
.map-legend span{display:inline-flex;align-items:center;gap:7px;padding:3px 8px;border-radius:6px;transition:background .15s}
.map-legend span:hover{background:rgba(255,255,255,.04)}
.map-legend i{width:14px;height:14px;border-radius:4px;display:inline-block;box-shadow:0 1px 4px rgba(0,0,0,.25)}
.map-legend .hint{margin-left:auto;color:var(--text-faint);font-size:12px}
@media(max-width:760px){.map-legend .hint{margin-left:0;width:100%}}
@media(max-width:760px){.radar-grid,.feature{grid-template-columns:1fr}.feature.alt{direction:ltr}.skel.radar{width:280px;height:280px}.namecard-grid{grid-template-columns:1fr}.cultural-tag-detail.open{flex-direction:column}.ctd-fig{flex:1;width:100%;min-height:160px;border-radius:12px 12px 0 0}}
@media (prefers-reduced-motion: reduce){.reveal{transition:none}.skel{animation:none}}
/* 覆写模板内联样式 */
/* ===== 顶部品牌标语 + 小特效（克制·设计感） ===== */
.topnav .brand{
  position:relative;
  background:linear-gradient(90deg,var(--earth),#F4DDA6,var(--earth));
  background-size:220% auto;
  -webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent;color:transparent;
  animation:brandShine 7s linear infinite;
}
@keyframes brandShine{to{background-position:220% center}}
@supports not ((-webkit-background-clip:text) or (background-clip:text)){
  .topnav .brand{background:none;-webkit-text-fill-color:var(--earth);color:var(--earth);animation:none}
}
.topnav .brand-tag{
  font-family:"Songti SC",serif;font-size:13px;color:var(--text-faint);
  letter-spacing:.12em;margin-left:13px;padding-left:13px;position:relative;white-space:nowrap;
  animation:tagBreath 4.5s ease-in-out infinite;
}
.topnav .brand-tag::before{content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:1px;height:13px;background:var(--glass-border)}
@keyframes tagBreath{0%,100%{opacity:.5}50%{opacity:1}}
/* 章节分隔线 细流光 */
.divider{position:relative;overflow:hidden}
.divider::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.5),transparent);transform:translateX(-100%);animation:divSweep 5.5s ease-in-out infinite}
@keyframes divSweep{0%{transform:translateX(-100%)}55%,100%{transform:translateX(100%)}}
/* 摘要卡 暖色呼吸描边（呼应"有情有义"） */
.insight{border-color:rgba(192,138,62,.55);animation:insightGlow 5s ease-in-out infinite}
@keyframes insightGlow{0%,100%{box-shadow:0 0 0 0 rgba(232,130,58,0),var(--shadow)}50%{box-shadow:0 0 22px -4px rgba(232,130,58,.35),var(--shadow)}}
/* 英雄指标 错峰轻浮入场 */
.hero-stat{animation:rise .6s ease both}
.hero-stat:nth-child(1){animation-delay:.04s}.hero-stat:nth-child(2){animation-delay:.12s}.hero-stat:nth-child(3){animation-delay:.2s}.hero-stat:nth-child(4){animation-delay:.28s}
@keyframes rise{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
/* 小屏：nav 空间紧，隐藏标语避免换行溢出 */
@media(max-width:600px){.topnav .brand-tag{display:none}.topnav .wrap{min-height:54px}}
@media (prefers-reduced-motion: reduce){
  .topnav .brand{animation:none;-webkit-text-fill-color:var(--earth);color:var(--earth);background:none}
  .topnav .brand-tag,.divider::after,.insight,.hero-stat{animation:none}
  .divider::after{display:none}
}

/* ===== 会员体系 UI ===== */
#auth-nav{display:inline-flex;align-items:center;margin-left:auto}
.auth-btn{background:none;border:1px solid var(--glass-border);border-radius:20px;color:var(--text-soft);cursor:pointer;padding:5px 14px;font-size:13px;transition:all .2s;backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur)}
.auth-btn:hover{background:var(--glass-hover);color:var(--text)}
.auth-login-text{font-size:13px}
.auth-avatar-img{width:26px;height:26px;border-radius:50%;object-fit:cover;display:block}
.auth-avatar-letter{width:26px;height:26px;border-radius:50%;background:var(--earth);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:14px;line-height:1}
/* 下拉菜单 */
.auth-dropdown{position:absolute;top:100%;right:0;margin-top:6px;min-width:180px;background:var(--bg-2);border:1px solid var(--glass-border);border-radius:12px;padding:10px;z-index:100;box-shadow:0 12px 40px rgba(0,0,0,.5)}
.auth-dd-name{font-weight:700;color:var(--text);font-size:14px;padding:4px 8px 2px}
.auth-dd-role{font-size:12px;color:var(--text-faint);padding:0 8px 6px}
.auth-dd-btn{display:block;width:100%;text-align:left;background:none;border:none;color:var(--text-soft);padding:7px 10px;border-radius:8px;font-size:13px;cursor:pointer;transition:background .15s}
.auth-dd-btn:hover{background:var(--glass-hover);color:var(--text)}
.auth-logout{color:var(--dim0)!important}
.auth-dd-hr{border:none;border-top:1px solid var(--line);margin:6px 0}
/* 弹窗 */
.auth-modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:9999;display:flex;align-items:center;justify-content:center;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}
.auth-modal{max-width:400px;width:90%;padding:28px 24px;position:relative;animation:authFadeIn .2s ease}
@keyframes authFadeIn{from{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}
.auth-modal h3{font-family:"Songti SC",serif;font-size:22px;color:var(--earth);margin-bottom:6px}
.auth-sub{font-size:13px;color:var(--text-faint);margin-bottom:16px}
.auth-input{width:100%;padding:10px 14px;background:rgba(255,255,255,.05);border:1px solid var(--glass-border);border-radius:10px;color:var(--text);font-size:15px;margin-bottom:10px;outline:none;transition:border-color .2s}
.auth-input:focus{border-color:var(--earth)}
.auth-input::placeholder{color:var(--text-faint)}
/* select 下拉：深色主题黑底浅字，浅色主题白底深字，保证对比度 */
select.auth-input{background:#1a1510;color:#F5F0E8}
select.auth-input option{background:#1a1510;color:#F5F0E8}
body.theme-light select.auth-input{background:#FFFFFF;color:#2D2A26;border-color:#D9CBB2}
body.theme-light select.auth-input option{background:#FFFFFF;color:#2D2A26}
.auth-actions{display:flex;gap:10px;margin-top:16px}
.auth-primary{flex:1;padding:10px;background:var(--earth);color:#fff;border:none;border-radius:10px;font-size:15px;font-weight:600;cursor:pointer;transition:opacity .2s}
.auth-primary:hover{opacity:.88}
.auth-secondary{flex:1;padding:10px;background:transparent;color:var(--text-soft);border:1px solid var(--glass-border);border-radius:10px;font-size:14px;cursor:pointer;transition:background .2s}
.auth-secondary:hover{background:var(--glass-hover)}
.auth-close{position:absolute;top:10px;right:14px;background:none;border:none;color:var(--text-faint);font-size:24px;cursor:pointer;line-height:1;padding:4px}
.auth-close:hover{color:var(--text)}
.auth-empty{text-align:center;color:var(--text-faint);padding:20px 0;font-size:14px}
.auth-wide{max-width:480px}
/* 个人中心 */
.profile-card{display:flex;flex-direction:column;gap:12px;align-items:center}
.profile-avatar{width:64px;height:64px;border-radius:50%;object-fit:cover}
.profile-avatar-placeholder{width:64px;height:64px;border-radius:50%;background:var(--earth);color:#fff;display:flex;align-items:center;justify-content:center;font-size:28px;font-weight:700}
/* 收藏/足迹列表 */
.fav-item,.fp-item{display:flex;align-items:center;gap:10px;padding:8px 10px;border-bottom:1px solid var(--line);font-size:13.5px}
.fav-type,.fp-action{background:var(--beige);color:var(--earth-deep);padding:2px 8px;border-radius:6px;font-size:12px;white-space:nowrap}
.fav-time,.fp-time{margin-left:auto;color:var(--text-faint);font-size:12px}

/* ===== 首页侨批展陈 ===== */
.qiaopi-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}
.qiaopi-card{background:var(--glass);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);
  border:1px solid var(--glass-border);border-radius:14px;padding:18px;box-shadow:var(--shadow);transition:transform .18s,border-color .18s}
.qiaopi-card:hover{transform:translateY(-3px);border-color:rgba(192,138,62,.45)}
.qiaopi-card .qp-tag{display:inline-block;font-size:11.5px;padding:2px 10px;border-radius:12px;margin-bottom:10px;
  background:rgba(196,77,60,.14);color:#E8A98E;border:1px solid rgba(196,77,60,.35)}
.qiaopi-card h4{font-size:16px;color:var(--text);margin-bottom:6px;font-family:"Songti SC",serif}
.qiaopi-card .qp-meta{font-size:12px;color:#9C8B70;margin-bottom:10px;letter-spacing:.03em}
.qiaopi-card p{font-size:13.5px;line-height:1.8;color:var(--text-soft)}
body.theme-light .qiaopi-card .qp-meta{color:#7A6A52}

/* ===== 首页侨批展陈 v2（3 列紧凑 + 印章标题）===== */
.sec-num.qp-seal{font-size:26px;background:linear-gradient(135deg,#C44D3C,#8A3A22);color:#F7E9D8;
  width:44px;height:44px;line-height:44px;text-align:center;border-radius:8px;display:inline-block;
  box-shadow:0 2px 10px rgba(196,77,60,.4),inset 0 0 0 2px rgba(247,233,216,.18);letter-spacing:0;font-family:"KaiTi","STKaiti","Songti SC",serif}
.qiaopi-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.qiaopi-card{padding:13px 15px;border-radius:12px}
.qiaopi-card h4{font-size:14.5px;margin-bottom:4px}
.qiaopi-card .qp-tag{font-size:10.5px;padding:1px 8px;margin-bottom:7px}
.qiaopi-card .qp-meta{font-size:11px;margin-bottom:7px}
.qiaopi-card p{font-size:12.5px;line-height:1.7;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}
@media (max-width:860px){.qiaopi-grid{grid-template-columns:repeat(2,1fr)}}
@media (max-width:560px){.qiaopi-grid{grid-template-columns:1fr}}

/* ===== 仿真县域地图（多边形）===== */
.cnty-poly{cursor:pointer;stroke:rgba(255,255,255,0.22);stroke-width:1.6;transition:all .22s cubic-bezier(.25,.46,.45,.94);opacity:.93}
a:hover .cnty-poly{opacity:1;filter:drop-shadow(0 4px 18px rgba(192,138,62,.4))}
.map-container{background:
  radial-gradient(ellipse at 30% 20%,rgba(95,125,74,.08),transparent 55%),
  radial-gradient(ellipse at 75% 30%,rgba(168,84,58,.07),transparent 55%),
  radial-gradient(ellipse at 50% 85%,rgba(168,84,58,.10),transparent 60%)}

/* ===== 侨批展陈 v3（封面卡 + 详情 modal）===== */
.qiaopi-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.qp-item{display:flex;flex-direction:column;background:var(--glass);border:1px solid var(--glass-border);border-radius:12px;
  overflow:hidden;box-shadow:var(--shadow);transition:all .2s cubic-bezier(.25,.46,.45,.94);text-decoration:none;color:inherit;cursor:pointer}
.qp-item:hover{transform:translateY(-3px);border-color:rgba(192,138,62,.5);box-shadow:0 8px 24px rgba(0,0,0,.25)}
.qp-cover{width:100%;aspect-ratio:3/5;background:#F2E5C2;overflow:hidden;display:flex;align-items:center;justify-content:center;position:relative}
.qp-cover img{width:100%;height:100%;object-fit:cover}
.qp-cover svg{width:100%;height:100%;display:block}
.qp-body{padding:11px 13px}
.qp-tag{display:inline-block;font-size:10.5px;padding:1px 8px;border-radius:12px;margin-bottom:6px;
  background:rgba(196,77,60,.14);color:#E8A98E;border:1px solid rgba(196,77,60,.35)}
.qp-item h4{font-size:13.5px;color:var(--text);margin-bottom:4px;font-family:"Songti SC",serif;line-height:1.4}
.qp-item .qp-meta{font-size:10.5px;color:#9C8B70;margin-bottom:6px;letter-spacing:.03em}
.qp-item p{font-size:11.5px;line-height:1.65;color:var(--text-soft);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
@media (max-width:860px){.qiaopi-grid{grid-template-columns:repeat(2,1fr)}}
@media (max-width:560px){.qiaopi-grid{grid-template-columns:1fr}}

/* 详情 modal */
.qp-modal{position:fixed;inset:0;z-index:99999;align-items:center;justify-content:center;display:flex}
.qp-modal-bg{position:absolute;inset:0;background:rgba(0,0,0,.65);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}
.qp-modal-card{position:relative;background:#1A1510;border:1px solid rgba(192,138,62,.4);border-radius:14px;
  max-width:900px;width:90%;max-height:88vh;display:flex;gap:0;overflow:hidden;box-shadow:0 20px 60px rgba(0,0,0,.6);animation:qpFadeIn .22s ease}
@keyframes qpFadeIn{from{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}
body.theme-light .qp-modal-card{background:#FFFDF8;border-color:#D9CBB2}
.qp-close{position:absolute;top:10px;right:14px;z-index:2;background:rgba(0,0,0,.4);border:none;color:#F5F0E8;
  width:34px;height:34px;border-radius:50%;font-size:20px;line-height:1;cursor:pointer;transition:background .15s}
.qp-close:hover{background:rgba(196,77,60,.85)}
.qp-modal-cover{width:300px;flex-shrink:0;background:#F2E5C2;display:flex;align-items:center;justify-content:center;padding:14px}
.qp-modal-cover img,.qp-modal-cover svg{max-width:100%;max-height:100%;display:block}
.qp-modal-cover img{object-fit:contain;box-shadow:0 4px 20px rgba(0,0,0,.3)}
body.theme-light .qp-modal-cover{background:#FBF5E3}
.qp-modal-body{padding:24px 28px 24px 24px;flex:1;overflow-y:auto;color:#F5F0E8}
body.theme-light .qp-modal-body{color:#2D2A26}
.qp-modal-body .qp-tag{display:inline-block;font-size:11.5px;padding:2px 10px;border-radius:12px;margin-bottom:10px;
  background:rgba(196,77,60,.16);color:#E8A98E;border:1px solid rgba(196,77,60,.35)}
.qp-modal-body h3{font-family:"Songti SC",serif;font-size:22px;color:var(--earth);margin-bottom:6px;line-height:1.4}
.qp-modal-body .qp-meta{font-size:13px;color:#9C8B70;margin-bottom:14px;letter-spacing:.03em}
body.theme-light .qp-modal-body .qp-meta{color:#7A6A52}
.qp-modal-body p{font-size:14px;line-height:1.9;color:inherit;margin-bottom:14px}
.qp-modal-body .qp-extra{font-size:12.5px;color:#9C8B70;border-left:3px solid rgba(192,138,62,.45);padding-left:12px;margin-top:16px}
body.theme-light .qp-modal-body .qp-extra{color:#7A6A52;border-left-color:#D9CBB2}
@media (max-width:680px){
  .qp-modal-card{flex-direction:column;max-height:92vh}
  .qp-modal-cover{width:100%;max-height:240px}
  .qp-modal-cover img,.qp-modal-cover svg{height:100%}
}

/* ===== 侨批展陈 v3（封面卡 + 详情 modal）===== */
.qiaopi-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.qp-item{display:flex;flex-direction:column;background:var(--glass);border:1px solid var(--glass-border);border-radius:12px;
  overflow:hidden;box-shadow:var(--shadow);transition:all .2s cubic-bezier(.25,.46,.45,.94);text-decoration:none;color:inherit;cursor:pointer}
.qp-item:hover{transform:translateY(-3px);border-color:rgba(192,138,62,.5);box-shadow:0 8px 24px rgba(0,0,0,.25)}
.qp-cover{width:100%;aspect-ratio:3/5;background:#F2E5C2;overflow:hidden;display:flex;align-items:center;justify-content:center;position:relative}
.qp-cover img{width:100%;height:100%;object-fit:cover}
.qp-cover svg{width:100%;height:100%;display:block}
.qp-body{padding:11px 13px}
.qp-tag{display:inline-block;font-size:10.5px;padding:1px 8px;border-radius:12px;margin-bottom:6px;
  background:rgba(196,77,60,.14);color:#E8A98E;border:1px solid rgba(196,77,60,.35)}
.qp-item h4{font-size:13.5px;color:var(--text);margin-bottom:4px;font-family:"Songti SC",serif;line-height:1.4}
.qp-item .qp-meta{font-size:10.5px;color:#9C8B70;margin-bottom:6px;letter-spacing:.03em}
.qp-item p{font-size:11.5px;line-height:1.65;color:var(--text-soft);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
@media (max-width:860px){.qiaopi-grid{grid-template-columns:repeat(2,1fr)}}
@media (max-width:560px){.qiaopi-grid{grid-template-columns:1fr}}

/* 详情 modal */
.qp-modal{position:fixed;inset:0;z-index:99999;align-items:center;justify-content:center;display:flex}
.qp-modal-bg{position:absolute;inset:0;background:rgba(0,0,0,.65);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}
.qp-modal-card{position:relative;background:#1A1510;border:1px solid rgba(192,138,62,.4);border-radius:14px;
  max-width:900px;width:90%;max-height:88vh;display:flex;gap:0;overflow:hidden;box-shadow:0 20px 60px rgba(0,0,0,.6);animation:qpFadeIn .22s ease}
@keyframes qpFadeIn{from{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}
body.theme-light .qp-modal-card{background:#FFFDF8;border-color:#D9CBB2}
.qp-close{position:absolute;top:10px;right:14px;z-index:2;background:rgba(0,0,0,.4);border:none;color:#F5F0E8;
  width:34px;height:34px;border-radius:50%;font-size:20px;line-height:1;cursor:pointer;transition:background .15s}
.qp-close:hover{background:rgba(196,77,60,.85)}
.qp-modal-cover{width:300px;flex-shrink:0;background:#F2E5C2;display:flex;align-items:center;justify-content:center;padding:14px}
.qp-modal-cover img,.qp-modal-cover svg{max-width:100%;max-height:100%;display:block}
.qp-modal-cover img{object-fit:contain;box-shadow:0 4px 20px rgba(0,0,0,.3)}
body.theme-light .qp-modal-cover{background:#FBF5E3}
.qp-modal-body{padding:24px 28px 24px 24px;flex:1;overflow-y:auto;color:#F5F0E8}
body.theme-light .qp-modal-body{color:#2D2A26}
.qp-modal-body .qp-tag{display:inline-block;font-size:11.5px;padding:2px 10px;border-radius:12px;margin-bottom:10px;
  background:rgba(196,77,60,.16);color:#E8A98E;border:1px solid rgba(196,77,60,.35)}
.qp-modal-body h3{font-family:"Songti SC",serif;font-size:22px;color:var(--earth);margin-bottom:6px;line-height:1.4}
.qp-modal-body .qp-meta{font-size:13px;color:#9C8B70;margin-bottom:14px;letter-spacing:.03em}
body.theme-light .qp-modal-body .qp-meta{color:#7A6A52}
.qp-modal-body p{font-size:14px;line-height:1.9;color:inherit;margin-bottom:14px}
.qp-modal-body .qp-extra{font-size:12.5px;color:#9C8B70;border-left:3px solid rgba(192,138,62,.45);padding-left:12px;margin-top:16px}
body.theme-light .qp-modal-body .qp-extra{color:#7A6A52;border-left-color:#D9CBB2}
@media (max-width:680px){
  .qp-modal-card{flex-direction:column;max-height:92vh}
  .qp-modal-cover{width:100%;max-height:240px}
  .qp-modal-cover img,.qp-modal-cover svg{height:100%}
}

/* ===== 首页侨批 v4（纯文字卡 6 列铺满 + 印章通用）===== */
.qiaopi-grid-text{display:grid;grid-template-columns:repeat(6,1fr);gap:12px}
.qp-item-text{display:flex;flex-direction:column;padding:14px 13px;background:var(--glass);
  border:1px solid var(--glass-border);border-radius:11px;text-decoration:none;color:inherit;
  transition:all .2s cubic-bezier(.25,.46,.45,.94);position:relative}
.qp-item-text:hover{transform:translateY(-3px);border-color:rgba(192,138,62,.5);box-shadow:0 8px 22px rgba(0,0,0,.25)}
.qp-item-text .qp-tag{display:inline-block;font-size:10.5px;padding:1px 8px;border-radius:10px;margin-bottom:8px;
  background:rgba(196,77,60,.14);color:#E8A98E;border:1px solid rgba(196,77,60,.35);align-self:flex-start}
.qp-item-text h4{font-size:13.5px;color:var(--text);margin-bottom:6px;font-family:"Songti SC",serif;line-height:1.4;font-weight:600}
.qp-item-text .qp-meta{font-size:10.5px;color:#9C8B70;margin-bottom:8px;letter-spacing:.03em}
.qp-item-text p{font-size:12px;line-height:1.7;color:var(--text-soft);margin-bottom:10px;
  display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}
.qp-item-text .qp-more{font-size:11px;color:var(--earth);opacity:.85;margin-top:auto}
.qp-item-text:hover .qp-more{opacity:1}
@media (max-width:1100px){.qiaopi-grid-text{grid-template-columns:repeat(3,1fr)}}
@media (max-width:680px){.qiaopi-grid-text{grid-template-columns:repeat(2,1fr)}}
@media (max-width:480px){.qiaopi-grid-text{grid-template-columns:1fr}}

/* 印章通用间距：所有 sec-num.qp-seal 与标题字横向间距 */
.sec-num.qp-seal{margin-right:14px;flex-shrink:0}
.sec-head{display:flex;align-items:center;gap:0}

/* ===== 地图水墨风 ===== */
.map-ink{filter:saturate(.92) contrast(1.02)}
.map-city-tag{font-family:"KaiTi","STKaiti","Songti SC",serif;font-weight:700;font-size:17px;letter-spacing:.18em;opacity:.78}
.cnty-name{font-family:"KaiTi","STKaiti",serif;font-weight:600;font-size:13px;fill:#1a1108;text-anchor:middle;pointer-events:none;letter-spacing:.02em}
body.theme-light .cnty-name{fill:#1a1108}
.cnty-poly{cursor:pointer;stroke:rgba(40,30,20,0.35);stroke-width:1.4;transition:all .22s cubic-bezier(.25,.46,.45,.94);opacity:.92}
a:hover .cnty-poly{opacity:1;filter:drop-shadow(0 3px 12px rgba(192,138,62,.4)) brightness(1.08)}
.map-container{
  background:
    radial-gradient(ellipse at 30% 20%,rgba(110,138,85,.08),transparent 55%),
    radial-gradient(ellipse at 75% 30%,rgba(196,77,60,.06),transparent 55%),
    linear-gradient(180deg,rgba(245,239,224,.04),rgba(0,0,0,.06)),
    radial-gradient(circle at 70% 90%,rgba(212,160,85,.07),transparent 60%);
  border:1px solid var(--glass-border);
}

/* ===== 首页侨批 v4（纯文字卡 6 列铺满 + 印章通用）===== */
.qiaopi-grid-text{display:grid;grid-template-columns:repeat(6,1fr);gap:12px}
.qp-item-text{display:flex;flex-direction:column;padding:14px 13px;background:var(--glass);
  border:1px solid var(--glass-border);border-radius:11px;text-decoration:none;color:inherit;
  transition:all .2s cubic-bezier(.25,.46,.45,.94);position:relative}
.qp-item-text:hover{transform:translateY(-3px);border-color:rgba(192,138,62,.5);box-shadow:0 8px 22px rgba(0,0,0,.25)}
.qp-item-text .qp-tag{display:inline-block;font-size:10.5px;padding:1px 8px;border-radius:10px;margin-bottom:8px;
  background:rgba(196,77,60,.14);color:#E8A98E;border:1px solid rgba(196,77,60,.35);align-self:flex-start}
.qp-item-text h4{font-size:13.5px;color:var(--text);margin-bottom:6px;font-family:"Songti SC",serif;line-height:1.4;font-weight:600}
.qp-item-text .qp-meta{font-size:10.5px;color:#9C8B70;margin-bottom:8px;letter-spacing:.03em}
.qp-item-text p{font-size:12px;line-height:1.7;color:var(--text-soft);margin-bottom:10px;
  display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}
.qp-item-text .qp-more{font-size:11px;color:var(--earth);opacity:.85;margin-top:auto}
.qp-item-text:hover .qp-more{opacity:1}
@media (max-width:1100px){.qiaopi-grid-text{grid-template-columns:repeat(3,1fr)}}
@media (max-width:680px){.qiaopi-grid-text{grid-template-columns:repeat(2,1fr)}}
@media (max-width:480px){.qiaopi-grid-text{grid-template-columns:1fr}}

/* 印章通用间距：所有 sec-num.qp-seal 与标题字横向间距 */
.sec-num.qp-seal{margin-right:14px;flex-shrink:0}
.sec-head{display:flex;align-items:center;gap:0}

/* ===== 地图水墨风 ===== */
.map-ink{filter:saturate(.92) contrast(1.02)}
.map-city-tag{font-family:"KaiTi","STKaiti","Songti SC",serif;font-weight:700;font-size:17px;letter-spacing:.18em;opacity:.78}
.cnty-name{font-family:"KaiTi","STKaiti",serif;font-weight:600;font-size:13px;fill:#1a1108;text-anchor:middle;pointer-events:none;letter-spacing:.02em}
body.theme-light .cnty-name{fill:#1a1108}
.cnty-poly{cursor:pointer;stroke:rgba(40,30,20,0.35);stroke-width:1.4;transition:all .22s cubic-bezier(.25,.46,.45,.94);opacity:.92}
a:hover .cnty-poly{opacity:1;filter:drop-shadow(0 3px 12px rgba(192,138,62,.4)) brightness(1.08)}
.map-container{
  background:
    radial-gradient(ellipse at 30% 20%,rgba(110,138,85,.08),transparent 55%),
    radial-gradient(ellipse at 75% 30%,rgba(196,77,60,.06),transparent 55%),
    linear-gradient(180deg,rgba(245,239,224,.04),rgba(0,0,0,.06)),
    radial-gradient(circle at 70% 90%,rgba(212,160,85,.07),transparent 60%);
  border:1px solid var(--glass-border);
}
