/* Shared edge tones join the existing scenes without changing scroll geometry.
   Only decorative layers are shaded; copy, links and document readers stay above. */
.rh { --rh-seam-depth:clamp(96px,16svh,180px); }
.rh-hero::before,
.rh-story::before,.rh-story::after,
.rh-quality-b::before,.rh-quality-b::after,
.rh-contact::before {
  content:'';position:absolute;inset-inline:0;pointer-events:none;
  height:var(--rh-seam-depth);
  background:linear-gradient(to bottom,var(--rh-seam-tone,#0c1015),color-mix(in srgb,var(--rh-seam-tone,#0c1015) 72%,transparent) 30%,color-mix(in srgb,var(--rh-seam-tone,#0c1015) 20%,transparent) 70%,transparent);
}
.rh-hero::before { bottom:0;transform:rotate(180deg);z-index:-1; }
.rh-story::before { top:0;z-index:1; }
.rh-story::after { bottom:0;transform:rotate(180deg);z-index:1; }
.rh-story-chapters { z-index:2; }
.rh-quality-b::before { top:0;z-index:0; }
.rh-quality-b::after { bottom:0;transform:rotate(180deg);z-index:0;--rh-seam-tone:#0d1218; }
.rh-contact::before {
  inset:0;z-index:0;height:auto;
  background:linear-gradient(to bottom,#0d1218,transparent var(--rh-seam-depth)),linear-gradient(to top,#0c1015,transparent var(--rh-seam-depth));
}
.rh-contact-content { position:relative;z-index:1; }
/* Static/mobile scenes have no sticky crossfade, so blend their own image edges. */
@media(max-width:760px),(prefers-reduced-motion:reduce) {
  .rh { --rh-seam-depth:88px; }
  .rh-panel-fallback { background:#0c1015; }
  .rh-panel-fallback>img { mask-image:linear-gradient(to bottom,transparent,#000 88px,#000 calc(100% - 88px),transparent); }
}
/* Replace the older grey service edge; it otherwise paints above the story layer. */
.rh-services::after { height:var(--rh-seam-depth);background:linear-gradient(to top,#0c1015,transparent); }
