:root {
  --motion-ease: cubic-bezier(.22, .76, .22, 1);
  --motion-sharp: cubic-bezier(.76, 0, .24, 1);
}

.page-progress {
  position: fixed;
  z-index: 310;
  top: 0;
  left: 0;
  width: 100%;
  height: 2px;
  background: var(--green);
  transform: scaleX(var(--page-progress, 0));
  transform-origin: left center;
  pointer-events: none;
  will-change: transform;
}

.loader {
  opacity: 1;
  transform: translate3d(0, 0, 0);
  transition: transform .95s var(--motion-sharp), visibility 0s .95s;
}

.loader.is-hidden {
  opacity: 1;
  visibility: hidden;
  transform: translate3d(0, -100%, 0);
}

.header {
  opacity: 0;
  transform: translate3d(0, -18px, 0);
  transition: opacity .8s ease, transform .9s var(--motion-ease), color .35s, background .35s;
}

body.is-ready .header {
  opacity: 1;
  transform: translate3d(0, 0, 0);
}

body.is-ready .header.is-hidden {
  transform: translate3d(0, -112%, 0);
}

/* Layered opening composition — one landscape, several spatial depths. */
.hero__composition {
  position: absolute;
  z-index: 2;
  inset: 0;
  overflow: hidden;
  pointer-events: none;
  --glass-x: 0px;
  --glass-y: 0px;
  --detail-x: 0px;
  --detail-y: 0px;
  --green-x: 0px;
  --green-y: 0px;
  --axis-x: 0px;
  --axis-y: 0px;
  --caption-x: 0px;
  --caption-y: 0px;
}

.hero__plane,
.hero__axis,
.hero__plane-caption {
  position: absolute;
  will-change: transform, clip-path, opacity;
}

.hero__plane {
  opacity: 0;
  clip-path: inset(0 100% 0 0);
  transition: clip-path 1.5s var(--motion-sharp), opacity .9s ease;
}

body.is-ready .hero__plane {
  opacity: 1;
  clip-path: inset(0 0 0 0);
}

.hero__plane--glass {
  top: 17%;
  left: 24.5%;
  width: 47%;
  height: 49%;
  border: 1px solid rgba(255, 255, 255, .2);
  background: linear-gradient(145deg, rgba(210, 216, 213, .17), rgba(83, 91, 89, .05));
  box-shadow: inset 0 0 0 1px rgba(25, 31, 29, .05);
  backdrop-filter: blur(2.5px) saturate(.75);
  transform: translate3d(var(--glass-x), var(--glass-y), 0);
  transition-delay: .12s;
}

.hero__plane--detail {
  top: 28%;
  right: 6.3%;
  width: 18.4%;
  height: 31%;
  overflow: hidden;
  border: 1px solid rgba(255, 255, 255, .36);
  background: #69726f;
  box-shadow: 0 24px 70px rgba(10, 17, 15, .18);
  transform: translate3d(var(--detail-x), var(--detail-y), 0);
  transition-delay: .35s;
}

.hero__plane-image {
  position: absolute;
  inset: -13%;
  background-image: url("assets/hero-lena-dawn.png");
  background-size: 230%;
  background-position: 72% 45%;
  filter: grayscale(.78) contrast(1.08) brightness(.86);
  transform: scale(1.03);
  transition: opacity .55s ease, transform 8s var(--motion-ease);
}

.hero__plane-image.is-switching {
  opacity: 0;
  transform: scale(1.09);
}

.hero__plane--green {
  top: 22%;
  left: 19.8%;
  width: 5px;
  height: 14%;
  background: var(--green);
  transform: translate3d(var(--green-x), var(--green-y), 0);
  transition-delay: .62s;
}

.hero__axis {
  background: rgba(255, 255, 255, .3);
  transform-origin: left top;
  opacity: 0;
  transition: transform 1.6s var(--motion-sharp), opacity .6s ease;
}

.hero__axis--vertical {
  top: 12%;
  left: 22.8%;
  width: 1px;
  height: 62%;
  transform: scaleY(0) translate3d(0, var(--axis-y), 0);
}

.hero__axis--horizontal {
  top: 67.5%;
  left: 7%;
  width: 83%;
  height: 1px;
  transform: scaleX(0) translate3d(var(--axis-x), var(--axis-y), 0);
}

body.is-ready .hero__axis {
  opacity: 1;
}

body.is-ready .hero__axis--vertical { transform: scaleY(1) translate3d(0, var(--axis-y), 0); }
body.is-ready .hero__axis--horizontal { transform: scaleX(1) translate3d(var(--axis-x), var(--axis-y), 0); }

.hero__plane-caption {
  z-index: 2;
  top: 69.5%;
  right: 6.3%;
  color: rgba(255, 255, 255, .72);
  font-size: 9px;
  letter-spacing: .13em;
  transform: translate3d(var(--caption-x), var(--caption-y), 0);
}

.hero__kicker,
.hero__title,
.hero__foot,
.hero__scene-meter {
  z-index: 4;
}

/* Secondary planes continue the same depth language through the page. */
.manifest,
.services,
.projects {
  position: relative;
  overflow: hidden;
  isolation: isolate;
}

.manifest > :not(.section-plane):not(.section-axis),
.services > :not(.section-plane):not(.section-ghost),
.projects > :not(.section-ghost):not(.section-axis) {
  position: relative;
  z-index: 2;
}

.section-plane,
.section-axis,
.section-ghost {
  position: absolute;
  z-index: 1;
  pointer-events: none;
  will-change: translate;
}

.section-plane--about {
  top: 14%;
  left: 16%;
  width: 38%;
  height: 49%;
  border: 1px solid rgba(41, 43, 41, .1);
  background: rgba(119, 124, 121, .055);
}

.section-plane--about span {
  position: absolute;
  left: -4px;
  bottom: -17px;
  color: rgba(41, 43, 41, .045);
  font-size: clamp(120px, 16vw, 260px);
  line-height: .72;
  letter-spacing: -.09em;
}

.section-axis--about {
  top: 7%;
  right: 24%;
  width: 1px;
  height: 67%;
  background: rgba(41, 43, 41, .12);
}

.section-ghost {
  top: 3%;
  right: -2%;
  color: rgba(255, 255, 255, .035);
  font-size: clamp(300px, 38vw, 610px);
  line-height: .8;
  letter-spacing: -.09em;
}

.section-plane--services {
  right: 11%;
  top: 11%;
  width: 27%;
  height: 42%;
  border: 1px solid rgba(255, 255, 255, .13);
  background: linear-gradient(160deg, rgba(255, 255, 255, .055), transparent 74%);
}

.section-ghost--projects {
  top: 7%;
  left: 7%;
  right: auto;
  color: rgba(41, 43, 41, .035);
  font-size: clamp(130px, 18vw, 290px);
  white-space: nowrap;
}

.section-axis--projects {
  top: 8%;
  left: 46%;
  width: 1px;
  height: 74%;
  background: rgba(41, 43, 41, .12);
}

/* Brand-green rhythm: small, repeatable signals instead of large green fields. */
.section__index {
  color: var(--green);
  font-weight: 600;
}

.section__label {
  display: flex;
  align-items: center;
  gap: 12px;
}

.section__label::before {
  content: "";
  width: 24px;
  height: 2px;
  flex: 0 0 auto;
  background: var(--green);
}

.nav a::after {
  background: var(--green);
}

.metric strong {
  transition: color .35s ease;
}

.metric:hover strong {
  color: var(--green);
}

.service-row {
  isolation: isolate;
}

.service-row::before {
  content: "";
  position: absolute;
  z-index: -1;
  top: 0;
  left: -18px;
  width: 5px;
  height: 100%;
  background: var(--green);
  transform: scaleY(0);
  transform-origin: center bottom;
  transition: transform .5s var(--motion-ease);
}

.service-row:hover::before {
  transform: scaleY(1);
}

.service-row strong {
  transition: color .3s ease, translate .5s var(--motion-ease);
}

.service-row:hover strong {
  color: #fff;
  translate: 9px 0;
}

.project-card__placeholder::before {
  content: "";
  position: absolute;
  z-index: 2;
  top: 0;
  left: 0;
  width: 74px;
  height: 5px;
  background: var(--green);
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform .75s var(--motion-ease);
}

.project-card.is-current .project-card__placeholder::before {
  transform: scaleX(1);
}

.project-counter span:first-child {
  color: var(--green);
  font-weight: 600;
}

.person__photo {
  position: relative;
}

.person__photo::after {
  content: "";
  position: absolute;
  z-index: 2;
  top: 0;
  left: 0;
  width: 52px;
  height: 4px;
  background: var(--green);
}

.footer {
  border-top: 4px solid var(--green);
}

/* Reserved editorial structure for the principles section. */
.principle {
  min-height: 860px;
  padding-bottom: 90px;
}

.principle__head {
  margin: 92px 0 120px 15.5%;
}

.principle__head h2 {
  margin: 0;
  font-size: clamp(92px, 12vw, 190px);
  font-weight: 300;
  line-height: .76;
  letter-spacing: -.085em;
}

.principle__head h2 span {
  margin-left: 12%;
  color: transparent;
  -webkit-text-stroke: 1px rgba(20, 140, 53, .72);
}

.principle-grid--empty {
  border-top: 1px solid var(--line);
  border-bottom: 1px solid var(--line);
}

.principle-slot {
  position: relative;
  min-height: 170px;
  padding: 22px 30px;
  border-right: 1px solid var(--line);
}

.principle-slot:last-child {
  border-right: 0;
}

.principle-slot span {
  font-size: 10px;
  letter-spacing: .1em;
}

.principle-slot i {
  position: absolute;
  left: 30px;
  bottom: 28px;
  width: 42px;
  height: 1px;
  background: var(--green);
  transform: scaleX(.18);
  transform-origin: left center;
  transition: transform .7s var(--motion-ease);
}

.principle-slot:hover i {
  transform: scaleX(1);
}

/* Empty advantages slide — ready for approved content without filler copy. */
.advantages {
  position: relative;
  min-height: 940px;
  overflow: hidden;
  isolation: isolate;
  color: #fff;
  background: #505351;
}

.advantages > :not(.advantages__ghost):not(.advantages__plane):not(.advantages__axis) {
  position: relative;
  z-index: 3;
}

.advantages__ghost,
.advantages__plane,
.advantages__axis {
  position: absolute;
  z-index: 1;
  pointer-events: none;
  will-change: translate;
}

.advantages__ghost {
  left: -2%;
  bottom: -2%;
  color: rgba(255, 255, 255, .03);
  font-size: clamp(130px, 19vw, 310px);
  font-weight: 300;
  line-height: .72;
  letter-spacing: -.09em;
  white-space: nowrap;
}

.advantages__plane {
  top: 12%;
  right: 8%;
  width: 31%;
  height: 52%;
  border: 1px solid rgba(255, 255, 255, .15);
  background: linear-gradient(145deg, rgba(255, 255, 255, .055), rgba(255, 255, 255, .008));
}

.advantages__plane::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 5px;
  height: 31%;
  background: var(--green);
}

.advantages__axis {
  top: 7%;
  left: 35%;
  width: 1px;
  height: 67%;
  background: rgba(255, 255, 255, .14);
}

.advantages__head {
  margin: 96px 0 132px 8%;
}

.advantages__head h2 {
  margin: 0;
  font-size: clamp(76px, 10vw, 158px);
  font-weight: 300;
  line-height: .79;
  letter-spacing: -.08em;
}

.advantages__head h2 span {
  margin-left: 12%;
  color: transparent;
  -webkit-text-stroke: 1px rgba(255, 255, 255, .8);
}

.advantages-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  border-top: 1px solid rgba(255, 255, 255, .25);
  border-bottom: 1px solid rgba(255, 255, 255, .25);
}

.advantage-slot {
  position: relative;
  min-height: 172px;
  padding: 23px 27px;
  border-right: 1px solid rgba(255, 255, 255, .25);
}

.advantage-slot:last-child {
  border-right: 0;
}

.advantage-slot span {
  font-size: 10px;
  letter-spacing: .1em;
}

.advantage-slot i {
  position: absolute;
  left: 27px;
  bottom: 26px;
  width: 56px;
  height: 2px;
  background: var(--green);
  transform: scaleX(.16);
  transform-origin: left;
  transition: transform .65s var(--motion-ease);
}

.advantage-slot:hover i {
  transform: scaleX(1);
}

/* Office map: restrained grey panel + monochrome interactive map. */
.office-map {
  position: relative;
  display: grid;
  grid-template-columns: 36.5% 63.5%;
  min-height: 1180px;
  align-items: start;
  overflow: hidden;
  background: var(--gray);
  color: #fff;
}

.office-map__panel {
  position: sticky;
  top: 0;
  z-index: 3;
  display: flex;
  flex-direction: column;
  min-width: 0;
  height: 100vh;
  min-height: 720px;
  padding: 46px 54px 52px;
  background: var(--gray);
  border-right: 1px solid rgba(255, 255, 255, .16);
}

.office-map__panel::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 5px;
  background: var(--green);
}

.office-map__top {
  display: flex;
  justify-content: space-between;
  gap: 30px;
  padding-bottom: 18px;
  border-bottom: 1px solid rgba(255, 255, 255, .27);
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: .09em;
}

.office-map__content {
  margin-top: 128px;
  transform: translate3d(0, var(--office-panel-y, 0px), 0);
  will-change: transform;
}

.office-map__eyebrow,
.office-map__note {
  margin: 0;
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: .1em;
  color: rgba(255, 255, 255, .62);
}

.office-map__content h2 {
  margin: 28px 0 54px;
  font-size: clamp(62px, 6vw, 96px);
  font-weight: 300;
  line-height: .83;
  letter-spacing: -.075em;
}

.office-map__content address {
  margin: 0;
  font-size: 20px;
  line-height: 1.45;
  font-style: normal;
  letter-spacing: -.025em;
}

.office-map__route {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  margin-top: 62px;
  padding: 19px 0;
  border-top: 1px solid rgba(255, 255, 255, .35);
  border-bottom: 1px solid rgba(255, 255, 255, .35);
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: .07em;
  transition: color .25s, padding .45s var(--motion-ease);
}

.office-map__route span {
  color: var(--green);
  font-size: 19px;
}

.office-map__route:hover {
  padding-left: 12px;
  padding-right: 12px;
  color: #fff;
}

.office-map__note {
  margin-top: auto;
}

.office-map__canvas {
  position: sticky;
  top: 0;
  min-width: 0;
  height: 100vh;
  min-height: 720px;
  overflow: hidden;
  background: #c9ccc8;
  --map-inset: 11%;
  --map-y: 72px;
  --map-scale: 1.08;
  --map-cover: 1;
  clip-path: inset(var(--map-inset) var(--map-inset) var(--map-inset) 0);
  transition: clip-path .08s linear;
  will-change: clip-path;
}

.office-map__canvas iframe {
  position: absolute;
  inset: -1%;
  width: 102%;
  height: 102%;
  border: 0;
  filter: grayscale(1) contrast(.93) brightness(1.04);
  transform: translate3d(0, var(--map-y), 0) scale(var(--map-scale));
  transform-origin: center center;
  will-change: transform;
}

.office-map__wipe {
  position: absolute;
  z-index: 4;
  inset: 0;
  background: #d9dbd7;
  transform: scaleX(var(--map-cover));
  transform-origin: right center;
  pointer-events: none;
  will-change: transform;
}

.office-map__canvas.is-visible .office-map__wipe {
  transform: scaleX(var(--map-cover));
}

/* A stronger final scene: editorial type, moving signal and layered contact plate. */
.contacts {
  position: relative;
  min-height: 980px;
  overflow: hidden;
  isolation: isolate;
  background: #555856;
}

.contacts > :not(.contacts__ghost):not(.contacts__accent-plane) {
  position: relative;
  z-index: 3;
}

.contacts__ghost {
  position: absolute;
  z-index: 0;
  left: -2%;
  bottom: -3%;
  color: rgba(255, 255, 255, .035);
  font-size: clamp(260px, 34vw, 540px);
  font-weight: 300;
  line-height: .73;
  letter-spacing: -.095em;
  pointer-events: none;
}

.contacts__accent-plane {
  position: absolute;
  z-index: 1;
  top: 17%;
  right: 7%;
  width: 28%;
  height: 61%;
  border: 1px solid rgba(255, 255, 255, .16);
  background: linear-gradient(145deg, rgba(255, 255, 255, .065), rgba(255, 255, 255, .012));
  pointer-events: none;
}

.contacts__grid {
  position: relative;
  margin-top: 62px;
  grid-template-columns: 1.5fr .72fr;
  gap: 10%;
}

.contacts__title h2 {
  font-size: clamp(76px, 8.2vw, 132px);
  line-height: .79;
}

.contacts__title h2 span {
  color: transparent;
  -webkit-text-stroke: 1px rgba(255, 255, 255, .86);
}

.contacts__title.reveal,
.contacts__title.reveal.is-visible {
  clip-path: none !important;
  overflow: visible;
}

.contacts__title .round-link {
  right: 5%;
  bottom: -126px;
  width: 148px;
  height: 148px;
  border: 0;
  background: var(--green);
  box-shadow: 0 0 0 1px rgba(255, 255, 255, .2), 0 22px 60px rgba(23, 28, 25, .2);
}

.contacts__title .round-link::before {
  content: "";
  position: absolute;
  inset: -13px;
  border: 1px solid rgba(255, 255, 255, .33);
  border-radius: 50%;
  transition: transform .55s var(--motion-ease), opacity .35s;
}

.contacts__title .round-link i {
  position: absolute;
  top: 23px;
  right: 28px;
  font-size: 17px;
  font-style: normal;
}

.contacts__title .round-link:hover {
  color: #fff;
  background: var(--green);
  filter: brightness(.92);
}

.contacts__title .round-link:hover::before {
  transform: scale(1.12);
  opacity: 0;
}

.contacts__info {
  align-self: end;
  padding: 24px 28px 4px;
  border-top: 5px solid var(--green);
  background: rgba(32, 35, 33, .17);
  backdrop-filter: blur(8px);
}

.contacts__info > div {
  grid-template-columns: 92px 1fr;
}

.hero__media {
  will-change: translate;
}

.hero__slide {
  z-index: 0;
  opacity: 0;
  clip-path: inset(0 0 0 100%);
  transition:
    clip-path 2.15s var(--motion-sharp),
    opacity 1.25s ease;
}

.hero__slide.is-active {
  z-index: 2;
  opacity: 1;
  clip-path: inset(0 0 0 0);
}

.hero__slide.is-leaving {
  z-index: 3;
  opacity: 1;
  clip-path: inset(0 100% 0 0);
}

.hero__shade {
  transition: opacity .25s linear;
}

.hero__kicker,
.hero__title,
.hero__foot {
  will-change: translate, opacity;
}

.hero__scene-meter {
  position: absolute;
  z-index: 3;
  right: 58px;
  bottom: 205px;
  display: flex;
  align-items: center;
  gap: 13px;
  color: #fff;
  font-size: 10px;
  letter-spacing: .08em;
}

.hero__scene-lines {
  display: flex;
  width: 108px;
  gap: 5px;
}

.hero__scene-lines i {
  display: block;
  flex: 1;
  height: 1px;
  background: rgba(255, 255, 255, .38);
  overflow: hidden;
}

.hero__scene-lines i::after {
  content: "";
  display: block;
  width: 100%;
  height: 100%;
  background: #fff;
  transform: scaleX(0);
  transform-origin: left;
}

.hero__scene-lines i.is-active::after {
  animation: scene-progress 7.8s linear forwards;
}

.hero__scene-meter b,
.hero__scene-meter em {
  font: inherit;
  font-style: normal;
}

@keyframes scene-progress {
  to { transform: scaleX(1); }
}

.reveal {
  opacity: 0;
  transform: translate3d(0, 44px, 0);
  transition:
    opacity .95s ease calc(var(--reveal-order, 0) * 65ms),
    transform 1.15s var(--motion-ease) calc(var(--reveal-order, 0) * 65ms);
}

.reveal.is-visible {
  opacity: 1;
  transform: translate3d(0, 0, 0);
}

.manifest__headline.reveal,
.services__title.reveal,
.projects__heading.reveal,
.team__intro.reveal,
.contacts__title.reveal {
  clip-path: inset(0 0 100% 0);
  transform: translate3d(0, 64px, 0) skewY(2.2deg);
  transform-origin: left bottom;
  transition:
    opacity .75s ease,
    clip-path 1.35s var(--motion-sharp),
    transform 1.35s var(--motion-ease);
}

.manifest__headline.reveal.is-visible,
.services__title.reveal.is-visible,
.projects__heading.reveal.is-visible,
.team__intro.reveal.is-visible,
.contacts__title.reveal.is-visible {
  clip-path: inset(0 0 0 0);
  transform: translate3d(0, 0, 0) skewY(0);
}

.service-row.reveal {
  transform: translate3d(72px, 0, 0);
}

.service-row.reveal.is-visible {
  transform: translate3d(0, 0, 0);
}

.project-card {
  opacity: .28;
  transform: scale(.945);
  transform-origin: left center;
  transition: opacity .75s ease, transform 1s var(--motion-ease);
}

.project-card.is-current {
  opacity: 1;
  transform: scale(1);
}

.project-card.is-near {
  opacity: .62;
  transform: scale(.975);
}

.project-card__placeholder {
  position: relative;
  overflow: hidden;
}

.project-card__placeholder::after {
  content: "ФОТО ПРОЕКТА БУДЕТ ДОБАВЛЕНО";
  position: absolute;
  left: 22px;
  bottom: 20px;
  font-size: 9px;
  letter-spacing: .1em;
  opacity: .43;
}

.project-controls button {
  transition: background .3s, color .3s, transform .55s var(--motion-ease);
}

.project-controls button:hover {
  transform: rotate(45deg);
}

@media (prefers-reduced-motion: reduce) {
  .page-progress { display: none; }
  .loader,
  .header,
  .hero__slide,
  .reveal,
  .project-card { transition: none; animation: none; }
  .hero__scene-lines i::after { animation: none; }
}
