Add grabcevo static site (база-грабцево.рф) behind traefik

Лендинг «База Грабцево» из Obsidian: nginx:alpine отдаёт статику
(index.html + assets + robots/sitemap + Яндекс-верификация). IDN-домен
через punycode ${GRABCEVO_HOST}, TLS Let's Encrypt, www→apex 301.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-20 01:24:48 +03:00
parent 6db2e461dd
commit 89e030c77b
14 changed files with 1045 additions and 1 deletions
+13
View File
@@ -35,3 +35,16 @@ domains:
type: A
server: nl-reverse-proxy
purpose: "n8n через NL реверс-прокси (autossh-туннель с ru-docker-infra)"
- name: xn----7sbabbehfuo8fta4f.xn--p1ai # база-грабцево.рф (IDN/punycode)
registrar: reg.ru
records:
- host: "@"
type: A
server: ru-docker-infra
purpose: "лендинг «База Грабцево» (grabcevo, nginx через traefik)"
- host: www
type: A
server: ru-docker-infra
purpose: "www → apex (traefik 301 на apex)"
+2 -1
View File
@@ -12,7 +12,7 @@ servers:
role: core # основной узел: все ключевые сервисы
env: prod
location: yandex-cloud
tags: [traefik, n8n, gitea, postgres, redis, portainer, xray, mtg, dify]
tags: [traefik, n8n, gitea, postgres, redis, portainer, xray, mtg, dify, grabcevo]
services:
- traefik
- postgres
@@ -24,6 +24,7 @@ servers:
- portainer
- mtg # Telegram MTProto-прокси
- dify # LLM-app платформа (api/worker/web/plugin-daemon/sandbox/ssrf-proxy/weaviate)
- grabcevo # статический лендинг «База Грабцево» (nginx, база-грабцево.рф)
managed: true
- name: ru-vpn # входная нода VPN
+4
View File
@@ -43,6 +43,10 @@ DIFY_SANDBOX_API_KEY=fd3cd878e0cefe3410a81ecaa30facdd78e1d8357c10b927
DIFY_HTTP_PROXY=http://xray:8080
DIFY_NO_PROXY=localhost,127.0.0.1,dify-api,dify-worker,dify-web,dify-plugin-daemon,dify-sandbox,dify-ssrf-proxy,dify-weaviate,postgres,redis,marketplace.dify.ai,.dify.ai,pypi.org,files.pythonhosted.org,.pythonhosted.org
# --- Grabcevo (лендинг «База Грабцево») ---
# Кириллический домен база-грабцево.рф в punycode-форме (traefik/ACME работают с ней).
GRABCEVO_HOST=xn----7sbabbehfuo8fta4f.xn--p1ai
# --- MTProto (mtg) ---
# Фейк-домен для Fake-TLS — ОБЯЗАТЕЛЬНО тот же, под который сгенерирован секрет
# в mtg/config.toml. Traefik матчит TLS-handshake по SNI этого домена (TCP router
@@ -444,6 +444,32 @@ services:
networks:
- internal
# --- Grabcevo (статический лендинг «База Грабцево») -----------------------
# Продающий сайт производственно-складского комплекса. Чистая статика
# (index.html + assets/), отдаётся nginx. Домен — кириллический (IDN),
# traefik/Let's Encrypt работают по punycode-форме из ${GRABCEVO_HOST}.
grabcevo:
image: nginx:alpine
container_name: grabcevo
restart: unless-stopped
volumes:
- ./grabcevo/site:/usr/share/nginx/html:ro
networks:
- proxy
labels:
- traefik.enable=true
- traefik.docker.network=proxy
- traefik.http.routers.grabcevo.rule=Host(`${GRABCEVO_HOST}`) || Host(`www.${GRABCEVO_HOST}`)
- traefik.http.routers.grabcevo.entrypoints=websecure
- traefik.http.routers.grabcevo.tls=true
- traefik.http.routers.grabcevo.tls.certresolver=le
# www → apex (301)
- traefik.http.routers.grabcevo.middlewares=grabcevo-wwwredirect
- traefik.http.middlewares.grabcevo-wwwredirect.redirectregex.regex=^https?://www\.(.*)
- traefik.http.middlewares.grabcevo-wwwredirect.redirectregex.replacement=https://$${1}
- traefik.http.middlewares.grabcevo-wwwredirect.redirectregex.permanent=true
- traefik.http.services.grabcevo.loadbalancer.server.port=80
dify-weaviate:
image: semitechnologies/weaviate:${DIFY_WEAVIATE_VERSION}
container_name: dify-weaviate
Binary file not shown.

After

Width:  |  Height:  |  Size: 343 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 521 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 590 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 482 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 834 KiB

@@ -0,0 +1,981 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Индустриальный квартал «Аэропортовский» — продажа комплекса, Калуга</title>
<meta name="description" content="Продажа производственно-складского комплекса в Калуге: 10 участков 2,31 га и 2 склада рядом с технопарком «Грабцево» и заводом «Фольксваген». Целиком или частями от 4 млн ₽.">
<meta name="keywords" content="промышленная земля Калуга, участок под производство Грабцево, производственно-складской комплекс, купить землю Калуга, промзона Аэропортовский, склад Калуга, участок промназначения">
<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1">
<meta name="yandex-verification" content="6c052ed7d54313eb">
<link rel="canonical" href="https://база-грабцево.рф/">
<meta name="theme-color" content="#0F766E">
<meta name="author" content="Индустриальный квартал «Аэропортовский»">
<!-- Geo -->
<meta name="geo.region" content="RU-KLU">
<meta name="geo.placename" content="Калуга">
<meta name="geo.position" content="54.560550;36.347822">
<meta name="ICBM" content="54.560550, 36.347822">
<!-- Open Graph -->
<meta property="og:type" content="website">
<meta property="og:locale" content="ru_RU">
<meta property="og:site_name" content="Индустриальный квартал «Аэропортовский»">
<meta property="og:title" content="Индустриальный квартал «Аэропортовский» — продажа комплекса, Калуга">
<meta property="og:description" content="Производственно-складской комплекс в Калуге: 10 участков 2,31 га и 2 склада рядом с технопарком «Грабцево» и заводом «Фольксваген». Целиком или частями от 4 млн ₽.">
<meta property="og:url" content="https://база-грабцево.рф/">
<meta property="og:image" content="https://база-грабцево.рф/assets/og-image.jpg">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="Территория индустриального квартала «Аэропортовский», Калуга">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Индустриальный квартал «Аэропортовский» — продажа комплекса, Калуга">
<meta name="twitter:description" content="Производственно-складской комплекс в Калуге: 10 участков 2,31 га и 2 склада. Целиком или частями от 4 млн ₽.">
<meta name="twitter:image" content="https://база-грабцево.рф/assets/og-image.jpg">
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' rx='7' fill='%230F766E'/%3E%3Cpath d='M6 26h20M8 26V10l8-5 8 5v16M12 26v-6h8v6' fill='none' stroke='white' stroke-width='1.8' stroke-linejoin='round'/%3E%3C/svg%3E">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&family=IBM+Plex+Mono:wght@400;500;600&display=swap" rel="stylesheet">
<style>
:root{
--bg:#F4F6F2;
--surface:#FFFFFF;
--surface-2:#EDF1EC;
--ink:#132019;
--ink-2:#3A4A42;
--muted:#63736B;
--line:#DCE3DC;
--line-strong:#C3CDC3;
--primary:#0F766E;
--primary-ink:#0B5750;
--accent:#0A5E8C;
--accent-ink:#084b70;
--warn:#B45309;
--danger:#B91C1C;
--grid:rgba(19,32,25,.05);
--shadow-sm:0 1px 2px rgba(19,32,25,.06),0 1px 3px rgba(19,32,25,.05);
--shadow-md:0 4px 12px rgba(19,32,25,.08),0 2px 4px rgba(19,32,25,.05);
--shadow-lg:0 18px 48px rgba(19,32,25,.16);
--r:14px;
--maxw:1180px;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{animation-duration:.001ms!important;transition-duration:.001ms!important}}
body{
margin:0;background:var(--bg);color:var(--ink);
font-family:'Manrope',system-ui,-apple-system,Segoe UI,Roboto,sans-serif;
font-size:17px;line-height:1.6;-webkit-font-smoothing:antialiased;
}
h1,h2,h3{line-height:1.12;letter-spacing:-.02em;margin:0;font-weight:800}
p{margin:0}
a{color:var(--accent-ink);text-decoration:none}
img{max-width:100%;display:block}
.mono{font-family:'IBM Plex Mono',ui-monospace,SFMono-Regular,Menlo,monospace;font-variant-numeric:tabular-nums}
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 24px}
.kicker{font-family:'IBM Plex Mono',monospace;font-size:12.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--primary-ink);font-weight:600}
.section{padding:88px 0;position:relative}
.section-head{max-width:720px;margin-bottom:44px}
.section-head h2{font-size:clamp(28px,4vw,40px);margin:14px 0 16px}
.section-head p{color:var(--muted);font-size:18px}
.eyebrow-num{color:var(--line-strong)}
/* NAV */
.nav{position:sticky;top:0;z-index:50;background:rgba(244,246,242,.82);backdrop-filter:saturate(160%) blur(12px);border-bottom:1px solid var(--line)}
.nav-inner{display:flex;align-items:center;gap:24px;height:66px}
.brand{display:flex;align-items:center;gap:11px;font-weight:800;letter-spacing:-.02em;color:var(--ink);font-size:16px}
.brand .mark{width:30px;height:30px;flex:0 0 auto;border-radius:7px;background:linear-gradient(135deg,var(--primary),var(--accent));display:grid;place-items:center;color:#fff}
.nav-links{display:flex;gap:26px;margin-left:auto}
.nav-links a{color:var(--ink-2);font-size:14.5px;font-weight:500}
.nav-links a:hover{color:var(--primary-ink)}
.nav-cta{display:inline-flex;align-items:center;gap:8px;white-space:nowrap;background:var(--ink);color:#fff;padding:10px 16px;border-radius:10px;font-weight:600;font-size:14.5px;transition:transform .18s ease,background .18s ease}
.nav-cta:hover{background:var(--primary-ink);transform:translateY(-1px)}
.nav-tel{display:none;white-space:nowrap}
@media(max-width:920px){.nav-links{display:none}.nav-cta{display:none}.nav-tel{display:inline-flex;margin-left:auto;color:var(--ink);font-weight:700;font-size:15px}}
@media(max-width:600px){.nav-inner{gap:12px}.brand{font-size:14.5px}.nav-tel{font-size:15px}}
/* HERO */
.hero{position:relative;color:#fff;overflow:hidden;background:#0d1a15}
.hero-bg{position:absolute;inset:0}
.hero-bg img{width:100%;height:100%;object-fit:cover;opacity:.62}
.hero-bg::after{content:"";position:absolute;inset:0;background:
linear-gradient(180deg,rgba(10,20,16,.55) 0%,rgba(10,20,16,.28) 32%,rgba(10,20,16,.82) 100%),
linear-gradient(90deg,rgba(10,20,16,.7) 0%,rgba(10,20,16,.15) 60%)}
.hero-inner{position:relative;max-width:var(--maxw);margin:0 auto;padding:118px 24px 56px}
.hero h1{font-size:clamp(34px,6vw,66px);max-width:16ch;text-shadow:0 2px 30px rgba(0,0,0,.35)}
.hero .lead{margin-top:22px;max-width:60ch;font-size:clamp(17px,2.2vw,21px);color:rgba(255,255,255,.9)}
.hero-badges{display:flex;flex-wrap:wrap;gap:10px;margin-top:26px}
.hbadge{font-family:'IBM Plex Mono',monospace;font-size:12.5px;letter-spacing:.03em;padding:7px 12px;border:1px solid rgba(255,255,255,.28);border-radius:999px;background:rgba(255,255,255,.08);color:#eaf3ef}
.hero-cta{display:flex;flex-wrap:wrap;gap:14px;margin-top:34px}
.btn{display:inline-flex;align-items:center;gap:9px;padding:14px 24px;border-radius:12px;font-weight:700;font-size:16px;cursor:pointer;border:1px solid transparent;transition:transform .18s ease,background .18s ease,box-shadow .18s ease}
.btn:hover{transform:translateY(-2px)}
.btn-primary{background:var(--primary);color:#fff;box-shadow:0 10px 30px rgba(15,118,110,.4)}
.btn-primary:hover{background:#0c665f}
.btn-ghost{background:rgba(255,255,255,.1);color:#fff;border-color:rgba(255,255,255,.3)}
.btn-ghost:hover{background:rgba(255,255,255,.18)}
.hero-stats{position:relative;border-top:1px solid rgba(255,255,255,.18);margin-top:48px}
.hero-stats .wrap{display:grid;grid-template-columns:repeat(4,1fr)}
.hstat{padding:24px 24px 30px;border-left:1px solid rgba(255,255,255,.14)}
.hstat:first-child{border-left:none;padding-left:0}
.hstat .v{font-family:'IBM Plex Mono',monospace;font-size:clamp(22px,3vw,30px);font-weight:600;color:#fff}
.hstat .l{font-size:13px;color:rgba(255,255,255,.72);margin-top:4px}
@media(max-width:720px){.hero-stats .wrap{grid-template-columns:repeat(2,1fr)}.hstat{border-left:none;padding-left:0}.hstat:nth-child(2n){padding-left:20px;border-left:1px solid rgba(255,255,255,.14)}}
/* engineering grid backing */
.gridbg{background-image:linear-gradient(var(--grid) 1px,transparent 1px),linear-gradient(90deg,var(--grid) 1px,transparent 1px);background-size:40px 40px}
/* ADVANTAGES */
.adv-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:26px;box-shadow:var(--shadow-sm);transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}
.card:hover{transform:translateY(-3px);box-shadow:var(--shadow-md);border-color:var(--line-strong)}
.ico{width:44px;height:44px;border-radius:11px;background:var(--surface-2);color:var(--primary-ink);display:grid;place-items:center;margin-bottom:16px}
.ico svg{width:23px;height:23px}
.card h3{font-size:19px;margin-bottom:7px}
.card p{color:var(--muted);font-size:15.5px}
@media(max-width:900px){.adv-grid{grid-template-columns:1fr 1fr}}
@media(max-width:600px){.adv-grid{grid-template-columns:1fr}}
/* LOCATION */
.loc{display:grid;grid-template-columns:1fr 1fr;gap:40px;align-items:center}
.loc-fig{border-radius:var(--r);overflow:hidden;border:1px solid var(--line);box-shadow:var(--shadow-md);cursor:zoom-in;position:relative;background:#000}
.loc-fig img{width:100%}
.loc-fig .zoomhint{position:absolute;right:12px;bottom:12px;background:rgba(19,32,25,.78);color:#fff;font-family:'IBM Plex Mono',monospace;font-size:11.5px;padding:5px 10px;border-radius:8px;display:flex;gap:6px;align-items:center}
.dist-list{list-style:none;margin:22px 0 0;padding:0;display:grid;gap:2px}
.dist-list li{display:flex;align-items:baseline;gap:14px;padding:12px 0;border-bottom:1px dashed var(--line)}
.dist-list .d{font-family:'IBM Plex Mono',monospace;font-weight:600;color:var(--primary-ink);min-width:82px;font-size:15px}
.dist-list .t{color:var(--ink-2);font-size:15.5px}
@media(max-width:860px){.loc{grid-template-columns:1fr;gap:26px}}
/* SCHEME */
.scheme-wrap{display:grid;grid-template-columns:1.35fr 1fr;gap:32px;align-items:start}
.scheme-fig{border-radius:var(--r);overflow:hidden;border:1px solid var(--line);box-shadow:var(--shadow-md);cursor:zoom-in;position:relative}
.scheme-fig img{width:100%}
.plot-panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow-sm);overflow:hidden}
.plot-panel .ph{padding:16px 20px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center}
.plot-panel .ph b{font-size:15px}
.plot-panel .ph span{font-family:'IBM Plex Mono',monospace;font-size:12.5px;color:var(--muted)}
table.plots{width:100%;border-collapse:collapse;font-size:14.5px}
table.plots th,table.plots td{text-align:left;padding:11px 20px;border-bottom:1px solid var(--line)}
table.plots th{font-size:11.5px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-weight:600}
table.plots td.num,table.plots th.num{text-align:right;font-family:'IBM Plex Mono',monospace;font-variant-numeric:tabular-nums}
table.plots td.k{font-family:'IBM Plex Mono',monospace;color:var(--ink-2);font-size:13px}
table.plots tr.plot-row{cursor:default;transition:background .15s ease}
table.plots tr.plot-row:hover{background:var(--surface-2)}
table.plots tr.total td{font-weight:800;border-top:2px solid var(--line-strong);background:var(--surface-2)}
.tag-b{display:inline-block;font-family:'IBM Plex Mono',monospace;font-size:10.5px;padding:2px 6px;border-radius:5px;background:#FEF3C7;color:var(--warn);margin-left:6px;vertical-align:middle}
@media(max-width:900px){.scheme-wrap{grid-template-columns:1fr}}
/* COMMUNICATIONS */
.comm-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}
.comm{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:24px;box-shadow:var(--shadow-sm)}
.comm .ico{margin-bottom:14px}
.comm h3{font-size:17px}
.comm .st{font-family:'IBM Plex Mono',monospace;font-size:12px;padding:3px 9px;border-radius:999px;display:inline-block;margin-top:10px;font-weight:500}
.st.ok{background:#DCFCE7;color:#166534}
.st.maybe{background:#E0F2FE;color:#075985}
.comm p{color:var(--muted);font-size:14px;margin-top:10px}
@media(max-width:880px){.comm-grid{grid-template-columns:1fr 1fr}}
@media(max-width:520px){.comm-grid{grid-template-columns:1fr}}
/* PARAMS */
.params{display:grid;grid-template-columns:1fr 1fr;gap:32px}
.paramlist{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow-sm);overflow:hidden}
.paramlist .row{display:flex;justify-content:space-between;gap:16px;padding:15px 22px;border-bottom:1px solid var(--line)}
.paramlist .row:last-child{border-bottom:none}
.paramlist .row .k{color:var(--ink-2);font-size:15px}
.paramlist .row .v{font-family:'IBM Plex Mono',monospace;font-weight:600;text-align:right}
.vri{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:24px;box-shadow:var(--shadow-sm)}
.vri h3{font-size:18px;margin-bottom:6px}
.vri .zone{font-family:'IBM Plex Mono',monospace;font-size:13px;color:var(--primary-ink);margin-bottom:16px}
.chips{display:flex;flex-wrap:wrap;gap:8px}
.chip{font-size:13px;background:var(--surface-2);border:1px solid var(--line);color:var(--ink-2);padding:6px 12px;border-radius:999px}
@media(max-width:820px){.params{grid-template-columns:1fr}}
/* PRICING */
.price-grid{display:grid;grid-template-columns:1fr 1fr;gap:22px}
.price-card{background:var(--surface);border:1px solid var(--line);border-radius:18px;padding:32px;box-shadow:var(--shadow-sm);position:relative;overflow:hidden}
.price-card.feat{border-color:var(--primary);box-shadow:0 12px 40px rgba(15,118,110,.16)}
.price-card.feat::before{content:"Максимальная выгода";position:absolute;top:18px;right:-38px;transform:rotate(45deg);background:var(--primary);color:#fff;font-size:11px;font-weight:700;letter-spacing:.05em;padding:5px 44px}
.price-card .plabel{font-family:'IBM Plex Mono',monospace;font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.price-card h3{font-size:24px;margin:8px 0 4px}
.price-card .amount{font-family:'IBM Plex Mono',monospace;font-size:38px;font-weight:600;color:var(--ink);margin-top:14px;letter-spacing:-.02em}
.price-card .amount small{font-size:16px;color:var(--muted);font-weight:500}
.price-card ul{list-style:none;margin:18px 0 0;padding:0;display:grid;gap:11px}
.price-card li{display:flex;gap:10px;font-size:15px;color:var(--ink-2)}
.price-card li svg{flex:0 0 auto;width:19px;height:19px;color:var(--primary);margin-top:2px}
@media(max-width:760px){.price-grid{grid-template-columns:1fr}}
/* CALCULATOR */
.calc{margin-top:26px;background:var(--surface);border:1px solid var(--line);border-radius:18px;box-shadow:var(--shadow-md);overflow:hidden}
.calc-head{padding:20px 26px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:12px}
.calc-head .ico{margin:0;width:38px;height:38px}
.calc-head h3{font-size:18px}
.calc-head p{font-size:13.5px;color:var(--muted)}
.calc-body{display:grid;grid-template-columns:1.3fr .9fr;gap:0}
.calc-plots{padding:20px 26px;display:grid;grid-template-columns:1fr 1fr;gap:10px}
.calc-plots label{display:flex;align-items:center;gap:11px;padding:11px 14px;border:1px solid var(--line);border-radius:11px;cursor:pointer;transition:border-color .15s,background .15s;font-size:14.5px}
.calc-plots label:hover{border-color:var(--line-strong);background:var(--surface-2)}
.calc-plots input{width:18px;height:18px;accent-color:var(--primary);cursor:pointer}
.calc-plots .cp-name{font-weight:600}
.calc-plots .cp-area{font-family:'IBM Plex Mono',monospace;font-size:12.5px;color:var(--muted);margin-left:auto}
.calc-plots label:has(input:checked){border-color:var(--primary);background:#F0FBF9}
.calc-summary{background:var(--surface-2);padding:24px 26px;border-left:1px solid var(--line);display:flex;flex-direction:column;gap:14px}
.sumrow{display:flex;justify-content:space-between;align-items:baseline}
.sumrow .sl{color:var(--ink-2);font-size:14.5px}
.sumrow .sv{font-family:'IBM Plex Mono',monospace;font-weight:600;font-size:16px}
.sumrow.big .sv{font-size:26px;color:var(--primary-ink)}
.sumrow.big .sl{font-weight:700;color:var(--ink)}
.calc-note{font-size:12.5px;color:var(--muted);line-height:1.45;border-top:1px dashed var(--line-strong);padding-top:12px}
.calc-summary .btn{justify-content:center;margin-top:4px}
@media(max-width:820px){.calc-body{grid-template-columns:1fr}.calc-summary{border-left:none;border-top:1px solid var(--line)}}
@media(max-width:480px){.calc-plots{grid-template-columns:1fr}}
/* BUILDINGS */
.build-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:22px}
.build{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:22px;box-shadow:var(--shadow-sm);display:flex;gap:16px;align-items:flex-start}
.build .ico{margin:0}
.build h4{font-size:16px;margin:0 0 3px}
.build .k{font-family:'IBM Plex Mono',monospace;font-size:12px;color:var(--muted)}
.build .a{font-family:'IBM Plex Mono',monospace;font-weight:600;color:var(--primary-ink);margin-top:6px}
@media(max-width:600px){.build-grid{grid-template-columns:1fr}}
/* GALLERY */
.gallery{display:grid;grid-template-columns:2fr 1fr;grid-template-rows:1fr 1fr;gap:14px;height:520px}
.gallery figure{margin:0;overflow:hidden;border-radius:var(--r);border:1px solid var(--line);cursor:zoom-in;position:relative;background:#000}
.gallery figure:first-child{grid-row:span 2}
.gallery img{width:100%;height:100%;object-fit:cover;transition:transform .4s ease}
.gallery figure:hover img{transform:scale(1.04)}
@media(max-width:700px){.gallery{grid-template-columns:1fr 1fr;height:auto}.gallery figure:first-child{grid-row:span 1;grid-column:span 2;aspect-ratio:16/9}.gallery figure{aspect-ratio:4/3}}
/* CONTACT */
.contact{background:var(--ink);color:#eef3f0}
.contact .section-head h2{color:#fff}
.contact .section-head p{color:rgba(255,255,255,.72)}
.contact-grid{display:grid;grid-template-columns:1fr 1.1fr;gap:44px;align-items:start}
.cinfo .cperson{font-size:20px;font-weight:700;color:#fff}
.cinfo .crole{color:rgba(255,255,255,.6);font-size:14px;margin-bottom:22px}
.cline{display:flex;align-items:center;gap:14px;padding:15px 0;border-bottom:1px solid rgba(255,255,255,.12)}
.cline .ico{margin:0;background:rgba(255,255,255,.08);color:#8fe3d8}
.cline a{color:#fff;font-weight:600;font-size:17px}
.cline .sub{color:rgba(255,255,255,.55);font-size:13px}
.cnote{margin-top:22px;font-size:13.5px;color:rgba(255,255,255,.6);line-height:1.5}
.form{background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.12);border-radius:18px;padding:28px}
.form .frow{margin-bottom:16px}
.form label{display:block;font-size:13px;color:rgba(255,255,255,.7);margin-bottom:7px;font-weight:600}
.form input,.form textarea{width:100%;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.16);border-radius:11px;padding:13px 15px;color:#fff;font-family:inherit;font-size:15px;transition:border-color .15s,background .15s}
.form input:focus,.form textarea:focus{outline:none;border-color:var(--primary);background:rgba(255,255,255,.1)}
.form textarea{resize:vertical;min-height:88px}
.form .btn-primary{width:100%;justify-content:center;margin-top:4px}
.form .fnote{font-size:12px;color:rgba(255,255,255,.45);margin-top:12px;text-align:center}
@media(max-width:820px){.contact-grid{grid-template-columns:1fr;gap:32px}}
/* FOOTER */
.footer{background:#0b1712;color:rgba(255,255,255,.6);padding:40px 0;font-size:13.5px}
.footer .wrap{display:flex;justify-content:space-between;gap:20px;flex-wrap:wrap}
.footer .brand{color:#fff}
.footer a{color:rgba(255,255,255,.7)}
/* disclaimer box */
.disclaimer{margin-top:28px;background:#FFFBEB;border:1px solid #FDE68A;border-radius:12px;padding:16px 20px;font-size:13.5px;color:#78460b;display:flex;gap:12px}
.disclaimer svg{flex:0 0 auto;width:20px;height:20px;color:var(--warn);margin-top:1px}
/* LIGHTBOX */
.lb{position:fixed;inset:0;background:rgba(10,18,14,.92);z-index:100;display:none;align-items:center;justify-content:center;padding:28px;cursor:zoom-out}
.lb.open{display:flex}
.lb img{max-width:96vw;max-height:92vh;border-radius:8px;box-shadow:var(--shadow-lg)}
.lb-close{position:absolute;top:20px;right:24px;color:#fff;background:rgba(255,255,255,.12);border:none;width:44px;height:44px;border-radius:50%;font-size:22px;cursor:pointer;display:grid;place-items:center}
.lb-close:hover{background:rgba(255,255,255,.22)}
.reveal{opacity:0;transform:translateY(18px);transition:opacity .6s ease,transform .6s ease}
.reveal.in{opacity:1;transform:none}
/* SEO PROSE */
.prose{max-width:820px;columns:1}
.prose h3{font-size:20px;margin:30px 0 10px}
.prose h3:first-child{margin-top:0}
.prose p{color:var(--ink-2);font-size:16.5px;line-height:1.7;margin-bottom:14px}
.prose p:last-child{margin-bottom:0}
.prose a{font-weight:600;text-decoration:underline;text-underline-offset:2px}
.prose strong{color:var(--ink);font-weight:700}
/* MAP WIDGET */
.map-wrap{border:1px solid var(--line);border-radius:var(--r);overflow:hidden;box-shadow:var(--shadow-md);background:var(--surface-2)}
.ymap{width:100%;height:430px;border:0;display:block}
.map-sat{display:flex;align-items:center;justify-content:center;gap:8px;padding:13px;font-size:13.5px;font-weight:600;color:var(--primary-ink);cursor:zoom-in;border-top:1px solid var(--line);background:var(--surface)}
.map-sat:hover{background:var(--surface-2)}
@media(max-width:860px){.ymap{height:340px}}
/* INTERACTIVE SCHEME */
.scheme-svg-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow-md);padding:12px 12px 4px}
#planSvg{width:100%;height:auto;display:block;touch-action:manipulation}
.parcel{cursor:pointer;transition:fill .15s ease,fill-opacity .15s ease}
.parcel-plot{fill:var(--surface-2);stroke:var(--primary);stroke-width:2.5;stroke-linejoin:round}
.parcel-road{fill:#DCD2B8;stroke:#B9A87E;stroke-width:1.5;stroke-linejoin:round}
.parcel-bld{fill:#B7AB95;stroke:#8F846F;stroke-width:1.5;stroke-linejoin:round}
.parcel-plot.hot{fill:#5FB0A6}
.parcel-road.hot{fill:#CBBE96}
.parcel-bld.hot{fill:#9C8F76}
.plabel{font-family:'IBM Plex Mono',monospace;font-weight:600;fill:var(--ink);pointer-events:none;font-size:20px;text-anchor:middle;dominant-baseline:middle}
.plabel.road{font-size:13px;fill:#6b5f3e}
.plabel.bld{font-size:12px;fill:#3f3a30}
.scheme-legend{display:flex;gap:20px;flex-wrap:wrap;padding:12px 8px 8px;font-size:12px;color:var(--muted)}
.scheme-legend i{display:inline-block;width:14px;height:14px;border-radius:3px;margin-right:7px;vertical-align:-2px;border:1.5px solid}
.lg-plot{background:var(--surface-2);border-color:var(--primary)}
.lg-road{background:#DCD2B8;border-color:#B9A87E}
.lg-bld{background:#B7AB95;border-color:#8F846F}
.plot-info{padding:18px 20px;border-bottom:1px solid var(--line);min-height:150px}
.plot-info .pi-hint{color:var(--muted);font-size:14.5px;line-height:1.5}
.plot-info .pi-id{font-size:22px;font-weight:800;letter-spacing:-.02em}
.plot-info .pi-kad{font-family:'IBM Plex Mono',monospace;font-size:12.5px;color:var(--primary-ink);margin-top:2px}
.plot-info .pi-metrics{display:flex;gap:26px;margin:14px 0 10px}
.plot-info .pi-metrics .v{font-family:'IBM Plex Mono',monospace;font-weight:600;font-size:20px}
.plot-info .pi-metrics .l{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin-top:2px}
.plot-info .pi-note{font-size:13.5px;color:var(--ink-2);line-height:1.45}
table.plots tr.plot-row.hot{background:#F0FBF9}
/* AREA CALCULATOR */
.calc-input{padding:26px;display:flex;flex-direction:column;justify-content:center;gap:16px}
.calc-input>label{font-size:14px;font-weight:600;color:var(--ink-2)}
.calc-num{display:flex;align-items:baseline;gap:9px}
.calc-num input{width:130px;font-family:'IBM Plex Mono',monospace;font-size:30px;font-weight:600;border:1px solid var(--line);border-radius:10px;padding:8px 12px;color:var(--ink);background:var(--surface);-moz-appearance:textfield}
.calc-num input:focus{outline:none;border-color:var(--primary)}
.calc-num span{color:var(--muted);font-size:16px}
input[type=range]{width:100%;accent-color:var(--primary);cursor:pointer;height:6px}
.calc-ticks{display:flex;justify-content:space-between;font-size:11.5px;color:var(--muted)}
/* MESSENGERS */
.ccard{background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.12);border-radius:18px;padding:30px 28px;text-align:center;display:flex;flex-direction:column;align-items:center}
.ccard-label{font-size:12.5px;letter-spacing:.06em;text-transform:uppercase;color:rgba(255,255,255,.55);margin-bottom:8px}
.ccard-phone{font-family:'IBM Plex Mono',monospace;font-size:clamp(22px,4vw,28px);font-weight:600;color:#fff}
.msg-row{display:flex;gap:16px;justify-content:center;margin:22px 0 24px}
.msg-btn{width:56px;height:56px;border-radius:50%;display:grid;place-items:center;color:#fff;transition:transform .18s ease,box-shadow .18s ease;position:relative}
.msg-btn:hover{transform:translateY(-3px);box-shadow:var(--shadow-md)}
.msg-btn svg{width:27px;height:27px}
.msg-btn b{font-weight:800;font-size:13px;letter-spacing:.02em}
.msg-tg{background:#2AABEE}
.msg-wa{background:#25D366}
.msg-max{background:linear-gradient(135deg,#5B6BF5,#8A4FE6)}
.ccard .btn-primary{width:100%;justify-content:center}
.ccard-hint{font-size:11.5px;color:rgba(255,255,255,.4);margin-top:14px;line-height:1.4}
</style>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebSite",
"@id": "https://база-грабцево.рф/#website",
"url": "https://база-грабцево.рф/",
"name": "Индустриальный квартал «Аэропортовский»",
"inLanguage": "ru"
},
{
"@type": "RealEstateAgent",
"@id": "https://база-грабцево.рф/#seller",
"name": "Индустриальный квартал «Аэропортовский»",
"url": "https://база-грабцево.рф/",
"image": "https://база-грабцево.рф/assets/og-image.jpg",
"telephone": "+7-929-033-10-77",
"areaServed": "Калуга и Калужская область",
"address": {
"@type": "PostalAddress",
"streetAddress": "переулок Аэропортовский",
"addressLocality": "Калуга",
"addressRegion": "Калужская область",
"postalCode": "248000",
"addressCountry": "RU"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 54.560550,
"longitude": 36.347822
}
},
{
"@type": "Product",
"name": "Производственно-складской комплекс, 10 участков (2,31 га) и 2 склада — Калуга, пер. Аэропортовский",
"description": "Индустриальный квартал «Аэропортовский» в Калуге: 10 земельных участков общей площадью 2,31 га и 2 складских здания рядом с технопарком «Грабцево» и заводом «Фольксваген». Земли населённых пунктов, зона П-5, электричество 135 кВт. Продаётся целиком или отдельными лотами.",
"image": "https://база-грабцево.рф/assets/og-image.jpg",
"url": "https://база-грабцево.рф/",
"category": "Промышленная и складская недвижимость",
"brand": { "@id": "https://база-грабцево.рф/#seller" },
"offers": {
"@type": "AggregateOffer",
"priceCurrency": "RUB",
"lowPrice": "4000000",
"offerCount": "10",
"availability": "https://schema.org/InStock",
"areaServed": "Калуга",
"seller": { "@id": "https://база-грабцево.рф/#seller" }
}
}
]
}
</script>
<!-- Yandex.Metrika counter -->
<script type="text/javascript">
(function(m,e,t,r,i,k,a){
m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
m[i].l=1*new Date();
for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }}
k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)
})(window, document,'script','https://mc.yandex.ru/metrika/tag.js?id=110870522', 'ym');
ym(110870522, 'init', {ssr:true, webvisor:true, clickmap:true, ecommerce:"dataLayer", referrer: document.referrer, url: location.href, accurateTrackBounce:true, trackLinks:true});
</script>
<noscript><div><img src="https://mc.yandex.ru/watch/110870522" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->
</head>
<body>
<!-- NAV -->
<header class="nav">
<div class="wrap nav-inner">
<a class="brand" href="#top">
<span class="mark" aria-hidden="true">
<svg viewBox="0 0 24 24" fill="none" width="17" height="17"><path d="M3 21h18M5 21V7l6-4 6 4v14M9 9h.01M13 9h.01M9 13h.01M13 13h.01M9 17h.01M13 17h.01" stroke="#fff" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/></svg>
</span>
Квартал «Аэропортовский»
</a>
<nav class="nav-links">
<a href="#location">Локация</a>
<a href="#scheme">Схема</a>
<a href="#comm">Коммуникации</a>
<a href="#pricing">Цены</a>
<a href="#contact">Контакты</a>
</nav>
<a class="nav-tel mono" href="tel:+79290331077">+7 929 033-10-77</a>
<a class="nav-cta" href="#contact">
<svg viewBox="0 0 24 24" fill="none" width="16" height="16"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.36 1.9.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.9.34 1.85.57 2.81.7A2 2 0 0 1 22 16.92z" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"/></svg>
Заказать просмотр
</a>
</div>
</header>
<!-- HERO -->
<section class="hero" id="top">
<div class="hero-bg"><img src="assets/photo-road-1.jpg" width="1600" height="1200" fetchpriority="high" decoding="async" alt="Территория индустриального квартала «Аэропортовский» в Калуге — подъездная дорога и складские корпуса"></div>
<div class="hero-inner">
<span class="kicker" style="color:#8fe3d8">Продажа индустриального комплекса · г. Калуга</span>
<h1>Индустриальный квартал «Аэропортовский»</h1>
<p class="lead">Производственно-складской комплекс из 10 участков и 2 зданий рядом с технопарком «Грабцево» и заводом «Фольксваген». Земли населённых пунктов, зона П-5. Продаётся целиком или отдельными лотами.</p>
<div class="hero-badges">
<span class="hbadge">≈420 м до Грабцевского шоссе</span>
<span class="hbadge">2 км до технопарка «Грабцево»</span>
<span class="hbadge">Ж/д путь по границе</span>
<span class="hbadge">Электричество 135 кВт</span>
</div>
<div class="hero-cta">
<a class="btn btn-primary" href="#contact">Заказать просмотр объекта</a>
<a class="btn btn-ghost" href="#scheme">Смотреть участки</a>
</div>
</div>
<div class="hero-stats">
<div class="wrap">
<div class="hstat"><div class="v">2,31 га</div><div class="l">общая площадь</div></div>
<div class="hstat"><div class="v">10</div><div class="l">земельных участков</div></div>
<div class="hstat"><div class="v">2</div><div class="l">склада в составе</div></div>
<div class="hstat"><div class="v">от 4 млн ₽</div><div class="l">цена лота</div></div>
</div>
</div>
</section>
<!-- ADVANTAGES -->
<section class="section" id="advantages">
<div class="wrap">
<div class="section-head reveal">
<span class="kicker">Почему этот объект</span>
<h2>Готовая промышленная площадка в кластере крупных резидентов</h2>
<p>Бывшая база материально-технического снабжения Минобороны в черте Калуги — с коммуникациями, подъездами и железной дорогой по границе участка.</p>
</div>
<div class="adv-grid">
<div class="card reveal">
<div class="ico"><svg viewBox="0 0 24 24" fill="none"><path d="M21 10c0 7-9 12-9 12s-9-5-9-12a9 9 0 0 1 18 0z" stroke="currentColor" stroke-width="1.7"/><circle cx="12" cy="10" r="3" stroke="currentColor" stroke-width="1.7"/></svg></div>
<h3>Промышленный кластер</h3>
<p>Соседство с технопарком «Грабцево», заводом «Фольксваген» и таможенным терминалом. Готовая инженерная и транспортная среда вокруг.</p>
</div>
<div class="card reveal">
<div class="ico"><svg viewBox="0 0 24 24" fill="none"><path d="M4 19V9l8-5 8 5v10M9 19v-6h6v6" stroke="currentColor" stroke-width="1.7" stroke-linejoin="round"/><path d="M2 19h20" stroke="currentColor" stroke-width="1.7" stroke-linecap="round"/></svg></div>
<h3>Земли населённых пунктов</h3>
<p>Статус «земли населённых пунктов», ВРИ «для эксплуатации производственных помещений», зона П-5 — упрощённые согласования при строительстве.</p>
</div>
<div class="card reveal">
<div class="ico"><svg viewBox="0 0 24 24" fill="none"><path d="M22 12h-4l-3 9L9 3l-3 9H2" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"/></svg></div>
<h3>Ж/д путь по границе</h3>
<p>Вдоль участка проходит действующий железнодорожный путь; 3 км по рельсам до станции «Перспективная». Логистика для тяжёлых грузов.</p>
</div>
<div class="card reveal">
<div class="ico"><svg viewBox="0 0 24 24" fill="none"><path d="M13 2 3 14h9l-1 8 10-12h-9l1-8z" stroke="currentColor" stroke-width="1.7" stroke-linejoin="round"/></svg></div>
<h3>Мощность на месте</h3>
<p>135 кВт с вводом в эксплуатацию, электроподстанция на границе участка и возможность увеличения мощности под производство.</p>
</div>
<div class="card reveal">
<div class="ico"><svg viewBox="0 0 24 24" fill="none"><rect x="3" y="4" width="18" height="14" rx="2" stroke="currentColor" stroke-width="1.7"/><path d="M3 10h18M8 18l-1 3M16 18l1 3M8 8h.01M12 8h.01M16 8h.01" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"/></svg></div>
<h3>Гибкий формат сделки</h3>
<p>Можно купить весь комплекс целиком или выделить нужную площадь — отдельный участок либо группу смежных участков под конкретную задачу.</p>
</div>
<div class="card reveal">
<div class="ico"><svg viewBox="0 0 24 24" fill="none"><circle cx="12" cy="12" r="9" stroke="currentColor" stroke-width="1.7"/><path d="M12 7v5l3 2" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"/></svg></div>
<h3>9 км до центра Калуги</h3>
<p>1,5 км до обхода Калуги (Р-132), 160 км от МКАД. Быстрый выезд на федеральные направления и на город.</p>
</div>
</div>
</div>
</section>
<!-- LOCATION -->
<section class="section gridbg" id="location" style="background-color:#EFF2ED">
<div class="wrap">
<div class="section-head reveal">
<span class="kicker">Локация и логистика</span>
<h2>В черте Калуги, на стыке промзоны и трасс</h2>
<p>Переулок Аэропортовский, кадастровый квартал 40:26:000105. Коммуникации и подъезды — по краю территории.</p>
</div>
<div class="loc">
<div class="map-wrap reveal">
<iframe class="ymap" src="https://yandex.ru/map-widget/v1/?ll=36.347822%2C54.560550&z=16&pt=36.347822%2C54.560550%2Cpm2rdm" loading="lazy" allowfullscreen title="Карта: индустриальный квартал «Аэропортовский», г. Калуга"></iframe>
<a class="map-sat" data-lightbox="assets/scheme-satellite.jpg">
<svg viewBox="0 0 24 24" fill="none" width="15" height="15"><circle cx="11" cy="11" r="7" stroke="currentColor" stroke-width="1.8"/><path d="m21 21-4-4M11 8v6M8 11h6" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/></svg>
Схема участков на спутниковом снимке
</a>
</div>
<div class="reveal">
<ul class="dist-list">
<li><span class="d mono">≈420 м</span><span class="t">до Грабцевского шоссе</span></li>
<li><span class="d mono">2 км</span><span class="t">до технопарка «Грабцево», рядом «Фольксваген» и таможенный терминал</span></li>
<li><span class="d mono">1,5 км</span><span class="t">до обхода Калуги, трасса Р-132</span></li>
<li><span class="d mono">3 км</span><span class="t">по ж/д путям до станции «Перспективная»</span></li>
<li><span class="d mono">9 км</span><span class="t">до центра Калуги</span></li>
<li><span class="d mono">160 км</span><span class="t">от МКАД</span></li>
</ul>
<a class="btn btn-primary" style="margin-top:24px" href="https://yandex.ru/maps/?text=Калуга%20переулок%20Аэропортовский" target="_blank" rel="noopener">
<svg viewBox="0 0 24 24" fill="none" width="18" height="18"><path d="M21 10c0 7-9 12-9 12s-9-5-9-12a9 9 0 0 1 18 0z" stroke="currentColor" stroke-width="1.7"/><circle cx="12" cy="10" r="3" stroke="currentColor" stroke-width="1.7"/></svg>
Открыть на Яндекс.Картах
</a>
</div>
</div>
</div>
</section>
<!-- SCHEME + PLOTS -->
<section class="section" id="scheme">
<div class="wrap">
<div class="section-head reveal">
<span class="kicker">Состав комплекса</span>
<h2>Схема участков и характеристики</h2>
<p>10 участков общей площадью 2,31 га. Восемь участков под застройку (206,90 сотки) и два проезда (712, 717), обеспечивающих доступ ко всем участкам.</p>
</div>
<div class="scheme-wrap">
<div class="scheme-svg-card reveal">
<svg id="planSvg" viewBox="76 136 927 687" role="img" aria-label="Интерактивная схема земельных участков комплекса"></svg>
<div class="scheme-legend mono">
<span><i class="lg-plot"></i>участок</span>
<span><i class="lg-road"></i>проезд</span>
<span><i class="lg-bld"></i>склад</span>
<span style="margin-left:auto">наведите на участок →</span>
</div>
</div>
<div class="plot-panel reveal">
<div class="plot-info" id="plotInfo">
<div class="pi-hint">Наведите курсор на участок на схеме (или на строку таблицы) — здесь появятся кадастровый номер, площадь и краткая информация.</div>
</div>
<div class="ph"><b>Земельные участки</b><span class="mono">40:26:000105:…</span></div>
<table class="plots">
<thead><tr><th>Участок</th><th class="num">Площадь, м²</th><th class="num">Сотки</th></tr></thead>
<tbody>
<tr class="plot-row" data-id="687"><td class="k">:687</td><td class="num">5 282</td><td class="num">52,82</td></tr>
<tr class="plot-row" data-id="729"><td class="k">:729 <span class="tag-b">+2 склада</span></td><td class="num">4 940</td><td class="num">49,40</td></tr>
<tr class="plot-row" data-id="695"><td class="k">:695</td><td class="num">3 000</td><td class="num">30,00</td></tr>
<tr class="plot-row" data-id="707"><td class="k">:707</td><td class="num">2 220</td><td class="num">22,20</td></tr>
<tr class="plot-row" data-id="710"><td class="k">:710</td><td class="num">1 481</td><td class="num">14,81</td></tr>
<tr class="plot-row" data-id="705"><td class="k">:705</td><td class="num">1 453</td><td class="num">14,53</td></tr>
<tr class="plot-row" data-id="706"><td class="k">:706</td><td class="num">1 204</td><td class="num">12,04</td></tr>
<tr class="plot-row" data-id="709"><td class="k">:709</td><td class="num">1 110</td><td class="num">11,10</td></tr>
<tr class="total"><td>Итого · 8 уч.</td><td class="num">20 690</td><td class="num">206,90</td></tr>
<tr class="plot-row" data-id="712"><td class="k">:712 · проезд</td><td class="num">1 096</td><td class="num">10,96</td></tr>
<tr class="plot-row" data-id="717"><td class="k">:717 · проезд</td><td class="num">1 275</td><td class="num">12,75</td></tr>
</tbody>
</table>
</div>
</div>
<div class="build-grid">
<div class="build reveal">
<div class="ico"><svg viewBox="0 0 24 24" fill="none"><path d="M3 21h18M6 21V8l6-4 6 4v13M10 21v-5h4v5" stroke="currentColor" stroke-width="1.7" stroke-linejoin="round"/></svg></div>
<div>
<h4>Склад материалов, 2 этажа</h4>
<div class="k">40:26:000105:145 · 1991 г. · на уч. :729</div>
<div class="a">584,1 м²</div>
</div>
</div>
<div class="build reveal">
<div class="ico"><svg viewBox="0 0 24 24" fill="none"><path d="M3 21h18M6 21V10l6-4 6 4v11M10 21v-4h4v4" stroke="currentColor" stroke-width="1.7" stroke-linejoin="round"/></svg></div>
<div>
<h4>Склад материалов, 1 этаж</h4>
<div class="k">40:26:000105:146 · 1991 г. · на уч. :729</div>
<div class="a">569,7 м²</div>
</div>
</div>
</div>
</div>
</section>
<!-- COMMUNICATIONS -->
<section class="section" id="comm" style="background-color:#EFF2ED">
<div class="wrap">
<div class="section-head reveal">
<span class="kicker">Инженерные сети</span>
<h2>Коммуникации по границе участка</h2>
<p>Электричество введено в эксплуатацию; газ, вода и водоотведение — с технической возможностью подключения по границе территории.</p>
</div>
<div class="comm-grid">
<div class="comm reveal">
<div class="ico"><svg viewBox="0 0 24 24" fill="none"><path d="M13 2 3 14h9l-1 8 10-12h-9l1-8z" stroke="currentColor" stroke-width="1.7" stroke-linejoin="round"/></svg></div>
<h3>Электричество</h3>
<span class="st ok">135 кВт · в наличии</span>
<p>Ввод в эксплуатацию — январь 2024. Подстанция на границе, возможность увеличения мощности.</p>
</div>
<div class="comm reveal">
<div class="ico"><svg viewBox="0 0 24 24" fill="none"><path d="M12 22c4 0 6-2.5 6-6 0-4-4-6-3-11-3 1-5 4-5 7 0-1-1-2.5-2-3-1 2-2 4-2 7 0 3.5 2 6 6 6z" stroke="currentColor" stroke-width="1.7" stroke-linejoin="round"/></svg></div>
<h3>Газ</h3>
<span class="st maybe">по границе · ТУ не оформлены</span>
<p>Техническая возможность подключения по границе участка.</p>
</div>
<div class="comm reveal">
<div class="ico"><svg viewBox="0 0 24 24" fill="none"><path d="M12 3s6 6.5 6 11a6 6 0 0 1-12 0c0-4.5 6-11 6-11z" stroke="currentColor" stroke-width="1.7" stroke-linejoin="round"/></svg></div>
<h3>Вода и водоотведение</h3>
<span class="st maybe">по границе · ТУ не оформлены</span>
<p>Техническая возможность подключения по границе участка.</p>
</div>
<div class="comm reveal">
<div class="ico"><svg viewBox="0 0 24 24" fill="none"><path d="M4 19h16M6 19V9l4-3M18 19V5l-4 3M10 6v13M14 8v11" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"/></svg></div>
<h3>Проезды</h3>
<span class="st ok">2 371 м² · внутри комплекса</span>
<p>Участки 712 и 717 обеспечивают доступ ко всем участкам территории.</p>
</div>
</div>
</div>
</section>
<!-- PARAMS -->
<section class="section" id="params">
<div class="wrap">
<div class="section-head reveal">
<span class="kicker">Градостроительные параметры</span>
<h2>Что и как можно строить</h2>
<p>По данным ГПЗУ (Управление архитектуры и градостроительства г. Калуги, 2023 г.) и ПЗЗ ГО «Город Калуга».</p>
</div>
<div class="params">
<div class="paramlist reveal">
<div class="row"><span class="k">Размер участка</span><span class="v">1 000 м² 200 га</span></div>
<div class="row"><span class="k">Мин. отступ от границ</span><span class="v">6 м</span></div>
<div class="row"><span class="k">Предельная высота</span><span class="v">15 м</span></div>
<div class="row"><span class="k">Этажность</span><span class="v">до 6 эт.</span></div>
<div class="row"><span class="k">Макс. процент застройки</span><span class="v">80 %</span></div>
<div class="row"><span class="k">Проект планировки территории</span><span class="v">не утверждён</span></div>
</div>
<div class="vri reveal">
<h3>Виды разрешённого использования</h3>
<div class="zone mono">Зона П-5 · производственно-коммунальные объекты V класса</div>
<div class="chips">
<span class="chip">Производство</span>
<span class="chip">Склад</span>
<span class="chip">Лёгкая промышленность</span>
<span class="chip">Пищевая промышленность</span>
<span class="chip">Фармацевтика</span>
<span class="chip">Энергетика</span>
<span class="chip">Связь</span>
<span class="chip">Хранение автотранспорта</span>
<span class="chip">Дорожный сервис</span>
<span class="chip">Деловое управление</span>
<span class="chip">Магазины</span>
<span class="chip">Научно-производственная деят.</span>
</div>
<p style="color:var(--muted);font-size:14px;margin-top:16px">Ключевые из 29 основных ВРИ. Полный перечень — в градостроительном плане (ГПЗУ), предоставляется по запросу.</p>
</div>
</div>
</div>
</section>
<!-- PRICING + CALCULATOR -->
<section class="section gridbg" id="pricing" style="background-color:#EFF2ED">
<div class="wrap">
<div class="section-head reveal">
<span class="kicker">Форматы и стоимость</span>
<h2>Целиком или отдельными лотами</h2>
<p>Итоговая цена обсуждается индивидуально — в зависимости от расположения участка, размера лота и условий сделки.</p>
</div>
<div class="price-grid">
<div class="price-card feat reveal">
<span class="plabel">Весь комплекс</span>
<h3>Целиком</h3>
<div class="amount">350 000 ₽<small> / сотка</small></div>
<ul>
<li><svg viewBox="0 0 24 24" fill="none"><path d="M20 6 9 17l-5-5" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/></svg>Все 10 участков — 2,31 га</li>
<li><svg viewBox="0 0 24 24" fill="none"><path d="M20 6 9 17l-5-5" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/></svg>2 здания складов на уч. :729 — без доплаты</li>
<li><svg viewBox="0 0 24 24" fill="none"><path d="M20 6 9 17l-5-5" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/></svg>Проезды 712 и 717 в составе</li>
<li><svg viewBox="0 0 24 24" fill="none"><path d="M20 6 9 17l-5-5" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/></svg>Лучшая цена за сотку</li>
</ul>
</div>
<div class="price-card reveal">
<span class="plabel">По частям</span>
<h3>Отдельный лот</h3>
<div class="amount">от 400 000 ₽<small> / сотка</small></div>
<ul>
<li><svg viewBox="0 0 24 24" fill="none"><path d="M20 6 9 17l-5-5" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/></svg>Один участок или группа смежных</li>
<li><svg viewBox="0 0 24 24" fill="none"><path d="M20 6 9 17l-5-5" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/></svg>От 4 000 000 ₽ за лот</li>
<li><svg viewBox="0 0 24 24" fill="none"><path d="M20 6 9 17l-5-5" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/></svg>При покупке уч. :729 — оба склада в цене</li>
<li><svg viewBox="0 0 24 24" fill="none"><path d="M20 6 9 17l-5-5" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/></svg>Доля в проездах определяется индивидуально</li>
</ul>
</div>
</div>
<!-- CALCULATOR -->
<div class="calc reveal">
<div class="calc-head">
<div class="ico"><svg viewBox="0 0 24 24" fill="none"><rect x="4" y="2" width="16" height="20" rx="2" stroke="currentColor" stroke-width="1.7"/><path d="M8 6h8M8 10h8M8 14h3M8 18h3M15 14v4" stroke="currentColor" stroke-width="1.7" stroke-linecap="round"/></svg></div>
<div>
<h3>Калькулятор лота</h3>
<p>Укажите нужную площадь — ставка снижается с ростом лота</p>
</div>
</div>
<div class="calc-body">
<div class="calc-input">
<label for="areaNum">Сколько соток вам нужно</label>
<div class="calc-num">
<input id="areaNum" type="number" min="10" max="206.9" step="1" value="30" inputmode="decimal">
<span>соток</span>
</div>
<input id="areaRange" type="range" min="10" max="207" step="1" value="30" aria-label="Площадь лота, соток">
<div class="calc-ticks mono"><span>10 сот.</span><span>весь массив · 206,9 сот.</span></div>
</div>
<div class="calc-summary">
<div class="sumrow"><span class="sl">Площадь</span><span class="sv mono" id="cArea">30 сот.</span></div>
<div class="sumrow"><span class="sl">Ставка за сотку</span><span class="sv mono" id="cRate">— ₽</span></div>
<div class="sumrow big"><span class="sl">Ориентировочно</span><span class="sv mono" id="cTotal">— ₽</span></div>
<div class="calc-note">Ставка меняется шагами от <b>400 000 ₽/сотка</b> при небольшом лоте (10 соток) до <b>350 000 ₽/сотка</b> при покупке всего массива. Минимальный лот — 10 соток. Итоговая цена обсуждается индивидуально.</div>
<a class="btn btn-primary" href="#contact">Обсудить лот</a>
</div>
</div>
</div>
<div class="disclaimer reveal">
<svg viewBox="0 0 24 24" fill="none"><path d="M12 9v4M12 17h.01M10.3 3.9 1.8 18a2 2 0 0 0 1.7 3h17a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0z" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"/></svg>
<span>Цены и расчёт носят справочный характер и не являются публичной офертой. Точную стоимость, состав лота и условия сделки уточняйте у продавца.</span>
</div>
</div>
</section>
<!-- GALLERY -->
<section class="section" id="gallery">
<div class="wrap">
<div class="section-head reveal">
<span class="kicker">Территория</span>
<h2>Фотографии площадки</h2>
</div>
<div class="gallery reveal">
<figure data-lightbox="assets/photo-road-1.jpg"><img src="assets/photo-road-1.jpg" width="1600" height="1200" loading="lazy" decoding="async" alt="Подъездная дорога и складские корпуса на территории комплекса в Калуге"></figure>
<figure data-lightbox="assets/photo-crossroads.jpg"><img src="assets/photo-crossroads.jpg" width="1600" height="1200" loading="lazy" decoding="async" alt="Внутренний проезд и застройка индустриального квартала «Аэропортовский»"></figure>
<figure data-lightbox="assets/photo-road-2.jpg"><img src="assets/photo-road-2.jpg" width="1200" height="1600" loading="lazy" decoding="async" alt="Проезд вдоль складских зданий на территории комплекса"></figure>
</div>
</div>
</section>
<!-- SEO DESCRIPTION -->
<section class="section gridbg" id="about" style="background-color:#EFF2ED">
<div class="wrap">
<div class="section-head reveal">
<span class="kicker">О комплексе</span>
<h2>Промышленная земля в Калуге рядом с технопарком «Грабцево»</h2>
</div>
<div class="prose reveal">
<p><strong>Индустриальный квартал «Аэропортовский»</strong> — готовая производственно-складская площадка в черте города Калуги, в переулке Аэропортовский (кадастровый квартал 40:26:000105). Участок находится в сложившейся промышленной зоне рядом с технопарком «Грабцево», заводом «Фольксваген» и таможенным терминалом: около 420 метров до Грабцевского шоссе, 1,5 км до обхода Калуги (трасса Р-132), 9 км до центра города и 160 км от МКАД. По границе территории проходит действующий железнодорожный путь — до станции «Перспективная» всего 3 км по рельсам.</p>
<h3>Что можно купить</h3>
<p>Продаётся производственно-складской комплекс из <strong>10 земельных участков общей площадью 2,31 га</strong> (206,9 сотки под застройку) и двух складских зданий 1991 года постройки. Купить можно как весь массив целиком, так и отдельный участок или группу смежных участков под конкретную задачу — производство, склад, логистический комплекс или производственную базу. Минимальный лот — от 10 соток (от 4 000 000 ₽): при покупке частями ставка от 400 000 ₽ за сотку, целиком — 350 000 ₽ за сотку вместе с двумя складами. Актуальные площади и цены по каждому участку — в <a href="#scheme">интерактивной схеме участков</a>.</p>
<h3>Коммуникации и разрешённое использование</h3>
<p>На площадку заведено <strong>электричество 135 кВт</strong> с возможностью увеличения мощности — на границе участка расположена электроподстанция. По границе территории проходят газ, вода и водоотведение с технической возможностью подключения. Земли относятся к категории «земли населённых пунктов», территориальная зона <strong>П-5</strong> (производственно-коммунальные объекты V класса санитарной классификации), что упрощает согласования при строительстве. Разрешено размещение производственных, складских, энергетических и коммунальных объектов, объектов дорожного сервиса и делового управления — всего 29 основных видов разрешённого использования.</p>
<h3>Кому подойдёт</h3>
<p>Площадка подходит тем, кто ищет промышленный или складской участок в Калуге и Калужской области под строительство завода, цеха, склада или логистического хаба — с готовыми подъездами, мощностью и железной дорогой. Чтобы купить участок промышленного назначения рядом с Грабцево или узнать условия по конкретному лоту, свяжитесь с нами по телефону <a href="tel:+79290331077">+7 929 033-10-77</a> — ответим на вопросы, подготовим документы (выписки ЕГРН, ГПЗУ, ПЗЗ) и организуем просмотр объекта.</p>
</div>
</div>
</section>
<!-- CONTACT -->
<section class="section contact" id="contact">
<div class="wrap">
<div class="section-head reveal">
<span class="kicker" style="color:#8fe3d8">Контакты</span>
<h2>Запишитесь на просмотр объекта</h2>
<p>Ответим на вопросы, подготовим документы и организуем выезд на площадку.</p>
</div>
<div class="contact-grid">
<div class="cinfo reveal">
<div class="cline">
<div class="ico"><svg viewBox="0 0 24 24" fill="none"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.13.96.36 1.9.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.9.34 1.85.57 2.81.7A2 2 0 0 1 22 16.92z" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"/></svg></div>
<div><a class="mono" href="tel:+79290331077">+7 929 033-10-77</a><div class="sub">Звонок и мессенджеры</div></div>
</div>
<div class="cline">
<div class="ico"><svg viewBox="0 0 24 24" fill="none"><path d="M21 10c0 7-9 12-9 12s-9-5-9-12a9 9 0 0 1 18 0z" stroke="currentColor" stroke-width="1.7"/><circle cx="12" cy="10" r="3" stroke="currentColor" stroke-width="1.7"/></svg></div>
<div><span style="color:#fff;font-weight:600">г. Калуга, пер. Аэропортовский</span><div class="sub">Кадастровый квартал 40:26:000105</div></div>
</div>
<p class="cnote">Полный пакет документов — выписки ЕГРН, ГПЗУ, ПЗЗ — предоставляется по запросу.</p>
</div>
<div class="ccard reveal">
<div class="ccard-label">Связаться напрямую</div>
<a class="ccard-phone" href="tel:+79290331077">+7 929 033-10-77</a>
<div class="msg-row">
<a class="msg-btn msg-tg" href="https://t.me/+79290331077" target="_blank" rel="noopener" title="Написать в Telegram" aria-label="Telegram">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M21.86 4.28c.27-1.13-.86-2.03-1.9-1.6L2.5 9.66c-1.14.45-1.07 2.11.1 2.46l4.03 1.2 1.53 4.9c.19.6.94.79 1.4.36l2.26-2.1 4.03 3.02c.62.46 1.51.12 1.68-.63l4.23-14.6zM7.9 12.9l8.2-5.1c.16-.1.33.12.19.25l-6.62 6.2c-.24.22-.4.53-.44.86l-.22 1.86-1.31-4.13z"/></svg>
</a>
<a class="msg-btn msg-wa" href="https://wa.me/79290331077" target="_blank" rel="noopener" title="Написать в WhatsApp" aria-label="WhatsApp">
<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 2a10 10 0 0 0-8.5 15.2L2 22l4.9-1.3A10 10 0 1 0 12 2zm0 18.2c-1.5 0-3-.4-4.3-1.2l-.3-.2-2.9.8.8-2.8-.2-.3A8.2 8.2 0 1 1 12 20.2zm4.5-6.1c-.2-.1-1.4-.7-1.7-.8-.2-.1-.4-.1-.5.1l-.7.9c-.1.2-.3.2-.5.1a6.7 6.7 0 0 1-2-1.2 7.4 7.4 0 0 1-1.4-1.7c-.1-.2 0-.4.1-.5l.4-.5c.1-.1.1-.3.2-.4 0-.2 0-.3 0-.4l-.7-1.7c-.2-.5-.4-.4-.5-.4h-.5c-.2 0-.4 0-.6.3-.2.2-.8.8-.8 1.9s.8 2.2.9 2.4c.1.2 1.6 2.5 3.9 3.5.5.2 1 .4 1.3.5.6.2 1.1.1 1.5.1.5-.1 1.4-.6 1.6-1.1.2-.6.2-1 .1-1.1z"/></svg>
</a>
</div>
<a class="btn btn-primary" href="tel:+79290331077">Позвонить</a>
</div>
</div>
</div>
</section>
<!-- FOOTER -->
<footer class="footer">
<div class="wrap">
<div class="brand">
<span class="mark" aria-hidden="true" style="width:26px;height:26px">
<svg viewBox="0 0 24 24" fill="none" width="15" height="15"><path d="M3 21h18M5 21V7l6-4 6 4v14M9 9h.01M13 9h.01M9 13h.01M13 13h.01M9 17h.01M13 17h.01" stroke="#fff" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/></svg>
</span>
Индустриальный квартал «Аэропортовский»
</div>
<div>г. Калуга, пер. Аэропортовский · <a href="tel:+79290331077" class="mono">+7 929 033-10-77</a></div>
</div>
</footer>
<!-- LIGHTBOX -->
<div class="lb" id="lb" role="dialog" aria-modal="true" aria-label="Просмотр изображения">
<button class="lb-close" id="lbClose" aria-label="Закрыть"></button>
<img id="lbImg" src="" alt="">
</div>
<script>
var fmt = function(x){return Math.round(x).toLocaleString('ru-RU');};
// --- Area calculator (stepwise rate 400k @10 сот → 350k @ full massif) ---
var A_MIN=10, A_FULL=206.9, R_MAX=400000, R_MIN=350000, R_STEP=1000;
function rateFor(a){
if(a<=A_MIN) return R_MAX;
if(a>=A_FULL) return R_MIN;
var r = R_MAX - (R_MAX-R_MIN)*(a-A_MIN)/(A_FULL-A_MIN);
return Math.round(r/R_STEP)*R_STEP; // stepwise
}
var numEl=document.getElementById('areaNum'), rngEl=document.getElementById('areaRange');
function calc(a){
a = Math.min(A_FULL, Math.max(A_MIN, a||A_MIN));
var rate=rateFor(a), total=a*rate;
var whole = a>=A_FULL;
document.getElementById('cArea').textContent = (Number.isInteger(a)?a:a.toFixed(1).replace('.',','))+' сот.'+(whole?' · весь массив':'');
document.getElementById('cRate').textContent = fmt(rate)+' ₽';
document.getElementById('cTotal').textContent = fmt(total)+' ₽';
}
function syncFrom(el){
var a=parseFloat(el.value.replace(',','.'));
if(isNaN(a)) return;
a=Math.min(A_FULL,Math.max(A_MIN,a));
numEl.value = Number.isInteger(a)?a:a.toFixed(1);
rngEl.value = Math.round(a);
calc(a);
}
numEl.addEventListener('input',function(){syncFrom(numEl);});
rngEl.addEventListener('input',function(){syncFrom(rngEl);});
calc(30);
// --- Interactive scheme ---
var PARCELS=[
{id:'687',type:'plot',label:'687',kad:'40:26:000105:687',m2:'5 282',sot:'52,82',cx:815.6,cy:552.2,note:'Самый большой участок; примыкает к проезду :717 в сторону Грабцевского шоссе',pts:'789.3,413.2 655.6,595.9 749.2,664.0 917.2,667.5 993.0,559.4 789.3,413.2'},
{id:'729',type:'plot',label:'729',kad:'40:26:000105:729',m2:'4 940',sot:'49,40',cx:383.4,cy:474.6,note:'С двумя зданиями складов (:145 и :146) — входят в цену участка',pts:'280.7,382.8 280.0,407.7 328.6,408.2 323.3,577.4 275.4,633.3 361.8,703.7 474.2,550.0 516.5,492.3 545.6,452.6 487.6,409.9 487.8,385.2 341.9,383.5 280.7,382.8'},
{id:'695',type:'plot',label:'695',kad:'40:26:000105:695',m2:'3 000',sot:'30,00',cx:495.3,cy:617.5,note:'Смежен с проездом :717',pts:'516.5,492.3 474.2,550.0 361.8,703.7 477.1,797.7 546.4,703.1 490.0,661.7 579.9,538.9 516.5,492.3'},
{id:'707',type:'plot',label:'707',kad:'40:26:000105:707',m2:'2 220',sot:'22,20',cx:537.9,cy:329.9,note:'Восточная часть массива',pts:'520.7,231.3 505.4,302.8 500.2,327.1 487.8,385.2 487.6,409.9 545.6,452.6 576.1,410.9 658.4,298.6 576.3,248.8 520.7,231.3'},
{id:'710',type:'plot',label:'710',kad:'40:26:000105:710',m2:'1 481',sot:'14,81',cx:271.9,cy:329.5,note:'Западная часть массива',pts:'224.3,266.8 201.2,380.9 280.7,382.8 341.9,383.5 359.2,296.2 224.3,266.8'},
{id:'705',type:'plot',label:'705',kad:'40:26:000105:705',m2:'1 453',sot:'14,53',cx:286.6,cy:191.3,note:'Северный участок массива',pts:'236.3,146.0 214.7,239.2 364.1,271.9 380.8,187.2 287.1,157.7 236.3,146.0'},
{id:'706',type:'plot',label:'706',kad:'40:26:000105:706',m2:'1 204',sot:'12,04',cx:430.4,cy:236.1,note:'Северная часть массива',pts:'380.8,187.2 364.1,271.9 505.4,302.8 520.7,231.3 380.8,187.2'},
{id:'709',type:'plot',label:'709',kad:'40:26:000105:709',m2:'1 110',sot:'11,10',cx:409.7,cy:337.6,note:'Центральная часть массива',pts:'359.2,296.2 341.9,383.5 487.8,385.2 500.2,327.1 359.2,296.2'},
{id:'712',type:'road',label:'712',kad:'40:26:000105:712',m2:'1 096',sot:'10,96',cx:270.8,cy:262.8,note:'Проезд — обеспечивает доступ к участкам',pts:'91.6,212.2 86.0,236.6 224.3,266.8 359.2,296.2 500.2,327.1 505.4,302.8 364.1,271.9 214.7,239.2 91.6,212.2'},
{id:'717',type:'road',label:'717',kad:'40:26:000105:717',m2:'1 275',sot:'12,75',cx:657.4,cy:565.5,note:'Проезд — выход в сторону Грабцевского шоссе',pts:'769.4,398.9 729.2,453.4 636.3,580.3 594.0,638.1 477.1,797.7 496.4,813.4 655.6,595.9 789.3,413.2 769.4,398.9'},
{id:'B1',type:'building',label:':145',kad:'40:26:000105:145',m2:'584,1',sot:'—',cx:345.5,cy:452.1,note:'Склад материалов, 2 этажа, 1991 г. (на уч. :729)',pts:'331.4,412.8 328.7,510.1 367.3,510.9 368.5,413.7 331.4,412.8'},
{id:'B2',type:'building',label:':146',kad:'40:26:000105:146',m2:'569,7',sot:'—',cx:419.0,cy:453.0,note:'Склад материалов, 1 этаж, 1991 г. (на уч. :729)',pts:'405.0,414.2 403.3,511.0 440.1,511.3 441.6,414.5 405.0,414.2'}
];
var SVGNS='http://www.w3.org/2000/svg';
var svg=document.getElementById('planSvg');
var byId={};
function el(tag,attrs){var e=document.createElementNS(SVGNS,tag);for(var k in attrs)e.setAttribute(k,attrs[k]);return e;}
// draw order: plots first, then roads, then buildings on top
['plot','road','building'].forEach(function(kind){
PARCELS.filter(function(p){return p.type===kind;}).forEach(function(p){
var poly=el('polygon',{points:p.pts,'class':'parcel parcel-'+(kind==='plot'?'plot':kind==='road'?'road':'bld')});
poly.dataset.id=p.id; svg.appendChild(poly); byId[p.id]=poly;
var t=el('text',{x:p.cx,y:p.cy,'class':'plabel'+(kind==='road'?' road':kind==='building'?' bld':'')});
t.textContent=p.label; svg.appendChild(t);
});
});
var infoEl=document.getElementById('plotInfo');
var HINT=infoEl.innerHTML;
var rowById={};
document.querySelectorAll('table.plots tr.plot-row').forEach(function(r){rowById[r.dataset.id]=r;});
function pData(id){for(var i=0;i<PARCELS.length;i++)if(PARCELS[i].id===id)return PARCELS[i];}
function setHot(id,on){
if(byId[id]) byId[id].classList.toggle('hot',on);
if(rowById[id]) rowById[id].classList.toggle('hot',on);
}
var activeId=null;
function activate(id){
if(activeId&&activeId!==id) setHot(activeId,false);
activeId=id; setHot(id,true);
var p=pData(id); if(!p) return;
var typeLbl = p.type==='road'?'Проезд':p.type==='building'?'Здание':'Земельный участок';
var metrics = '<div><div class="v">'+p.m2+' м²</div><div class="l">площадь</div></div>'+
(p.sot!=='—'?'<div><div class="v">'+p.sot+'</div><div class="l">соток</div></div>':'');
infoEl.innerHTML='<div class="pi-id">'+(p.type==='building'?'Склад '+p.label:'Участок '+p.label)+'</div>'+
'<div class="pi-kad">'+p.kad+' · '+typeLbl+'</div>'+
'<div class="pi-metrics">'+metrics+'</div>'+
'<div class="pi-note">'+p.note+'</div>';
}
function deactivate(){ if(activeId){setHot(activeId,false);activeId=null;} infoEl.innerHTML=HINT; }
PARCELS.forEach(function(p){
var poly=byId[p.id];
poly.addEventListener('mouseenter',function(){activate(p.id);});
poly.addEventListener('click',function(){activate(p.id);});
});
svg.addEventListener('mouseleave',deactivate);
Object.keys(rowById).forEach(function(id){
var r=rowById[id];
r.addEventListener('mouseenter',function(){activate(id);});
r.addEventListener('mouseleave',function(){ if(activeId===id) deactivate(); });
});
// --- Lightbox ---
var lb = document.getElementById('lb'), lbImg = document.getElementById('lbImg');
document.querySelectorAll('[data-lightbox]').forEach(function(el){
el.addEventListener('click', function(){
lbImg.src = el.getAttribute('data-lightbox');
lb.classList.add('open');
});
});
function closeLb(){lb.classList.remove('open');}
document.getElementById('lbClose').addEventListener('click', closeLb);
lb.addEventListener('click', function(e){if(e.target===lb) closeLb();});
document.addEventListener('keydown', function(e){if(e.key==='Escape') closeLb();});
// --- Reveal on scroll ---
if('IntersectionObserver' in window && !window.matchMedia('(prefers-reduced-motion: reduce)').matches){
var io = new IntersectionObserver(function(entries){
entries.forEach(function(en){ if(en.isIntersecting){ en.target.classList.add('in'); io.unobserve(en.target);} });
}, {threshold:.12});
document.querySelectorAll('.reveal').forEach(function(el){io.observe(el);});
} else {
document.querySelectorAll('.reveal').forEach(function(el){el.classList.add('in');});
}
</script>
</body>
</html>
@@ -0,0 +1,4 @@
User-agent: *
Allow: /
Sitemap: https://база-грабцево.рф/sitemap.xml
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://база-грабцево.рф/</loc>
<lastmod>2026-07-20</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
</urlset>
@@ -0,0 +1,6 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>Verification: 6c052ed7d54313eb</body>
</html>