/* One small visual vocabulary: open, bring a detail closer, then settle. */
@media (prefers-reduced-motion: no-preference) {
 @view-transition { navigation: auto; }
 ::view-transition-old(root) { animation: page-out 130ms ease-out both; }
 ::view-transition-new(root) { animation: page-in 240ms cubic-bezier(.16,1,.3,1) both; }
 @keyframes page-out { to { opacity: 0; } }
 @keyframes page-in { from { opacity: .65; transform: translateY(6px); } to { opacity: 1; transform: none; } }
 .image-reveal-ready { clip-path: inset(0 0 0 6%); transition: clip-path 950ms cubic-bezier(.16,1,.3,1); }
 .image-reveal-ready.is-revealed { clip-path: inset(0); }
}
.hero__media--home.has-doors { animation: none; }
.photo-door { position: absolute; inset: 0; z-index: 2; pointer-events: none; }
.photo-door picture, .photo-door img { width: 100%; height: 100%; }
.photo-door--left { clip-path: inset(0 50% 0 0); }
.photo-door--right { clip-path: inset(0 0 0 50%); }
@media (prefers-reduced-motion: no-preference) {
 .doors-open .photo-door--left { animation: door-left 1200ms cubic-bezier(.16,1,.3,1) both; }
 .doors-open .photo-door--right { animation: door-right 1200ms cubic-bezier(.16,1,.3,1) both; }
 @keyframes door-left { from { transform: translateX(0); opacity: 1; } to { transform: translateX(-52%); opacity: 0; } }
 @keyframes door-right { from { transform: translateX(0); opacity: 1; } to { transform: translateX(52%); opacity: 0; } }
}
.coverage-map { position: relative; min-width: 0; }
.coverage-map__colour { position: absolute; inset: 0; opacity: 0; pointer-events: none; transition: opacity 1100ms 240ms ease; }
.has-map-motion > .coverage-section__map:first-child { filter: grayscale(1); }
.has-map-motion.is-revealed > .coverage-map__colour { opacity: 1; }
.day-night__evening { opacity: 0; transition: opacity 180ms linear; }
.night-ready .day-night__evening { opacity: var(--evening-mix,0); }
.has-manual-light .day-night__evening { transition-duration: 900ms; }
.scene-controls { position: absolute; z-index: 3; right: var(--gutter); bottom: 1.5rem; display: flex; flex-wrap: wrap; gap: .4rem; max-width: calc(100% - var(--gutter)*2); }
.scene-controls button { min-height: 44px; padding: .55rem .85rem; border: 1px solid rgba(255,255,255,.65); border-radius: 4px; background: rgba(15,27,42,.72); color: #fff; font: inherit; font-size: .78rem; font-weight: 500; cursor: pointer; transition: color 180ms ease,background-color 180ms ease; }
.scene-controls button[aria-pressed=true] { background: var(--accent); color: var(--ink); border-color: var(--accent); }
.scene-controls[hidden], .slideshow-controls[hidden], .portal-focus-controls[hidden] { display: none; }
.photo-story__frame { opacity: 0; transition: opacity 650ms ease; }
.photo-story__frame.is-active { opacity: 1; }
.photo-story__frame:nth-child(2) img { object-position: center 62%; transform: translate3d(0,var(--photo-offset,0px),0) scale(calc(var(--photo-scale,1.12)*1.18)); }
.service-gallery article > .service-image-pair { position: relative; flex: 0 0 15rem; height: 15rem; padding: 0; overflow: hidden; }
.service-image-pair picture { position: absolute; inset: 0; }
.service-image-pair img { width: 100%; height: 100%; object-fit: cover; }
.service-image-pair__detail { opacity: var(--service-mix,0); transition: opacity 650ms ease; }
.process-has-rail { position: relative; isolation: isolate; }
.process-rail { position: absolute; inset: 0; width: 100%; height: 100%; z-index: -1; overflow: visible; pointer-events: none; }
.process-rail path { stroke: var(--line-strong); stroke-width: 1; }
.process-rail .process-rail__progress { stroke: var(--accent-strong); stroke-width: 2; stroke-dasharray: 1; stroke-dashoffset: calc(1 - var(--process-progress,0)); }
.process-has-rail .process__number { position: relative; background: var(--paper); transition: background-color 250ms ease,border-color 250ms ease; }
.process-has-rail .process__number.step-reached { background: var(--accent); border-color: var(--accent); color: var(--ink); }
.portal-focus-controls { display: grid; grid-template-columns: repeat(4,minmax(0,1fr)); gap: .35rem; padding: .8rem; }
.portal-focus-controls button { min-height: 44px; padding: .55rem .5rem; border: 1px solid var(--line); border-radius: 4px; background: transparent; color: var(--ink); font: inherit; font-size: .8rem; cursor: pointer; }
.portal-focus-controls button[aria-pressed=true] { color: #fff; background: var(--ink); border-color: var(--ink); }
.portal-focus__viewport.portal-focus-ready { position: relative; height: clamp(20rem,50vw,30rem); overflow: hidden; background: #e8e7e4; }
.portal-focus-ready img { position: absolute; inset: 0 auto auto 0; width: 1270px; height: 1494px; max-width: none; transform-origin: 0 0; transition: transform 680ms cubic-bezier(.16,1,.3,1); }
.portal-focus-ready > span { position: absolute; top: .5rem; right: .5rem; z-index: 1; padding: .45rem .7rem; background: var(--paper-strong); border: 1px solid var(--line); border-radius: 4px; font-size: .72rem; }
.estimate-starter__bedrooms.is-next-step, .estimate-starter__form .button.is-next-step { outline: 2px solid var(--accent-strong); outline-offset: 5px; animation: next-step 1000ms ease-out; }
@keyframes next-step { 0% { outline-color: transparent; outline-offset: 10px; } 45% { outline-color: var(--accent-strong); } 100% { outline-offset: 5px; } }
.about-slideshow { position: relative; width: 100%; margin-inline: 0; border-radius: 0; }
.about-slideshow__frame { position: absolute; inset: 0; opacity: 0; transition: opacity 750ms ease; pointer-events: none; }
.about-slideshow__frame.is-active { opacity: 1; }
.about-slideshow__frame img { width: 100%; height: 100%; object-fit: cover; }
.slideshow-controls { position: absolute; z-index: 2; left: .75rem; right: .75rem; bottom: .75rem; display: flex; align-items: center; flex-wrap: wrap; gap: .5rem; padding: .5rem; border-radius: 4px; background: rgba(15,27,42,.94); color: #fff; }
.slideshow-controls > span { padding-inline: .3rem; font-size: .75rem; font-variant-numeric: tabular-nums; }
.slideshow-controls button { flex: 1; min-height: 44px; padding: .5rem .65rem; border: 1px solid rgba(255,255,255,.65); border-radius: 4px; background: transparent; color: #fff; font: inherit; font-size: .72rem; cursor: pointer; }
.slideshow-controls button:hover { background: rgba(255,255,255,.12); }
@media(max-width:650px) {
 .portal-focus-controls { grid-template-columns: repeat(2,minmax(0,1fr)); }
 .scene-controls { gap: .3rem; bottom: 1rem; }
 .scene-controls button { padding-inline: .65rem; font-size: .72rem; }
}
@media(prefers-reduced-motion:reduce) {
 .photo-door { display: none; }
 .image-reveal-ready { clip-path: none; }
 .coverage-map__colour { display: none; }
 .has-map-motion > .coverage-section__map:first-child { filter: none; }
 .service-image-pair__detail { opacity: 0; }
 .day-night__evening, .photo-story__frame, .portal-focus-ready img, .about-slideshow__frame { transition: none; }
 [data-slide-pause] { display: none; }
 .estimate-starter__bedrooms.is-next-step, .estimate-starter__form .button.is-next-step { animation: none; }
}
@media print {
 .photo-door, .scene-controls, .slideshow-controls, .portal-focus-controls, .process-rail { display: none !important; }
 .day-night__evening, .about-slideshow__frame:not(:first-child), .photo-story__frame:not(:first-child) { display: none; }
 .about-slideshow__frame:first-child, .photo-story__frame:first-child { opacity: 1; }
 .portal-focus__viewport.portal-focus-ready { height: auto; overflow: visible; }
 .portal-focus-ready img { position: static; width: 100%; height: auto; transform: none !important; }
}
