/* 固定视角的原画保留完整轮廓，导览由门洞和主导航承担。 */
.exhibition-hero { position: relative; height: auto; aspect-ratio: 1672 / 941; min-height: 0; background: #e9edf3; overflow: hidden; }
.hero-scene { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; object-position: center; }
/* 材质高光按原画轮廓裁切，跟随图片尺寸而不是手机标题区。 */
.hero-material-light { position: absolute; pointer-events: none; opacity: 0; overflow: hidden; }
.exhibition-hero.scene-ready .hero-material-light { opacity: 1; }
.hero-needle-highlight { opacity: 0; animation: exhibition-needle-reflection 6s linear infinite paused; }
.hero-fabric-highlight { opacity: 0; animation: exhibition-fabric-reflection 12s ease-in-out infinite paused; }
.exhibition-hero.is-ambient-active :is(.hero-needle-highlight, .hero-fabric-highlight) { animation-play-state: running; }
@keyframes exhibition-needle-reflection { 0%, 8% { opacity: 0; transform: translateY(0); } 10% { opacity: .45; } 30% { opacity: .45; transform: translateY(480px); } 33%, 100% { opacity: 0; transform: translateY(480px); } }
/* 光区位置固定，只让蓝色受光褶皱缓慢明暗变化。 */
@keyframes exhibition-fabric-reflection { 0%, 24% { opacity: 0; } 36%, 48% { opacity: .16; } 60%, 100% { opacity: 0; } }
.hero-entry { position: absolute; inset: 0; display: block; pointer-events: none; }
.hero-entry a { position: absolute; display: block; pointer-events: auto; }
/* 命中范围保持透明，门洞光层独立按原图透视绘制。 */
.exhibition-hero :is(.room-entrance, .hero-entry a),
.exhibition-hero :is(.room-entrance, .hero-entry a):is(:hover, :focus-visible) { background: transparent; box-shadow: none; outline: none; transition: none; }
.exhibition-hero :is(.room-entrance, .hero-entry a)::before,
.exhibition-hero :is(.room-entrance, .hero-entry a)::after { content: none; }
.entrance-light { --door-hover: 0; --door-focus: 0; --door-sweep: none; --door-pulse: none; --floor-pulse: none; color: #8dccff; }
.entrance-light-start { color: #ffc18d; }
.entrance-wash, .entrance-frame-glow, .entrance-frame-edge, .entrance-floor { opacity: var(--door-hover); transition: opacity 240ms ease; }
.entrance-frame-glow, .entrance-frame-edge, .entrance-frame-pulse, .entrance-focus-outer, .entrance-focus-inner { fill: none; stroke-linejoin: round; stroke-linecap: round; }
.entrance-frame-glow { stroke: currentColor; stroke-width: 12; filter: url(#entrance-frame-soft); }
.entrance-frame-edge { stroke: #e5f5ff; stroke-width: 2.4; }
.entrance-light-start .entrance-frame-edge { stroke: #fff3e5; }
.entrance-sweep { opacity: 0; animation: var(--door-sweep); }
.entrance-pulse, .entrance-frame-pulse { opacity: 0; animation: var(--door-pulse); }
.entrance-frame-pulse { stroke: #fff; stroke-width: 4; }
.entrance-floor-pulse { opacity: 0; animation: var(--floor-pulse); }
/* 键盘焦点随门框走；手机放大的命中框不会拉伸门洞轮廓。 */
.entrance-focus-outer, .entrance-focus-inner { opacity: var(--door-focus); vector-effect: non-scaling-stroke; }
.entrance-focus-outer { stroke: #194bea; stroke-width: 5; }
.entrance-focus-inner { stroke: #fff; stroke-width: 2; }
:is(.exhibition-hero:has([data-portal="tshirt"]:is(:hover, :focus-visible)) .entrance-light-tshirt,
    .exhibition-hero:has([data-portal="hoodie"]:is(:hover, :focus-visible)) .entrance-light-hoodie,
    .exhibition-hero:has([data-portal="pants"]:is(:hover, :focus-visible)) .entrance-light-pants,
    .exhibition-hero:has([data-portal="start"]:is(:hover, :focus-visible)) .entrance-light-start) { --door-hover: 1; --door-sweep: exhibition-door-light 1100ms cubic-bezier(.22, 1, .36, 1) both; }
:is(.exhibition-hero:has([data-portal="tshirt"]:focus-visible) .entrance-light-tshirt,
    .exhibition-hero:has([data-portal="hoodie"]:focus-visible) .entrance-light-hoodie,
    .exhibition-hero:has([data-portal="pants"]:focus-visible) .entrance-light-pants,
    .exhibition-hero:has([data-portal="start"]:focus-visible) .entrance-light-start) { --door-focus: 1; }
:is(.exhibition-hero:has([data-portal="tshirt"].is-entrance-active) .entrance-light-tshirt,
    .exhibition-hero:has([data-portal="hoodie"].is-entrance-active) .entrance-light-hoodie,
    .exhibition-hero:has([data-portal="pants"].is-entrance-active) .entrance-light-pants,
    .exhibition-hero:has([data-portal="start"].is-entrance-active) .entrance-light-start) { --door-pulse: exhibition-door-activate 360ms ease-out both; --floor-pulse: exhibition-floor-activate 360ms 45ms ease-out both; }
@keyframes exhibition-door-light { 0% { opacity: 0; transform: translateX(-230px); } 22% { opacity: 1; } 78% { opacity: .8; } 100% { opacity: 0; transform: translateX(230px); } }
@keyframes exhibition-door-activate { 0%, 100% { opacity: 0; } 20% { opacity: .9; } 65% { opacity: .3; } }
@keyframes exhibition-floor-activate { 0%, 100% { opacity: 0; } 24% { opacity: .8; } 65% { opacity: .25; } }
.exhibition-hero::after { display: none; }
.directory-entry { display: flex; align-items: center; gap: 40px; border-block: 1px solid var(--line); background: var(--silver); padding-block: 40px; }
.directory-entry > div { flex: 1; }
.directory-entry h2 { font-size: clamp(26px, 2.6vw, 38px); line-height: 1.3; font-weight: 600; margin: 0; }
.directory-entry .section-number { margin-bottom: 12px; }
.directory-entry .primary { white-space: nowrap; background: var(--blue); border-radius: var(--radius); min-height: 48px; }
.legacy-anchor { position: absolute; width: 0; height: 0; overflow: hidden; }
.contact-section .light-button { display: inline-flex; align-items: center; min-height: 48px; border-radius: var(--radius); }
.application-error { padding: 45px 0; line-height: 1.8; }
.application-error a { color: var(--blue); text-decoration: underline; }
@media (max-width: 800px) {
  .exhibition-hero { display: flex; flex-direction: column; height: auto; aspect-ratio: auto; max-height: none; padding: 0 0 30px; background: #f3f5f8; }
  .hero-scene { position: relative; inset: auto; height: auto; aspect-ratio: 1672 / 941; }
  .mobile-hero-title { display: block; position: relative; inset: auto; margin: 24px 5% 0; }
  .mobile-hero-title h2 { font-size: clamp(26px, 6.8vw, 35px); line-height: 1.4; margin: 0; font-weight: 500; }
  .directory-entry { flex-direction: column; align-items: flex-start; gap: 22px; padding-block: 34px; }
  .directory-entry h2 { font-size: 28px; }
  .directory-entry .primary, .about-statement .line-link { font-size: 14px; white-space: normal; }
}
@media (prefers-reduced-motion: reduce) {
  .hero-needle-highlight, .hero-fabric-highlight, .entrance-sweep, .entrance-pulse, .entrance-frame-pulse, .entrance-floor-pulse { animation: none; opacity: 0; }
  .entrance-wash, .entrance-frame-glow, .entrance-frame-edge, .entrance-floor { transition: none; }
}
@media (forced-colors: active) {
  .exhibition-hero :is(.room-entrance, .hero-entry a):focus-visible { outline: 2px solid Highlight; outline-offset: 3px; }
  .entrance-focus-outer, .entrance-focus-inner { opacity: 0; }
}
