/* Royal Coast — media readiness and the approved «Чистое растворение» entrance. */
.hub-loader{display:none;position:fixed;inset:0;z-index:10000;isolation:isolate;overflow:hidden;background:#faf8f3;color:#9c7756;text-align:center;opacity:1;transition:opacity .38s ease;font-family:Manrope,Arial,sans-serif;-webkit-font-smoothing:antialiased}
html.hub-preparing .hub-loader,.hub-loader.is-opening,.hub-loader.is-leaving{display:block}
html.hub-preparing body{overflow:hidden}
html.hub-preparing body>.header,html.hub-preparing body>main#top,html.hub-preparing body>.footer,html.hub-preparing body>.skip-link{visibility:hidden}
.hub-loader [hidden]{display:none!important}
.hub-loader-stage{position:absolute;inset:0;z-index:-1;overflow:hidden;clip-path:inset(33% 24% 27% 24% round 2px);transition:clip-path .85s cubic-bezier(.76,0,.24,1);background:#102938}
.hub-loader-stage img{display:block;width:100%;height:100%;object-fit:cover;object-position:center;transform:scale(1.04);transition:transform 1.3s cubic-bezier(.22,.72,.24,1)}
.hub-loader-stage-shade{position:absolute;inset:0;background:linear-gradient(180deg,#041a2310,#041a2320)}
.hub-loader-masthead{position:absolute;top:10%;left:20px;right:20px;transition:opacity .35s ease,transform .65s ease}
.hub-loader-location{display:block;font-size:9px;line-height:1.5;text-transform:uppercase;letter-spacing:3px;color:#a68f77;margin-bottom:22px}
.hub-loader-wordmark{max-width:100%;overflow:hidden}
.hub-loader-brand{display:block;font-family:Nanum,Georgia,serif;font-size:clamp(40px,7.2vw,108px);font-weight:400;font-style:normal;font-synthesis:none;letter-spacing:.055em;line-height:1.3;white-space:nowrap;color:#99714d;animation:rc-wordmark-arrive .9s both cubic-bezier(.22,.72,.24,1)}
.hub-loader-edition{display:block;font-size:8px;font-weight:400;letter-spacing:3px;text-transform:uppercase;color:#ac9a86;margin-top:13px}
.hub-loader-content{position:absolute;top:77%;left:20px;right:20px;display:flex;flex-direction:column;align-items:center;transition:opacity .3s ease,transform .6s ease}
.hub-loader-phrase{margin:0;font-family:'Cormorant Garamond',Georgia,serif;font-size:30px;font-weight:300;line-height:1.2;letter-spacing:0;color:#94765a}
.hub-loader-track{height:1px;width:150px;margin-top:18px;background:#b697712e;overflow:hidden;flex-shrink:0}
#hub-loader-progress{display:block;width:100%;height:100%;background:#c8956c;transform:scaleX(var(--progress,0));transform-origin:left;transition:transform .35s ease}
.hub-loader-status{min-height:1.6em;max-width:420px;margin:12px 0 0;font-size:9px;line-height:1.6;color:#a08c75;letter-spacing:.15px}
.hub-loader-index,.hub-loader-bottom{position:absolute;bottom:max(27px,env(safe-area-inset-bottom));font-size:8px;line-height:1.5;letter-spacing:1.6px;color:#ad9b87;text-transform:uppercase;transition:opacity .3s ease;pointer-events:none}
.hub-loader-index{left:38px}.hub-loader-bottom{right:38px}
.hub-loader.is-opening .hub-loader-stage{clip-path:inset(0 round 0)}
.hub-loader.is-opening .hub-loader-stage img{transform:scale(1)}
.hub-loader.is-opening .hub-loader-masthead{opacity:0;transform:translateY(-22px)}
.hub-loader.is-opening .hub-loader-content{opacity:0;transform:translateY(16px)}
.hub-loader.is-opening .hub-loader-index,.hub-loader.is-opening .hub-loader-bottom{opacity:0}
.hub-loader.is-leaving{opacity:0;pointer-events:none}
.hub-loader-actions{display:flex;justify-content:center;flex-wrap:wrap;gap:10px 18px;margin-top:18px}
.hub-loader-actions button{min-height:44px;padding:10px 19px;border:1px solid #d8bea4;border-radius:50px;font:500 11px/1.6 Manrope,Arial,sans-serif;color:#78593d;background:#faf8f3;cursor:pointer}
.hub-loader-actions button:first-child{background:#c8956c;border-color:#c8956c;color:#0a0a0a}
.hub-loader-actions button:hover{background:#e8d5c0}.hub-loader-actions button:focus-visible{outline:2px solid #a67a52;outline-offset:4px}
.hub-loader.has-error .hub-loader-stage{clip-path:inset(33% 24% 37% 24% round 2px)}
.hub-loader.has-error .hub-loader-content{top:67%}.hub-loader.has-error .hub-loader-index,.hub-loader.has-error .hub-loader-bottom{display:none}
@keyframes rc-wordmark-arrive{from{opacity:0;transform:translateY(70%)}to{opacity:1;transform:translateY(0)}}
@media(max-width:720px){.hub-loader-masthead{top:15%;left:16px;right:16px}.hub-loader-location{font-size:8px;letter-spacing:2.5px;margin-bottom:19px}.hub-loader-brand{font-size:clamp(30px,8.5vw,59px);letter-spacing:.035em}.hub-loader-edition{font-size:6px;letter-spacing:2px;margin-top:14px}.hub-loader-stage{clip-path:inset(34% 12% 27% 12% round 2px)}.hub-loader-stage img{object-position:82% center}.hub-loader-content{top:78%;left:16px;right:16px}.hub-loader-phrase{font-size:27px}.hub-loader-track{width:120px;margin-top:17px}.hub-loader-status{font-size:8px;max-width:270px}.hub-loader-index,.hub-loader-bottom{bottom:22px;font-size:6px;letter-spacing:1px}.hub-loader-index{left:20px}.hub-loader-bottom{right:20px}.hub-loader.has-error .hub-loader-stage{clip-path:inset(34% 12% 41% 12% round 2px)}.hub-loader.has-error .hub-loader-content{top:63%}.hub-loader-actions{gap:9px;margin-top:14px}.hub-loader-actions button{font-size:10px;padding-inline:14px}}
@media(max-height:620px){.hub-loader-masthead{top:7%}.hub-loader-location{margin-bottom:10px;font-size:7px}.hub-loader-brand{font-size:clamp(30px,5.8vw,62px)}.hub-loader-edition{margin-top:6px;font-size:6px}.hub-loader-stage{clip-path:inset(34% 28% 30% 28% round 2px)}.hub-loader-content{top:74%}.hub-loader-phrase{font-size:23px}.hub-loader-track{margin-top:10px}.hub-loader-status{margin-top:7px}.hub-loader-index,.hub-loader-bottom{bottom:14px;font-size:6px}.hub-loader.has-error .hub-loader-stage{opacity:.16;clip-path:inset(0)}.hub-loader.has-error .hub-loader-content{top:46%;background:#faf8f3ed;padding:15px;border-radius:4px}}
@media(prefers-reduced-motion:reduce){.hub-loader,.hub-loader *{animation:none!important;transition:none!important}}

/* Keep a failed image contained in its original frame and retain the previous catalog during loading. */
.rc-image-error{opacity:0!important}
.project-image:has(>img.rc-image-error)::after,.project-image.rc-image-fallback::after{content:'Фото пока недоступно';position:absolute;inset:0;display:grid;place-items:center;padding:58px 30px;text-align:center;background:#f7f4ef;color:#8d7a66;font-family:Manrope,Arial,sans-serif;font-size:12px;line-height:1.7;pointer-events:none;z-index:0}
.project-image:has(>img.rc-image-error)>.project-status,.project-image:has(>img.rc-image-error)>.project-visit,.project-image.rc-image-fallback>.project-status,.project-image.rc-image-fallback>.project-visit{z-index:1}
#catalog-load-status{display:flex;align-items:center;gap:10px;margin:0 0 18px;min-height:20px;font-size:12px;font-weight:400;line-height:1.7;color:#8d7a66}
#catalog-load-status:empty{display:none}
#catalog-load-status::before{content:'';display:block;flex-shrink:0;width:22px;height:1px;background:#c8956c}
#project-grid.is-preparing{cursor:progress}


/* Interactive pool water, adapted from Temple's public MIT CodePen. */
.hub-loader{background:#6e9894;color:#e8d5c0}
.hub-loader-water-surface{position:absolute;inset:0;z-index:-3;background:#6e9894;overflow:hidden}
#intro-water-canvas{position:absolute;inset:0;z-index:0;display:block;width:100%;height:100%;opacity:0;transition:opacity .4s ease;touch-action:pan-y}
.hub-loader.has-water.is-loaded #intro-water-canvas{opacity:1}
.hub-loader-palm{position:absolute;top:-18%;right:-17%;z-index:1;width:clamp(640px,72vw,1100px);height:auto;max-width:none;opacity:.07;filter:blur(14px);mix-blend-mode:multiply;pointer-events:none;user-select:none}
.hub-loader-water-surface:after{content:'';position:absolute;inset:0;z-index:2;background:linear-gradient(180deg,#051c2430,#04191e28 35%,#03191d47 68%,#04191e66);pointer-events:none}
.hub-loader-stage{opacity:0;z-index:-1;transition:clip-path .85s cubic-bezier(.76,0,.24,1),opacity .35s ease}
.hub-loader.is-opening .hub-loader-stage{opacity:1}
.hub-loader-masthead{top:calc(48% - 95px);pointer-events:none}
.hub-loader-brand{color:#f0dfc9;text-shadow:0 2px 28px #102d352e}
.hub-loader-location,.hub-loader-edition{color:#e3e6dd}.hub-loader-location{letter-spacing:3.5px}
.hub-loader-content{top:auto;bottom:13%;pointer-events:none}.hub-loader-content button{pointer-events:auto}
.hub-loader-phrase{color:#f0dfc9}.hub-loader-track{background:#eadcca40;width:170px}#hub-loader-progress{background:#e4bc96}
.hub-loader-status{color:#dae6e1}.hub-loader-index,.hub-loader-bottom{color:#d4e3db}
.hub-loader.has-error .hub-loader-masthead{top:18%}.hub-loader.has-error .hub-loader-content{top:54%;bottom:auto}.hub-loader.has-error .hub-loader-stage{opacity:0}
@media(max-width:720px){.hub-loader-masthead{top:calc(47% - 66px)}.hub-loader-content{top:auto;bottom:16%}.hub-loader-brand{font-size:clamp(30px,8.5vw,59px)}.hub-loader-water-surface{background-position:82% center}.hub-loader.has-error .hub-loader-masthead{top:20%}.hub-loader.has-error .hub-loader-content{top:51%;bottom:auto}}
@media(max-height:620px){.hub-loader-masthead{top:calc(45% - 58px)}.hub-loader-content{top:auto;bottom:12%}.hub-loader-phrase{font-size:24px}.hub-loader-index,.hub-loader-bottom{font-size:6px}.hub-loader.has-error .hub-loader-masthead{top:8%}.hub-loader.has-error .hub-loader-content{top:46%;background:#123e45f2;padding:12px}}
.hub-loader-enter{display:inline-flex;align-items:center;gap:32px;min-height:48px;margin-top:22px;padding:10px 24px;border:1px solid #ead4bc80;border-radius:40px;background:#153b4233;color:#f0dfc9;font:500 11px/1.5 Manrope,Arial,sans-serif;cursor:pointer;backdrop-filter:blur(5px)}.hub-loader-enter:hover{background:#e8d5c0;color:#142b31}.hub-loader-enter:focus-visible{outline:2px solid #e8d5c0;outline-offset:5px}.hub-loader.is-preview .hub-loader-content{bottom:10%}.hub-loader.is-preview .hub-loader-status{margin-top:12px}
@media(max-width:720px){.hub-loader.is-preview .hub-loader-content{bottom:12%}.hub-loader-enter{min-height:46px;margin-top:18px;font-size:10px}}
@media(max-height:620px){.hub-loader.is-preview .hub-loader-content{bottom:9%}.hub-loader.is-preview .hub-loader-phrase{display:none}.hub-loader-enter{min-height:42px;margin-top:10px}}

/* Ready means a held preview; the main entry sits just below the centre. */
.hub-loader-masthead{top:auto;bottom:calc(49% + 32px)}
.hub-loader.has-error .hub-loader-masthead{bottom:auto}
.hub-loader.is-ready .hub-loader-content{top:51%;bottom:auto}
.hub-loader-meter{position:absolute;left:50%;top:50%;z-index:4;display:flex;flex-direction:column;align-items:center;gap:16px;width:min(280px,64vw);transform:translate(-50%,-50%);transition:opacity .45s ease}
.hub-loader-water-surface .hub-loader-track{position:relative;left:auto;top:auto;width:100%;height:2px;margin:0;transform:none;background:rgba(255,255,255,.32);z-index:4;border-radius:2px}
.hub-loader-water-surface #hub-loader-progress{background:#f6f1e8}
.hub-loader-percent{font-family:Manrope,Arial,sans-serif;font-size:13px;font-weight:300;font-variant-numeric:tabular-nums;letter-spacing:.04em;line-height:1;color:rgba(246,241,232,.9)}
.hub-loader.is-loaded .hub-loader-meter{opacity:0;visibility:hidden}
.hub-loader:not(.is-loaded) .hub-loader-masthead,
.hub-loader:not(.is-loaded) .hub-loader-content,
.hub-loader:not(.is-loaded) .hub-loader-palm,
.hub-loader:not(.is-loaded) .hub-loader-index,
.hub-loader:not(.is-loaded) .hub-loader-bottom,
.hub-loader:not(.is-loaded) .hub-loader-water-surface:after{opacity:0;visibility:hidden}
.hub-loader.is-loaded .hub-loader-masthead,
.hub-loader.is-loaded .hub-loader-content{opacity:1;visibility:visible}
.hub-loader.is-ready .hub-loader-phrase{display:block;max-width:680px;font-size:clamp(28px,2.7vw,38px);line-height:1.15;text-wrap:balance;text-shadow:0 2px 20px #05202b40}
.hub-loader.is-ready .hub-loader-status{position:absolute;width:1px;height:1px;min-height:0;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.hub-loader-enter{justify-content:center;width:min(460px,100%);min-height:78px;margin-top:24px;padding:17px 30px;gap:30px;border:1px solid #f1e1ce;border-radius:48px;background:#e8d5c0;color:#153038;font:500 16px/1.45 Manrope,Arial,sans-serif;letter-spacing:.1px;box-shadow:0 14px 48px #05202b24;backdrop-filter:none;transition:background .2s,box-shadow .2s,transform .2s}

.hub-loader-enter:hover{background:#f5e8d9;box-shadow:0 18px 50px #05202b33;transform:translateY(-2px)}
@media(max-width:720px){.hub-loader-masthead{top:calc(42% - 66px);bottom:auto}.hub-loader.is-ready .hub-loader-content{top:50%;bottom:auto;left:20px;right:20px}.hub-loader.is-ready .hub-loader-phrase{max-width:320px;font-size:30px}.hub-loader-enter{width:min(380px,100%);min-height:72px;margin-top:22px;padding:16px 22px;font-size:14px;gap:24px}.hub-loader-palm{top:-12%;right:-260px;width:660px;opacity:.06;filter:blur(16px)}}
@media(max-width:360px){.hub-loader.is-ready .hub-loader-phrase{font-size:27px}.hub-loader-enter{font-size:13px;min-height:68px;padding:16px 18px;gap:18px}}
@media(max-height:620px){.hub-loader-masthead{top:calc(39% - 64px);bottom:auto}.hub-loader.is-ready .hub-loader-content{top:51%;bottom:auto}.hub-loader.is-ready .hub-loader-phrase{font-size:25px;max-width:600px}.hub-loader-enter{min-height:56px;margin-top:13px;padding-block:10px;font-size:14px}.hub-loader-palm{top:-48%;width:740px}}

/* 04.10.2026 — Андрей selected variant 4 from the local comparison gallery. */
html[data-hub-transition="fade"] .hub-loader{transition:opacity .9s ease}
html[data-hub-transition="fade"] .hub-loader.is-leaving .hub-loader-masthead,
html[data-hub-transition="fade"] .hub-loader.is-leaving .hub-loader-content,
html[data-hub-transition="fade"] .hub-loader.is-leaving .hub-loader-index,
html[data-hub-transition="fade"] .hub-loader.is-leaving .hub-loader-bottom{opacity:0;transform:none;transition:opacity .3s ease}
html[data-hub-transition="fade"].hub-entered .hero-kicker,
html[data-hub-transition="fade"].hub-entered .hero h1,
html[data-hub-transition="fade"].hub-entered .hero-lead,
html[data-hub-transition="fade"].hub-entered .hero-type-line,
html[data-hub-transition="fade"].hub-entered .hero-center>.button{animation:rc-hero-fade .5s ease .18s both}
html[data-hub-transition="fade"].hub-entered .hero h1{animation-delay:.26s}
html[data-hub-transition="fade"].hub-entered .hero-lead{animation-delay:.34s}
html[data-hub-transition="fade"].hub-entered .hero-type-line{animation-delay:.4s}
html[data-hub-transition="fade"].hub-entered .hero-center>.button{animation-delay:.48s}
@keyframes rc-hero-fade{from{opacity:0}to{opacity:1}}
@media(prefers-reduced-motion:reduce){html[data-hub-transition="fade"] .hub-loader,html[data-hub-transition="fade"] .hub-loader *{transition:none!important}html[data-hub-transition="fade"].hub-entered .hero *{animation:none!important}}
