/* Immo Tracker — "Surveyor's Ledger" design system */
@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans:wght@400;500;600;700&display=swap');
:root{
  --paper:#f4f2ec; --paper-2:#faf9f5; --ink:#1b1c1e; --muted:#6c6d70; --faint:#9a9b9d;
  --line:#ddd9cf; --line-strong:#c9c4b6; --accent:#2f5d54; --accent-soft:#e4ece9;
  --love:#bd8b2c; --yes:#2f7d4f; --maybe:#a9791f; --no:#9c4a3c; --trash:#9a9a96;
  --top:#2f7d4f; --watch:#3a6ea5; --comp:#a9791f; --weak:#9a9a96;
  --shadow:0 1px 0 rgba(0,0,0,.02), 0 6px 18px -10px rgba(20,22,20,.25);
}
*{box-sizing:border-box} html{-webkit-text-size-adjust:100%}
body{margin:0;font-family:"IBM Plex Sans",system-ui,sans-serif;color:var(--ink);background:var(--paper);
  background-image:linear-gradient(rgba(47,93,84,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(47,93,84,.045) 1px,transparent 1px);
  background-size:28px 28px;font-size:14px;line-height:1.45;}
.mono{font-family:"IBM Plex Mono",ui-monospace,monospace;font-variant-numeric:tabular-nums}
.wrap{max-width:1180px;margin:0 auto;padding:22px}
a{color:inherit}
header.top{border-bottom:1px solid var(--line-strong);background:linear-gradient(180deg,var(--paper-2),var(--paper));position:sticky;top:0;z-index:30;}
.topbar{display:flex;align-items:center;gap:18px;height:58px;max-width:1180px;margin:0 auto;padding:0 22px}
.brand{display:flex;align-items:baseline;gap:10px}
.brand .mark{font-family:"IBM Plex Mono";font-weight:600;letter-spacing:.18em;font-size:13px;border:1.5px solid var(--ink);padding:3px 8px;border-radius:2px;}
.brand .name{font-weight:600;font-size:15px;letter-spacing:-.01em}
.brand .name small{color:var(--muted);font-weight:400;margin-left:8px;letter-spacing:.04em;font-size:11px;text-transform:uppercase}
.nav{margin-left:auto;display:flex;gap:4px}
.nav a{font-size:12.5px;color:var(--muted);text-decoration:none;padding:6px 11px;border-radius:3px;letter-spacing:.02em}
.nav a.active{color:var(--ink);background:var(--accent-soft);font-weight:600}
.nav a:hover{color:var(--ink)}
.dash{display:grid;grid-template-columns:repeat(6,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:5px;overflow:hidden;margin:0 0 22px;box-shadow:var(--shadow)}
.stat{background:var(--paper-2);padding:13px 15px}
.stat .k{font-size:10.5px;letter-spacing:.07em;text-transform:uppercase;color:var(--muted)}
.stat .v{font-family:"IBM Plex Mono";font-weight:600;font-size:22px;margin-top:3px;letter-spacing:-.02em}
.stat .v small{font-size:12px;color:var(--faint);font-weight:400}
.stat .sub{font-size:11px;color:var(--faint);margin-top:1px}
.stat .v.dot::before{content:"";display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:7px;vertical-align:middle}
.v.t-love::before{background:var(--love)} .v.t-yes::before{background:var(--yes)}
.v.t-maybe::before{background:var(--maybe)} .v.t-no::before{background:var(--no)}
.runbar{display:flex;align-items:center;gap:10px;font-size:12px;color:var(--muted);margin:0 0 18px;padding:8px 12px;border:1px dashed var(--line-strong);border-radius:4px;background:var(--paper-2)}
.pulse{width:7px;height:7px;border-radius:50%;background:var(--yes);box-shadow:0 0 0 0 rgba(47,125,79,.5);animation:p 2.4s infinite}
@keyframes p{0%{box-shadow:0 0 0 0 rgba(47,125,79,.45)}70%{box-shadow:0 0 0 7px rgba(47,125,79,0)}100%{box-shadow:0 0 0 0 rgba(47,125,79,0)}}
.seclabel{display:flex;align-items:center;gap:12px;margin:0 0 12px}
.seclabel h2{font-size:12px;letter-spacing:.13em;text-transform:uppercase;color:var(--accent);margin:0;font-weight:600;font-family:"IBM Plex Mono"}
.seclabel .rule{height:1px;background:var(--line-strong);flex:1}
.seclabel .tag{font-size:11px;color:var(--faint)}
.filters{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:12px 13px;background:var(--paper-2);border:1px solid var(--line);border-radius:5px;margin-bottom:14px;box-shadow:var(--shadow)}
.field{display:flex;flex-direction:column;gap:3px}
.field label{font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);padding-left:2px}
.ctrl{font:inherit;font-size:12.5px;border:1px solid var(--line-strong);background:#fff;border-radius:3px;padding:5px 8px;color:var(--ink);min-width:96px}
.ctrl.mono{font-family:"IBM Plex Mono"}
.chips{display:flex;gap:5px}
.chip{font-size:11px;border:1px solid var(--line-strong);background:#fff;padding:5px 9px;border-radius:20px;color:var(--muted);cursor:pointer;letter-spacing:.02em}
.chip[data-on]{background:var(--ink);color:#fff;border-color:var(--ink)}
.chip.top[data-on]{background:var(--top);border-color:var(--top)} .chip.watch[data-on]{background:var(--watch);border-color:var(--watch)}
.chip.comp[data-on]{background:var(--comp);border-color:var(--comp)}
.toggle{margin-left:auto;display:flex;align-items:center;gap:7px;font-size:12px;color:var(--muted)}
.switch{width:34px;height:19px;border-radius:20px;background:var(--accent);position:relative;cursor:pointer}
.switch::after{content:"";position:absolute;top:2px;left:17px;width:15px;height:15px;border-radius:50%;background:#fff;transition:.15s}
.tablecard{border:1px solid var(--line);border-radius:6px;overflow:hidden;box-shadow:var(--shadow);background:var(--paper-2)}
table.ledger{width:100%;border-collapse:collapse;font-size:13px}
.ledger thead th{font-size:9.5px;letter-spacing:.07em;text-transform:uppercase;color:var(--faint);text-align:left;padding:9px 12px;background:var(--paper-2);border-bottom:1px solid var(--line-strong);white-space:nowrap;font-weight:600}
.ledger thead th.num{text-align:right}
.ledger tbody td{padding:11px 12px;border-bottom:1px solid var(--line);vertical-align:middle}
.ledger tbody tr{background:#fff;transition:background .12s}
.ledger tbody tr:hover{background:#fbfbf8}
.ledger td.num{text-align:right;font-family:"IBM Plex Mono";font-variant-numeric:tabular-nums;white-space:nowrap}
.vcell{width:34px}
.vdot{width:11px;height:11px;border-radius:50%;border:2px solid var(--line-strong);display:inline-block}
.vdot.yes{background:var(--yes);border-color:var(--yes)} .vdot.maybe{background:var(--maybe);border-color:var(--maybe)}
.vdot.no{background:var(--no);border-color:var(--no)} .vdot.unv{background:transparent}
.star{color:var(--love);font-size:15px;line-height:1}
.titlecell .t{font-weight:600;letter-spacing:-.01em;max-width:340px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.titlecell .loc{font-size:11.5px;color:var(--muted);display:flex;align-items:center;gap:6px;margin-top:2px}
.titlecell .loc .id{font-family:"IBM Plex Mono";color:var(--faint);font-size:10.5px}
.tagrow{display:flex;gap:4px;margin-top:5px}
.tg{font-size:10px;font-family:"IBM Plex Mono";color:var(--accent);background:var(--accent-soft);padding:1px 6px;border-radius:3px}
.pin{box-shadow:inset 3px 0 0 var(--love)}
.pin .titlecell .t::after{content:"FAVORIT";font-family:"IBM Plex Mono";font-size:8.5px;letter-spacing:.1em;color:var(--love);border:1px solid var(--love);border-radius:3px;padding:0 4px;margin-left:8px;vertical-align:middle}
tr.trashed{opacity:.5}
tr.trashed .titlecell .t{text-decoration:line-through;color:var(--muted)}
tr.trashed td{background:repeating-linear-gradient(135deg,transparent,transparent 7px,rgba(0,0,0,.018) 7px,rgba(0,0,0,.018) 8px)}
.energy{display:inline-block;width:19px;height:19px;line-height:19px;text-align:center;border-radius:3px;font-family:"IBM Plex Mono";font-weight:600;font-size:11px;color:#fff}
.e-a{background:#2f7d4f} .e-b{background:#5a9e3a} .e-c{background:#b29022} .e-x{background:var(--faint)}
.score{display:inline-flex;flex-direction:column;align-items:flex-end;gap:3px}
.score .n{font-family:"IBM Plex Mono";font-weight:600;font-size:15px;line-height:1}
.score .bar{width:46px;height:3px;border-radius:2px;background:var(--line)}
.score .bar i{display:block;height:100%;border-radius:2px}
.b-top i{background:var(--top)} .b-watch i{background:var(--watch)} .b-comp i{background:var(--comp)} .b-weak i{background:var(--weak)}
.b-top .n{color:var(--top)} .b-watch .n{color:var(--watch)}
.phone-frame{max-width:360px;margin:0;border:1px solid var(--line-strong);border-radius:22px;padding:12px;background:var(--paper);box-shadow:var(--shadow)}
.mcard{background:#fff;border:1px solid var(--line);border-radius:7px;padding:12px;margin-bottom:10px;position:relative}
.mcard.pin{box-shadow:inset 3px 0 0 var(--love),var(--shadow)}
.mcard .top{display:flex;justify-content:space-between;gap:10px;align-items:flex-start}
.mcard .mt{font-weight:600;font-size:13.5px;line-height:1.3}
.mcard .ml{font-size:11.5px;color:var(--muted);margin-top:2px}
.mscore{text-align:right;flex-shrink:0}
.mscore .n{font-family:"IBM Plex Mono";font-weight:600;font-size:17px}
.mfacts{display:flex;flex-wrap:wrap;gap:5px;margin:9px 0;font-family:"IBM Plex Mono";font-size:11.5px}
.mfacts span{background:var(--paper);border:1px solid var(--line);border-radius:4px;padding:2px 7px}
.votebar{display:grid;grid-template-columns:repeat(5,1fr);gap:5px;margin-top:9px}
.vbtn{font-size:11px;border:1px solid var(--line-strong);background:#fff;border-radius:5px;padding:7px 0;text-align:center;cursor:pointer;letter-spacing:.01em}
.vbtn.love{color:var(--love)} .vbtn.love[data-on]{background:var(--love);color:#fff;border-color:var(--love)}
.vbtn.yes[data-on]{background:var(--yes);color:#fff;border-color:var(--yes)}
.vbtn.maybe{color:var(--maybe)} .vbtn.no{color:var(--no)} .vbtn.trash{color:var(--trash)}
.detail{display:grid;grid-template-columns:1fr 320px;gap:18px;align-items:start}
.panel{background:#fff;border:1px solid var(--line);border-radius:6px;box-shadow:var(--shadow)}
.panel .ph{padding:11px 15px;border-bottom:1px solid var(--line);font-size:10.5px;letter-spacing:.09em;text-transform:uppercase;color:var(--muted);font-weight:600;font-family:"IBM Plex Mono";display:flex;justify-content:space-between;align-items:center}
.panel .pb{padding:15px}
.dtitle{font-size:20px;font-weight:700;letter-spacing:-.015em;line-height:1.25}
.dloc{color:var(--muted);font-size:13px;margin-top:4px}
.specs{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:5px;overflow:hidden;margin-top:14px}
.spec{background:#fff;padding:10px 12px}
.spec .k{font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--faint)}
.spec .v{font-family:"IBM Plex Mono";font-weight:600;font-size:15px;margin-top:2px}
.reason{margin-top:14px;padding:11px 13px;background:var(--accent-soft);border-radius:5px;font-size:12.5px;color:#244a43;line-height:1.5}
.reason b{font-family:"IBM Plex Mono";font-size:10px;letter-spacing:.08em;text-transform:uppercase;display:block;margin-bottom:4px;color:var(--accent)}
.desc{margin-top:14px;font-size:13px;color:#33342f;line-height:1.6}
.sticky-vote .pb{display:flex;flex-direction:column;gap:9px}
.votegrid{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.vbig{border:1px solid var(--line-strong);background:#fff;border-radius:6px;padding:10px;text-align:center;font-size:12.5px;cursor:pointer;font-weight:500}
.vbig.love{grid-column:1/-1;color:var(--love);border-color:var(--love);background:linear-gradient(180deg,#fff,#fdf7ea)}
.vbig.love[data-on]{background:var(--love);color:#fff}
.vbig.yes[data-on]{background:var(--yes);color:#fff;border-color:var(--yes)}
textarea.ctrl,input.ctrl.full{width:100%;min-width:0}
textarea.ctrl{min-height:62px;resize:vertical;font-family:inherit}
.savebtn{background:var(--accent);color:#fff;border:none;border-radius:6px;padding:10px;font:inherit;font-weight:600;cursor:pointer;letter-spacing:.02em}
.history{font-size:12px}
.history .row{display:flex;justify-content:space-between;padding:7px 0;border-bottom:1px solid var(--line)}
.history .row:last-child{border:0}
.history .when{font-family:"IBM Plex Mono";color:var(--faint);font-size:11px}
.delta-down{color:var(--yes);font-family:"IBM Plex Mono"} .delta-up{color:var(--no);font-family:"IBM Plex Mono"}
.gatewrap{display:flex;justify-content:center;padding:40px 0}
.gate{width:340px;background:var(--paper-2);border:1px solid var(--line-strong);border-radius:8px;padding:26px;box-shadow:var(--shadow);text-align:center}
.gate .mark{font-family:"IBM Plex Mono";font-weight:600;letter-spacing:.18em;font-size:13px;border:1.5px solid var(--ink);padding:4px 9px;border-radius:2px;display:inline-block}
.gate h3{margin:16px 0 4px;font-size:16px}
.gate p{color:var(--muted);font-size:12px;margin:0 0 16px}
.gate input{width:100%;text-align:center;font-family:"IBM Plex Mono";letter-spacing:.3em;font-size:16px;padding:11px;border:1px solid var(--line-strong);border-radius:5px;margin-bottom:11px}
.gate button{width:100%;background:var(--ink);color:#fff;border:none;border-radius:5px;padding:11px;font:inherit;font-weight:600;cursor:pointer;letter-spacing:.02em}
.note{font-size:11px;color:var(--faint);margin-top:7px;text-align:center}
.twocol{display:grid;grid-template-columns:1fr 1fr;gap:22px;align-items:start}
.pad{padding:22px}
@media(max-width:760px){.detail{grid-template-columns:1fr}.dash{grid-template-columns:repeat(2,1fr)}.twocol{grid-template-columns:1fr}}

/* --- App integration additions --- */
.flash{max-width:1180px;margin:14px auto 0;padding:0 22px}
.flash .msg{padding:9px 13px;border-radius:5px;font-size:12.5px;border:1px solid}
.flash .notice{background:var(--accent-soft);border-color:#bcd2cc;color:#244a43}
.flash .alert{background:#f7e7e3;border-color:#e2b9af;color:#7d3528}
.ledger tbody tr.rowlink{cursor:pointer}
a.rowtitle{text-decoration:none}
a.rowtitle:hover .t{color:var(--accent)}
.willhaben{font-family:"IBM Plex Mono";font-size:10.5px;color:var(--faint);text-decoration:none}
.willhaben:hover{color:var(--accent)}
.empty{padding:40px;text-align:center;color:var(--muted);font-size:13px}
.desk{display:block}.mob{display:none}
@media(max-width:760px){.desk{display:none}.mob{display:block}.wrap{padding:14px}}
/* quick-vote forms in mobile votebar */
.votebar form{margin:0}
.votebar button{font:inherit;font-size:11px;border:1px solid var(--line-strong);background:#fff;border-radius:5px;padding:7px 0;text-align:center;cursor:pointer;width:100%;color:inherit}
.votebar form.love button{color:var(--love)} .votebar form.love.on button{background:var(--love);color:#fff;border-color:var(--love)}
.votebar form.yes.on button{background:var(--yes);color:#fff;border-color:var(--yes)}
.votebar form.maybe button{color:var(--maybe)} .votebar form.maybe.on button{background:var(--maybe);color:#fff;border-color:var(--maybe)}
.votebar form.no button{color:var(--no)} .votebar form.no.on button{background:var(--no);color:#fff;border-color:var(--no)}
.votebar form.trash button{color:var(--trash)} .votebar form.trash.on button{background:var(--trash);color:#fff;border-color:var(--trash)}
/* detail vote form: vote buttons are submit buttons */
.votegrid button.vbig{font:inherit;width:100%}
.votegrid form{margin:0;display:contents}
.backlink{display:inline-block;margin-bottom:14px;font-size:12.5px;color:var(--muted);text-decoration:none}
.backlink:hover{color:var(--accent)}
.raw details{margin-top:0}
.raw summary{cursor:pointer;font-family:"IBM Plex Mono";font-size:11px;letter-spacing:.04em;color:var(--muted)}
.raw pre{white-space:pre-wrap;word-break:break-word;font-family:"IBM Plex Mono";font-size:11px;background:var(--paper);border:1px solid var(--line);border-radius:5px;padding:11px;margin-top:9px;max-height:340px;overflow:auto}
.logrow{display:flex;justify-content:space-between;gap:10px;padding:7px 0;border-bottom:1px solid var(--line);font-size:12px}
.logrow:last-child{border:0}
.logrow .st{font-family:"IBM Plex Mono";font-size:11px}
.notetext{font-size:12px;color:#33342f;margin-top:3px;line-height:1.5}

/* --- Detail: willhaben button --- */
.dhead{display:flex;justify-content:space-between;align-items:flex-start;gap:14px}
.wh-btn{display:inline-flex;align-items:center;gap:8px;flex-shrink:0;text-decoration:none;
  background:var(--accent);color:#fff;border-radius:6px;padding:9px 14px;font-weight:600;font-size:13px;
  letter-spacing:.01em;box-shadow:var(--shadow);transition:background .12s,transform .04s}
.wh-btn:hover{background:#264c45}
.wh-btn:active{transform:translateY(1px)}
.wh-logo{display:inline-grid;place-items:center;width:18px;height:18px;border-radius:3px;background:#fff;color:var(--accent);font-weight:700;font-family:"IBM Plex Mono";font-size:12px;line-height:1}
.wh-arrow{font-size:14px;opacity:.85}

/* --- Detail: agent-score overview --- */
.agentbox{margin-top:14px;border:1px solid var(--line);border-radius:6px;overflow:hidden;background:#fff}
.agenthead{display:flex;justify-content:space-between;align-items:center;padding:9px 13px;background:var(--paper-2);border-bottom:1px solid var(--line)}
.ah-label{font-family:"IBM Plex Mono";font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--accent);font-weight:600}
.reasons{display:flex;flex-wrap:wrap;gap:6px;padding:12px 13px}
.rc{display:inline-flex;align-items:center;gap:5px;font-size:12px;padding:4px 9px;border-radius:14px;border:1px solid;line-height:1.3}
.rc::before{font-weight:700;font-size:11px}
.rc.pro{background:#eaf3ec;border-color:#c7e0cd;color:#225c39}
.rc.pro::before{content:"✓";color:var(--yes)}
.rc.con{background:#f7e9e5;border-color:#e6c4ba;color:#7d3528}
.rc.con::before{content:"✕";color:var(--no)}
.rc.neutral{background:var(--paper-2);border-color:var(--line-strong);color:var(--muted)}
.rc.neutral::before{content:"–";color:var(--faint)}

/* --- Filters: bucket radio chips + live loading --- */
.bucketchips{margin-bottom:10px}
.chips label.chip{cursor:pointer;display:inline-flex;align-items:center;user-select:none}
.chips label.chip input{position:absolute;opacity:0;width:0;height:0}
.chips label.chip:has(input:checked){background:var(--ink);color:#fff;border-color:var(--ink)}
.chips label.chip.top:has(input:checked){background:var(--top);border-color:var(--top)}
.chips label.chip.watch:has(input:checked){background:var(--watch);border-color:var(--watch)}
.chips label.chip.comp:has(input:checked){background:var(--comp);border-color:var(--comp)}
#immo-results{transition:opacity .12s}
#immo-results.loading{opacity:.55}

/* --- Vote panel: preset tag chips --- */
.taglabel{font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);margin-top:2px}
.taglabel span{text-transform:none;letter-spacing:0}
.tagchips{display:flex;flex-wrap:wrap;gap:5px}
.tagchip{cursor:pointer;user-select:none;font-family:"IBM Plex Mono";font-size:11px;border:1px solid var(--line-strong);background:#fff;padding:4px 8px;border-radius:4px;color:var(--muted)}
.tagchip input{position:absolute;opacity:0;width:0;height:0}
.tagchip:has(input:checked){background:var(--accent-soft);border-color:var(--accent);color:var(--accent);font-weight:600}
@media(max-width:760px){.dhead{flex-direction:column}.wh-btn{align-self:flex-start}}

/* --- Agent re-check panel --- */
.savebtn.full{width:100%;margin-top:8px}
.reviewcount{float:right;font-family:"IBM Plex Mono";font-size:10px;font-weight:600;color:#fff;background:var(--comp);border-radius:10px;padding:1px 7px;letter-spacing:.02em}
.reviewlist{margin-top:12px;display:flex;flex-direction:column;gap:8px}
.reviewitem{border:1px solid var(--line);border-radius:5px;padding:8px 10px;background:var(--paper-2)}
.reviewmeta{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}
.rstatus{font-family:"IBM Plex Mono";font-size:9.5px;text-transform:uppercase;letter-spacing:.06em;font-weight:600;padding:1px 7px;border-radius:9px}
.rstatus.open{background:var(--comp);color:#fff}
.rstatus.resolved{background:var(--yes);color:#fff}
.rstatus.dismissed{background:var(--faint);color:#fff}
.reviewcomment{font-size:13px;color:var(--ink);line-height:1.4}
.reviewnote{margin-top:5px;font-size:12px;color:var(--muted);border-top:1px dashed var(--line-strong);padding-top:5px}
.reviewnote span{font-weight:600;color:var(--accent)}
.reviewflag{color:var(--comp)}
