/* Cover entry, exploration and detail return share the same reveal rhythm. */
@view-transition { navigation: none; }
::view-transition-group(root) { animation-duration: 1s; }
::view-transition-old(root) { z-index: 2; animation: hold-cover-frame 1s linear both; mix-blend-mode: normal; }
::view-transition-new(root) { animation: none; mix-blend-mode: normal; }
@keyframes hold-cover-frame { from, to { opacity: 1; } }
.is-map-return-revealing::view-transition-old(root),
.is-detail-entry-revealing::view-transition-old(root) {
  animation: return-map-reveal .26s cubic-bezier(.22,.65,.3,1) both;
  transform-origin: center;
}
@keyframes return-map-reveal {
  from { opacity: 1; transform: none; }
  to { opacity: 0; transform: translateY(-6px) scale(1.015); }
}
.is-map-return::after {
  content: "正在回到地图…";
  position: fixed;
  z-index: 19;
  inset: 0;
  display: grid;
  place-items: center;
  color: var(--ink);
  background: #f5f1e5;
  font-size: 14px;
  pointer-events: none;
}

.is-detail-loading .detail-hero::after,
.is-detail-arriving .detail-hero::after {
  content: "正在打开旅行札记…";
  position: absolute;
  z-index: 3;
  inset: 0;
  display: grid;
  place-items: center;
  padding-bottom: 145px;
  color: var(--ink);
  background: var(--paper);
  font-size: 14px;
  pointer-events: none;
}
.detail-hero.is-image-error::after { display: none; }
.is-detail-arriving .detail-hero::after {
  content: "";
  animation: detail-paper-reveal .26s cubic-bezier(.22,.65,.3,1) both;
}
@keyframes detail-paper-reveal { from { opacity: 1; } to { opacity: 0; } }

.cover-bridge { display: none; position: fixed; inset: 0; z-index: 100; }
.is-cover-entry .cover-bridge { display: block; }
.is-cover-entry .map-nav { z-index: 103; }
.is-cover-entry .map-intro { z-index: 101; }
.is-cover-entry .scroll-cue { z-index: 102; }
.is-cover-entry .map-nav, .is-cover-entry .map-canvas { pointer-events: none; }
.cover-bridge__frame {
  position: absolute;
  left: var(--bridge-left);
  top: var(--bridge-top);
  width: var(--bridge-width);
  height: var(--bridge-height);
  overflow: hidden;
  overflow: clip;
}
.cover-bridge__image {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: var(--bridge-position, 50% 50%);
  transform: var(--bridge-transform);
  transform-origin: center;
}
.cover-bridge__wash { background: var(--bridge-wash); opacity: var(--bridge-wash-opacity); transition: none; }
.is-cover-entry .map-nav,
.is-cover-entry .map-intro,
.is-cover-entry .scroll-cue { opacity: 0; }
.is-cover-entry.is-entry-revealing .map-nav,
.is-cover-entry.is-entry-revealing .map-intro,
.is-cover-entry.is-entry-revealing .scroll-cue { animation: reveal-map-ui .12s .14s ease-out both; }
@keyframes reveal-map-ui { from { opacity: 0; } to { opacity: 1; } }

@media (prefers-reduced-motion: reduce) {
  @view-transition { navigation: none; }
  .cover-bridge { display: none !important; }
  .is-cover-entry .map-nav, .is-cover-entry .map-intro, .is-cover-entry .scroll-cue { opacity: 1; }
}
