:root {
--font-serif: 'PT Serif', Georgia, serif;
--font-sans: 'IBM Plex Sans', -apple-system, sans-serif;
--font-mono: 'IBM Plex Mono', 'Courier New', monospace;
--color-bg: #f8f7f4;
--color-bg-card: #ffffff;
--color-bg-alt: #f0eee8;
--color-bg-hover: #eae8e2;
--color-border: #d4d0c8;
--color-border-light: #e5e2db;
--color-text: #1a1a1a;
--color-text-muted: #6b6560;
--color-text-subtle: #9a958e;
--color-accent: #1e3a5f;
--color-accent-light: #2d5a8a;
--color-accent-bg: #e8edf3;
--color-ok: #2d6b3f;
--color-ok-bg: #e8f0e8;
--color-ok-border: #a8c9a8;
--color-warn: #b8860b;
--color-warn-bg: #f5eedc;
--color-warn-border: #d4b876;
--color-crit: #8b2c2c;
--color-crit-bg: #f5e0e0;
--color-crit-border: #c98a8a;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
html, body { height: 100%; }
body {
font-family: var(--font-sans);
background: var(--color-bg);
color: var(--color-text);
line-height: 1.6;
-webkit-font-smoothing: antialiased;
display: flex;
flex-direction: column;
min-height: 100vh;
}
main { flex: 1 0 auto; }
h1, h2, h3, h4 { font-family: var(--font-serif); font-weight: 700; line-height: 1.2; }
.mono { font-family: var(--font-mono); }
.eyebrow {
font-family: var(--font-mono);
font-size: 11px;
font-weight: 500;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--color-text-subtle);
}
.cad-num {
font-family: var(--font-mono);
font-weight: 500;
letter-spacing: 0.02em;
}
.container { max-width: 1200px; margin: 0 auto; padding: 0 20px; }
.hidden { display: none !important; }
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); border: 0; }
.fade-in { animation: fadeIn .4s ease-out; }
@keyframes fadeIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }
.loader {
border: 2px solid var(--color-border-light);
border-top: 2px solid var(--color-accent);
border-radius: 50%;
width: 36px;
height: 36px;
animation: spin 1s linear infinite;
}
@keyframes spin { to { transform: rotate(360deg); } }
.pulse-dot { animation: pulse 2s infinite; }
@keyframes pulse { 0%,100% { opacity: 1; } 50% { opacity: .4; } }
/* Отступы секций состояний (загрузка, ошибка).
Только вертикальные: боковые 20px берём из .container,
чтобы на мобильном ничего не выходило за экран. */
.state-section { padding-top: 40px; padding-bottom: 40px; }
/* Отступы секции результатов */
.results-section { padding-top: 24px; padding-bottom: 24px; }
/* Header */
.header {
background: var(--color-bg-card);
border-bottom: 1px solid var(--color-border);
position: sticky;
top: 0;
z-index: 40;
}
.header-inner {
display: flex;
align-items: center;
justify-content: space-between;
padding: 14px 20px;
gap: 16px;
}
.logo {
display: flex;
align-items: center;
gap: 12px;
text-decoration: none;
cursor: pointer;
flex-shrink: 0;
}
.logo-mark {
width: 38px;
height: 38px;
flex-shrink: 0;
}
.logo-mark svg { width: 100%; height: 100%; display: block; }
.logo-text {
font-family: var(--font-serif);
font-size: 18px;
font-weight: 700;
color: var(--color-text);
white-space: nowrap;
}
/* Контакты в шапке */
.header-contacts {
display: flex;
align-items: center;
gap: 16px;
flex-wrap: wrap;
justify-content: flex-end;
}
.header-contact {
display: inline-flex;
align-items: center;
gap: 8px;
font-family: var(--font-mono);
font-size: 12px;
color: var(--color-text-muted);
text-decoration: none;
transition: color .2s;
white-space: nowrap;
}
a.header-contact:hover { color: var(--color-accent); }
.header-contact svg {
width: 15px;
height: 15px;
color: var(--color-accent);
flex-shrink: 0;
}
.header-contact-divider {
width: 1px;
height: 20px;
background: var(--color-border);
}
/* Кликабельный контакт «Режим работы» */
.header-contact-hours {
position: relative;
cursor: pointer;
background: none;
border: none;
font-family: var(--font-mono);
font-size: 12px;
color: var(--color-text-muted);
display: inline-flex;
align-items: center;
gap: 8px;
white-space: nowrap;
}
.header-contact-hours:hover { color: var(--color-accent); }
.header-contact-hours svg {
width: 15px;
height: 15px;
color: var(--color-accent);
flex-shrink: 0;
}
.hours-tooltip {
display: none;
position: absolute;
top: calc(100% + 12px);
right: 0;
background: var(--color-bg-card);
border: 1px solid var(--color-border);
border-radius: 6px;
padding: 10px 14px;
font-family: var(--font-mono);
font-size: 12px;
font-weight: 500;
color: var(--color-text);
white-space: nowrap;
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
z-index: 60;
}
.hours-tooltip::before {
content: '';
position: absolute;
top: -6px;
right: 16px;
width: 10px;
height: 10px;
background: var(--color-bg-card);
border-left: 1px solid var(--color-border);
border-top: 1px solid var(--color-border);
transform: rotate(45deg);
}
.hours-tooltip.show {
display: block;
animation: fadeIn .2s ease-out;
}
@media (max-width: 900px) {
.header-inner { gap: 12px; }
.header-contacts { gap: 12px; }
.header-contact span { display: none; }
.header-contact-hours span { display: none; }
.header-contact-divider { display: none; }
}
@media (max-width: 480px) {
.header-inner { gap: 10px; padding: 12px 20px; }
.header-contacts { gap: 12px; }
.logo-mark { width: 32px; height: 32px; }
.logo-text { font-size: 15px; }
}
/* Секции, к которым скроллим, не должны залезать под шапку */
#loading, #results, #addressResults, #error {
scroll-margin-top: 80px;
}
/* Main Search Section */
.main-search {
display: flex;
align-items: center;
padding: 80px 0 60px;
}
.search-wrapper {
width: 100%;
max-width: 900px;
}
.status-indicator {
display: inline-flex;
align-items: center;
gap: 8px;
background: var(--color-ok-bg);
border: 1px solid var(--color-ok-border);
color: var(--color-ok);
padding: 6px 14px;
font-family: var(--font-mono);
font-size: 11px;
font-weight: 500;
letter-spacing: 0.05em;
text-transform: uppercase;
border-radius: 2px;
margin-bottom: 24px;
}
.status-dot {
width: 8px;
height: 8px;
background: var(--color-ok);
border-radius: 50%;
}
.search-title {
font-size: 56px;
font-weight: 700;
letter-spacing: 0.02em;
margin-bottom: 20px;
line-height: 1.05;
text-align: left;
}
@media (max-width: 768px) { .search-title { font-size: 38px; } }
.search-subtitle {
font-size: 14px;
color: var(--color-text-muted);
margin-bottom: 40px;
line-height: 1.6;
text-align: left;
}
.search-card {
background: var(--color-bg-card);
border: 1px solid var(--color-border);
padding: 6px;
display: flex;
align-items: center;
gap: 0;
}
.search-input {
flex: 1;
min-width: 0;
padding: 14px 18px;
border: none;
background: transparent;
font-family: var(--font-mono);
font-size: 15px;
color: var(--color-text);
outline: none;
}
.search-input::placeholder { color: var(--color-text-subtle); }
.search-btn {
padding: 14px 32px;
background: var(--color-accent);
color: white;
border: none;
font-family: var(--font-sans);
font-size: 15px;
font-weight: 600;
cursor: pointer;
transition: background .2s;
white-space: nowrap;
}
.search-btn:hover { background: var(--color-accent-light); }
.search-btn:disabled { opacity: .6; cursor: not-allowed; }
.search-example {
margin-top: 12px;
font-size: 13px;
color: var(--color-text-muted);
}
.search-example .cad-num { color: var(--color-accent); }
.search-example .example-addr { color: var(--color-accent); font-weight: 500; }
@media (max-width: 640px) {
.search-card { flex-wrap: wrap; }
.search-input { width: 100%; padding: 12px 18px; }
.search-btn { width: 100%; margin: 6px; }
}
/* Feature blocks */
.feature-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 16px;
margin-top: 48px;
}
@media (max-width: 768px) { .feature-grid { grid-template-columns: 1fr; } }
.feature-card {
background: var(--color-bg-card);
border: 1px solid var(--color-border);
padding: 24px;
}
.feature-num {
font-family: var(--font-mono);
font-size: 13px;
color: var(--color-accent);
margin-bottom: 10px;
}
.feature-card h3 { font-size: 15px; margin-bottom: 6px; }
.feature-card p { font-size: 13px; color: var(--color-text-muted); line-height: 1.5; }
/* State cards: единый вид сообщений на главном экране.
Красный (.error) — ошибка/не найдено; бежевый (.warning) — временно недоступно. */
.state-card {
background: var(--color-bg-card);
border: 1px solid var(--color-border);
padding: 48px 24px;
text-align: center;
max-width: 700px;
margin: 0 auto;
}
.state-card h2 {
font-size: 20px;
margin-bottom: 8px;
}
.state-card p {
color: var(--color-text-muted);
font-size: 14px;
max-width: 500px;
margin: 0 auto;
}
.state-card.error {
border-color: var(--color-crit-border);
background: var(--color-crit-bg);
}
.state-card.warning {
border-color: var(--color-warn-border);
background: var(--color-warn-bg);
}
/* Analysis Console (этапы загрузки) */
.console-card {
background: #1a1f2e;
border: 1px solid #2a3145;
border-radius: 8px;
padding: 28px 24px;
max-width: 640px;
margin: 0 auto;
box-shadow: 0 8px 24px rgba(26,31,46,0.18);
}
.console-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 18px;
padding-bottom: 14px;
border-bottom: 1px solid rgba(255,255,255,0.08);
}
.console-title {
font-family: var(--font-mono);
font-size: 12px;
letter-spacing: 0.1em;
color: #8b93a8;
}
.console-status {
font-family: var(--font-mono);
font-size: 11px;
color: #4ade80;
display: inline-flex;
align-items: center;
gap: 6px;
}
.console-status .pulse-dot { background: #4ade80; }
.console-log {
font-family: var(--font-mono);
font-size: 13px;
line-height: 2;
min-height: 150px;
}
.console-line {
animation: fadeIn .3s ease-out;
color: #c8d0e0;
}
.console-time { color: #6b7280; margin-right: 10px; }
.console-ok { color: #4ade80; margin-left: 10px; }
.console-pending { color: #fbbf24; margin-left: 10px; animation: pulse 1.2s infinite; }
.console-note {
margin-top: 18px;
font-size: 12px;
color: #6b7280;
}
@media (max-width: 480px) {
.console-log { font-size: 11px; overflow-x: auto; }
}
/* Address Results */
.address-results {
background: var(--color-bg-card);
border: 1px solid var(--color-border);
max-width: 800px;
margin: 20px auto 0;
}
.address-result-item {
padding: 16px 24px;
border-bottom: 1px solid var(--color-border);
cursor: pointer;
transition: background .15s;
}
.address-result-item:hover { background: var(--color-bg-hover); }
.address-result-item:last-child { border-bottom: none; }
.address-result-title {
font-size: 14px;
font-weight: 500;
color: var(--color-text);
margin-bottom: 4px;
}
.address-result-meta {
font-family: var(--font-mono);
font-size: 12px;
color: var(--color-text-muted);
}
/* Пустой результат поиска по адресу */
.address-empty {
padding: 24px;
text-align: center;
color: var(--color-text-muted);
}
/* Подсказка под списком адресов */
.address-hint {
padding: 16px 24px;
font-size: 12px;
color: var(--color-text-muted);
border-top: 1px solid var(--color-border);
}
/* Results Layout */
.results-layout {
display: grid;
grid-template-columns: 1fr 360px;
gap: 24px;
margin-top: 24px;
align-items: start;
}
@media (max-width: 1024px) {
.results-layout { grid-template-columns: 1fr; }
}
/* Левая колонка: отчёт ЕГРН и блок дома — две отдельные карточки с зазором */
.report-column {
display: flex;
flex-direction: column;
gap: 24px;
min-width: 0;
}
/* Report */
.report {
background: var(--color-bg-card);
border: 1px solid var(--color-border);
}
.report-num {
padding: 12px 24px;
text-align: right;
font-family: var(--font-mono);
font-size: 12px;
font-weight: 500;
color: var(--color-text);
background: var(--color-bg-alt);
border-bottom: 1px solid var(--color-border);
}
.report-header {
padding: 20px 24px;
border-bottom: 1px solid var(--color-border);
}
.report-cad {
font-family: var(--font-mono);
font-size: 18px;
font-weight: 500;
color: var(--color-text);
margin-bottom: 4px;
}
.report-address {
font-size: 14px;
color: var(--color-text-muted);
}
.status-badge {
display: inline-block;
padding: 4px 10px;
font-family: var(--font-mono);
font-size: 11px;
font-weight: 500;
letter-spacing: 0.03em;
border-radius: 2px;
}
.status-badge.ok {
background: var(--color-ok-bg);
color: var(--color-ok);
border: 1px solid var(--color-ok-border);
}
.status-badge.warn {
background: var(--color-warn-bg);
color: var(--color-warn);
border: 1px solid var(--color-warn-border);
}
/* Section */
.section-block {
padding: 24px;
border-bottom: 1px solid var(--color-border);
}
.section-block:last-child { border-bottom: none; }
.section-title {
font-family: var(--font-serif);
font-size: 18px;
font-weight: 700;
margin-bottom: 16px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
}
.section-title-left {
display: flex;
align-items: center;
gap: 10px;
}
.section-title svg { width: 18px; height: 18px; color: var(--color-accent); }
.section-title.crit svg { color: var(--color-crit); }
/* Info grid */
.info-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 24px 40px;
}
@media (max-width: 768px) { .info-grid { grid-template-columns: 1fr; } }
.info-item {
padding: 10px 0;
border-bottom: 1px dashed var(--color-border);
}
.info-item:last-child { border-bottom: none; }
.info-label {
font-family: var(--font-mono);
font-size: 10px;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--color-text-subtle);
margin-bottom: 4px;
}
.info-value {
font-size: 14px;
font-weight: 500;
color: var(--color-text);
word-break: break-word;
}
.info-value.mono {
font-family: var(--font-mono);
font-weight: 500;
}
/* Cards */
.right-card, .enc-card {
border: 1px solid var(--color-border);
padding: 16px;
margin-bottom: 12px;
background: var(--color-bg-alt);
}
.right-card { border-left: 3px solid var(--color-accent); }
.enc-card { border-left: 3px solid var(--color-crit); background: var(--color-crit-bg); }
.enc-icon { color: var(--color-crit); }
.enc-title { color: var(--color-crit); }
.card-header {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 12px;
}
.card-number {
width: 22px;
height: 22px;
background: var(--color-accent-bg);
color: var(--color-accent);
display: flex;
align-items: center;
justify-content: center;
font-family: var(--font-mono);
font-size: 11px;
font-weight: 600;
border-radius: 2px;
flex-shrink: 0;
}
.card-title {
font-size: 14px;
font-weight: 600;
}
.card-details {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
gap: 12px;
font-size: 13px;
}
.card-details .label {
font-family: var(--font-mono);
font-size: 10px;
text-transform: uppercase;
color: var(--color-text-subtle);
margin-bottom: 2px;
}
.card-details .value {
font-weight: 500;
font-family: var(--font-mono);
font-size: 12px;
}
.card-note {
margin-top: 10px;
font-size: 12px;
color: var(--color-text-muted);
}
/* ══════════════════════════════════════════════
Единая бежевая плашка сообщений (.notice):
«временно недоступно», «сведения отсутствуют»,
пустые разделы. Геометрия как у .no-enc-card:
иконка 20px по центру строки заголовка,
заголовок 14px/600, описание 12px.
══════════════════════════════════════════════ */
.notice {
border: 1px solid var(--color-border);
background: var(--color-bg-alt);
padding: 16px;
display: flex;
align-items: flex-start;
gap: 12px;
}
.notice svg {
width: 20px;
height: 20px;
color: var(--color-text-subtle);
flex-shrink: 0;
margin-top: 0;
}
.notice h4 {
font-family: var(--font-sans);
font-size: 14px;
font-weight: 600;
line-height: 20px;
color: var(--color-text);
margin-bottom: 2px;
}
.notice p {
font-size: 12px;
color: var(--color-text-muted);
}
/* Зелёная плашка «обременений нет» — эталон геометрии.
Иконка стоит точно на линии заголовка:
строка заголовка 20px = высоте иконки, margin-top: 0. */
.no-enc-card {
border: 1px solid var(--color-ok-border);
background: var(--color-ok-bg);
padding: 16px;
display: flex;
align-items: flex-start;
gap: 12px;
}
.no-enc-card svg {
width: 20px;
height: 20px;
color: var(--color-ok);
flex-shrink: 0;
margin-top: 0;
}
.no-enc-card h4 {
font-family: var(--font-sans);
font-size: 14px;
font-weight: 600;
line-height: 20px;
color: var(--color-ok);
margin-bottom: 2px;
}
.no-enc-card p {
font-size: 12px;
color: var(--color-ok);
opacity: .85;
}
/* Sidebar: колонка из двух карточек.
Зазор 24px — пустой фон страницы, как между карточками
«кадастр» и «дом» в .report-column. */
.sidebar-col {
display: flex;
flex-direction: column;
gap: 24px;
min-width: 0;
}
.sidebar {
background: var(--color-bg-card);
border: 1px solid var(--color-border);
padding: 24px;
}
.sidebar-title {
font-family: var(--font-serif);
font-size: 18px;
margin-bottom: 4px;
}
.sidebar-subtitle {
font-size: 13px;
color: var(--color-text-muted);
margin-bottom: 20px;
}
.service-list {
margin-bottom: 0;
}
.service-item {
display: flex;
align-items: flex-start;
gap: 12px;
padding: 12px 0;
border-bottom: 1px solid var(--color-border-light);
cursor: pointer;
background: none;
border-top: none;
border-left: none;
border-right: none;
width: 100%;
text-align: left;
}
.service-item:focus {
outline: none;
}
.service-item:last-child { border-bottom: none; }
.service-checkbox {
width: 18px;
height: 18px;
border: 2px solid var(--color-border);
border-radius: 3px;
flex-shrink: 0;
margin-top: 2px;
display: flex;
align-items: center;
justify-content: center;
transition: all .2s;
}
.service-item.selected .service-checkbox {
background: var(--color-accent);
border-color: var(--color-accent);
}
.service-item.selected .service-checkbox::after {
content: '✓';
color: white;
font-size: 12px;
font-weight: 700;
}
.service-info { flex: 1; min-width: 0; }
.service-name {
font-size: 13px;
font-weight: 500;
color: var(--color-text);
line-height: 1.4;
margin-bottom: 4px;
}
.service-owners {
display: flex;
align-items: flex-start;
gap: 6px;
font-size: 11px;
color: var(--color-text-muted);
line-height: 1.5;
margin-bottom: 4px;
}
.service-owners svg {
width: 12px;
height: 12px;
flex-shrink: 0;
margin-top: 2px;
color: var(--color-ok);
}
.service-desc {
display: flex;
align-items: flex-start;
gap: 6px;
font-size: 11px;
color: var(--color-text-muted);
line-height: 1.5;
margin-bottom: 4px;
}
.service-desc svg {
width: 12px;
height: 12px;
flex-shrink: 0;
margin-top: 2px;
color: var(--color-text-muted);
}
.service-time {
display: flex;
align-items: flex-start;
gap: 5px;
font-family: var(--font-mono);
font-size: 11px;
color: var(--color-text-muted);
margin-bottom: 6px;
}
.service-time svg {
width: 12px;
height: 12px;
flex-shrink: 0;
margin-top: 1px;
color: var(--color-text-muted);
}
.service-price {
font-family: var(--font-mono);
font-size: 13px;
font-weight: 600;
color: var(--color-accent);
text-align: right;
display: block;
margin-top: 4px;
}
.service-total {
display: flex;
justify-content: space-between;
align-items: center;
padding: 16px;
background: var(--color-bg-alt);
border: 1px solid var(--color-border);
margin-bottom: 8px;
}
.service-total-label {
font-size: 14px;
color: var(--color-text-muted);
}
.service-total-value {
font-family: var(--font-mono);
font-size: 18px;
font-weight: 700;
color: var(--color-accent);
}
.payment-note {
font-size: 11px;
color: var(--color-text-subtle);
margin-bottom: 16px;
font-family: var(--font-mono);
line-height: 1.4;
}
.payment-note sup {
font-size: 9px;
line-height: 0;
color: var(--color-text-subtle);
}
.order-email {
margin-bottom: 16px;
}
.order-email label {
display: block;
font-family: var(--font-mono);
font-size: 11px;
letter-spacing: 0.05em;
text-transform: uppercase;
color: var(--color-text-muted);
margin-bottom: 6px;
}
.order-email input {
width: 100%;
padding: 12px 14px;
border: 1px solid var(--color-border);
background: var(--color-bg);
font-family: var(--font-sans);
font-size: 14px;
color: var(--color-text);
transition: border-color .2s;
}
.order-email input:focus {
outline: none;
border-color: var(--color-accent);
background: var(--color-bg-card);
}
.order-btn {
width: 100%;
padding: 14px;
background: var(--color-accent);
color: white;
border: none;
font-size: 14px;
font-weight: 600;
cursor: pointer;
transition: background .2s;
}
.order-btn:hover { background: var(--color-accent-light); }
.order-btn:disabled { opacity: .6; cursor: not-allowed; }
.order-warning {
margin-top: 12px;
padding: 10px 12px;
background: var(--color-warn-bg);
border: 1px solid var(--color-warn-border);
font-size: 11px;
color: var(--color-warn);
line-height: 1.4;
}
/* Мобильная липкая кнопка заказа */
.mobile-order-btn {
display: none;
}
@media (max-width: 1024px) {
.mobile-order-btn.show {
display: block;
position: fixed;
bottom: calc(20px + env(safe-area-inset-bottom));
left: 50%;
transform: translateX(-50%);
padding: 14px 36px;
background: var(--color-accent);
color: white;
border: none;
border-radius: 8px;
font-family: var(--font-sans);
font-size: 15px;
font-weight: 600;
cursor: pointer;
z-index: 50;
box-shadow: 0 4px 16px rgba(30,58,95,0.35);
}
}
/* Footer */
.footer {
flex-shrink: 0;
background: var(--color-bg-card);
color: var(--color-text-muted);
padding: 0;
margin-top: 80px;
border-top: 1px solid var(--color-border);
}
/* Средняя часть: 3 колонки */
.footer-grid {
display: grid;
grid-template-columns: 1.5fr 1fr 1fr;
gap: 48px;
padding: 48px 0 40px;
}
@media (max-width: 900px) {
.footer-grid { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 600px) {
.footer-grid { grid-template-columns: 1fr; gap: 32px; }
}
.footer-col h4 {
font-family: var(--font-mono);
font-size: 11px;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--color-text);
font-weight: 600;
margin-bottom: 16px;
}
.footer-logo {
display: flex;
align-items: center;
gap: 12px;
margin-bottom: 16px;
}
.footer-desc {
font-size: 13px;
color: var(--color-text-muted);
line-height: 1.6;
margin-bottom: 24px;
max-width: 360px;
}
/* Сворачиваемый блок «Реквизиты» */
.footer-requisites {
padding: 16px;
background: var(--color-bg-alt);
border: 1px solid var(--color-border-light);
}
.req-toggle {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
background: none;
border: none;
cursor: pointer;
padding: 0;
margin-bottom: 0;
}
.req-title {
font-family: var(--font-mono);
font-size: 11px;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--color-text);
font-weight: 600;
line-height: 1.2;
}
.req-arrow {
width: 14px;
height: 14px;
color: var(--color-text-subtle);
transition: transform .25s ease;
flex-shrink: 0;
}
.req-toggle.open .req-arrow {
transform: rotate(180deg);
}
.req-content {
max-height: 0;
overflow: hidden;
transition: max-height .25s ease;
}
.req-content.open {
max-height: 300px;
}
.req-content .req-row:first-child {
margin-top: 12px;
}
.req-row {
display: flex;
justify-content: space-between;
align-items: flex-start;
gap: 16px;
padding: 6px 0;
border-bottom: 1px dashed var(--color-border-light);
font-size: 12px;
}
.req-row:last-child { border-bottom: none; }
.req-label {
font-family: var(--font-mono);
color: var(--color-text-subtle);
text-transform: uppercase;
letter-spacing: 0.05em;
font-size: 10px;
flex-shrink: 0;
}
.req-value {
color: var(--color-text);
font-weight: 500;
text-align: right;
word-break: break-word;
}
.req-value.mono {
font-family: var(--font-mono);
letter-spacing: 0.02em;
}
.footer-list {
list-style: none;
}
.footer-list li {
margin-bottom: 10px;
}
.footer-list a {
font-size: 13px;
color: var(--color-text-muted);
text-decoration: none;
display: inline-flex;
align-items: center;
gap: 6px;
transition: color .2s;
}
.footer-list a:hover { color: var(--color-accent); }
.ext-icon {
color: var(--color-text-subtle);
transition: color .2s;
}
.footer-list a:hover .ext-icon { color: var(--color-accent); }
/* Нижняя строка */
.footer-bottom {
display: flex;
justify-content: center;
align-items: center;
padding: 24px 0;
border-top: 1px solid var(--color-border);
flex-wrap: wrap;
gap: 8px;
}
.footer-copy {
font-family: var(--font-mono);
font-size: 11px;
color: var(--color-text-subtle);
letter-spacing: 0.02em;
text-align: center;
}
/* Пунктирное подчёркивание для «Расширенной выписке из ЕГРН» */
.dashed-underline {
text-decoration: underline;
text-decoration-style: dashed;
text-underline-offset: 3px;
text-decoration-thickness: 1px;
text-decoration-color: var(--color-accent);
}
/* Иконка «минус в круге» — красный минус вместо зелёной галочки.
Селектор с двумя классами перебивает общее правило .service-owners svg */
.service-owners .minus-icon {
color: var(--color-crit);
opacity: 1;
}
/* ══════════════════════════════════════════════
Блок «Сведения о доме» — зеркалит отчёт ЕГРН.
Карточка .house-section без внутреннего padding,
шапка .house-title (аналог .report-header),
секции .section-block со сплошными разделителями
и заголовками .section-title + иконкой слева.
Бежевые карточки-рамки (.house-card/.house-grid/
h5.house-card-title) и «лишние» пунктиры
(.house-management :first/:last,
.house-footer-note border-top) УДАЛЕНЫ.
Пунктиры МЕЖДУ полями внутри секций сохранены —
они такие же, как в кадастре (.info-item).
Колонки строятся в app.js через renderCols():
две обёртки .house-col внутри .info-grid /
.house-management, поэтому .info-item:last-child
убирает хвостовой пунктир в КАЖДОЙ колонке, а
align-items:start не даёт колонке растянуться по
высоте соседа (нет «дырок» под коротким значением).
БЕЗ нового app.js этот блок не чинится — плоский
рендер вернёт и пунктир, и дырку.
══════════════════════════════════════════════ */
.house-section {
background: var(--color-bg-card);
border: 1px solid var(--color-border);
padding: 0;
}
/* Шапка блока: иконка дома + название слева, бейдж справа.
Отступы и нижняя граница — как у .report-header в кадастре.
22px — чуть крупнее заголовков секций (.section-title = 18px). */
.house-title {
font-family: var(--font-serif);
font-size: 22px;
line-height: 1.2;
padding: 20px 24px;
margin-bottom: 0;
border-bottom: 1px solid var(--color-border);
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
}
.house-title svg {
width: 20px;
height: 20px;
color: var(--color-accent);
flex-shrink: 0;
}
.house-source-badge {
flex-shrink: 0;
padding: 5px 9px;
border: 1px solid var(--color-border);
background: var(--color-bg-alt);
color: var(--color-text-muted);
font-family: var(--font-mono);
font-size: 10px;
letter-spacing: .04em;
text-transform: uppercase;
}
/* Состояния загрузки/недоступности — служебные, не вывод данных,
поэтому бежевая плашка и пунктир здесь оставлены намеренно
(loading показывается только пока идёт запрос, unavailable —
аналог общей .notice-плашки). */
.house-loading {
display: flex;
align-items: center;
gap: 12px;
padding: 16px;
border: 1px dashed var(--color-border);
background: var(--color-bg-alt);
}
.house-spinner {
width: 18px;
height: 18px;
border: 2px solid var(--color-border);
border-top-color: var(--color-accent);
border-radius: 50%;
animation: houseSpin .8s linear infinite;
flex-shrink: 0;
}
@keyframes houseSpin { to { transform: rotate(360deg); } }
.house-loading-title {
font-size: 13px;
font-weight: 600;
margin-bottom: 2px;
}
.house-loading-text {
font-size: 11px;
line-height: 1.5;
color: var(--color-text-muted);
}
/* Секции дома (.section-block / .section-title / .info-grid / .info-item)
наследуют общие правила кадастра — отдельной стилизации не требуют:
белый фон, сплошной разделитель между секциями, пунктир между полями
с :last-child none. Колонки-обёртки .house-col создаёт app.js
(renderCols); внутри каждой колонки info-item'ы идут столбиком, и
:last-child (общее правило) убирает хвостовой пунктир именно этой
колонки. Сам .house-col стилей не требует — это просто div-поток. */
/* Управление домом: две колонки-обёртки (организация слева, ИНН/ОГРН
справа). align-items:start — колонки не растягиваются по высоте соседа. */
.house-management {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 24px 40px;
align-items: start;
}
/* То же для info-grid внутри блока дома: колонки прижаты к верху,
иначе под коротким значением возвращается «дырка». */
.house-section .info-grid {
align-items: start;
}
.house-empty {
font-size: 12px;
color: var(--color-text-muted);
padding: 6px 0;
}
.house-map-card {
overflow: hidden;
}
.house-map-wrap {
height: 280px;
border: 1px solid var(--color-border);
background: #ebe9e4;
overflow: hidden;
}
.house-map-wrap iframe {
display: block;
width: 100%;
height: 100%;
border: 0;
}
.house-map-caption {
margin-top: 8px;
font-size: 10px;
line-height: 1.5;
color: var(--color-text-subtle);
}
.house-map-link {
display: inline-block;
margin-top: 5px;
font-family: var(--font-mono);
font-size: 10px;
color: var(--color-accent);
text-decoration: none;
}
.house-map-link:hover { text-decoration: underline; }
/* Сноска источника: без пунктира — линию над ней даёт
border-bottom последней видимой секции (в DOM после секций всегда
идёт .house-footer-note, поэтому .section-block:last-child здесь НЕ
срабатывает и последняя секция сохраняет сплошную линию — ровно как
надо для отделения сноски). */
.house-footer-note {
margin-top: 0;
padding: 14px 24px;
border-top: none;
font-size: 10px;
line-height: 1.5;
color: var(--color-text-subtle);
}
@media (max-width: 768px) {
.house-management { grid-template-columns: 1fr; }
.house-map-wrap { height: 240px; }
}