Files
infrastructure/servers/ru-docker-infra/grabcevo/site/index.html
T
maximilion96 89e030c77b 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>
2026-07-20 01:24:48 +03:00

982 lines
72 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!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>