@import url('/static/fonts.css');
@import url('/static/tokens.css');
* { box-sizing:border-box; }
html { scrollbar-gutter:stable both-edges; }
body { margin:0; font:var(--text-size)/1.45 var(--font-text); color:var(--text); background:var(--bg); }
a { color:var(--accent-text); }
header { height:var(--topbar-h); display:flex; align-items:center; gap:var(--pad); padding:0 var(--pad); background:var(--surface); border-bottom:var(--line) solid var(--border); }
header .quiet { margin-left:auto; }
.brand { font-size:var(--subheading); font-weight:700; letter-spacing:.08em; text-decoration:none; color:var(--text); }
.brand span { color:var(--accent); }
.place { color:var(--text-2); }
.sidebar { position:absolute; top:var(--topbar-h); left:0; width:var(--sidebar-w); min-height:calc(100vh - var(--topbar-h)); padding:var(--pad) var(--block-pad); border-right:var(--line) solid var(--border); background:var(--surface); }
.top-nav { display:flex; align-items:center; gap:var(--half); flex-shrink:0; }
.top-nav a { color:var(--text); text-decoration:none; padding:var(--space); border:var(--line) solid transparent; }
.top-nav a:hover { background:var(--accent-soft); color:var(--accent-text); }
body[data-view=catalog] .nav-catalog,body[data-view=map] .nav-map,body[data-view=sources] .nav-sources,body[data-view=favorites] .nav-favorites,body[data-view=settings] .nav-settings { background:var(--accent-soft); box-shadow:inset 0 -2px 0 var(--accent); color:var(--accent-text); font-weight:600; }
.sidebar h2 { font-size:var(--text-size); margin:0 0 var(--gap); }
main { margin-left:var(--sidebar-w); padding:var(--pad); min-width:0; }
h1 { font-size:var(--heading); margin:var(--half) 0 0; font-weight:600; letter-spacing:-.025em; }
h2 { font-size:var(--subheading); }
h3 { font-size:var(--text-size); margin-top:var(--pad); }
.eyebrow { font-size:var(--label); font-weight:600; letter-spacing:.1em; color:var(--text-2); }
.title-row,.catalog-meta,.source-heading { display:flex; align-items:center; justify-content:space-between; gap:var(--gap); }
.title-row { margin-bottom:var(--pad); }
.stats,.source-metrics { display:grid; grid-template-columns:repeat(5,1fr); margin-bottom:var(--pad); background:var(--surface); border:var(--line) solid var(--border); box-shadow:var(--shadow-card); }
.stats>div,.source-metrics>div { padding:var(--gap); }
.stats>div+div,.source-metrics>div+div { border-left:var(--line) solid var(--border); }
.stats span,.source-metrics span { display:block; color:var(--text-2); font-size:var(--small); }
.stats strong,.source-metrics strong { display:block; margin-top:var(--space); font:500 var(--heading) var(--font-mono); }
button,.outline { font:500 var(--small) var(--font-text); height:var(--control-h); padding:0 calc(var(--space) + var(--half)); display:inline-flex; align-items:center; justify-content:center; gap:var(--space); border:var(--line) solid transparent; border-radius:var(--radius); text-decoration:none; cursor:pointer; white-space:nowrap; }
.primary { background:var(--accent); color:var(--surface); }
.primary:hover { background:var(--accent-hover); color:var(--surface); }
.outline { background:var(--surface); color:var(--text); border-color:var(--border-strong); }
.outline:hover { color:var(--accent-text); border-color:var(--accent); background:var(--accent-soft); }
.quiet { background:transparent; color:var(--text-2); }
.quiet:hover { color:var(--accent-text); background:var(--accent-soft); }
button:disabled { opacity:.5; cursor:not-allowed; }
button:focus-visible,a:focus-visible,summary:focus-visible,tr:focus-visible { outline:0; box-shadow:0 0 0 var(--focus-w) var(--accent-ring); }
label { display:flex; flex-direction:column; gap:var(--half); color:var(--text-2); font-size:var(--label); font-weight:600; letter-spacing:.07em; text-transform:uppercase; }
input,select { width:100%; min-width:0; height:var(--control-h); padding:0 var(--space); font:var(--small) var(--font-text); color:var(--text); background:var(--surface); border:var(--line) solid var(--border-strong); border-radius:var(--radius); }
input::placeholder { color:var(--text-3); }
input:focus { outline:0; border-color:var(--focus); box-shadow:0 0 0 2px var(--accent-ring); }
input[type=number] { font-family:var(--font-mono); }
.check { display:flex; flex-direction:row; align-items:center; letter-spacing:normal; text-transform:none; font-size:var(--small); font-weight:400; color:var(--text); }
.check input { width:var(--text-size); height:var(--text-size); margin:0; accent-color:var(--accent); flex-shrink:0; }
#filters { display:grid; grid-template-columns:1fr 1fr; align-items:end; gap:var(--gap) var(--space); }
#filters>.check { grid-column:1 / -1; }
#filters>.filter-range { grid-column:1 / -1; display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:var(--space); margin:0; padding:0; border:0; min-width:0; }
.filter-range legend { padding:0; margin-bottom:var(--half); color:var(--text-2); font-size:var(--label); text-transform:uppercase; letter-spacing:.07em; }
.filter-range label,.filter-range input { min-width:0; width:100%; }
.filter-range input { font-family:var(--font-mono); }
#filters>.seller-filter { grid-column:1 / -1; }
.sync-bottom { flex-wrap:wrap; }
#filters .search,#filters>label:has([name=kind]),#filters>label:has([name=radius]),#filters>label:has([name=max_price]) { grid-column:span 2; }
.combo { position:relative; width:100%; letter-spacing:normal; text-transform:none; font-weight:400; }
.combo-button { display:flex; width:100%; justify-content:space-between; text-align:left; background:var(--surface); border-color:var(--border-strong); color:var(--text); font-weight:400; }
.combo-button span { overflow:hidden; text-overflow:ellipsis; }
.combo-button::after { content:'⌄'; color:var(--text-2); }
.combo-options { position:absolute; top:calc(100% + var(--half)); left:0; right:0; min-width:max-content; max-height:240px; overflow:auto; z-index:6; background:var(--surface); padding:var(--half); border:var(--line) solid var(--border); box-shadow:var(--shadow-md); }
.combo-options button { width:100%; display:flex; justify-content:flex-start; color:var(--text); background:transparent; font-weight:400; }
.combo-options button:hover,.combo-options button[aria-selected=true] { background:var(--accent-soft); color:var(--accent-text); }
.sync,.catalog,.source-overview { padding:var(--block-pad); background:var(--surface); border:var(--line) solid var(--border); box-shadow:var(--shadow-card); margin-bottom:var(--pad); }
.sync-top,.sync-bottom { display:flex; align-items:center; justify-content:space-between; gap:var(--gap); }
.sync-top p { font-size:var(--small); color:var(--text-2); margin:var(--half) 0 0; }
.sync-actions { display:flex; gap:var(--space); }
.dot { width:var(--space); height:var(--space); display:inline-block; background:var(--info); margin-right:var(--space); }
.dot.bad { background:var(--danger); }
progress { width:100%; height:var(--half); margin:var(--gap) 0 var(--space); accent-color:var(--accent); border:0; }
progress::-webkit-progress-bar { background:var(--hover); }
progress::-webkit-progress-value { background:var(--accent); }
.sync-bottom,.hint { color:var(--text-2); font-size:var(--small); }
.hint { line-height:1.5; margin:var(--space) 0 var(--gap); }
details { margin-top:var(--gap); border-top:var(--line) solid var(--border); padding-top:var(--space); font-size:var(--small); }
summary { cursor:pointer; color:var(--text-2); }
.run-options { display:flex; align-items:center; flex-wrap:wrap; gap:var(--space); margin:var(--gap) 0; }
.run-options span,.event { color:var(--text-2); font-size:var(--small); }
.event { padding:var(--half) 0; }
.event.error { color:var(--danger); }
.catalog-meta { margin-bottom:var(--space); }
#results { font-weight:600; }
.sort { flex-direction:row; align-items:center; gap:var(--space); text-transform:none; letter-spacing:normal; font-size:var(--small); font-weight:400; }
.sort .combo { width:200px; }
.sort .combo-options { left:auto; }
.table-wrap { overflow:auto; }
table { border-collapse:collapse; width:100%; font-size:var(--small); }
th { text-align:left; font-size:var(--label); text-transform:uppercase; letter-spacing:.07em; font-weight:600; color:var(--text-2); border-bottom:var(--line) solid var(--border); padding:var(--space); }
th:first-child { width:44%; }
td { padding:calc(var(--space) + var(--half)) var(--space); border-bottom:var(--line) solid var(--border); vertical-align:middle; }
tr[data-id] { cursor:pointer; }
tr[data-id]:hover { background:var(--surface-2); }
.object { display:flex; gap:var(--space); align-items:center; }
.thumb { width:var(--thumb-w); height:var(--thumb-h); object-fit:cover; background:var(--surface-2); flex-shrink:0; }
.object-title { font-size:var(--text-size); font-weight:600; }
.object-address,.secondary { color:var(--text-2); font-size:var(--small); margin-top:var(--half); }
.price,.old-price,.area,.mono { font-family:var(--font-mono); }
.price { font-size:var(--text-size); font-weight:500; white-space:nowrap; }
.old-price { color:var(--text-2); font-size:var(--small); text-decoration:line-through; margin-top:var(--half); }
.badge { display:inline-block; font-size:var(--small); color:var(--ok); background:var(--ok-soft); padding:var(--half); white-space:nowrap; }
.badge.pending { color:var(--text-2); background:transparent; padding-left:0; }
.pagination { display:flex; align-items:center; justify-content:center; gap:var(--gap); margin-top:var(--gap); }
#page-label { font-family:var(--font-mono); }
.empty { text-align:center; padding:calc(var(--pad)*2); color:var(--text-2); }
footer { font-size:var(--small); color:var(--text-2); }
.error { color:var(--danger); background:var(--danger-soft); padding:var(--space); }
.source-overview { display:none; }
body[data-view=sources] .source-overview { display:block; }
body[data-view=sources] .catalog,body[data-view=sources] .stats,body[data-view=sources] .side-filters,body[data-view=sources] #export { display:none; }
.source-heading h2 { margin:0; }
.source-metrics { grid-template-columns:repeat(4,1fr); box-shadow:none; border:0; margin:var(--gap) 0; }
.source-metrics>div:first-child { padding-left:0; }
.dormant { color:var(--text-2); }
.login { min-height:100vh; display:grid; place-items:center; }
.login-box { width:min(400px,92vw); padding:calc(var(--pad)*1.5); margin:0; background:var(--surface); box-shadow:var(--shadow-md); border:var(--line) solid var(--border); }
.login-box form { display:grid; gap:var(--gap); margin:var(--pad) 0; }
.login-box p,.login-box small { color:var(--text-2); }
dialog { border:var(--line) solid var(--border); border-radius:var(--radius); padding:0; width:min(var(--dialog-w),95vw); max-height:92vh; box-shadow:var(--shadow-lg); color:var(--text); }
dialog::backdrop { background:var(--backdrop); }
.dialog-bar { position:sticky; top:0; background:var(--surface); border-bottom:var(--line) solid var(--border); padding:var(--space) var(--pad); display:flex; justify-content:space-between; align-items:center; z-index:2; }
#detail-content { padding:var(--pad); }
.detail-title { display:flex; align-items:flex-start; justify-content:space-between; gap:var(--gap); }
.detail-title h2 { margin:var(--space) 0 0; }
.detail-photo { width:100%; height:280px; object-fit:cover; margin-top:var(--pad); }
.photo-strip { display:flex; flex-wrap:wrap; gap:var(--space); padding:var(--space) 0; }
.photo-strip img { width:var(--thumb-w); height:var(--thumb-h); object-fit:cover; }
.facts { display:grid; grid-template-columns:repeat(3,1fr); gap:var(--gap); margin:var(--pad) 0; }
.fact { border-bottom:var(--line) solid var(--border); padding-bottom:var(--space); }
.fact span { display:block; text-transform:uppercase; font-size:var(--label); letter-spacing:.07em; color:var(--text-2); margin-bottom:var(--space); }
.fact strong { font-size:var(--text-size); font-weight:500; }
.description { white-space:pre-wrap; line-height:1.65; }
.history { border-left:2px solid var(--accent-line); padding:var(--space) 0 var(--space) var(--gap); margin:var(--gap) 0; }
.history small { display:block; color:var(--text-2); margin-top:var(--half); }
.json { white-space:pre-wrap; overflow-wrap:anywhere; font:var(--small)/1.5 var(--font-mono); background:var(--surface-2); padding:var(--gap); max-height:400px; overflow:auto; }
#toast { position:fixed; bottom:var(--pad); left:50%; transform:translateX(-50%); padding:var(--space) var(--pad); color:var(--surface); background:var(--text); box-shadow:var(--shadow-md); z-index:10; }
[hidden] { display:none!important; }
@media(max-width:1150px) { .stats { grid-template-columns:repeat(3,1fr); } .sync-top { align-items:flex-start; flex-direction:column; } table { min-width:660px; } .source-metrics { grid-template-columns:repeat(2,1fr); } }
@media(max-width:760px) { :root { --pad:16px; --block-pad:16px; } .side-settings { margin-top:var(--gap); } .place { display:none; } .title-row { align-items:flex-start; } .stats { grid-template-columns:repeat(2,1fr); } .catalog-meta { align-items:flex-start; flex-direction:column; } .facts { grid-template-columns:repeat(2,1fr); } .sync-actions { flex-wrap:wrap; } .stats>div:last-child { grid-column:span 2; } }
/* Dense catalog; collection controls and detailed counters stay on Sources. */
.header-status { margin-left:auto; display:flex; gap:var(--gap); align-items:center; font-size:var(--small); text-decoration:none; color:var(--text-2); }
.header-status #header-total { color:var(--accent-text); }
header .quiet { margin-left:0; }
body:is([data-view=catalog],[data-view=map],[data-view=favorites]) .stats,body:is([data-view=catalog],[data-view=map],[data-view=favorites]) .sync { display:none; }
body:is([data-view=catalog],[data-view=map],[data-view=favorites]) main { padding-top:var(--gap); }
body:is([data-view=catalog],[data-view=map],[data-view=favorites]) .title-row { margin-bottom:var(--gap); }
body:is([data-view=catalog],[data-view=map],[data-view=favorites]) .title-row .eyebrow { display:none; }
body:is([data-view=catalog],[data-view=map],[data-view=favorites]) h1 { font-size:var(--subheading); margin:0; }
body:is([data-view=catalog],[data-view=map],[data-view=favorites]) .catalog { padding:var(--gap); }
body:is([data-view=catalog],[data-view=map],[data-view=favorites]) .catalog>.hint { font-size:var(--label); margin:var(--half) 0 var(--space); }
td { padding:var(--space); }
tr[data-id] { cursor:default; }
.object { align-items:flex-start; }
.object>div { min-width:0; }
.object-address { margin-top:0; overflow-wrap:anywhere; }
.object-title { text-decoration:none; }
.object-title:hover { text-decoration:underline; }
.object-cell { position:relative; }
.object-link { color:inherit; text-decoration:none; }
.object-link::after { content:""; position:absolute; inset:0; cursor:pointer; }
.object-link>img,.object-link>div { position:relative; z-index:1; }
.object-link .object-title { color:var(--accent-text); }
.object-link:hover .object-title { text-decoration:underline; }
.object-cell:has(.object-link:focus-visible) { box-shadow:inset 0 0 0 var(--focus-w) var(--accent-ring); }
.object-links { display:flex; flex-wrap:wrap; gap:var(--space); margin-top:var(--half); font-size:var(--label); color:var(--text-2); }
.object-links a { white-space:nowrap; }
.seller { color:var(--text-2); font-size:var(--label); margin-top:var(--half); overflow-wrap:anywhere; }
.seller-detail { display:flex; flex-wrap:wrap; justify-content:space-between; gap:var(--space); align-items:center; font-size:var(--small); padding:var(--gap) 0; border-bottom:var(--line) solid var(--border); }
.seller-blocked { color:var(--danger); }
.detail-source { margin-top:var(--space); }
@media(max-width:1000px) { header .place { display:none; } .header-status { gap:var(--space); } }
@media(max-width:760px) { .header-status #header-sync { display:none; } .header-status { font-size:var(--label); } }

.pending-sources { margin:var(--space) 0; line-height:1.6; }

.photo-choice { height:auto; align-items:stretch; display:flex; flex-direction:column; gap:var(--half); width:var(--thumb-w); max-width:100%; padding:0; border:0; background:transparent; color:var(--accent-text); font-size:var(--label); text-align:left; }
.photo-choice img { max-width:100%; }
.photo-choice:hover,.photo-choice[aria-pressed="true"] { background:var(--accent-soft); outline:var(--line) solid var(--accent); outline-offset:var(--half); }
.photo-choice:focus-visible { outline:2px solid var(--focus); outline-offset:var(--half); }
.gallery-layout { --gallery-height:min(56vh,calc(var(--thumb-h)*8)); display:grid; grid-template-columns:minmax(0,3fr) minmax(0,2fr); align-items:start; gap:var(--gap); margin-top:var(--space); }
.gallery-stage { position:relative; min-width:0; background:var(--surface-2); }
.gallery-stage .detail-photo { display:block; margin-top:0; object-fit:contain; }
.gallery-layout .gallery-stage .detail-photo { height:var(--gallery-height); max-height:none; }
.gallery-layout .photo-strip,.gallery-layout .plan-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(72px,1fr)); gap:var(--half); align-content:start; padding:0; overflow:visible; }
.gallery-layout .photo-choice { width:100%; }
.gallery-layout .photo-choice[aria-pressed="true"],.gallery-layout .photo-choice:focus-visible { outline-offset:calc(var(--line)*-2); }
.gallery-layout .photo-choice img { display:block; width:100%; height:auto; aspect-ratio:4/3; object-fit:cover; }
.gallery-layout .gallery-plan img { object-fit:contain; background:var(--surface-2); }
.gallery-layout .floorplans { margin-top:var(--space); padding-top:var(--half); }
.gallery-arrow { position:absolute; top:50%; transform:translateY(-50%); width:var(--control-h); height:var(--control-h); padding:0; background:var(--surface); border:var(--line) solid var(--border-strong); color:var(--text); box-shadow:var(--shadow-card); font-size:var(--heading); }
.gallery-prev { left:var(--space); }
.gallery-next { right:var(--space); }
.floorplans { border-top:var(--line) solid var(--border); margin-top:var(--gap); padding-top:var(--space); }
.floorplans h3,.floorplans h4 { margin:var(--space) 0; font-size:var(--text-size); }
.plan-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:var(--gap); }
.plan-grid a { display:flex; flex-direction:column; gap:var(--space); padding:var(--space); border:var(--line) solid var(--border); text-decoration:none; font-size:var(--small); }
.plan-grid img { width:100%; height:calc(var(--thumb-h)*3); object-fit:contain; background:var(--surface); }
@media(max-width:760px) { .plan-grid { grid-template-columns:1fr; } }

.header-status { position:relative; gap:var(--space); }
.header-status>span:not(.header-tooltip) { white-space:nowrap; }
#header-fresh { color:var(--text-2); }
.header-tooltip { display:none; position:absolute; top:100%; right:0; width:calc(var(--thumb-w)*5); max-width:calc(100vw - var(--pad)*2); z-index:8; padding:var(--gap); background:var(--surface); color:var(--text); box-shadow:var(--shadow-md); border:var(--line) solid var(--border); font-size:var(--small); line-height:1.5; cursor:default; }
.header-tooltip>strong { display:block; margin-bottom:var(--space); }
.header-status:not(.tooltip-dismissed):hover .header-tooltip,.header-status:not(.tooltip-dismissed):focus-visible .header-tooltip { display:block; }
.tooltip-head,.tooltip-row { display:grid; grid-template-columns:minmax(0,1.4fr) repeat(3,minmax(0,1fr)); gap:var(--space); padding:var(--half) 0; }
.tooltip-head { font-size:var(--label); color:var(--text-2); border-bottom:var(--line) solid var(--border); }
.tooltip-row>span:not(:first-child),.tooltip-head>span:not(:first-child) { text-align:right; }
.tooltip-note { display:block; border-top:var(--line) solid var(--border); padding-top:var(--space); margin-top:var(--space); font-size:var(--label); color:var(--text-2); }
@media(max-width:1300px) { header .place { display:none; } }
@media(max-width:760px) { .header-status { flex-wrap:wrap; row-gap:0; justify-content:flex-end; } .header-tooltip { font-size:var(--label); } }

.preview-thumb { cursor:zoom-in; }
.preview-thumb:focus-visible { outline:0; box-shadow:0 0 0 var(--focus-w) var(--accent-ring); }
.photo-preview { position:fixed; z-index:9; width:min(calc(var(--thumb-w)*6),calc(100vw - var(--space)*2)); height:min(calc(var(--thumb-h)*6),calc(100vh - var(--space)*2)); padding:var(--space); background:var(--surface); border:var(--line) solid var(--border); box-shadow:var(--shadow-lg); pointer-events:none; }
.photo-preview img { display:block; width:100%; height:100%; object-fit:contain; }
/* One row per source; collection diagnostics expand inside their row. */
body[data-view=sources] .sidebar { display:none; }
body[data-view=sources] main { margin-left:0; padding-top:var(--gap); }
body[data-view=sources] .title-row { margin-bottom:var(--gap); }
body[data-view=sources] .title-row .eyebrow { display:none; }
body[data-view=sources] h1 { margin:0; font-size:var(--heading); }
body:not([data-view=sources]) #source-cards { display:none; }
body[data-view=sources] #source-cards { display:block; }
.source-table-wrap { overflow-x:auto; border:var(--line) solid var(--border); background:var(--surface); }
.source-table { table-layout:fixed; min-width:840px; }
.source-table thead th { text-transform:none; letter-spacing:0; font-size:var(--small); line-height:1.5; vertical-align:top; }
.source-table thead th>span { display:block; font-size:var(--label); font-weight:400; }
.source-table th:nth-child(1) { width:23%; }
.source-table th:nth-child(2) { width:20%; }
.source-table th:nth-child(3) { width:13%; }
.source-table th:nth-child(4) { width:13%; }
.source-table th:nth-child(5) { width:19%; }
.source-table th:nth-child(6) { width:12%; }
.source-table tbody th,.source-table tbody td { height:72px; padding:var(--space); vertical-align:top; border-bottom:var(--line) solid var(--border); line-height:1.6; }
.source-table tbody th { text-transform:none; letter-spacing:0; font-size:var(--small); color:var(--text); font-weight:600; }
.source-table tbody tr:last-child>* { border-bottom:0; }
.source-table tbody tr:hover { background:var(--surface-2); }
.source-numbers,.source-heartbeat { font:var(--small)/1.6 var(--font-mono); white-space:nowrap; }
.source-subline { display:block; color:var(--text-2); font-size:var(--label); }
.source-explanation { white-space:normal; font-family:var(--font-text); }
.source-state { overflow-wrap:anywhere; }
.source-state-label { font-weight:600; }
.source-state-label.failed { color:var(--danger); }
.source-diagnostic { margin:0; padding:0; border:0; font-size:var(--label); }
.source-diagnostic summary { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--text-2); cursor:pointer; }
.source-diagnostic summary::before { content:'▸ '; }
.source-diagnostic[open] summary::before { content:'▾ '; }
.source-diagnostic p { margin:var(--half) 0; white-space:pre-wrap; }
.source-row-actions { display:flex; flex-direction:column; gap:var(--half); align-items:stretch; }
.source-row-actions button { padding:0 var(--half); min-height:var(--control-h); font-size:var(--small); }
.source-row-actions button.quiet { min-height:0; height:auto; line-height:1.6; }
.source-journal { margin:var(--gap) 0; }
body:is([data-view=catalog],[data-view=map],[data-view=favorites]) .source-journal { display:none; }
@media(max-width:760px) { body[data-view=sources] .title-row { flex-wrap:wrap; } }
#filters>.multi-filter { grid-column:1 / -1; position:relative; margin:0; padding:0; border:0; }
.multi-filter>summary { height:var(--control-h); display:flex; align-items:center; justify-content:space-between; gap:var(--space); padding:0 var(--space); border:var(--line) solid var(--border-strong); color:var(--text); list-style:none; }
.multi-filter>summary::-webkit-details-marker { display:none; }
.multi-filter>summary::after { content:'⌄'; color:var(--text-2); }
.multi-selection { margin-left:auto; color:var(--text-2); font-size:var(--small); }
.multi-options { position:absolute; left:0; right:0; top:calc(var(--control-h) + var(--half)); padding:var(--space); background:var(--surface); border:var(--line) solid var(--border); box-shadow:var(--shadow-md); z-index:6; }
.multi-options .check { min-height:var(--control-h); padding:var(--half); }
.multi-options .check:hover { background:var(--accent-soft); }
.link-cell { white-space:nowrap; }


body[data-view=detail] .sidebar,body[data-view=detail] .catalog,body[data-view=detail] .stats,body[data-view=detail] .source-journal,body[data-view=detail] #source-cards,body[data-view=detail] #export { display:none; }
body[data-view=detail] main { margin:0; max-width:none; padding-top:var(--space); }
body[data-view=detail] .title-row { display:none; }
body[data-view=detail] .title-row .eyebrow { display:none; }
.detail-page { background:var(--surface); border:var(--line) solid var(--border); box-shadow:var(--shadow-card); margin-bottom:var(--gap); }
.detail-page .dialog-bar { position:static; }
.detail-page #detail-content { padding:var(--gap); }
.detail-page .dialog-bar { padding:var(--half) var(--gap); }
.detail-page .detail-title h2 { margin:0; font-size:var(--subheading); }
.detail-page .detail-title>div:first-child { display:grid; grid-template-columns:auto 1fr; column-gap:var(--space); }
.detail-page .detail-title .eyebrow { grid-column:2; grid-row:1; align-self:center; }
.detail-page .detail-title h2 { grid-column:1; grid-row:1; }
.detail-page .detail-title p { grid-column:1 / -1; }
.detail-page .detail-title p { margin:var(--half) 0; }
.detail-page .detail-title>div:last-child { display:flex; align-items:center; gap:var(--gap); }
.detail-page .detail-source { margin-top:0; }
.detail-page .seller-detail { padding:var(--half) 0; }
.detail-page .facts { grid-template-columns:repeat(auto-fit,minmax(130px,1fr)); margin:var(--gap) 0; gap:var(--space); }
.detail-page .fact span { margin-bottom:var(--half); }
.detail-page .detail-photo { height:auto; max-height:calc(var(--thumb-h)*7); object-fit:contain; }
/* Catalogue column order is applied to actual table cells, not CSS positions. */
#catalog-table th:first-child { width:auto; }
#catalog-table th[data-column=object] { width:32%; }
#catalog-table th[data-column] { cursor:grab; }
#catalog-table th[data-column=area] { white-space:nowrap; }
.date-cell { white-space:nowrap; }
.date-cell time { display:block; }
.date-time { display:block; color:var(--text-2); font-size:var(--small); }
.change-line { display:block; color:var(--text-2); font-size:var(--small); margin-top:var(--half); }
.change-line summary { cursor:pointer; }
.column-sort { border:0; background:transparent; color:var(--text-2); padding:0; height:auto; min-height:var(--control-h); font-size:var(--label); letter-spacing:.07em; text-transform:uppercase; justify-content:flex-start; gap:0; }
.column-sort:hover,.column-sort.active { color:var(--accent-text); }
.column-sort.active { box-shadow:inset 0 calc(var(--line)*-2) 0 var(--accent); }
.area-separator { color:var(--text-2); margin:0 var(--half); }
#catalog-table th.column-dragging { opacity:.55; }
#catalog-table th.column-drop-target { box-shadow:inset calc(var(--line)*2) 0 0 var(--accent); background:var(--accent-soft); }
.sr-only { position:absolute; width:var(--line); height:var(--line); padding:0; overflow:hidden; clip-path:inset(50%); white-space:nowrap; border:0; }
@media(max-width:760px) { .gallery-layout { grid-template-columns:minmax(0,1fr); }.gallery-layout .photo-strip,.gallery-layout .plan-grid { grid-template-columns:repeat(auto-fill,minmax(64px,1fr)); }.detail-page .detail-title { flex-wrap:wrap; } }
.detail-page .pool-labels .facts { grid-template-columns:repeat(auto-fit,minmax(240px,1fr)); }
.pool-labels .fact small { display:block; margin-top:var(--half); }
.label-choices { display:flex; flex-wrap:wrap; gap:var(--half); }
.label-choices [aria-pressed="true"] { color:var(--accent-text); border-color:var(--accent); background:var(--accent-soft); }
.favorite-stars { display:inline-flex; align-items:center; white-space:nowrap; }
.favorite-stars .favorite-toggle { height:auto; padding:0 2px; font-size:var(--text-size); color:var(--text-2); }
.favorite-stars.full .favorite-toggle { font-size:var(--subheading); }
.link-cell .favorite-stars { margin-left:var(--space); }
.favorite-toggle[aria-pressed="true"] { color:var(--accent-text); }
.favorite-label { margin-left:var(--half); color:var(--text-2); font-size:var(--small); }
.favorite-filter { display:flex; flex-wrap:wrap; align-items:center; gap:var(--space); margin:0; padding:0; border:0; }
.favorite-filter legend { float:left; margin-right:var(--half); color:var(--text-2); font-size:var(--small); }
body:not([data-view=favorites]) .favorite-filter { display:none; }
#nav-favorites-count:empty { display:none; }
body:not([data-view=settings]) #settings-page { display:none; }
body[data-view=settings] .sidebar,body[data-view=settings] .catalog,body[data-view=settings] .stats,body[data-view=settings] .source-journal,body[data-view=settings] #source-cards,body[data-view=settings] #export { display:none; }
body[data-view=settings] main { margin-left:0; padding-top:var(--gap); }
body[data-view=settings] .title-row { margin-bottom:var(--gap); }
body[data-view=settings] .title-row .eyebrow { display:none; }
body[data-view=settings] h1 { margin:0; font-size:var(--heading); }
.settings-page { display:grid; grid-template-columns:minmax(0,1fr); gap:var(--gap); max-width:1180px; }
.settings-block { background:var(--surface); border:var(--line) solid var(--border); box-shadow:var(--shadow-card); padding:var(--block-pad); }
.settings-block h2 { margin:0 0 var(--space); font-size:var(--subheading); }
.settings-block .check { display:flex; margin-bottom:var(--space); }
.settings-block .source-table-wrap { margin-top:var(--space); }
.settings-table { min-width:1000px; }
.settings-table th:nth-child(1) { width:auto; }
.settings-table th:nth-child(2),.settings-table th:nth-child(3) { width:125px; }
.settings-table th:nth-child(4) { width:170px; }
.settings-table th:nth-child(5) { width:120px; }
.settings-table th:nth-child(6) { width:270px; }
.settings-table th:nth-child(7) { width:105px; }
.settings-table :is(th,td):is(:nth-child(2),:nth-child(3),:nth-child(7)) { text-align:right; }
.settings-table .source-subline { display:block; }
.access-check+button { margin-top:var(--half); }
/* Proxy menus would be clipped by the scroll container while the table fits the page. */
@media(min-width:1100px) { .settings-table-wrap { overflow:visible; } }
.settings-table td { vertical-align:middle; }
.settings-table input[data-period] { width:88px; height:var(--control-h); text-align:right; font-family:var(--font-mono); }
.similar { margin-top:var(--pad); }
.similar-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(200px,1fr)); gap:var(--gap); }
.similar-card { display:flex; flex-direction:column; background:var(--surface); border:var(--line) solid var(--border); color:var(--text); text-decoration:none; }
.similar-card:hover { border-color:var(--accent); }
.similar-card img,.similar-photo { width:100%; aspect-ratio:4 / 3; object-fit:cover; background:var(--surface-3); }
.similar-body { display:grid; gap:var(--half); padding:var(--space); font-size:var(--small); }
body[data-view=favorites] .sidebar { display:none; }
body[data-view=favorites] main { margin-left:0; }

/* Proxies on the settings page. */
.proxy-table { table-layout:fixed; min-width:680px; }
.proxy-table th { text-transform:none; letter-spacing:0; font-size:var(--small); }
.proxy-table th:nth-child(1) { width:18%; }
.proxy-table th:nth-child(2) { width:34%; }
.proxy-table th:nth-child(3) { width:auto; }
.proxy-table th:nth-child(4) { width:250px; }
.proxy-table tbody th,.proxy-table td { padding:var(--space); vertical-align:middle; border-bottom:var(--line) solid var(--border); line-height:1.5; }
.proxy-table tbody th { color:var(--text); font-weight:600; overflow-wrap:anywhere; }
.proxy-table tbody tr:last-child>* { border-bottom:0; }
.proxy-address,.check-error { overflow-wrap:anywhere; }
.proxy-actions { text-align:right; white-space:nowrap; }
.check-result { font-weight:600; }
.check-result.ok { color:var(--ok); }
.check-result.bad,.check-error { color:var(--danger); }
button.danger,button.danger:hover { color:var(--danger); background:var(--danger-soft); }
.proxy-form { margin-top:var(--gap); }
.proxy-form h3 { margin:0 0 var(--space); font-size:var(--text-size); }
.proxy-fields { display:grid; grid-template-columns:minmax(0,1.2fr) 110px minmax(0,1.6fr) 90px minmax(0,1fr) minmax(0,1fr); gap:var(--space); align-items:end; }
.proxy-form-actions { display:flex; gap:var(--space); margin-top:var(--space); }
#proxy-error { margin:var(--space) 0 0; }
@media(max-width:760px) { .proxy-fields { grid-template-columns:1fr 1fr; } }
/* Touch and narrow screens. A desktop with a fine pointer keeps the dense layout above. */
html { -webkit-text-size-adjust:100%; text-size-adjust:100%; }
a,button,summary,label { touch-action:manipulation; }
input,select { font-size:var(--input-text); }
header { padding-inline:max(var(--pad),env(safe-area-inset-left)) max(var(--pad),env(safe-area-inset-right)); }
main { padding-inline:max(var(--pad),env(safe-area-inset-left)) max(var(--pad),env(safe-area-inset-right)); }
.login { min-height:100dvh; }
#toast { bottom:calc(var(--pad) + env(safe-area-inset-bottom)); max-width:calc(100vw - var(--pad)*2); }
.brand { white-space:nowrap; flex-shrink:0; }
.top-nav { position:relative; }
.title-actions { display:flex; align-items:center; gap:var(--space); }
.side-head { display:flex; align-items:center; justify-content:space-between; gap:var(--space); margin-bottom:var(--gap); }
.side-head h2 { margin:0; }
.filter-actions { display:contents; }
#filters-toggle,#filters-close { display:none; }
.filter-count { margin-left:var(--half); padding:0 var(--half); background:var(--accent); color:var(--surface); font-size:var(--label); }
.filter-count:empty { display:none; }
@media (hover:hover) { .on-touch { display:none; } }
@media (hover:none) { .on-hover,.header-tooltip { display:none!important; } }
@media (prefers-reduced-motion:reduce) { *,*::before,*::after { scroll-behavior:auto!important; transition:none!important; animation:none!important; } }
@media (pointer:coarse) {
 .top-nav a,.link-cell a,.header-status { display:inline-flex; align-items:center; gap:var(--half); min-height:var(--control-h); }
 .brand { display:inline-flex; align-items:center; white-space:pre; min-height:var(--control-h); }
 .favorite-stars .favorite-toggle { min-width:var(--control-h); min-height:var(--control-h); }
 .check { min-height:var(--control-h); }
 .source-row-actions button.quiet { min-height:var(--control-h); }
 .source-journal summary,.history summary,.change-line summary,.source-diagnostic summary { padding-block:var(--space); }
}
@media(max-width:1150px) { header { gap:var(--gap); } #header-fresh,#header-eta { display:none; } }
/* Up to tablet landscape the catalog takes the full width; filters open as a left drawer. */
@media(max-width:1024px) {
 #header-sync { display:none; }
 main { margin-left:0; }
 #catalog-table th[data-column=object] { min-width:calc(var(--thumb-w)*3); }
 .object-address,.seller { overflow-wrap:break-word; }
 body:is([data-view=catalog],[data-view=map]) #filters-toggle,#filters-close { display:inline-flex; }
 .sidebar { display:none; position:fixed; inset:0 auto 0 0; z-index:20; width:min(var(--drawer-w),100vw); min-height:0; overflow-y:auto; overscroll-behavior:contain; padding:var(--gap) var(--block-pad) 0 max(var(--block-pad),env(safe-area-inset-left)); box-shadow:var(--shadow-lg); scroll-padding-bottom:calc(var(--control-h) + var(--gap)*3); }
 .side-filters #filters { grid-template-columns:minmax(0,1fr) minmax(0,1fr); }
 .filter-actions { grid-column:1 / -1; position:sticky; bottom:0; z-index:7; display:flex; gap:var(--space); padding:var(--gap) 0 calc(var(--gap) + env(safe-area-inset-bottom)); background:var(--surface); border-top:var(--line) solid var(--border); }
 .filter-actions .primary { flex:1; }
 body.filters-open { overflow:hidden; }
 body.filters-open .sidebar { display:block; }
 body.filters-open::before { content:''; position:fixed; inset:0; z-index:19; background:var(--backdrop); }
}
@media(max-width:760px) {
 header { height:auto; flex-wrap:wrap; column-gap:var(--space); row-gap:0; padding-block:var(--space) 0; }
 .top-nav { order:4; flex:1 0 100%; overflow-x:auto; scrollbar-width:none; }
 .top-nav::-webkit-scrollbar { display:none; }
 .top-nav a { flex-shrink:0; }
 .header-status { margin-left:auto; }
 .title-row { flex-wrap:wrap; row-gap:var(--space); }
 .catalog-meta .sort { align-self:stretch; flex-direction:column; align-items:stretch; }
 .sort .combo { width:auto; }
 .pagination { justify-content:space-between; }
 dialog { width:100%; max-width:none; height:100dvh; max-height:none; margin:0; border:0; }
 dialog .dialog-bar { padding-top:max(var(--space),env(safe-area-inset-top)); }
 .detail-page .detail-title>div:last-child { flex-wrap:wrap; gap:var(--space); }
 .similar-grid { grid-template-columns:repeat(auto-fill,minmax(calc(var(--thumb-w)*1.6),1fr)); }
 /* Catalog rows become cards: the object on top, values in a two-column grid with their labels. */
 #catalog-table { min-width:0; }
 #catalog-table,#catalog-table tbody { display:block; }
 #catalog-table thead { display:none; }
 #catalog-table tr[data-id] { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); grid-template-areas:"object object" "price area" "added changed" "distance synced" "source card"; gap:var(--space); padding:var(--gap) 0; border-bottom:var(--line) solid var(--border); }
 #catalog-table tr[data-id]:last-child { border-bottom:0; }
 #catalog-table tr[data-id]:hover { background:transparent; }
 #catalog-table td { display:block; min-width:0; padding:0; border:0; }
 #catalog-table td[data-column=object] { grid-area:object; }
 #catalog-table td[data-column=price] { grid-area:price; }
 #catalog-table td[data-column=area] { grid-area:area; }
 #catalog-table td[data-column=distance] { grid-area:distance; }
 #catalog-table td[data-column=added] { grid-area:added; }
 #catalog-table td[data-column=changed] { grid-area:changed; }
 #catalog-table td[data-column=synced] { grid-area:synced; }
 #catalog-table td[data-column=card] { grid-area:card; }
 #catalog-table td[data-column=card]>a { display:none; }
 #catalog-table td[data-column=source] { grid-area:source; }
 #catalog-table td:is([data-column=distance],[data-column=added],[data-column=changed],[data-column=synced])::before { display:block; margin-bottom:var(--half); color:var(--text-2); font:600 var(--label) var(--font-text); letter-spacing:.07em; text-transform:uppercase; }
 #catalog-table td[data-column=distance]::before { content:'От центра'; }
 #catalog-table td[data-column=added]::before { content:'Добавлено'; }
 #catalog-table td[data-column=changed]::before { content:'Изменено'; }
 #catalog-table td[data-column=synced]::before { content:'Синхронизация'; }
 #catalog-table .date-time { display:inline; margin-left:var(--space); }
 #catalog-table .thumb { width:calc(var(--thumb-w)*1.25); height:calc(var(--thumb-h)*1.25); }
 /* Wide status tables scroll inside their frame with the source name pinned. */
 .source-table:not(.settings-table) tr>:first-child { position:sticky; left:0; z-index:1; background:var(--surface); box-shadow:inset calc(var(--line)*-1) 0 0 var(--border); }
 .source-table th:nth-child(1) { width:calc(var(--thumb-w)*1.5); }
 /* Settings: each source becomes a card, so its proxy menu is not clipped by a scrolling frame. */
 .settings-block .source-table-wrap:is(.settings-table-wrap,:has(.proxy-table)) { overflow:visible; }
 .settings-table { min-width:0; }
 .settings-table,.settings-table tbody { display:block; }
 .settings-table thead { display:none; }
 .settings-table tbody tr { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:var(--space); padding:var(--gap) var(--space); border-bottom:var(--line) solid var(--border); }
 .settings-table tbody tr:last-child { border-bottom:0; }
 .settings-table tbody :is(th,td) { display:block; width:auto; height:auto; padding:0; border:0; text-align:left!important; }
 .settings-table tbody :is(th,[data-cell=proxy],[data-cell=check],[data-cell=fresh]) { grid-column:1 / -1; }
 .settings-table td[data-cell]::before { display:block; margin-bottom:var(--half); color:var(--text-2); font:600 var(--label) var(--font-text); letter-spacing:.07em; text-transform:uppercase; }
 .settings-table td[data-cell=catalog]::before { content:'Широкий сбор, ч'; }
 .settings-table td[data-cell=details]::before { content:'Детали, ч'; }
 .settings-table td[data-cell=proxy]::before { content:'Прокси'; }
 .settings-table td[data-cell=fallback]::before { content:'При сбое прокси'; }
 .settings-table td[data-cell=check]::before { content:'Проверка доступа'; }
 .settings-table td[data-cell=fresh]::before { content:'Актуальны сейчас'; }
 .settings-table input[data-period] { width:calc(var(--thumb-w)*.75); }
 /* The proxy directory becomes cards as well. */
 .proxy-table { min-width:0; }
 .proxy-table,.proxy-table tbody,.proxy-table tr { display:block; }
 .proxy-table thead { display:none; }
 .proxy-table tbody tr { padding:var(--space) 0; border-bottom:var(--line) solid var(--border); }
 .proxy-table tbody tr:last-child { border-bottom:0; }
 .proxy-table tbody th,.proxy-table td { display:block; width:auto; padding:var(--half) var(--space); border-bottom:0; text-align:left; }
 .proxy-actions { display:flex; flex-wrap:wrap; gap:var(--half); white-space:normal; }
}
