/* 陈列厅 Hall — 可整体移除的增强层
   删除 index.html 中 css/hall.css 与 js/hall.js 两行引用即完全回滚。
   约定：颜色一律由 token 派生（color-mix），不写死色值；尺子沿用 gallery.css 的 --sp/--fs/--r/--dur。 */

/* 1. 门厅外壳：无侧栏，标题栏压成一条馆标；状态栏留着——备案号必须出现在首页 */
html[data-view="hall"] .app-shell{grid-template-columns:minmax(0,1fr);grid-template-rows:58px minmax(0,1fr) 29px}
html[data-view="hall"] .sidebar,
html[data-view="hall"] .titlebar-center,
html[data-view="hall"] .title-sub,
html[data-view="hall"] .title-divider{display:none}
html[data-view="hall"] .titlebar{background:transparent;border-bottom-color:var(--hairline);padding:0 clamp(20px,4vw,56px)}
/* 不做滚动吸附：九个 stage 里六个比视口还高（作品页 962–1016px、利器厅 1161px，
   视口 813px），吸附到每段开头会在段中造出"死区"——实测松手后被拽回 120–170px，
   就是那种"卡一下、自己动"的手感。节奏交给分厅标题页来做。 */
html[data-view="hall"] .main-area{overflow-y:auto;overflow-x:hidden}
/* 状态栏压在墙上，材质与浮牌同一套：比墙深一档的底、同一根发丝线 */
html[data-view="hall"] .statusbar{background:var(--sign-bg);border-top-color:var(--hairline);padding:0 clamp(14px,4vw,56px)}
html[data-view="hall"] .statusbar a{color:var(--muted)}
html[data-view="hall"] .statusbar a:hover{color:var(--accent)}

/* 2. 厅堂与地面：一面比应用更深、有灯光落在上面的墙 ----------------------------- */
/* 墙面三色与"浮牌"材质定义在 html[data-view=hall] 上：抬头的导览牌不在 .hall-view 里，也要用得到 */
html[data-view="hall"]{
  --hall-wall:color-mix(in srgb,var(--bg) 82%,#000);
  --hall-deep:color-mix(in srgb,var(--bg) 62%,#000);
  --hall-glow:color-mix(in srgb,var(--accent) 26%,transparent);
  /* 所有浮在墙上的牌子共用一套材质：比墙深一档的底、随主题翻的墨、同一根描边 */
  --sign-bg:color-mix(in srgb,var(--hall-wall) 80%,#000);
  --sign-line:color-mix(in srgb,var(--text) 22%,transparent);
  --sign-ink:color-mix(in srgb,var(--text) 62%,transparent)}
/* 日光下墙是浅的：牌子改成浅底浓墨，小字标签也压深一档，否则 10px 的 mono 只有 4:1 */
html[data-view="hall"][data-theme="glimmer"]{
  --faint:#5c685e;
  --sign-bg:color-mix(in srgb,var(--bg) 92%,#000);
  --sign-ink:var(--text)}
.hall-view{
  position:relative;isolation:isolate;
  background:
    radial-gradient(58% 42% at var(--mx,50%) var(--my,12%),var(--hall-glow),transparent 62%),
    radial-gradient(120% 56% at 50% -10%,color-mix(in srgb,var(--accent) 11%,transparent),transparent 58%),
    linear-gradient(to bottom,color-mix(in srgb,var(--panel) 66%,var(--hall-wall)),var(--hall-wall) 52%,var(--hall-deep))}
.hall-view::before{content:"";position:absolute;inset:0;background-image:var(--grain);background-size:180px 180px;opacity:calc(var(--grain-op) * 1.7);pointer-events:none;z-index:0}
/* 暗角：四角压暗，视线自然收到中间 */
.hall-view::after{content:"";position:fixed;inset:0;pointer-events:none;z-index:1;
  background:radial-gradient(120% 88% at 50% 46%,transparent 42%,color-mix(in srgb,var(--hall-deep) 78%,transparent) 100%)}
.hall-inner,.hall-rail{position:relative;z-index:2}
.hall-inner{display:flex;flex-direction:column}
.hall-stage{position:relative;min-height:calc(100dvh - 87px);display:flex;flex-direction:column;justify-content:center;padding:clamp(30px,7vh,72px) 0}
.hall-stage-inner{position:relative;width:100%;max-width:1180px;margin:0 auto;padding:0 clamp(20px,4vw,56px)}
/* 墙上刷的大号展厅编号：美术馆墙绘感，压在作品后面 */
.hall-numeral{position:absolute;top:50%;transform:translateY(-50%);font:italic 500 clamp(160px,26vw,360px)/1 var(--display-en);letter-spacing:-.04em;color:var(--text);opacity:.045;pointer-events:none;user-select:none;z-index:-1}
.hall-work:not(.is-right) .hall-numeral{left:clamp(-10px,-1vw,0px)}
.hall-work.is-right .hall-numeral{right:clamp(-10px,-1vw,0px)}

/* 3. 序厅：馆标、馆词、下探提示 --------------------------------------------------- */
.hall-masthead{display:flex;align-items:baseline;gap:var(--sp-4);border-bottom:1px solid var(--hairline);padding-bottom:var(--sp-3);font:var(--fs-xs) var(--mono);letter-spacing:2.2px;color:var(--faint);text-transform:uppercase}
.hall-masthead .hall-count{margin-left:auto;letter-spacing:1.2px}
.hall-foreword .hall-latin{display:block;margin:clamp(18px,3.6vh,38px) 0 var(--sp-5);font:italic var(--fs-lg)/1 var(--display-en);letter-spacing:4px;color:var(--faint)}
.hall-foreword h1{margin:0;font-family:var(--display-zh);font-weight:400;font-size:clamp(36px,6.6vw,76px);line-height:1.3;letter-spacing:1.8px;color:var(--text)}
.hall-foreword h1 em{font-style:normal;color:var(--accent)}
.hall-foreword-body{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,.75fr);gap:clamp(24px,4vw,64px);align-items:end;margin-top:clamp(26px,5vh,52px)}
.hall-lede{margin:0;font-size:var(--fs-lg);line-height:var(--lh-loose);color:var(--muted);max-width:40ch;border-left:1px solid var(--hairline);padding-left:var(--sp-4)}
.hall-hint{display:flex;align-items:center;gap:var(--sp-3);margin-top:clamp(30px,6vh,64px);font:var(--fs-xs) var(--mono);letter-spacing:2.4px;color:var(--faint);text-transform:uppercase}
.hall-hint::after{content:"";flex:0 0 46px;height:1px;background:linear-gradient(to right,var(--accent),transparent);animation:hall-nudge 2.6s var(--ease-silk) infinite}
@keyframes hall-nudge{0%,100%{transform:translateX(0);opacity:.5}50%{transform:translateX(9px);opacity:1}}

/* 4. 作品展台：一屏一件，左右错落，展签与框底对齐 -------------------------------- */
.hall-work{display:grid;grid-template-columns:minmax(0,min(44vw,520px)) minmax(0,1fr);gap:clamp(26px,4.6vw,76px);align-items:stretch}
.hall-work.is-right{grid-template-columns:minmax(0,1fr) minmax(0,min(44vw,520px))}
.hall-work.is-right .hall-frame{order:2}
.hall-work.is-right .hall-label{order:1}
.hall-frame{position:relative;isolation:isolate;display:block;width:100%;max-width:min(44vw,520px);aspect-ratio:4/5;padding:clamp(16px,2.1vw,26px);border:0;border-radius:1px;cursor:pointer;text-align:left;
  background:
    repeating-linear-gradient(92deg,color-mix(in srgb,var(--bg) 12%,transparent) 0 2px,transparent 2px 8px),
    linear-gradient(155deg,
      color-mix(in srgb,var(--accent) 30%,var(--hall-wall)) 0%,
      color-mix(in srgb,var(--panel) 52%,var(--hall-deep)) 26%,
      color-mix(in srgb,var(--hall-deep) 72%,var(--panel)) 55%,
      color-mix(in srgb,var(--accent) 26%,var(--hall-wall)) 88%);
  box-shadow:
    inset 0 0 0 1px color-mix(in srgb,var(--text) 12%,transparent),
    inset 0 2px 4px color-mix(in srgb,var(--text) 9%,transparent),
    inset 0 -2px 4px color-mix(in srgb,var(--bg) 55%,transparent),
    0 0 0 1px color-mix(in srgb,var(--bg) 62%,transparent),
    calc(var(--light-x,0) * -30px) calc(34px - var(--light-y,0) * 14px) 56px -28px color-mix(in srgb,var(--bg) 90%,transparent),
    calc(var(--light-x,0) * -11px) calc(8px - var(--light-y,0) * 5px) 18px -10px color-mix(in srgb,var(--bg) 72%,transparent);
  transition:transform var(--dur-mid) var(--ease-silk),box-shadow var(--dur-mid) var(--ease-silk);
  transform:translateX(var(--dx,0px)) rotate(var(--dr,0deg))}
.hall-frame.is-drag{transition:none;cursor:grabbing}
.hall-mat{position:relative;z-index:1;display:flex;flex-direction:column;justify-content:center;height:100%;padding:clamp(27px,3.5vw,44px) clamp(25px,3.1vw,37px);
  background:linear-gradient(to bottom,color-mix(in srgb,var(--editor) 82%,var(--text)),color-mix(in srgb,var(--editor) 94%,var(--panel)));
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--line) 70%,transparent),inset 0 10px 24px -16px color-mix(in srgb,var(--bg) 92%,transparent),inset 0 -8px 18px -16px color-mix(in srgb,var(--text) 20%,transparent)}
.hall-mat::before{content:"";position:absolute;inset:0;background:radial-gradient(72% 44% at 50% -4%,color-mix(in srgb,var(--text) 9%,transparent),transparent 66%);pointer-events:none}
.hall-year{font:var(--fs-xs)/1 var(--mono);letter-spacing:3.2px;color:var(--faint)}
.hall-plate-title{margin:var(--sp-5) 0 0;font-family:var(--display-zh);font-weight:400;font-size:clamp(26px,3.4vw,44px);line-height:1.26;letter-spacing:.8px;color:var(--text)}
.hall-plate-rule{width:38px;height:1px;background:var(--accent);opacity:.7;margin:var(--sp-5) 0}
/* 副题已移到展签上，框里只留年份、题名与编号 */
.hall-plate-mark{position:absolute;right:clamp(15px,2.4vw,26px);bottom:clamp(14px,2.2vw,22px);font:italic 21px/1 var(--display-en);letter-spacing:.5px;color:var(--accent);opacity:.48}

/* 4a. 射灯与抬升 --------------------------------------------------------------- */
/* 光锥必须比它自己的盒子小一圈：不遮罩的话，矩形边界会在墙上留一道笔直的银边 */
.hall-work::before{content:"";position:absolute;left:clamp(-2vw,0vw,0px);top:2%;width:min(58vw,680px);height:92%;
  background:
    radial-gradient(34% 20% at 50% -1%,color-mix(in srgb,var(--accent) 24%,transparent),transparent 66%),
    radial-gradient(52% 62% at 50% 2%,color-mix(in srgb,var(--accent) 11%,transparent),transparent 70%),
    radial-gradient(70% 96% at 50% 0%,color-mix(in srgb,var(--accent) 5%,transparent),transparent 78%);
  -webkit-mask-image:radial-gradient(64% 92% at 50% 4%,#000 0 40%,transparent 76%);
  mask-image:radial-gradient(64% 92% at 50% 4%,#000 0 40%,transparent 76%);
  transform:translateX(calc(var(--light-x,0) * 1.4vw));
  opacity:.4;transition:opacity var(--dur-slow) var(--ease-silk),transform var(--dur-slow) var(--ease-silk);pointer-events:none}
.hall-work.is-right::before{left:auto;right:clamp(-2vw,0vw,0px)}
.hall-work:hover::before,.hall-work:focus-within::before{opacity:.72}
.hall-frame:hover,.hall-frame:focus-visible{transform:translate(var(--dx,0px),-7px) rotate(var(--dr,0deg));
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--text) 15%,transparent),inset 0 2px 4px color-mix(in srgb,var(--text) 11%,transparent),inset 0 -2px 4px color-mix(in srgb,var(--bg) 55%,transparent),0 0 0 1px color-mix(in srgb,var(--bg) 62%,transparent),calc(var(--light-x,0) * -38px) calc(44px - var(--light-y,0) * 16px) 66px -30px color-mix(in srgb,var(--bg) 94%,transparent),calc(var(--light-x,0) * -13px) calc(12px - var(--light-y,0) * 6px) 24px -12px color-mix(in srgb,var(--bg) 78%,transparent)}

/* 4b. 展签：贴住框底，承担摘要、过程与元信息 ------------------------------------- */
.hall-label{display:flex;flex-direction:column;justify-content:flex-end;padding:0 0 var(--sp-5);max-width:46ch}
.hall-label-index{font:var(--fs-xs)/1 var(--mono);letter-spacing:2.6px;color:var(--faint);text-transform:uppercase}
.hall-label h2{margin:var(--sp-4) 0 var(--sp-3);font-size:clamp(22px,2.4vw,30px);font-weight:500;letter-spacing:.6px;color:var(--text);line-height:1.3}
.hall-label .hall-label-sub{margin:0;font-size:var(--fs-lg);line-height:1.9;color:var(--muted)}
.hall-kind{display:inline-block;margin-left:var(--sp-2);padding:2px 8px;border:1px solid var(--hairline);border-radius:999px;font:11px/1.5 var(--mono);letter-spacing:1.4px;color:var(--muted);vertical-align:3px}
.hall-process{counter-reset:pr;margin:var(--sp-5) 0 0;padding:0;border-top:1px solid var(--hairline);display:grid}
.hall-process div{counter-increment:pr;display:grid;grid-template-columns:26px 64px minmax(0,1fr);gap:var(--sp-3);align-items:baseline;
  padding:var(--sp-3) 0;border-bottom:1px solid var(--hairline);transition:background var(--dur-fast)}
.hall-process div:last-child{border-bottom:0}
.hall-process div::before{content:counter(pr,decimal-leading-zero);font:10px/1.7 var(--mono);letter-spacing:1px;color:var(--faint)}
.hall-process dt{font:11px/1.7 var(--mono);letter-spacing:1.6px;color:var(--muted)}
.hall-process dd{margin:0;font-size:var(--fs-md);line-height:1.8;color:var(--muted)}
.hall-process div:hover{background:color-mix(in srgb,var(--hover) 40%,transparent)}
.hall-label-meta{margin:var(--sp-5) 0 0;font:var(--fs-sm)/1.7 var(--mono);letter-spacing:.3px;color:var(--faint)}
/* 展签目录条：年代 / 媒介 / 状态 / 入口，像画册里那一栏，右列对齐 */
.hall-catalog{margin:var(--sp-5) 0 0;padding:var(--sp-3) 0;display:grid;gap:3px;
  border-top:1px solid var(--hairline);border-bottom:1px solid var(--hairline)}
.hall-catalog div{display:grid;grid-template-columns:clamp(52px,4.6vw,74px) minmax(0,1fr);gap:var(--sp-3);align-items:baseline}
.hall-catalog dt{font:10px/1.9 var(--mono);letter-spacing:1.8px;color:var(--faint)}
.hall-catalog dd{margin:0;font:var(--fs-sm)/1.9 var(--mono);letter-spacing:.3px;color:var(--muted)}
.hall-catalog dd a{color:var(--accent);text-decoration:none;border-bottom:1px solid color-mix(in srgb,var(--accent) 34%,transparent)}
.hall-catalog dd a:hover{border-bottom-color:var(--accent)}
.hall-label-go{display:inline-flex;align-items:center;gap:8px;margin-top:var(--sp-5);padding:8px 0;font-size:var(--fs-md);color:var(--accent);background:none;border:0;cursor:pointer;align-self:flex-start}
.hall-label-go svg{width:14px;height:14px;transition:transform var(--dur-fast) var(--ease-silk)}
.hall-label-go:hover svg{transform:translate(4px,-4px)}

/* 5. 尾厅：导视牌 + 馆藏统计 ---------------------------------------------------- */
.hall-wayfinding .hall-section-title{margin-bottom:clamp(20px,3.4vh,34px)}
.hall-section-title{display:flex;align-items:baseline;gap:var(--sp-4);border-top:1px solid var(--hairline);padding-top:var(--sp-4)}
.hall-section-title h2{margin:0;font-size:var(--fs-lg);font-weight:500;letter-spacing:.8px;color:var(--text)}
.hall-section-title>span{font:var(--fs-xs) var(--mono);letter-spacing:2px;color:var(--faint);text-transform:uppercase}
.hall-section-title>span:last-child{margin-left:auto}
.hall-doors{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(20px,3.4vw,48px);border-top:1px solid var(--hairline);padding-top:clamp(20px,3vh,30px)}
.hall-door{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:baseline;gap:var(--sp-2) var(--sp-3);text-decoration:none;background:none;border:0;padding:0}
.hall-door-room{grid-column:1;grid-row:1;display:flex;align-items:center;gap:var(--sp-2);font:italic var(--fs-3xl)/1 var(--display-en);letter-spacing:1.6px;color:var(--faint);transition:color var(--dur-mid) var(--ease-silk)}
.hall-door-lock{display:inline-flex;align-items:center;gap:5px;font:11px/1 var(--mono);letter-spacing:1.2px;color:var(--faint)}
.hall-door-lock svg{width:12px;height:12px}
.hall-door-name{grid-column:1;grid-row:2;font-size:var(--fs-xl);font-weight:500;letter-spacing:.6px;color:var(--text);transition:color var(--dur-fast)}
.hall-door-arrow{grid-column:2;grid-row:2;color:var(--faint);transition:transform var(--dur-mid) var(--ease-silk),color var(--dur-fast)}
.hall-door-arrow svg{width:15px;height:15px}
.hall-door-note{grid-column:1/-1;grid-row:3;margin-top:var(--sp-2);font-size:var(--fs-md);line-height:1.8;color:var(--muted)}
.hall-door-tag{grid-column:1/-1;grid-row:4;padding-top:var(--sp-4);font:10px/1 var(--mono);letter-spacing:1.8px;color:var(--faint)}
.hall-door:hover .hall-door-room,.hall-door:hover .hall-door-name{color:var(--accent)}
.hall-door:hover .hall-door-arrow{transform:translate(5px,-5px);color:var(--accent)}
.hall-door.is-locked .hall-door-room{color:color-mix(in srgb,var(--faint) 72%,transparent)}
.hall-stats{display:flex;flex-wrap:wrap;gap:clamp(18px,3vw,44px);margin-top:clamp(26px,4vh,44px);padding-top:var(--sp-4);border-top:1px solid var(--hairline)}
.hall-stats div{display:flex;align-items:baseline;gap:var(--sp-2)}
.hall-stats b{font:500 var(--fs-2xl)/1 var(--display-en);color:var(--text)}
.hall-stats span{font:var(--fs-xs) var(--mono);letter-spacing:1.8px;color:var(--faint);text-transform:uppercase}
/* 序厅右列：改成竖排的馆藏速览，补住右侧空档 */
.hall-foreword-body .hall-stats{display:grid;gap:0;margin-top:0;padding-top:0;border-top:0}
.hall-foreword-body .hall-stats div{width:100%;gap:var(--sp-3);border-top:1px solid var(--hairline);padding:var(--sp-3) 0}
.hall-foreword-body .hall-stats div:first-child{border-top:0;padding-top:0}
.hall-stats-cap{display:block;width:100%;padding-bottom:var(--sp-3);font:var(--fs-xs)/1 var(--mono);letter-spacing:2.2px;color:var(--faint);text-transform:uppercase;border-bottom:1px solid var(--hairline)}
.hall-foreword-body .hall-stats b{font-size:var(--fs-xl)}

/* 6. 馆记 ---------------------------------------------------------------------- */
.hall-floor{border-top:1px solid var(--hairline);padding:var(--sp-4) 0 clamp(22px,3.4vh,34px);font-size:var(--fs-sm);color:var(--faint)}
.hall-floor .hall-stage-inner{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--sp-4);width:100%}
.hall-floor .hall-floor-mark{font:italic var(--fs-md)/1 var(--display-en);letter-spacing:2.4px;color:var(--muted)}
.hall-floor>a{color:var(--muted);text-decoration:none}
.hall-floor>a:hover{color:var(--accent)}
/* 回顶：离开序厅后浮在右下角，滚动途中随时能点，不必先滑到页脚。
   材质与浮牌同一套；图录盖上时让位，打印不出现。 */
.hall-totop{position:fixed;right:clamp(14px,2vw,28px);bottom:47px;z-index:8;
  display:grid;place-items:center;width:44px;height:44px;border-radius:50%;cursor:pointer;
  background:var(--sign-bg);border:1px solid var(--sign-line);color:var(--sign-ink);
  opacity:0;pointer-events:none;transform:translateY(10px);
  transition:opacity var(--dur-mid) var(--ease-silk),transform var(--dur-mid) var(--ease-silk),color var(--dur-fast),border-color var(--dur-fast)}
.hall-totop.is-up{opacity:1;pointer-events:auto;transform:none}
.hall-totop-stem{position:relative;display:block;width:1px;height:14px;
  background:linear-gradient(var(--accent),color-mix(in srgb,var(--accent) 20%,transparent))}
.hall-totop-stem::before{content:"";position:absolute;left:-3px;top:0;width:6px;height:6px;
  border-left:1px solid var(--accent);border-top:1px solid var(--accent);transform:rotate(45deg)}
.hall-totop:hover,.hall-totop:focus-visible{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 45%,transparent)}
html[data-sheet="1"] .hall-totop{opacity:0;pointer-events:none}
@media(prefers-reduced-motion:reduce){.hall-totop{transition:opacity var(--dur-fast) linear,transform none}}
/* 键盘提示挪到左下，别和回顶按钮抢右下角 */
html[data-view="hall"] .hall-keys{right:auto;left:clamp(14px,2vw,28px)}
@media print{.hall-totop{display:none}}

/* 7. 右侧展厅导轨 -------------------------------------------------------------- */
.hall-rail{position:fixed;right:clamp(12px,1.8vw,26px);top:50%;transform:translateY(-50%);display:grid;gap:var(--sp-3);z-index:6;margin:0;padding:0;list-style:none}
.hall-rail button{display:flex;align-items:center;justify-content:flex-end;gap:var(--sp-2);background:none;border:0;padding:2px 0;cursor:pointer;font:10px/1 var(--mono);letter-spacing:1.4px;color:var(--faint)}
.hall-rail i{display:block;width:14px;height:1px;background:var(--line);transition:width var(--dur-mid) var(--ease-silk),background var(--dur-fast)}
.hall-rail button:hover i,.hall-rail .is-current i{width:30px;background:var(--accent)}
.hall-rail button:hover,.hall-rail .is-current{color:var(--accent)}
.hall-rail .is-current span{opacity:1}
.hall-rail span{opacity:.55}

/* 8. 空态与加载 ---------------------------------------------------------------- */
.hall-empty{padding:clamp(36px,7vh,70px) 0;color:var(--muted);font-size:var(--fs-lg)}
.hall-skeleton{aspect-ratio:4/5;max-width:min(44vw,520px);background:linear-gradient(100deg,transparent 20%,color-mix(in srgb,var(--hover) 60%,transparent) 42%,transparent 64%) var(--panel);background-size:260% 100%;animation:hall-shimmer 1.5s linear infinite;box-shadow:0 0 0 1px var(--line)}
@keyframes hall-shimmer{to{background-position:-160% 0}}

/* 9. 入场动效统一放在第 13 节（视差与揭开），此处不再重复 */

/* 10. 焦点可见 ----------------------------------------------------------------- */
.hall-frame:focus-visible,.hall-label-go:focus-visible,.hall-door:focus-visible,.hall-rail button:focus-visible{outline:2px solid var(--focus-ring);outline-offset:6px}
.hall-frame:focus-visible{outline-offset:10px}

/* 11. 断点 --------------------------------------------------------------------- */
@media(max-width:1180px){
  .hall-foreword-body{grid-template-columns:minmax(0,1fr);gap:var(--sp-5);align-items:start}
  .hall-lede{border-left:0;padding-left:0;border-top:1px solid var(--hairline);padding-top:var(--sp-4);max-width:52ch}
}
@media(max-width:1380px){.hall-rail{display:none}}
@media(max-width:980px){
  .hall-stage{min-height:auto;padding:clamp(40px,9vh,80px) 0}
  .hall-work,.hall-work.is-right{grid-template-columns:minmax(0,1fr);gap:var(--sp-6)}
  .hall-work.is-right .hall-frame,.hall-work.is-right .hall-label{order:0}
  .hall-frame,.hall-work::before,.hall-work.is-right::before{max-width:min(78vw,420px);width:100%}
  .hall-work::before,.hall-work.is-right::before{left:50%;right:auto;transform:translateX(-50%)}
  .hall-label{max-width:none;padding-bottom:0}
  .hall-doors{grid-template-columns:minmax(0,1fr);gap:var(--sp-6)}
}
@media(max-width:650px){
  .hall-foreword h1{font-size:clamp(32px,10vw,52px)}
  .hall-frame,.hall-work::before,.hall-work.is-right::before{max-width:86vw}
  .hall-floor{flex-wrap:wrap;gap:var(--sp-3)}
  /* 备案号与国徽是法定要露出来的，窄屏也不能藏；先让位的是左边那句口号 */
  html[data-view="hall"] .app-shell{grid-template-rows:58px minmax(0,1fr) auto}
  html[data-view="hall"] .statusbar{white-space:normal;align-items:center;flex-wrap:wrap;padding:6px 16px}
  html[data-view="hall"] .statusbar>div:first-child{display:none}
  /* 不给自己 min-width:0 的话，footer-links 会按内容撑到 416px，被 overflow-x:hidden 切掉半条备案 */
  html[data-view="hall"] .statusbar .footer-links{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;flex:1;min-width:0;gap:5px 12px;margin-left:auto;font-size:12px}
  html[data-view="hall"] .statusbar .footer-links a{display:inline}
  html[data-view="hall"] .police-badge{display:block}
}

/* 13. 开场与灯光动效（仅在允许动效时） ------------------------------------------ */
@media (prefers-reduced-motion: no-preference){
  /* 馆词揭开：一道遮罩自下而上退场，两行错开 */
  /* 遮罩下沿多给 .24em，负外距补回：拉丁字母的 g、y 尾巴比 CJK 长，给少了会被齐根切掉 */
  .hall-foreword h1 span{display:block;overflow:hidden;padding-bottom:.24em;margin-bottom:-.24em}
  .hall-foreword h1 i{display:block;font-style:inherit;animation:hall-veil 1.15s var(--veil-ease) both}
  .hall-foreword h1 i:nth-of-type(2){animation-delay:.14s}
  @keyframes hall-veil{from{transform:translateY(104%)}to{transform:none}}
  .hall-foreword .hall-latin,.hall-foreword .hall-lede,.hall-foreword .hall-stats,.hall-hint{animation:hall-fade 1.4s var(--veil-ease) both}
  .hall-foreword .hall-latin{animation-delay:.5s}
  .hall-foreword .hall-lede{animation-delay:.66s}
  .hall-foreword .hall-stats{animation-delay:.78s}
  .hall-hint{animation-delay:1.05s}
  @keyframes hall-fade{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
  /* 馆词与署名不做入场动画：它们是本馆最重要的一句话，
     动画时钟一旦被节流（后台标签页、省电模式）就会整段空白，宁可让它们始终在墙上。 */
  /* 射灯缓慢呼吸，让墙"活着"；不在视野里就停——三盏灯一起跑是滚动掉帧的主因之一 */
  .hall-stage.is-lit .hall-work::before{animation:hall-breathe 9s ease-in-out infinite}
  @keyframes hall-breathe{0%,100%{opacity:.3}50%{opacity:.52}}
  /* 框面高光扫过：像有人打着手电从画前走过 */
  .hall-mat::after{content:"";position:absolute;inset:0;pointer-events:none;opacity:0;
    background:linear-gradient(104deg,transparent 34%,color-mix(in srgb,var(--text) 12%,transparent) 47%,transparent 60%);
    background-size:260% 100%;background-position:160% 0;transition:opacity var(--dur-mid)}
  .hall-frame:hover .hall-mat::after{opacity:1;animation:hall-matsweep 1.5s var(--ease-silk) forwards}
  @keyframes hall-matsweep{to{background-position:-60% 0}}
  /* 视差：框与文字不同速度，制造纵深 */
  @supports (animation-timeline: view()){
    /* 视差靠合成层做，不提升的话每帧都要重画木纹与卡纸那两层 overlay 混合 */
    .hall-work .hall-frame{animation:hall-drift-up linear both;animation-timeline:view();animation-range:entry 8% exit 92%;will-change:transform}
    .hall-work .hall-label{animation:hall-drift-down linear both;animation-timeline:view();animation-range:entry 8% exit 92%;will-change:transform}
    .hall-numeral{animation:hall-drift-slow linear both;animation-timeline:view();animation-range:entry 0% exit 100%;will-change:transform}
    @keyframes hall-drift-up{from{transform:translateY(6vh)}to{transform:translateY(-6vh)}}
    @keyframes hall-drift-down{from{transform:translateY(11vh)}to{transform:translateY(-11vh)}}
    @keyframes hall-drift-slow{from{transform:translateY(16vh) translateY(-50%)}to{transform:translateY(-16vh) translateY(-50%)}}
  }
}

/* 14. 竖排馆铭（左边缘） -------------------------------------------------------- */
.hall-edge{position:absolute;left:clamp(6px,1.2vw,18px);top:50%;transform:translateY(-50%) rotate(180deg);writing-mode:vertical-rl;
  font:10px/1 var(--mono);letter-spacing:4px;color:var(--faint);opacity:.6;pointer-events:none;text-transform:uppercase;white-space:nowrap}
@media(max-width:1180px){.hall-edge{display:none}}

/* 15. 邻近展厅（友链与外部身份） ------------------------------------------------ */
.hall-neighbors{margin-top:clamp(26px,4vh,42px);padding-top:var(--sp-4);border-top:1px solid var(--hairline)}
.hall-neighbors-cap{display:block;margin-bottom:var(--sp-4);font:var(--fs-xs)/1 var(--mono);letter-spacing:2.2px;color:var(--faint);text-transform:uppercase}
.hall-neighbors ul{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:clamp(14px,2.4vw,30px)}
.hall-neighbors li a{display:inline-flex;align-items:baseline;gap:8px;text-decoration:none;color:var(--muted);font-size:var(--fs-md);
  border-bottom:1px solid var(--hairline);padding-bottom:4px;transition:color var(--dur-fast),border-color var(--dur-fast)}
.hall-neighbors li a:hover{color:var(--accent);border-bottom-color:var(--accent)}
.hall-neighbors li a svg{width:11px;height:11px;opacity:.7}
.hall-neighbors li a span{font:10px/1 var(--mono);letter-spacing:1.4px;color:var(--faint)}

/* 16. 减弱动效：全部退场动画、呼吸、扫光与视差一律关闭 -------------------------- */
@media(prefers-reduced-motion:reduce){
  .hall-frame,.hall-door,.hall-door-room,.hall-door-name,.hall-door-arrow,.hall-rail i{transition:none}
  .hall-frame:hover,.hall-frame:focus-visible{transform:none}
  .hall-door:hover .hall-door-arrow{transform:none}
  .hall-hint::after{animation:none;opacity:.7}
  .hall-skeleton{animation:none}
  .hall-work::before{animation:none;opacity:.4}
  .hall-mat::after,.hall-frame:hover .hall-mat::after{animation:none;opacity:0}
  .hall-foreword h1 i,.hall-foreword .hall-latin,.hall-foreword .hall-lede,.hall-foreword .hall-stats,.hall-hint,
  .hall-work .hall-frame,.hall-work .hall-label,.hall-numeral{animation:none}
}

/* 21. 前言墙：直接刷在墙上的展览文字（动词驱动、第二人称、45 秒读完） ---------- */
.hall-walltext{max-width:46ch}
.hall-walltext-line{margin:0 0 var(--sp-4);font-family:var(--display-zh);font-weight:400;font-size:clamp(17px,1.55vw,23px);line-height:1.95;letter-spacing:.6px;color:var(--muted);text-wrap:pretty}
.hall-walltext-line:first-child{font-size:clamp(20px,2vw,30px);line-height:1.7;color:var(--text)}
.hall-walltext-line:nth-child(4){color:var(--accent)}
.hall-noscript{margin:var(--sp-4) 0 0;font-size:var(--fs-md);line-height:1.9;color:var(--muted);border-left:1px solid var(--accent);padding-left:var(--sp-4)}
/* 前言墙里藏的那枚开关：这句话本身就是切换灯光的按钮 */
.hall-lightline{display:block;width:fit-content;padding:0;border:0;background:none;text-align:left;
  font-family:inherit;font-weight:inherit;line-height:inherit;letter-spacing:inherit;cursor:pointer;position:relative}
.hall-lightline::before{content:'';display:inline-block;width:7px;height:7px;margin-right:11px;border-radius:50%;
  border:1px solid currentColor;background:transparent;opacity:.45;vertical-align:2px;
  transition:opacity var(--dur-fast),background var(--dur-fast),box-shadow var(--dur-fast)}
.hall-lightline::after{content:'';position:absolute;left:0;right:0;bottom:3px;height:1px;
  background:repeating-linear-gradient(to right,currentColor 0 2px,transparent 2px 6px);opacity:.26;
  transition:opacity var(--dur-fast)}
.hall-lightline:hover::before,.hall-lightline:focus-visible::before{opacity:1;background:currentColor;
  box-shadow:0 0 14px 2px color-mix(in srgb,var(--accent) 40%,transparent)}
.hall-lightline:hover::after,.hall-lightline:focus-visible::after{opacity:.7}
.hall-lightline:focus-visible{outline:1px solid var(--accent);outline-offset:6px}
.hall-sign{margin:var(--sp-5) 0 0;font:var(--fs-xs)/1.8 var(--mono);letter-spacing:2.2px;color:var(--faint)}
.hall-side{display:grid;gap:clamp(20px,3vh,32px);align-content:end}
/* 展期信息条 */
.hall-dates{margin:0;display:grid;gap:0;border-top:1px solid var(--hairline)}
.hall-dates>div{display:flex;align-items:baseline;gap:var(--sp-4);padding:11px 0;border-bottom:1px solid var(--hairline)}
.hall-dates dt{flex:0 0 96px;font:10px/1.5 var(--mono);letter-spacing:1.8px;color:var(--faint)}
.hall-dates dd{margin:0;font-size:var(--fs-md);color:var(--muted)}

/* 22. 叠在馆词正后方的巨型站名：居中、被标题压住，像墙上的投影。
    九个字母比原来六个罗马数字宽，字号收一档免得整面墙只剩它。 */
.hall-ghostword{position:absolute;left:clamp(0px,3vw,48px);top:clamp(120px,30%,300px);transform:translateY(-50%);
  font:italic 500 clamp(84px,16vw,230px)/.8 var(--display-en);letter-spacing:-.02em;text-transform:uppercase;
  color:var(--text);opacity:.055;pointer-events:none;user-select:none;z-index:-1;white-space:nowrap}
.hall-ghostword i{font-style:inherit;color:var(--accent)}
/* 挂画钢丝：从框顶两角收拢到墙上一个点 */
.hall-frame::before{content:"";position:absolute;left:16%;right:16%;top:-34px;height:34px;pointer-events:none;
  background:linear-gradient(to bottom,color-mix(in srgb,var(--accent) 40%,transparent),color-mix(in srgb,var(--text) 12%,transparent));
  clip-path:polygon(0 100%,50% 0,100% 100%,50% 16%);opacity:.5}
/* 顶部滚动进度发丝线 */
.hall-progress{position:sticky;top:0;z-index:9;height:1px;background:var(--accent);transform-origin:0 50%;transform:scaleX(0);opacity:.75}
/* 钉在顶部的"现在展出"牌：某件作品居于视口中线时才浮现，本身不占高度 */
.hall-onsign{position:sticky;top:0;z-index:9;height:0;display:flex;align-items:baseline;justify-content:flex-end;
  gap:var(--sp-2);padding:0 clamp(16px,3vw,34px);pointer-events:none;opacity:0;transform:translateY(-8px);
  transition:opacity var(--dur-mid) var(--ease-silk),transform var(--dur-mid) var(--ease-silk)}
.hall-onsign.is-live{opacity:1;transform:none}
/* 滚动时先让路，停下来再浮现：牌子不该追着文字跑 */
html.is-scrolling .hall-onsign{opacity:0;transform:translateY(-8px)}
.hall-onsign>*{padding:7px 12px;border:1px solid var(--sign-line);border-radius:999px;white-space:nowrap;
  background:color-mix(in srgb,var(--sign-bg) 88%,transparent);backdrop-filter:blur(9px) saturate(1.15);-webkit-backdrop-filter:blur(9px) saturate(1.15)}
.hall-onsign-cap{margin-top:12px;font:10px/1 var(--mono);letter-spacing:2.2px;color:var(--sign-ink);text-transform:uppercase}
.hall-onsign-name{margin-top:12px;font-family:var(--display-zh);font-size:var(--fs-sm);letter-spacing:.6px;color:var(--text)}
@media(max-width:980px){.hall-onsign{justify-content:center}.hall-onsign-name{display:none}}
/* 顶部留出一条签带：停稳时牌子压在留白上，不压展签第一行 */
@media(min-width:981px){.hall-stage{padding-top:clamp(62px,8.5vh,92px)}}

/* 23. 走字带：馆训循环横移，两端用遮罩淡出 */
.hall-marquee{position:relative;overflow:hidden;border-top:1px solid var(--hairline);border-bottom:1px solid var(--hairline);padding:clamp(10px,1.4vh,16px) 0;
  -webkit-mask-image:linear-gradient(to right,transparent,#000 12%,#000 88%,transparent);mask-image:linear-gradient(to right,transparent,#000 12%,#000 88%,transparent)}
.hall-marquee-track{display:flex;width:max-content;animation:hall-run 46s linear infinite}
.hall-marquee-set{display:flex;align-items:center;gap:var(--sp-4);padding-right:var(--sp-4);white-space:nowrap;font-family:var(--display-zh);font-size:clamp(13px,1.15vw,17px);letter-spacing:3.2px;color:var(--muted)}
.hall-marquee-set i{font-style:normal;color:var(--accent);opacity:.6}
@keyframes hall-run{to{transform:translateX(-50%)}}
.hall-marquee-track.is-driven{animation:none;will-change:transform}
@media(prefers-reduced-motion:reduce){.hall-marquee-track{animation:none}}

/* 24. 部题墙：展厅编号与部题文字 */
.hall-roomtitle .hall-stage-inner,.hall-skillroom>.hall-stage-inner{position:relative}
.hall-room-num{display:block;font:italic 500 clamp(84px,13vw,168px)/.9 var(--display-en);letter-spacing:-.02em;color:var(--accent);opacity:.26}
.hall-room-num.is-inline{margin-bottom:var(--sp-4)}
.hall-room-name{margin:calc(var(--sp-4) * -1) 0 var(--sp-4);font-family:var(--display-zh);font-weight:400;font-size:clamp(30px,4.6vw,58px);line-height:1.25;letter-spacing:2px;color:var(--text)}
.hall-room-lead{margin:0;max-width:52ch;font-size:var(--fs-lg);line-height:var(--lh-loose);color:var(--muted)}
.hall-roomtitle{min-height:clamp(340px,58dvh,560px);justify-content:flex-end}

/* 25. 结束语、展品清单与制作信息 ---------------------------------------------- */
.hall-closing{padding:clamp(20px,3vh,34px) 0 clamp(24px,4vh,38px)}
.hall-closing p{margin:0 0 var(--sp-4);font-family:var(--display-zh);font-size:clamp(18px,1.9vw,27px);line-height:1.8;letter-spacing:.8px;color:var(--text)}
.hall-closing p:last-child{color:var(--accent);margin-bottom:0}
.hall-checklist-wrap{border-top:1px solid var(--hairline);padding-top:var(--sp-4)}
.hall-checklist{list-style:none;counter-reset:ck;margin:var(--sp-4) 0 0;padding:0}
.hall-checklist li{counter-increment:ck}
.hall-checklist a{display:grid;grid-template-columns:34px minmax(0,1fr) auto 74px 14px;gap:var(--sp-3);align-items:baseline;
  padding:12px 0;border-bottom:1px solid var(--hairline);text-decoration:none;color:var(--muted);transition:color var(--dur-fast),padding-left var(--dur-mid) var(--ease-silk)}
.hall-checklist a:hover{color:var(--accent);padding-left:8px}
.hall-checklist a::before{content:counter(ck,decimal-leading-zero);font:11px/1 var(--mono);letter-spacing:1px;color:var(--faint)}
.hall-checklist .ck-title{font-size:var(--fs-md);color:inherit;overflow-wrap:anywhere}
.hall-checklist .ck-kind{font:10px/1 var(--mono);letter-spacing:1.6px;color:var(--faint)}
.hall-checklist .ck-year{font:11px/1 var(--mono);letter-spacing:1.2px;color:var(--faint);text-align:right}
.hall-checklist svg{width:11px;height:11px;opacity:.6}
.hall-credits{margin:clamp(24px,4vh,38px) 0 0;font:11px/2 var(--mono);letter-spacing:.8px;color:var(--faint)}

/* 18. 展厅 II · Skill 卡片墙 --------------------------------------------------- */
.hall-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(12px,1.6vw,20px)}
.hall-card{position:relative;display:flex;flex-direction:column;gap:var(--sp-3);padding:var(--sp-5) var(--sp-4) var(--sp-4);
  border:1px solid var(--line);border-radius:var(--r-sm);background:color-mix(in srgb,var(--panel) 52%,transparent);cursor:pointer;
  transition:border-color var(--dur-mid) var(--ease-silk),transform var(--dur-mid) var(--ease-silk),background var(--dur-mid),box-shadow var(--dur-mid)}
.hall-card:hover,.hall-card:focus-visible,.hall-card:focus-within{border-color:var(--accent);background:color-mix(in srgb,var(--panel) 88%,transparent);transform:translateY(-4px);
  box-shadow:0 22px 40px -26px color-mix(in srgb,var(--bg) 92%,transparent)}
.hall-card-head{display:flex;align-items:baseline;gap:var(--sp-3)}
.hall-card-index{font:11px/1 var(--mono);letter-spacing:1.6px;color:var(--faint)}
.hall-card-head h3{margin:0;flex:1;min-width:0;font-family:var(--display-en);font-weight:400;font-size:var(--fs-lg);line-height:1.35;letter-spacing:.2px;color:var(--text);overflow-wrap:anywhere}
.hall-card-year{font:11px/1 var(--mono);letter-spacing:1.2px;color:var(--faint)}
.hall-card-tag{margin:0;font-size:var(--fs-md);line-height:1.8;color:var(--muted)}
/* 悬停展开：用 0fr→1fr 做高度过渡，不写死像素 */
.hall-card-more{display:grid;grid-template-rows:0fr;opacity:0;transition:grid-template-rows var(--dur-mid) var(--ease-silk),opacity var(--dur-fast)}
.hall-card-more>*{overflow:hidden;min-height:0}
.hall-card:hover .hall-card-more,.hall-card:focus-within .hall-card-more,.hall-card:focus-visible .hall-card-more{grid-template-rows:1fr;opacity:1}
.hall-card-more p{margin:var(--sp-3) 0 0;padding-top:var(--sp-3);border-top:1px solid var(--hairline);font-size:var(--fs-sm);line-height:1.85;color:var(--muted)}
.hall-card-stack{list-style:none;display:flex;flex-wrap:wrap;gap:6px;margin:var(--sp-3) 0 0;padding:0}
.hall-card-stack li{font:10px/1 var(--mono);letter-spacing:1.2px;color:var(--faint);border:1px solid var(--hairline);border-radius:999px;padding:4px 7px}
.hall-card-open{display:inline-flex;align-items:center;gap:6px;margin-top:var(--sp-4);font-size:var(--fs-sm);color:var(--accent)}
.hall-card-open svg{width:11px;height:11px}
.hall-card-foot{display:flex;align-items:center;gap:var(--sp-3);margin-top:auto;padding-top:var(--sp-3);border-top:1px solid var(--hairline)}
.hall-card-kind{font:10px/1 var(--mono);letter-spacing:1.8px;color:var(--muted)}
.hall-card-scale{font:10px/1 var(--mono);letter-spacing:1.2px;color:var(--faint)}
.hall-card-repo{margin-left:auto;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:var(--r-sm);color:var(--faint);transition:color var(--dur-fast),background var(--dur-fast)}
.hall-card-repo:hover{color:var(--accent);background:var(--hover)}
.hall-card-repo svg{width:16px;height:16px}
@media(max-width:1180px){.hall-cards{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:700px){.hall-cards{grid-template-columns:minmax(0,1fr)}
  .hall-card-more{grid-template-rows:1fr;opacity:1}}

/* 19. Skill 详情页：展签 + 分层剖面 + 流程表 ------------------------------------ */
.skills-detail{max-width:920px;margin:0 auto;padding:clamp(24px,4vh,44px) 0 0}
.skills-head{padding-bottom:clamp(24px,4vh,40px);border-bottom:1px solid var(--hairline)}
.skills-room{display:block;font:var(--fs-xs)/1 var(--mono);letter-spacing:2.6px;color:var(--faint);text-transform:uppercase}
.skills-head h1{margin:var(--sp-4) 0 var(--sp-3);font-family:var(--display-en);font-weight:400;font-size:clamp(28px,4.4vw,50px);line-height:1.2;letter-spacing:.2px;color:var(--text);overflow-wrap:anywhere}
.skills-tag{margin:0;font-size:var(--fs-xl);line-height:1.6;color:var(--accent)}
.skills-actions{display:flex;flex-wrap:wrap;gap:var(--sp-3);margin-top:var(--sp-5)}
.skills-btn{display:inline-flex;align-items:center;gap:8px;padding:10px 16px;border:1px solid var(--accent);border-radius:999px;background:var(--accent);color:var(--accent-text);text-decoration:none;font-size:var(--fs-md);transition:filter var(--dur-fast),transform var(--dur-fast)}
.skills-btn:hover{filter:brightness(1.08);transform:translateY(-1px)}
.skills-btn svg{width:15px;height:15px}
.skills-btn.is-ghost{background:none;color:var(--muted);border-color:var(--line)}
.skills-btn.is-ghost:hover{color:var(--accent);border-color:var(--accent)}
.skills-stack{list-style:none;display:flex;flex-wrap:wrap;gap:7px;margin:var(--sp-5) 0 0;padding:0}
.skills-stack li{font:11px/1 var(--mono);letter-spacing:1.2px;color:var(--faint);border:1px solid var(--hairline);border-radius:999px;padding:5px 9px}
.skills-block{padding:clamp(26px,4vh,40px) 0;border-bottom:1px solid var(--hairline)}
.skills-block h2{margin:0 0 var(--sp-5);font:var(--fs-xs)/1 var(--mono);letter-spacing:2.6px;color:var(--faint);text-transform:uppercase}
.skills-block>p{margin:0;font-size:var(--fs-lg);line-height:var(--lh-loose);color:var(--muted);max-width:64ch}
.skills-layers{display:grid;gap:var(--sp-3)}
.skills-layer{position:relative;overflow:hidden;display:grid;grid-template-columns:minmax(0,120px) minmax(0,1fr) auto;gap:var(--sp-4);align-items:center;padding:var(--sp-3) var(--sp-4);border:1px solid var(--line);border-radius:var(--r-sm);background:color-mix(in srgb,var(--panel) 40%,transparent)}
.skills-layer-bar{display:block;position:absolute;left:0;bottom:0;height:2px;width:var(--w,6%);
  background:color-mix(in srgb,var(--accent) 62%,transparent)}
.skills-layer-name{font-size:var(--fs-md);font-weight:550;color:var(--text)}
.skills-layer-note{font-size:var(--fs-sm);line-height:1.7;color:var(--muted)}
.skills-layer-count{font:11px/1 var(--mono);letter-spacing:1.2px;color:var(--faint);white-space:nowrap}
.skills-flow{list-style:none;counter-reset:step;margin:0;padding:0;display:grid;gap:1px;background:var(--hairline)}
.skills-flow li{display:grid;grid-template-columns:56px minmax(0,1fr);gap:var(--sp-4);align-items:baseline;padding:var(--sp-4);background:var(--bg)}
.skills-flow-n{font:italic var(--fs-lg)/1 var(--display-en);color:var(--accent);opacity:.75}
.skills-flow li span:last-child{font-size:var(--fs-md);line-height:1.75;color:var(--muted)}
.skills-meta{display:flex;flex-wrap:wrap;gap:clamp(18px,3vw,40px);border-bottom:0}
.skills-meta div{display:flex;flex-direction:column;gap:6px}
.skills-meta b{font:500 var(--fs-xl)/1 var(--display-en);color:var(--text)}
.skills-meta span{font:var(--fs-xs) var(--mono);letter-spacing:1.6px;color:var(--faint);text-transform:uppercase}
.skills-pager{display:flex;flex-wrap:wrap;gap:var(--sp-4);padding:clamp(22px,3.4vh,34px) 0}
.skills-pager a{font:var(--fs-sm)/1 var(--mono);letter-spacing:.6px;color:var(--faint);text-decoration:none;padding-bottom:3px;border-bottom:1px solid transparent}
.skills-pager a:hover{color:var(--muted)}
.skills-pager .is-current{color:var(--accent);border-bottom-color:var(--accent)}
.hall-detail-back{color:var(--accent)}
@media(max-width:700px){
  .skills-layer{grid-template-columns:minmax(0,1fr) auto;gap:var(--sp-2) var(--sp-3)}
  .skills-layer-note{grid-column:1/-1}
}

/* 20. 厅内标题栏：只留馆名、案头入口与两个开关 ---------------------------------- */
.hall-desk-link{display:none;align-items:center;gap:7px;font-size:var(--fs-md);color:var(--muted);text-decoration:none;
  padding:6px 11px;border:1px solid var(--hairline);border-radius:999px;transition:color var(--dur-fast),border-color var(--dur-fast)}
.hall-desk-link svg{width:13px;height:13px;color:var(--faint)}
.hall-desk-link:hover{color:var(--accent);border-color:var(--accent)}
html[data-view="hall"] .hall-desk-link{display:inline-flex}
@media(max-width:650px){.hall-desk-link span{display:none}.hall-desk-link{padding:6px 8px}}

/* 25. 平面图与展厅目录：不报件数，只报厅名 -------------------------------------- */
/* 25a. 抬头里的导览牌：一条缩略平面图 + 当前厅名，悬停展开带厅名的完整图 ---------- */
.hall-plaque{display:none;position:relative;margin-left:var(--sp-5)}
html[data-view="hall"] .hall-plaque{display:block}
.plaque-toggle{display:flex;align-items:center;gap:var(--sp-3);padding:5px 11px 5px 8px;cursor:pointer;font:inherit;
  background:none;border:1px solid var(--hairline);border-radius:999px;
  transition:border-color var(--dur-fast),background var(--dur-fast)}
.plaque-toggle:hover,.plaque-toggle:focus-visible,.hall-plaque.is-open .plaque-toggle{
  border-color:color-mix(in srgb,var(--accent) 52%,transparent);background:color-mix(in srgb,var(--accent) 8%,transparent)}
.plaque-strip{flex:0 0 auto;width:76px;height:35px}
.plaque-toggle b{font-family:var(--display-zh);font-weight:400;font-size:var(--fs-md);letter-spacing:1.2px;color:var(--text)}
.plaque-toggle i{font-style:normal;font:9px/1 var(--mono);letter-spacing:1.8px;color:var(--faint);text-transform:uppercase}
.plaque-panel{position:absolute;top:calc(100% + 10px);left:0;width:254px;padding:12px 13px 10px;
  border:1px solid var(--hairline);border-radius:3px;z-index:20;
  background:color-mix(in srgb,var(--sign-bg) 94%,transparent);
  backdrop-filter:blur(14px) saturate(1.15);-webkit-backdrop-filter:blur(14px) saturate(1.15);
  box-shadow:inset 0 1px 0 color-mix(in srgb,var(--text) 7%,transparent),0 26px 52px -26px color-mix(in srgb,var(--bg) 96%,transparent);
  opacity:0;visibility:hidden;transform:translateY(-6px);
  transition:opacity var(--dur-mid) var(--ease-silk),transform var(--dur-mid) var(--ease-silk),visibility var(--dur-mid)}
.hall-plaque:hover .plaque-panel,.hall-plaque:focus-within .plaque-panel,.hall-plaque.is-open .plaque-panel{opacity:1;visibility:visible;transform:none}
.plaque-cap{display:block;margin-bottom:9px;font:var(--fs-xs)/1 var(--mono);letter-spacing:2.2px;color:color-mix(in srgb,var(--text) 72%,transparent);text-transform:uppercase}
.plaque-hint{display:block;margin-top:8px;padding-top:7px;border-top:1px solid color-mix(in srgb,var(--text) 16%,transparent);
  font:var(--fs-xs)/1 var(--mono);letter-spacing:1.4px;color:color-mix(in srgb,var(--text) 72%,transparent)}
.hall-plan-svg{display:block;width:100%;height:auto;overflow:visible}
/* 平面图的颜色一律从 --text 派生：三套灯光下都有对比，不再依赖只在暗墙成立的 --hairline/--muted */
.hall-plaque .plan-room{fill:color-mix(in srgb,var(--text) 5%,transparent);stroke:color-mix(in srgb,var(--text) 70%,transparent);stroke-width:1;
  transition:fill var(--dur-mid) var(--ease-silk),stroke var(--dur-mid) var(--ease-silk)}
.hall-plaque .plan-room.is-off{fill:none;stroke-dasharray:3 3;opacity:.72}
.hall-plaque .plan-room.is-here{fill:color-mix(in srgb,var(--accent) 22%,transparent);stroke:var(--accent)}
.hall-plaque .plan-label{font:8.6px/1 var(--mono);letter-spacing:.3px;fill:color-mix(in srgb,var(--text) 86%,transparent);
  text-anchor:middle;pointer-events:none;transition:fill var(--dur-mid) var(--ease-silk)}
.hall-plaque .plan-label.is-here{fill:var(--text)}
.hall-plaque .plan-pin{transform:translate(22px,51px);transition:transform 660ms var(--ease-silk)}
.hall-plaque .plan-dot{fill:var(--accent)}
.hall-plaque .plan-halo{fill:var(--accent);opacity:.2;animation:hall-lamp 3.4s ease-in-out infinite}
@keyframes hall-lamp{0%,100%{opacity:.12}50%{opacity:.34}}
.hall-plan-svg .plan-room{cursor:pointer}
.hall-plan-svg .plan-room:hover{fill:color-mix(in srgb,var(--accent) 12%,transparent);stroke:var(--accent)}
@media(max-width:760px){
  .plaque-strip,.plaque-toggle i{display:none}
  .plaque-panel{left:auto;right:0}
  .hall-plaque{margin-left:var(--sp-3)}
}
.hall-rooms-cap{display:block;margin-bottom:var(--sp-3);font:var(--fs-xs)/1 var(--mono);letter-spacing:2.2px;color:var(--faint);text-transform:uppercase}
/* 展厅目录牌：一块块并排，像大厅里那面导视墙 */
.hall-rooms{list-style:none;margin:0 0 clamp(22px,3.4vh,38px);padding:var(--sp-4) 0;display:grid;
  grid-template-columns:repeat(auto-fit,minmax(158px,1fr));gap:var(--sp-3) var(--sp-5);
  border-top:1px solid var(--hairline)}
.hall-rooms li{display:grid;gap:5px;align-content:start;cursor:pointer;outline:none}
.hall-rooms b{font-weight:500;font-size:var(--fs-md);letter-spacing:.8px;color:var(--muted);transition:color var(--dur-fast)}
.hall-rooms span{font:var(--fs-xs)/1.7 var(--mono);letter-spacing:.3px;color:var(--faint)}
.hall-rooms li:hover b,.hall-rooms li:focus-visible b{color:var(--text)}
.hall-rooms li.is-here b{color:var(--accent)}
.hall-rooms li.is-here span{color:var(--muted)}

/* 26. 夜场一行 ------------------------------------------------------------------ */
.hall-night{margin:var(--sp-3) 0 0;font:var(--fs-xs)/1.8 var(--mono);letter-spacing:2.2px;color:var(--accent);opacity:.82}

/* 27. 键位提示 ------------------------------------------------------------------ */
.hall-keys{position:fixed;right:clamp(14px,2vw,28px);bottom:clamp(14px,2.4vh,26px);z-index:7;display:flex;align-items:center;gap:6px;
  font:var(--fs-xs)/1 var(--mono);letter-spacing:1.6px;color:var(--faint);opacity:.72;transition:opacity var(--dur-slow) var(--ease-silk)}
.hall-keys kbd{display:inline-grid;place-items:center;min-width:20px;height:20px;border:1px solid var(--hairline);border-radius:4px;color:var(--muted);font:inherit}
.hall-keys.is-gone{opacity:0}
@media(max-width:1180px),(hover:none){.hall-keys{display:none}}

/* 28. 图录：屏上是夹在尾厅的一页纸，打印即 PDF ---------------------------------- */
.hall-sheet-stage{display:none}
.hall-sheet-actions{display:flex;align-items:baseline;gap:var(--sp-4);margin-top:var(--sp-5);padding-top:var(--sp-4);border-top:1px solid var(--hairline)}
.hall-sheet-btn{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;font-size:var(--fs-md);color:var(--accent);cursor:pointer;
  background:none;border:1px solid color-mix(in srgb,var(--accent) 42%,transparent);border-radius:999px;transition:background var(--dur-fast),color var(--dur-fast)}
.hall-sheet-btn:hover{background:color-mix(in srgb,var(--accent) 12%,transparent)}
.hall-sheet-note{font:var(--fs-xs)/1.7 var(--mono);letter-spacing:1.2px;color:var(--faint)}
html[data-sheet="1"] .hall-stage:not(.hall-sheet-stage),
html[data-sheet="1"] .hall-marquee,html[data-sheet="1"] .hall-rail,html[data-sheet="1"] .hall-onsign,
html[data-sheet="1"] .hall-progress,html[data-sheet="1"] .hall-floor,html[data-sheet="1"] .hall-keys,
html[data-sheet="1"] .hall-plaque{display:none}
html[data-sheet="1"] .hall-sheet-stage{display:flex;min-height:calc(100dvh - 87px)}
.sheet-inner{max-width:780px;margin:0 auto;padding:clamp(26px,4vw,50px);
  background:color-mix(in srgb,var(--editor) 96%,var(--bg));
  box-shadow:0 40px 80px -44px color-mix(in srgb,var(--bg) 92%,transparent),0 0 0 1px var(--hairline)}
.sheet-head{margin-bottom:var(--sp-5);padding-bottom:var(--sp-4);border-bottom:1px solid var(--hairline)}
.sheet-kicker{font:var(--fs-xs)/1 var(--mono);letter-spacing:2.6px;color:var(--faint);text-transform:uppercase}
.sheet-head h2{margin:var(--sp-3) 0 0;font-family:var(--display-zh);font-weight:400;font-size:clamp(26px,3.4vw,40px);letter-spacing:2px;color:var(--text)}
.sheet-by{margin:var(--sp-2) 0 0;font:var(--fs-xs)/1.8 var(--mono);letter-spacing:1.4px;color:var(--faint)}
.sheet-list{list-style:none;margin:0;padding:0}
.sheet-row{display:grid;grid-template-columns:34px minmax(0,1fr);gap:var(--sp-3);padding:var(--sp-4) 0;border-bottom:1px solid var(--hairline);break-inside:avoid}
.sheet-n{font:11px/1.6 var(--mono);letter-spacing:1px;color:var(--faint)}
.sheet-body h3{margin:0;font-size:var(--fs-lg);font-weight:500;letter-spacing:.6px;color:var(--text)}
.sheet-body h3 em{margin-left:var(--sp-2);padding:3px 6px;border:1px solid var(--hairline);font:10px/1 var(--mono);font-style:normal;letter-spacing:1.6px;color:var(--faint);vertical-align:2px}
.sheet-facts{margin:6px 0 0;font:var(--fs-sm)/1.7 var(--mono);letter-spacing:.3px;color:var(--muted)}
.sheet-note{margin:8px 0 0;font-size:var(--fs-md);line-height:1.85;color:var(--muted);max-width:62ch}
.sheet-url{margin:6px 0 0;font:11px/1.7 var(--mono);color:var(--faint);word-break:break-all}
.sheet-foot{display:flex;gap:var(--sp-3);margin-top:var(--sp-5)}
.sheet-btn{padding:8px 14px;font-size:var(--fs-md);color:var(--muted);cursor:pointer;background:none;border:1px solid var(--hairline);border-radius:999px;transition:color var(--dur-fast),border-color var(--dur-fast)}
.sheet-btn:hover{color:var(--accent);border-color:var(--accent)}
@media print{
  html[data-view="hall"] .titlebar,html[data-view="hall"] .statusbar{display:none}
  html[data-view="hall"] .app-shell{grid-template-rows:minmax(0,1fr)}
  html[data-view="hall"] .main-area{overflow:visible}
  .hall-view{background:#fff}
  .hall-view::before,.hall-view::after{display:none}
  .hall-stage:not(.hall-sheet-stage),.hall-marquee,.hall-rail,.hall-onsign,.hall-progress,.hall-floor,.hall-keys,.hall-plaque,.hall-sheet-actions{display:none!important}
  .hall-sheet-stage{display:block!important;min-height:0;padding:0}
  .sheet-inner{max-width:none;padding:0;background:#fff;box-shadow:none}
  .sheet-head h2,.sheet-body h3{color:#000}
  .sheet-note,.sheet-facts{color:#1f1f1f}
  .sheet-kicker,.sheet-by,.sheet-n,.sheet-url,.sheet-body h3 em{color:#555}
  .sheet-row,.sheet-head{border-color:#bbb}
  .sheet-foot{display:none}
}

/* 29. 进度线上的厅界刻度 -------------------------------------------------------- */
.hall-ticks{position:sticky;top:0;z-index:8;height:0;pointer-events:none}
.hall-ticks i{position:absolute;top:0;width:1px;height:5px;background:color-mix(in srgb,var(--text) 24%,transparent)}

/* 30. 策展人说明：一张压在展签下面的卡片，展开后是一条左边压线的引文 ------------ */
.hall-note{margin:var(--sp-4) 0 0;border-top:1px solid var(--hairline)}
.hall-note summary{display:flex;align-items:center;gap:10px;padding:11px 0;cursor:pointer;list-style:none;
  font:10px/1 var(--mono);letter-spacing:2.2px;color:color-mix(in srgb,var(--text) 78%,transparent);text-transform:uppercase;transition:color var(--dur-fast)}
.hall-note summary::-webkit-details-marker{display:none}
.hall-note summary::before{content:'';flex:0 0 auto;width:7px;height:7px;border-right:1px solid currentColor;border-bottom:1px solid currentColor;
  transform:rotate(-45deg);transition:transform var(--dur-mid) var(--ease-silk)}
.hall-note[open] summary::before{transform:rotate(45deg)}
.hall-note summary:hover,.hall-note summary:focus-visible{color:var(--accent)}
.hall-note p{margin:0 0 var(--sp-4);padding-left:16px;border-left:1px solid color-mix(in srgb,var(--accent) 42%,transparent);
  font-size:var(--fs-md);line-height:1.95;color:var(--muted);max-width:44em}

/* 31. 同厅另见 ------------------------------------------------------------------ */
.hall-also{margin:var(--sp-5) 0 0;padding-top:var(--sp-3);border-top:1px solid var(--hairline)}
.hall-also-cap{display:block;margin-bottom:var(--sp-2);font:10px/1 var(--mono);letter-spacing:2.2px;color:var(--faint);text-transform:uppercase}
.hall-also ul{list-style:none;margin:0;padding:0;display:grid;gap:7px}
.hall-also a{display:grid;grid-template-columns:minmax(0,auto) minmax(0,1fr);gap:var(--sp-3);align-items:baseline;text-decoration:none}
.hall-also b{font-weight:500;font-size:var(--fs-md);letter-spacing:.4px;color:var(--text);transition:color var(--dur-fast)}
.hall-also span{font:var(--fs-xs)/1.7 var(--mono);letter-spacing:.2px;color:var(--faint)}
.hall-also a:hover b,.hall-also a:focus-visible b{color:var(--accent)}

/* 33. 双语厅名 ------------------------------------------------------------------ */
.hall-room-latin{display:block;font:italic var(--fs-sm)/1 var(--display-en);letter-spacing:3.4px;color:var(--faint);text-transform:uppercase}
.hall-roomtitle .hall-room-latin{margin:-4px 0 var(--sp-4)}
.hall-section-title .hall-room-latin{margin-left:var(--sp-4);font:italic var(--fs-sm)/1 var(--display-en);letter-spacing:3.4px;color:var(--faint);text-transform:uppercase}
.hall-section-title span:last-child{margin-left:auto}

/* 34. 排版：中日韩标点收紧、标题配平、段落收尾干净、数字对齐 -------------------- */
html[data-view="hall"]{font-feature-settings:"palt" 1,"halt" 1}
.hall-foreword h1,.hall-room-name,.hall-section-title h2,.hall-plate-title,.hall-label h2,
.skills-head h1,.sheet-head h2,.hall-card h3{text-wrap:balance}
.hall-label-sub,.hall-room-lead,.hall-walltext-line,.hall-process dd,.hall-note p,.hall-closing p,
.sheet-note,.hall-card-tag,.hall-card-more p{text-wrap:pretty}
.hall-dates dd,.hall-catalog dd,.hall-label-index,.ck-year,.sheet-n,.sheet-facts,
.hall-onsign-name,.hall-room-num,.hall-numeral,.hall-plan-svg text,.hall-year,.hall-card-index,
.hall-card-scale,.hall-plate-mark,.hall-door-room{text-wrap:unset;font-variant-numeric:tabular-nums lining-nums}
/* 首句前一道短铜线：告诉人正文从这里开始，不用加粗也不用变色 */
.hall-walltext-line:first-child::before{content:"";display:block;width:26px;height:1px;background:var(--accent);opacity:.55;margin-bottom:var(--sp-4)}

/* 35. 材质：木纹与卡纸斜切 ------------------------------------------------------ */
.hall-defs{position:absolute;width:0;height:0;overflow:hidden}
/* 一层由 feTurbulence 生成的漫反射纹理，soft-light 叠在木色上：
   三套灯光换的是底色，纹理本身是中性的，所以不用跟着改 */
.hall-wood{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;
  mix-blend-mode:overlay;opacity:.3}
.hall-frame:hover .hall-wood{opacity:.4}
/* 卡纸的窗口是 45° 切出来的：四条梯形边各受不同的光，左上亮、右下暗 */
.hall-mat::after{content:"";position:absolute;inset:clamp(9px,1.1vw,14px);border-style:solid;
  border-width:clamp(8px,1vw,13px);pointer-events:none;
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--bg) 62%,transparent);
  border-top-color:color-mix(in srgb,var(--text) 30%,transparent);
  border-left-color:color-mix(in srgb,var(--text) 20%,transparent);
  border-right-color:color-mix(in srgb,var(--bg) 46%,transparent);
  border-bottom-color:color-mix(in srgb,var(--bg) 58%,transparent)}
@media(prefers-reduced-motion:reduce){.hall-wood{transition:none}}

/* 36. 卡纸纤维与图录封面 -------------------------------------------------------- */
/* 卡纸不是纯平的：复用墙面那层噪点，尺寸压到 74px，overlay 让它在深浅两套底上都成立 */
.hall-fiber{position:absolute;inset:0;background-image:var(--grain);background-size:74px 74px;
  opacity:calc(var(--grain-op) * 3.4);mix-blend-mode:overlay;pointer-events:none}
/* 封面：馆名、拉丁文题名、一张条目表，右下角压一个空心年份 */
.sheet-head{position:relative;overflow:hidden}
.sheet-ghost{position:absolute;right:-.06em;top:-.16em;font:italic 500 clamp(78px,13vw,150px)/1 var(--display-en);
  letter-spacing:-.02em;color:var(--text);opacity:.05;pointer-events:none}
.sheet-latin{margin:6px 0 0;font:italic var(--fs-md)/1 var(--display-en);letter-spacing:5px;color:var(--faint);text-transform:uppercase}
.sheet-list-facts{margin:var(--sp-5) 0 0;padding:0;display:grid;gap:0;border-top:1px solid var(--hairline)}
.sheet-list-facts>div{display:grid;grid-template-columns:clamp(72px,9vw,104px) minmax(0,1fr);gap:var(--sp-4);
  padding:8px 0;border-bottom:1px solid var(--hairline);align-items:baseline}
.sheet-list-facts dt{font:10px/1.7 var(--mono);letter-spacing:1.8px;color:var(--faint)}
.sheet-list-facts dd{margin:0;font-size:var(--fs-md);letter-spacing:.4px;color:var(--muted)}
@media print{
  .sheet-ghost{color:#000;opacity:.07}
  .sheet-list-facts>div{border-color:#bbb}
  .sheet-list-facts dt,.sheet-latin{color:#555}
  .sheet-list-facts dd{color:#111}
}

/* 37. 画心：像素织锦，滚动时起波澜 -------------------------------------------- */
/* 画要有画底：比卡纸更深的一块，加一道内沿细线，格子才不是浮在卡纸上 */
.hall-art{display:block;margin:0 0 clamp(16px,2.2vw,26px);padding:clamp(10px,1.4vw,16px);
  background:color-mix(in srgb,var(--bg) 46%,transparent);
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--text) 9%,transparent),
    inset 0 10px 22px -18px color-mix(in srgb,var(--bg) 90%,transparent)}
.hall-art svg{display:block;width:100%;height:auto;overflow:visible}
/* 站点里 svg rect 会继承一条亮描边，底格本就该几乎看不见，这里必须掐掉 */
.hall-art rect{stroke:none}
/* 逐行推，一行一个相位；sin() 不被支持时整条声明失效，画面静止但仍成立 */
.hall-art .art-row{transform:translateY(calc(sin(calc(var(--p,0) * 3.14159rad + var(--i) * .42rad)) * var(--amp,4px)));
  transition:transform 120ms linear}
.hall-frame:hover{--amp:7px}
/* 五档色阶：三档石青、两档铜，像一张铜版印刷 */
.hall-art .art-0{fill:color-mix(in srgb,var(--text) 5%,transparent)}
.hall-art .art-1{fill:color-mix(in srgb,var(--text) 13%,transparent)}
.hall-art .art-2{fill:color-mix(in srgb,var(--text) 28%,transparent)}
.hall-art .art-3{fill:color-mix(in srgb,var(--accent) 52%,transparent)}
.hall-art .art-4{fill:var(--accent)}
/* 展签上的副题：压在标题上方，像画册里那行小字 */
.hall-label-kicker{margin:var(--sp-3) 0 0;font-family:var(--display-zh);font-size:var(--fs-lg);line-height:1.7;
  letter-spacing:.6px;color:var(--muted)}
.hall-label h2{margin-top:var(--sp-2)}
@media print{
  .hall-art .art-1{fill:#ddd}
  .hall-art .art-2{fill:#9a9a9a}
  .hall-art .art-3{fill:#8a7a52}
  .hall-art .art-4{fill:#2c2c2c}
}

/* 38. 画前的光：让画在指针与滚动下真的会动 ------------------------------------ */
.hall-art{position:relative}
/* 玻璃上跟着指针走的一团光；静止时不出现，所以不播也不丢任何东西 */
.hall-art::after{content:"";position:absolute;inset:0;pointer-events:none;opacity:0;
  background:radial-gradient(40% 34% at var(--fx,50%) var(--fy,45%),color-mix(in srgb,var(--text) 20%,transparent),transparent 68%);
  mix-blend-mode:soft-light;transition:opacity var(--dur-mid) var(--ease-silk)}
.hall-frame:hover .hall-art::after{opacity:1}
/* 首次入画扫一道铜色斜光：底态是透明的，动画不播放也只是没有，不会留白 */
.hall-art::before{content:"";position:absolute;inset:0;pointer-events:none;opacity:0;
  background:linear-gradient(104deg,transparent 32%,color-mix(in srgb,var(--accent) 30%,transparent) 48%,transparent 64%)}
.hall-stage.is-hung .hall-art::before{animation:hall-sweep 1500ms var(--ease-silk) 1 both}
@keyframes hall-sweep{0%{opacity:0;transform:translateX(-118%)}18%{opacity:1}82%{opacity:1}100%{opacity:0;transform:translateX(118%)}}
/* 各行错相位收尾，波才像水而不是一格一格跳 */
.hall-art .art-row{transition:transform 280ms var(--ease-silk);transition-delay:calc(var(--i) * 11ms)}
.hall-art .art-3,.hall-art .art-4{transition:fill var(--dur-slow) var(--ease-silk)}
.hall-frame:hover .art-4{fill:color-mix(in srgb,var(--accent) 82%,var(--text))}
.hall-frame:hover .art-3{fill:color-mix(in srgb,var(--accent) 62%,transparent)}
/* 画比框再多抬一点，玻璃与画心之间就有了距离 */
.hall-art{transition:transform var(--dur-slow) var(--ease-silk)}
.hall-frame:hover .hall-art{transform:translateY(-5px)}
@media(prefers-reduced-motion:reduce){
  .hall-art .art-row{transition:none;transition-delay:0ms}
  .hall-stage.is-hung .hall-art::before{animation:none}
  .hall-art,.hall-art::after{transition:none}
}

/* 39. 卡片横截面：每层一条，长度就是它的文件数；最厚的那层用铜色 */
.hall-card-sec{display:grid;gap:3px;margin:0 0 var(--sp-4);padding:9px 10px;
  background:color-mix(in srgb,var(--bg) 42%,transparent);
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--text) 8%,transparent)}
.hall-card-sec i{display:block;height:5px;width:var(--w,4%);opacity:.58;
  background:color-mix(in srgb,var(--text) 38%,transparent);
  transition:opacity 380ms var(--ease-silk),background var(--dur-mid) var(--ease-silk)}
.hall-card-sec i.is-top{background:var(--accent);opacity:.62}
/* 悬停时逐层点亮，像一排小灯依次拧开；位置与长度都不动——抽长和整块平移都难看 */
.hall-card:hover .hall-card-sec i,.hall-card:focus-within .hall-card-sec i{opacity:1;transition-delay:calc(var(--i) * 46ms)}
.hall-card:hover .hall-card-sec i.is-top,.hall-card:focus-within .hall-card-sec i.is-top{
  background:color-mix(in srgb,var(--accent) 72%,var(--text))}
@media print{.hall-card-sec{display:none}}
