/* public/styles.css — extracted from index.html (was inline <style> block, lines 33–902).
 * Loaded via <link rel="stylesheet" href="/public/styles.css"> in the HTML head.
 * No build step. Edit this file directly. CSP still requires 'unsafe-inline' for
 * style-src because ~250 inline style="..." attributes remain in index.html (PR 4).
 */

:root{
  --bg:#F5F1EA;--white:#ffffff;--cream:#F5F1EA;--cream2:#E8E4DC;
  --surface:#ffffff;--surface2:#f0ede6;
  --border:#E8E4DC;--border2:#d4cfc5;
  --text:#1A1A18;--text2:#6B6B65;--text3:#8a847a;--text4:#b0a99e;
  --green:#C0392B;--green2:#A93226;--green-light:#fdf0ee;--green-pale:#fef6f5;
  --accent:#C0392B;--accent-hover:#A93226;--accent-match:#C0392B;
  --navy:#1A1A18;--navy-light:#2a2a28;--navy-accent:#1A1A18;
  --amber:#c47a15;--amber-light:#fef6e8;
  --violet:#6e56cf;--violet-light:#f3f0ff;
  --red:#C0392B;--red-light:#fdf0ee;--red-hover:#A93226;--red-text-dark:#E74C3C;
  --accent-danger:#8B0000;--accent-warn:#e67e22;--accent-info:#2e86c1;
  --signal-pos:#2e7d32;--signal-pos-bg:#e8f5ee;
  --muted:#6B6B65;
  --tech:#1A1A18;
  --radius:12px;--radius-sm:8px;
  --font-main:'IBM Plex Sans',sans-serif;--font-mono:'IBM Plex Mono',monospace;
  /* ── Editorial redesign tokens (handoff: search-v2 + lot-detail) ── */
  /* The colour palette already aligned in an earlier pass; these are the
   * additional surfaces, hairlines and the display-serif family the new
   * "Trading Desk" + "Lot Detail" screens need. Old aliases above are
   * preserved so existing components keep rendering during the rollout.
   */
  --paper:        #FBF7EE;  /* warm card surface — slightly warmer than white */
  --bg-2:         #EFE9DD;  /* deeper cream for striped fills + alt rows */
  --ink:          #1A1A18;  /* explicit alias of --text for editorial markup */
  --ink-2:        #2C2C28;  /* body copy */
  --muted-2:      #8A8A82;
  --border-strong:#C9C2B3;  /* hairline rules between cards/sections */
  --red-soft:     #F4E0DC;
  --signal-green: #2F7D4F;  /* "ok" markers in DD checks; distinct from old --signal-pos */
  --signal-amber: #B8761A;  /* caution */
  --font-display: 'IBM Plex Serif','Times New Roman',serif;
}
*{margin:0;padding:0;box-sizing:border-box}
html{overflow-x:hidden}
body{font-family:var(--font-main);background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;line-height:1.6;overflow-x:hidden}
a{color:var(--red);text-decoration:none}a:hover{text-decoration:underline}

/* ── NAV ── */
.nav{background:var(--navy);border-bottom:none;position:sticky;top:0;z-index:100}
.nav-inner{max-width:1100px;margin:0 auto;padding:0 24px;height:56px;display:flex;align-items:center;justify-content:space-between;overflow:visible}
.logo{font-family:var(--font-main);font-size:1.2rem;font-weight:700;color:var(--white);flex-shrink:0;letter-spacing:-0.3px}
.logo-sub{font-family:var(--font-main);font-size:10px;color:var(--text3);display:block;line-height:1;margin-top:-2px}
.logo span{font-family:var(--font-mono);font-weight:500;color:var(--red-text-dark)}
.nav-right{display:flex;align-items:center;gap:10px;min-width:0}
.nav-cta{padding:8px 20px;border-radius:4px;font-size:.85rem;font-weight:600;color:var(--white);background:var(--red);border:none;cursor:pointer;font-family:var(--font-main);transition:all .15s;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nav-cta:hover{background:var(--red-hover)}
.nav-link-bm{font-size:.82rem;font-weight:600;color:var(--red-text-dark);padding:8px 14px;border-radius:4px;border:1px solid rgba(192,57,43,.4);transition:all .15s;text-decoration:none!important;white-space:nowrap}
.nav-link-bm:hover{background:rgba(192,57,43,.1);text-decoration:none!important}

/* ── WRAP ── */
.wrap{max-width:1100px;margin:0 auto;padding:0 24px}

/* ── HERO ── */
.hero{padding:40px 0 28px;text-align:center;position:relative;overflow:hidden;background:var(--bg)}
.hero::before{content:'';position:absolute;top:-60%;right:-20%;width:600px;height:600px;border-radius:50%;background:radial-gradient(circle,rgba(192,57,43,.04) 0%,transparent 70%);pointer-events:none}
.hero::after{content:'';position:absolute;bottom:-40%;left:-15%;width:500px;height:500px;border-radius:50%;background:radial-gradient(circle,rgba(26,26,24,.03) 0%,transparent 70%);pointer-events:none}
.hero-badge{display:inline-flex;align-items:center;gap:6px;background:var(--white);border:1px solid var(--border);border-radius:24px;padding:5px 14px;font-size:.72rem;font-weight:600;color:var(--text2);margin-bottom:14px;box-shadow:0 1px 4px rgba(0,0,0,.04);animation:fadeUp .6s ease .1s both}
.hero-badge .badge-dot{width:6px;height:6px;border-radius:50%;background:var(--green);animation:pulse-dot 2s ease infinite}
@keyframes pulse-dot{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.6;transform:scale(1.3)}}
.hero h1{font-family:var(--font-main);font-size:clamp(1.6rem,4vw,2.4rem);font-weight:700;color:var(--text);line-height:1.15;margin-bottom:10px;letter-spacing:-0.03em;animation:fadeUp .7s ease .2s both}
.hero h1 em{font-style:normal;color:var(--red)}
.hero-sub{color:var(--text2);max-width:540px;margin:0 auto 16px;font-size:clamp(.82rem,1.6vw,.92rem);line-height:1.6;animation:fadeUp .7s ease .35s both}
.hero-ctas{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin-bottom:12px;animation:fadeUp .7s ease .5s both}
.cta-primary{display:inline-flex;align-items:center;gap:8px;padding:12px 28px;border-radius:var(--radius);font-size:.9rem;font-weight:700;font-family:inherit;color:var(--white);background:linear-gradient(135deg,var(--green),var(--green2));border:none;cursor:pointer;text-decoration:none!important;transition:all .2s;box-shadow:0 4px 16px rgba(46,125,50,.25)}
.cta-primary:hover{transform:translateY(-2px);box-shadow:0 8px 28px rgba(46,125,50,.35);text-decoration:none!important}
.cta-secondary{display:inline-flex;align-items:center;gap:6px;padding:13px 28px;border-radius:var(--radius);font-size:.95rem;font-weight:600;font-family:inherit;color:var(--green);background:var(--white);border:2px solid rgba(46,125,50,.25);cursor:pointer;text-decoration:none!important;transition:all .2s;box-shadow:0 1px 4px rgba(0,0,0,.04)}
.cta-secondary:hover{background:var(--green-light);border-color:var(--green);text-decoration:none!important}
.trust-line{font-family:var(--font-main);font-size:12px;color:var(--text3);text-align:center;display:flex;justify-content:center;gap:16px;flex-wrap:wrap;animation:fadeUp .7s ease .65s both}
.trust-line span{display:inline-flex;align-items:center;gap:5px}
.trust-line .t-icon{font-size:14px}
@keyframes fadeUp{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}

/* ── SEARCH PANEL ── */
.search-panel{background:var(--white);border:1px solid var(--border);border-radius:var(--radius);padding:0;margin-bottom:16px;box-shadow:0 1px 3px rgba(0,0,0,.03);position:sticky;top:56px;z-index:10;overflow:visible}
/* Row 1: Search bar — most prominent */
.sp-search-row{display:flex;gap:8px;align-items:center;padding:12px 16px;border-bottom:1px solid var(--border)}
.sp-ai-group{display:flex;gap:0;flex:1;position:relative}
.sp-ai-group .tb-search{border-radius:var(--radius-sm) 0 0 var(--radius-sm);border-right:none}
.sp-ai-group .btn-main{border-radius:0 var(--radius-sm) var(--radius-sm) 0;padding:8px 20px}

/* ── AI search suggestions ── */
.ai-suggest{display:none;position:absolute;top:100%;left:0;right:0;z-index:20;background:var(--white);border:1px solid var(--border);border-top:none;border-radius:0 0 var(--radius-sm) var(--radius-sm);box-shadow:0 8px 24px rgba(0,0,0,.08);overflow:hidden}
.ai-suggest.open{display:block}
.ai-suggest-header{padding:8px 14px 4px;font-size:.68rem;font-weight:600;color:var(--text3);text-transform:uppercase;letter-spacing:.04em}
.ai-suggest-item{padding:8px 14px;font-size:.82rem;color:var(--text);cursor:pointer;display:flex;align-items:center;gap:8px;transition:background .1s}
.ai-suggest-item:hover{background:var(--cream)}
.ai-suggest-item .ai-icon{width:16px;height:16px;flex-shrink:0;opacity:.4}
.ai-suggest-item .ai-q{flex:1}
.ai-suggest-item .ai-tag{font-family:var(--font-mono);font-size:.65rem;color:var(--text4);background:var(--cream);padding:2px 6px;border-radius:3px;flex-shrink:0}
.sp-page-info{font-size:.72rem;color:var(--text3);white-space:nowrap;margin-left:4px}
.sp-per-page{flex-shrink:0}
.sp-lots-dd{flex-shrink:0}
/* Row 2: Filters — secondary, muted background */
.sp-filter-row{display:flex;flex-wrap:wrap;gap:8px 10px;align-items:center;padding:10px 18px;background:var(--bg-primary, #f5f7fa);border-bottom:1px solid var(--border)}
.sp-filter-row .tb-select,.sp-filter-row .tb-search{padding:8px 14px;font-size:.84rem;min-height:40px;border-radius:8px;background:var(--white);border-color:var(--border)}
.sp-filter-row .tb-search{min-width:80px;max-width:100px;flex:0}
.sp-filter-row label{font-size:.84rem;color:var(--text3);display:flex;align-items:center;gap:4px;white-space:nowrap;cursor:pointer}
.sp-filter-row label input[type="checkbox"]{width:16px;height:16px;accent-color:var(--green);cursor:pointer}
.sp-secondary{background:var(--white);border-bottom:1px solid var(--border);padding:6px 18px}
.sp-secondary .tb-select,.sp-secondary .tb-search{font-size:.78rem;padding:6px 10px;min-height:34px}
.sp-filter-label{font-size:.68rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text4);margin-right:2px;flex-shrink:0}
/* Row 3: Quick chips */
.chip-row{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:10px 18px}
.chip-row .ex-btn{font-size:.78rem;padding:6px 12px}
.chip-row .ex-btn.ai-chip{background:#faf8f0;border-color:#e8dfc8;color:#8b6914}
.chip-row .ex-btn.ai-chip:hover{background:#f0eadc;border-color:#c9a94e;color:#6b5010}
.chip-row .adv-toggle{font-size:.75rem}
.chip-sep{width:1px;height:16px;background:var(--border);margin:0 4px;flex-shrink:0}
/* ── More Filters Popover ── */
.clear-all-btn{padding:7px 12px;border-radius:8px;border:1px solid var(--accent-danger,#c0392b);background:none;color:var(--accent-danger,#c0392b);font-size:.8rem;font-family:inherit;cursor:pointer;white-space:nowrap;min-height:40px;font-weight:600;transition:all .15s}
.clear-all-btn:hover{background:var(--accent-danger,#c0392b);color:#fff}
.more-filters-dd{position:relative;display:inline-block}
.more-filters-btn{padding:8px 14px;border-radius:8px;border:1px solid var(--border);background:var(--white);font-size:.84rem;min-height:40px;color:var(--text);font-family:inherit;cursor:pointer;white-space:nowrap;display:flex;align-items:center;gap:6px}
.more-filters-btn:hover{border-color:var(--green);color:var(--green)}
.mf-dot{width:7px;height:7px;border-radius:50%;background:var(--green);display:inline-block}
.more-filters-pop{display:none;position:absolute;top:100%;right:0;margin-top:4px;background:var(--white);border:1px solid var(--border);border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.12);z-index:100;padding:16px;min-width:320px}
.more-filters-pop.open{display:block}
.mf-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.mf-field label{display:block;font-size:.7rem;font-weight:600;color:var(--text3);margin-bottom:3px;text-transform:uppercase;letter-spacing:.03em}
.mf-field .tb-select,.mf-field .tb-search{width:100%;font-size:.82rem;padding:8px 10px;min-height:36px}
.mf-check{grid-column:1/-1}
.mf-check label{display:flex;align-items:center;gap:6px;font-size:.82rem;text-transform:none;font-weight:500;color:var(--text);cursor:pointer}
.mf-check input[type="checkbox"]{width:16px;height:16px;accent-color:var(--green)}
.mf-clear{display:block;width:100%;margin-top:12px;padding:8px;background:none;border:none;border-top:1px solid var(--border);padding-top:10px;color:var(--accent-danger,#c0392b);font-size:.8rem;font-weight:600;cursor:pointer;font-family:inherit;text-align:center}
.mf-clear:hover{text-decoration:underline}
/* ── Favourite Heart ── */
.fav-btn{width:32px;height:32px;border-radius:50%;border:1px solid var(--border);background:var(--white);color:var(--text4);font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .15s;line-height:1;padding:0;flex-shrink:0}
.fav-btn:hover{border-color:var(--accent-danger,#c0392b);color:var(--accent-danger,#c0392b);transform:scale(1.1)}
.fav-btn.fav-active{color:var(--accent-danger,#c0392b);border-color:var(--accent-danger,#c0392b);background:#fef2f2}
/* Legacy compat */
.unified-bar{display:flex;flex-wrap:wrap;gap:6px 8px;align-items:center}
.unified-bar .tb-select,.unified-bar .tb-search{padding:7px 10px;font-size:.8rem}
.unified-bar .tb-search{min-width:140px;flex:1}
.ub-sep{width:1px;height:24px;background:var(--border);margin:0 2px;flex-shrink:0}
.price-dd{position:relative;display:inline-block}
.price-dd-btn{padding:8px 14px;border-radius:8px;border:1px solid var(--border);background:var(--white);font-size:.84rem;min-height:40px;color:var(--text);font-family:inherit;cursor:pointer;white-space:nowrap}
.price-dd-btn.active-filter{border-color:var(--green);color:var(--green)}
.price-pop{display:none;position:absolute;top:100%;left:0;background:var(--white);border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.12);padding:12px;z-index:20;min-width:260px}
.price-pop.open{display:flex;gap:8px}
.price-pop select{flex:1;padding:8px;border:1px solid var(--border);border-radius:6px;font-size:.82rem;font-family:inherit}
.price-pop label{display:block;font-size:.7rem;font-weight:600;color:var(--text3);margin-bottom:3px;text-transform:uppercase}
.search-input{flex:1;padding:13px 18px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--surface2);color:var(--text);font-size:.93rem;font-family:inherit;outline:0;transition:border-color .15s}
.search-input:focus{border-color:var(--green);box-shadow:0 0 0 3px rgba(46,125,50,.08)}
.search-input::placeholder{color:var(--text4)}
.btn-main{padding:8px 18px;border-radius:var(--radius-sm);font-size:.82rem;font-weight:700;color:var(--white);background:var(--green);border:none;cursor:pointer;font-family:inherit;transition:all .15s;white-space:nowrap}
.btn-main:hover{background:var(--green2)}
.btn-main:disabled{opacity:.5;cursor:not-allowed}

/* ── FILTERS ── */
.filter-field label{display:block;font-size:.75rem;font-weight:600;color:var(--text3);margin-bottom:4px;text-transform:uppercase;letter-spacing:.03em}
.filter-field select,.filter-field input{width:100%;padding:10px 12px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--surface2);color:var(--text);font-size:.85rem;font-family:inherit;outline:0}
.filter-field select:focus,.filter-field input:focus{border-color:var(--green)}

.ex-btn{font-size:.8rem;padding:7px 14px;border-radius:20px;border:1px solid var(--border);background:var(--white);color:var(--text3);cursor:pointer;font-family:inherit;transition:all .15s;font-weight:500}
.ex-btn:hover{background:var(--green-light);color:var(--green);border-color:var(--green)}
.adv-toggle{font-size:.8rem;color:var(--text3);cursor:pointer;border:none;background:none;font-family:inherit;text-decoration:underline;text-underline-offset:2px}
.adv-toggle:hover{color:var(--green)}

/* ── ACCESSIBILITY: focus-visible for all interactive elements ── */
.tb-select:focus-visible,.ex-btn:focus-visible,.adv-toggle:focus-visible,.btn-main:focus-visible,.nav-cta:focus-visible,.card-bm-btn:focus-visible,.cta-primary:focus-visible,.lot-card:focus-visible{outline:2px solid var(--green);outline-offset:2px;box-shadow:0 0 0 4px rgba(46,125,50,.15)}
.skip-link{position:absolute;top:-100%;left:16px;background:var(--green);color:var(--white);padding:8px 16px;border-radius:var(--radius-sm);font-weight:700;font-size:.85rem;z-index:100;text-decoration:none;transition:top .15s}
.skip-link:focus{top:8px}

/* ── ADVANCED SETTINGS ── */
.advanced{display:none;margin-top:16px;padding-top:16px;border-top:1px solid var(--border)}
.advanced.show{display:block}
.budget-row{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px}
.budget-summary{font-size:.82rem;color:var(--text3);margin-top:8px}
.budget-summary b{color:var(--green)}

/* ── BACK BUTTON ── */
.back-bar{margin-bottom:16px;display:none}
.back-btn{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--white);font-size:.85rem;font-weight:600;color:var(--text2);cursor:pointer;font-family:inherit;transition:all .15s}
.back-btn:hover{border-color:var(--green);color:var(--green);background:var(--green-light)}
.view-results .hero{display:none}
/* calendar section removed */
.view-results .back-bar{display:block}
/* search-panel now stays visible in results view (unified filter bar) */

/* ── RESULTS PANEL ── */
#resultsPanel{display:none;margin-bottom:32px}
.result-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;flex-wrap:wrap;gap:12px}
.result-header h2{font-family:var(--font-main);font-size:1.2rem;font-weight:700;color:var(--navy)}
.view-toggle{display:flex;gap:3px;background:var(--cream);padding:3px;border-radius:var(--radius-sm)}
.vtog{padding:7px 16px;border-radius:6px;border:none;background:transparent;font-size:.82rem;font-weight:600;cursor:pointer;font-family:inherit;color:var(--text3);transition:all .15s}
.vtog.active{background:var(--white);color:var(--text);box-shadow:0 1px 3px rgba(0,0,0,.06)}

/* Stats row */
.stats-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-bottom:20px}
.stat-card{background:var(--white);border:1px solid var(--border);border-radius:var(--radius-sm);padding:14px;text-align:center}
.stat-card .v{font-family:var(--font-mono);font-size:1.4rem;font-weight:700}
.stat-card .l{font-size:.72rem;color:var(--text3);text-transform:uppercase;letter-spacing:.03em;margin-top:2px}
.v.g{color:var(--green)}.v.y{color:var(--amber)}.v.p{color:var(--violet)}

/* Report view */
.report-view{background:var(--white);border:1px solid var(--border);border-radius:var(--radius);padding:24px;line-height:1.8;font-size:.9rem}
.report-view p{margin-bottom:10px}
.report-view .sources{margin-top:14px;padding-top:12px;border-top:1px solid var(--border);font-size:.76rem;color:var(--text3)}

/* Toolbar */
.toolbar{display:flex;gap:8px;margin-bottom:16px;flex-wrap:wrap;align-items:center}
.tb-select{padding:8px 12px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--white);font-size:.82rem;color:var(--text);font-family:inherit;cursor:pointer}
.tb-search{padding:8px 12px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--white);font-size:.82rem;color:var(--text);font-family:inherit;outline:0;flex:1;min-width:120px}
.tb-search:focus{border-color:var(--green)}
.tb-search.locating{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24'%3E%3Cstyle%3E%40keyframes s%7B0%25%7Btransform:rotate(0)%7D100%25%7Btransform:rotate(360deg)%7D%7D%3C/style%3E%3Ccircle cx='12' cy='12' r='9' fill='none' stroke='%236b7c8d' stroke-width='2.5' stroke-dasharray='42 14' style='animation:s .8s linear infinite;transform-origin:center'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 8px center;background-size:16px}
.spacer{flex:1}
.tb-btn{padding:7px 14px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--white);font-size:.8rem;color:var(--text2);cursor:pointer;font-family:inherit;font-weight:600}
.tb-btn:hover{background:var(--green-light);color:var(--green);border-color:var(--green)}

/* ── LOT CARDS ── */
.group-head{font-family:var(--font-main);font-size:1rem;font-weight:700;color:var(--navy);padding:18px 0 10px;display:flex;align-items:center;gap:8px}
.badge{display:inline-flex;align-items:center;justify-content:center;min-width:24px;padding:2px 8px;border-radius:12px;font-size:.72rem;font-weight:700;font-family:var(--font-mono)}
.badge-g{background:var(--green-light);color:var(--green)}.badge-p{background:var(--violet-light);color:var(--violet)}.badge-y{background:var(--amber-light);color:var(--amber)}

.lot{background:var(--white);border:1px solid var(--border);border-radius:var(--radius);padding:18px;margin-bottom:10px;transition:border-color .15s}
.lot:hover{border-color:var(--border2)}
.lot.ts{border-left:3px solid var(--violet)}
.lot-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}
.lot-title{font-size:.78rem;color:var(--text3);font-weight:600}
.lot-score{font-family:var(--font-mono);font-size:.85rem;font-weight:700;padding:3px 10px;border-radius:var(--radius-sm)}
.lot-score.high{background:var(--green-light);color:var(--green)}
.lot-score.mid{background:var(--amber-light);color:var(--amber)}
.lot-score.low{background:var(--cream);color:var(--text4)}
.lot-addr{font-weight:600;font-size:.95rem;margin-bottom:4px}
.lot-details{font-size:.82rem;color:var(--text2);margin-bottom:8px}.lot-details .sep{color:var(--border2);margin:0 2px}
.price{color:var(--green);font-weight:700}.dep{color:var(--text3)}
.tags{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:6px}
.tag{font-size:.7rem;padding:3px 8px;border-radius:12px;font-weight:600}
.tag-t{background:var(--violet-light);color:var(--violet)}.tag-o{background:var(--green-light);color:var(--green2)}.tag-r{background:var(--red-light);color:var(--red)}
.tag-aff{font-size:.68rem;padding:2px 7px;border-radius:10px;font-weight:700;letter-spacing:.02em}
.tag-aff.aff-ok{background:var(--green-light);color:var(--green)}.tag-aff.aff-stretch{background:var(--amber-light);color:var(--amber)}.tag-aff.aff-oor{background:var(--red-light);color:var(--red);opacity:.6}
.fp-row{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;margin-bottom:10px}
.fp-checks{display:flex;gap:18px;margin-top:6px}
.fp-checks label{font-size:.82rem;color:var(--text2);display:flex;align-items:center;gap:5px;cursor:pointer}
.fp-ts-settings{display:none;margin-top:10px;padding:10px 12px;background:var(--violet-light);border-radius:var(--radius-sm);border-left:3px solid var(--violet)}
.fp-ts-settings.show{display:block}
.fp-ts-row{display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.fp-slider-group{display:flex;align-items:center;gap:8px}
.fp-slider-group input[type="range"]{width:140px;accent-color:var(--violet)}
.fp-slider-val{font-weight:600;color:var(--violet);font-size:.85rem;min-width:35px}
.fp-tip{display:inline-block;width:15px;height:15px;border-radius:50%;background:var(--border);color:var(--text3);font-size:.65rem;text-align:center;line-height:15px;cursor:help;margin-left:4px}
.fp-ts-info{font-size:.78rem;color:var(--text3);line-height:1.5}
.fp-summary{font-size:.82rem;color:var(--text3);margin-top:10px;line-height:1.7}
.fp-summary b{color:var(--green)}.fp-summary .fp-refurb{color:var(--amber)}.fp-summary .fp-split{color:var(--violet)}
.tag-aff.aff-full{background:var(--violet-light);color:var(--violet);font-weight:700}
.fp-full-finance{color:var(--violet);font-weight:600}
.aff-stats{display:flex;gap:8px;flex-wrap:wrap;margin-top:4px}
.aff-stat{font-size:.72rem;padding:3px 8px;border-radius:10px;font-weight:600}
.aff-stat.as-ok{background:var(--green-light);color:var(--green)}.aff-stat.as-str{background:var(--amber-light);color:var(--amber)}.aff-stat.as-oor{background:var(--red-light);color:var(--red)}
.lot-bullets{list-style:none;padding:0;margin:0}.lot-bullets li{font-size:.82rem;color:var(--text2);padding:2px 0 2px 14px;position:relative}
.lot-bullets li::before{content:'›';position:absolute;left:0;color:var(--text4)}
.lot-link{margin-top:0}.lot-link a{font-size:.82rem;color:var(--green);font-weight:600}
.lot-actions{display:flex;align-items:center;gap:12px;margin-top:10px;flex-wrap:wrap}
.bm-btn{display:inline-flex;align-items:center;gap:4px;font-size:.78rem;font-weight:700;color:var(--white);background:var(--green);padding:6px 14px;border-radius:var(--radius-sm);text-decoration:none!important;transition:all .15s;white-space:nowrap}
.bm-btn:hover{background:var(--green2);text-decoration:none!important;transform:translateY(-1px);box-shadow:0 2px 6px rgba(46,125,50,.2)}

/* Enrich panel */
.enrich-panel{margin-top:10px;padding:10px 14px;background:var(--surface2);border-radius:var(--radius-sm);font-size:.82rem}
.enrich-item{display:flex;justify-content:space-between;align-items:center;padding:3px 0}
.enrich-label{color:var(--text3);font-size:.78rem}.enrich-value{font-weight:600}
.enrich-good{color:var(--green)}.enrich-warn{color:var(--red)}.enrich-neutral{color:var(--text2)}

/* Deal Analysis toggle */
.tb-toggle{display:flex;align-items:center;gap:6px;cursor:pointer;font-size:.82rem;white-space:nowrap;padding:6px 10px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--white);transition:all .15s}
.tb-toggle:has(input:checked){background:var(--green-light);border-color:var(--green)}
.tb-toggle input{display:none}
.tb-toggle-label{font-weight:600;color:var(--text2)}
.tb-toggle:has(input:checked) .tb-toggle-label{color:var(--green)}

/* Deal Analysis panel */
.deal-panel{margin-top:10px;padding:14px 16px;background:linear-gradient(135deg,var(--green-pale),var(--surface2));border:1px solid var(--border);border-radius:var(--radius-sm)}
.deal-header{font-size:.8rem;font-weight:700;color:var(--navy);margin-bottom:10px;display:flex;align-items:center;gap:6px}
.deal-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.deal-item{padding:8px 10px;background:var(--white);border-radius:6px;border:1px solid var(--border)}
.deal-item .dl{font-size:.7rem;color:var(--text3);text-transform:uppercase;letter-spacing:.03em}
.deal-item .dv{font-family:var(--font-mono);font-size:.92rem;font-weight:700;margin-top:2px}
.deal-item .dv.pos{color:var(--green)}.deal-item .dv.neg{color:var(--red)}.deal-item .dv.neu{color:var(--text2)}
.deal-note{font-size:.75rem;color:var(--text3);margin-top:8px;font-style:italic}
.deal-full{grid-column:1/-1}
.street-sales{margin-top:6px;font-size:.78rem}
.street-sales summary{cursor:pointer;color:var(--text3);font-weight:500}
.ss-list{margin-top:4px}.ss-row{display:flex;gap:8px;padding:2px 0;color:var(--text2)}
.ss-addr{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ss-price{font-weight:600;color:var(--text)}.ss-date{color:var(--text4)}.ss-type{color:var(--text4);font-size:.72rem}

/* ── PROGRESS ── */
#progressPanel{display:none;margin-bottom:20px}
.prog-box{background:var(--tech);border-radius:var(--radius);padding:18px;color:rgba(255,255,255,.9)}
.p-status{font-weight:700;font-size:.9rem;margin-bottom:10px}
.p-track{height:4px;background:rgba(255,255,255,.1);border-radius:2px;overflow:hidden;margin-bottom:12px}
.p-fill{height:100%;background:var(--green);border-radius:2px;width:0;transition:width .4s}
.log-box{font-family:var(--font-mono);font-size:.72rem;color:rgba(255,255,255,.5);max-height:100px;overflow-y:auto}
.log-box .ok{color:var(--green)}.log-box .err{color:var(--red)}

/* ── SECTION HEADERS ── */
.sh{margin:32px 0 16px}.sh h2{font-family:var(--font-main);font-size:1.3rem;font-weight:700;color:var(--navy);margin-bottom:4px}
.sh p{color:var(--text2);font-size:.88rem}

/* ── CALENDAR ── */
.house-filters{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:16px}
.hf{padding:6px 14px;border-radius:20px;border:1px solid var(--border);background:var(--white);font-size:.78rem;font-weight:600;color:var(--text3);cursor:pointer;font-family:inherit;transition:all .12s}
.hf:hover{border-color:var(--green);color:var(--green)}.hf.active{background:var(--green);color:var(--white);border-color:var(--green)}
.cal-grid{display:flex;flex-direction:column;gap:8px}
.cal-card{background:var(--white);border:1px solid var(--border);border-radius:var(--radius);padding:16px;display:grid;grid-template-columns:56px 1fr auto;gap:16px;align-items:center;transition:border-color .15s}
.cal-card:hover{border-color:var(--border2)}
.cal-date{text-align:center}.cal-date .day{font-family:var(--font-mono);font-size:1.5rem;font-weight:700;color:var(--navy);line-height:1}.cal-date .mon{font-size:.7rem;color:var(--text3);text-transform:uppercase;letter-spacing:.05em;font-weight:700}
.cal-info h3{font-size:.92rem;font-weight:700;margin-bottom:2px}
.cal-info .meta{font-size:.78rem;color:var(--text3);display:flex;flex-wrap:wrap;gap:8px}.cal-info .meta span::before{content:'·';margin-right:8px;color:var(--border2)}.cal-info .meta span:first-child::before{display:none}
.cal-actions{display:flex;gap:6px;flex-wrap:wrap}
.cal-btn{padding:7px 16px;border-radius:var(--radius-sm);font-size:.8rem;font-weight:700;cursor:pointer;font-family:inherit;border:none;transition:all .12s}
.cal-btn.primary{background:var(--green);color:var(--white)}.cal-btn.primary:hover{background:var(--green2)}
.cal-btn.ghost{background:var(--surface2);color:var(--text2);border:1px solid var(--border)}.cal-btn.ghost:hover{border-color:var(--green);color:var(--green)}

/* ── SIGNUP MODAL ── */
.modal-bg{position:fixed;top:0;left:0;right:0;bottom:0;width:100%;height:100%;background:rgba(0,0,0,.65);z-index:200;display:flex;align-items:center;justify-content:center;opacity:0;visibility:hidden;transition:all .2s;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.modal-bg.show{opacity:1;visibility:visible}
.modal{background:var(--white);border-radius:var(--radius);padding:32px;max-width:400px;width:90%;text-align:center;box-shadow:0 20px 60px rgba(0,0,0,.12)}
.modal-icon{font-size:2rem;margin-bottom:10px}
.modal h2{font-family:var(--font-main);font-size:1.3rem;font-weight:700;color:var(--navy);margin-bottom:6px}
.modal p{color:var(--text2);font-size:.88rem;margin-bottom:20px}
/* ── 3-tier paywall modal ── */
.modal.pw-modal{position:relative;max-width:760px;padding:30px 26px;text-align:left}
.pw-modal #paywallTitle{text-align:center;font-size:1.4rem;margin-bottom:6px;color:var(--navy)}
.pw-modal .pw-reason{text-align:center;color:var(--text2);font-size:.9rem;margin:0 auto 22px;max-width:520px}
.pw-tiers{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.pw-tier{background:var(--bg-primary,#f5f7fa);border:1px solid var(--border);border-radius:12px;padding:22px 18px 18px;position:relative;display:flex;flex-direction:column}
.pw-tier h3{margin:0 0 10px;font-size:1rem;font-weight:700;color:var(--navy)}
.pw-tier-label{position:absolute;top:10px;right:10px;font-size:.62rem;font-weight:700;text-transform:uppercase;color:var(--text4);letter-spacing:.05em}
.pw-tier-featured{background:#fff;border-color:var(--accent);box-shadow:0 6px 22px rgba(0,0,0,.08)}
.pw-tier-featured .pw-badge{position:absolute;top:-11px;left:50%;transform:translateX(-50%);background:var(--accent);color:#fff;font-size:.62rem;font-weight:700;padding:5px 12px;border-radius:99px;letter-spacing:.05em;white-space:nowrap}
.pw-price{display:flex;align-items:baseline;gap:6px;margin-bottom:14px}
.pw-amt{font-size:1.7rem;font-weight:800;color:var(--navy);font-family:var(--font-main)}
.pw-price-sub{font-size:.78rem;color:var(--text4);font-weight:500}
.pw-features{list-style:none;padding:0;margin:0 0 16px;font-size:.82rem;color:var(--text2);flex:1}
.pw-features li{padding:5px 0 5px 22px;position:relative;line-height:1.45}
.pw-features li::before{content:'\2713';position:absolute;left:0;top:5px;color:var(--green);font-weight:700}
.pw-btn{width:100%;padding:11px 12px;border-radius:8px;border:none;cursor:pointer;font-size:.85rem;font-weight:600;font-family:var(--font-main);transition:filter .15s,background .15s}
.pw-btn:hover{filter:brightness(.95)}
.pw-btn-primary{background:var(--accent);color:#fff}
.pw-btn-secondary{background:var(--navy);color:#fff}
.pw-btn-ghost{background:transparent;color:var(--text4);border:1px solid var(--border)}
.pw-btn-ghost:hover{background:var(--cream);color:var(--text2)}
.pw-fine-print{text-align:center;font-size:.7rem;color:var(--text4);margin:18px 0 0}
.pw-close{position:absolute;top:12px;right:12px;background:transparent;border:none;font-size:1.6rem;line-height:1;color:var(--text4);cursor:pointer;padding:4px 10px;font-weight:300}
.pw-close:hover{color:var(--text)}
@media (max-width:720px){
  .modal.pw-modal{max-width:calc(100vw - 24px);padding:24px 16px 18px}
  .pw-modal #paywallTitle{font-size:1.2rem}
  .pw-tiers{grid-template-columns:1fr;gap:10px}
  .pw-tier{padding:18px 16px 14px}
  .pw-tier-featured .pw-badge{top:-9px}
}
.paywall-features{text-align:left;font-size:.82rem;line-height:1.9;margin:12px 0;padding-left:6px;list-style:none}
.paywall-features li::before{content:'✓ ';color:var(--accent);font-weight:700}
.paywall-free-note{font-size:.78rem;color:var(--text3);background:#f5f7fa;border-radius:8px;padding:8px 12px;margin-top:10px}
.pro-badge{display:inline-block;background:var(--accent);color:white;font-size:.65rem;font-weight:700;padding:2px 7px;border-radius:10px;margin-left:6px;vertical-align:middle;letter-spacing:.5px}
.pro-badge.trial-badge{background:var(--accent-warn, #e67e22)}
.trial-banner{position:fixed;top:0;left:0;right:0;z-index:9999;background:linear-gradient(90deg,#e67e22,#f39c12);color:white;text-align:center;padding:8px 16px;font-size:.82rem;font-weight:600;display:flex;align-items:center;justify-content:center;gap:12px}
.trial-banner button{background:white;color:#e67e22;border:none;border-radius:6px;padding:4px 14px;font-weight:700;font-size:.78rem;cursor:pointer}
.search-counter{font-size:.78rem;color:var(--text3);margin-top:6px;text-align:center}
.scan-counter{font-size:.78rem;color:var(--text3);margin-top:8px}
.modal input[type="email"],.modal input[type="text"],.modal input[type="password"]{width:100%;background:var(--surface2);border:1px solid var(--border);border-radius:var(--radius-sm);padding:13px 16px;color:var(--text);font-size:.9rem;outline:0;margin-bottom:10px;font-family:inherit}
.modal input[type="email"]:focus,.modal input[type="text"]:focus,.modal input[type="password"]:focus{border-color:var(--green)}
.modal input::placeholder{color:var(--text4)}
.modal input[type="checkbox"]{width:auto}
.modal-note{font-size:.75rem;color:var(--text4);margin-top:12px}

/* ── BRIDGING-QUOTE LEAD-CAPTURE MODAL (lead-out funnel) ── */
.bq-modal .modal{max-width:460px;text-align:left;position:relative}
.bq-summary{background:var(--surface2);border:1px solid var(--border);border-radius:var(--radius-sm);padding:10px 14px;margin:0 0 16px}
.bq-summary-row{display:flex;justify-content:space-between;gap:14px;font-size:.82rem;padding:4px 0}
.bq-summary-row .k{color:var(--text2);flex:0 0 auto}
.bq-summary-row .v{color:var(--text);font-weight:600;text-align:right}
.bq-field-label{display:block;font-size:.78rem;color:var(--text2);font-weight:600;margin:8px 0 3px}
.bq-consent{display:flex;gap:8px;align-items:flex-start;font-size:.78rem;color:var(--text2);margin:12px 0 4px;line-height:1.4}
.bq-consent input{margin-top:2px}
.bq-status{font-size:.82rem;margin-top:10px;min-height:1.1em}
.bq-status.err{color:var(--red,#c0392b)}
.bq-status.ok{color:var(--green,#166534)}

/* ── USER BAR ── */
.user-bar{display:none}
.nav-account{position:relative}
.account-dropdown{display:none;position:absolute;top:calc(100% + 8px);right:0;background:var(--white);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 8px 24px rgba(0,0,0,.12);min-width:240px;z-index:1000;padding:6px 0;animation:acctFadeIn .15s ease}
.account-dropdown.show{display:block}
@keyframes acctFadeIn{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}
.acct-header{padding:12px 16px}
.acct-email{display:block;font-size:.85rem;font-weight:600;color:var(--navy);word-break:break-all}
.acct-tier{display:inline-block;margin-top:4px;font-size:.72rem;font-weight:700;padding:2px 8px;border-radius:10px;background:var(--cream);color:var(--text3)}
.acct-tier.pro{background:var(--green-light);color:var(--green)}
.acct-divider{height:1px;background:var(--border);margin:4px 0}
.acct-item{display:block;padding:10px 16px;font-size:.85rem;color:var(--text1);cursor:pointer;transition:background .1s;text-decoration:none}
.acct-item:hover{background:var(--cream)}
.acct-signout{color:var(--red)}

/* ── FOOTER ── */
footer{text-align:center;padding:40px 0 24px;color:var(--text4);font-size:.78rem;border-top:1px solid var(--border);margin-top:44px}
footer .logo-f{font-family:var(--font-main);font-size:1rem;font-weight:700;color:var(--text3);margin-bottom:4px}
footer .logo-f span{color:var(--green)}

/* ── HOW IT WORKS ── */
.how-section{padding:32px 0 24px;text-align:center}
.section-label{font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.12em;color:var(--green);margin-bottom:12px;display:flex;align-items:center;justify-content:center;gap:8px}
.section-label::before,.section-label::after{content:'';width:24px;height:1px;background:var(--green);opacity:.4}
.section-heading{font-family:var(--font-main);font-size:clamp(1.2rem,2.5vw,1.5rem);font-weight:700;color:var(--navy);margin-bottom:24px;line-height:1.2}
.steps{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;position:relative}
.steps::before{content:'';position:absolute;top:44px;left:calc(16.67% + 20px);right:calc(16.67% + 20px);height:2px;background:linear-gradient(90deg,var(--border),var(--green),var(--border));opacity:.4;z-index:0}
.step{display:flex;flex-direction:column;align-items:center;text-align:center;background:var(--white);border:1px solid var(--border);border-radius:12px;padding:20px 16px 18px;transition:all .25s;position:relative;z-index:1}
.step:hover{box-shadow:0 8px 32px rgba(0,0,0,.08);transform:translateY(-4px)}
.step.highlight{background:linear-gradient(180deg,#f0faf4,var(--white));border:1px solid rgba(46,125,50,0.2);box-shadow:0 4px 20px rgba(46,125,50,.08)}
.step.highlight .step-content p{font-weight:500}
.step-num{flex-shrink:0;width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-family:var(--font-mono);font-size:.9rem;font-weight:700;background:var(--cream);color:var(--text2);margin-bottom:10px;box-shadow:0 2px 8px rgba(0,0,0,.06)}
.step-num.green{background:linear-gradient(135deg,var(--green),var(--green2));color:var(--white);box-shadow:0 4px 12px rgba(46,125,50,.25)}
.step-icon{font-size:1.6rem;margin-bottom:8px}
.step-content h3{font-family:var(--font-main);font-size:1rem;font-weight:700;color:var(--navy);margin-bottom:6px}
.step-content p{font-size:.85rem;color:var(--text2);line-height:1.6;font-weight:400}
.view-results .how-section{display:none}

/* ── LANDING STATS BAR ── */
.landing-stats{background:linear-gradient(135deg,#1a2332 0%,#1e3a4f 50%,#1a2332 100%);padding:28px 24px;margin:0 -24px;position:relative;overflow:hidden}
.landing-stats::before{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background:url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.02'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E")}
.landing-stats-inner{max-width:900px;margin:0 auto;display:grid;grid-template-columns:repeat(4,1fr);gap:16px}
.ls-stat{text-align:center;padding:10px;border-radius:10px;background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.06);transition:all .2s}
.ls-stat:hover{background:rgba(255,255,255,.07);transform:translateY(-2px)}
.ls-val{font-family:var(--font-mono);font-size:clamp(1.4rem,3vw,1.8rem);font-weight:700;color:var(--red-text-dark);line-height:1;text-shadow:0 0 30px rgba(231,76,60,.2)}
.ls-label{font-size:.82rem;color:rgba(255,255,255,.55);margin-top:8px;font-family:var(--font-main);font-weight:500;text-transform:uppercase;letter-spacing:.05em;font-size:.7rem}
.view-results .landing-stats{display:none}

/* ── TWO TOOLS ── */
.two-tools{padding:32px 0 24px;text-align:center}
.tools-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px}
.tool-card{background:var(--white);border:1px solid var(--border);border-radius:12px;padding:24px 20px;text-align:left;position:relative;overflow:hidden;transition:all .25s}
.tool-card:hover{box-shadow:0 12px 40px rgba(0,0,0,.08);transform:translateY(-4px)}
.tool-card::before{content:'';position:absolute;top:0;left:0;right:0;height:4px}
.tool-ab::before{background:linear-gradient(90deg,var(--green),#4ade80)}
.tool-bm::before{background:linear-gradient(90deg,var(--navy-accent),#3b82f6)}
.tool-card::after{content:'';position:absolute;top:-50%;right:-30%;width:200px;height:200px;border-radius:50%;opacity:.04;pointer-events:none}
.tool-ab::after{background:var(--green)}
.tool-bm::after{background:var(--navy-accent)}
.tool-emoji-wrap{width:52px;height:52px;border-radius:14px;display:flex;align-items:center;justify-content:center;font-size:1.6rem;margin-bottom:16px}
.tool-ab .tool-emoji-wrap{background:var(--green-light)}
.tool-bm .tool-emoji-wrap{background:#eef4ff}
.tool-card h3{font-family:var(--font-main);font-size:1.1rem;font-weight:700;color:var(--navy);margin-bottom:8px}
.tool-card p{font-size:.88rem;color:var(--text2);line-height:1.6}
.tool-features{list-style:none;margin-top:12px;padding:0}
.tool-features li{font-size:.82rem;color:var(--text2);padding:3px 0;display:flex;align-items:center;gap:6px}
.tool-features li::before{content:'✓';color:var(--green);font-weight:700;font-size:.7rem}
.view-results .two-tools{display:none}

/* ── BOTTOM CTA ── */
.bottom-cta{text-align:center;padding:36px 24px;margin:0 -24px;background:linear-gradient(160deg,var(--navy) 0%,#1e3a4f 60%,#1a3a3a 100%);position:relative;overflow:hidden}
.bottom-cta::before{content:'';position:absolute;top:-100px;right:-100px;width:300px;height:300px;border-radius:50%;background:radial-gradient(circle,rgba(46,125,50,.15),transparent 70%);pointer-events:none}
.bottom-cta::after{content:'';position:absolute;bottom:-80px;left:-60px;width:250px;height:250px;border-radius:50%;background:radial-gradient(circle,rgba(59,130,246,.1),transparent 70%);pointer-events:none}
.bottom-cta h2{font-family:var(--font-main);font-size:clamp(1.2rem,2.5vw,1.5rem);font-weight:700;color:var(--white);margin-bottom:8px;position:relative}
.bottom-cta p{font-size:.88rem;color:rgba(255,255,255,.65);margin-bottom:16px;max-width:480px;margin-left:auto;margin-right:auto;line-height:1.5;position:relative}
.bottom-cta .cta-primary{font-size:.9rem;padding:12px 28px;position:relative}
.view-results .bottom-cta{display:none}

/* ── Budget calculator modal ── */
.budget-calc-modal .modal{max-width:480px}
.bc-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:16px}
.bc-grid label{font-size:.78rem;color:var(--text2);display:block;margin-bottom:3px}
.bc-grid input,.bc-grid select{width:100%;padding:8px 10px;border:1px solid var(--border);border-radius:var(--radius-sm);font-size:.88rem;font-family:var(--font-main);box-sizing:border-box}
.bc-grid .bc-full{grid-column:span 2}
.bc-results{background:var(--surface2);border-radius:10px;padding:14px 16px;margin-top:12px}
.bc-row{display:flex;justify-content:space-between;padding:4px 0;font-size:.84rem}
.bc-row.bc-total{border-top:2px solid var(--border);margin-top:8px;padding-top:8px;font-weight:700;font-size:.95rem}
.bc-row .bc-label{color:var(--text2)}
.bc-row .bc-val{font-weight:600;color:var(--text)}
.bc-row.bc-total .bc-val{color:var(--accent)}
.bc-verdict{margin-top:12px;padding:10px 12px;border-radius:8px;font-size:.82rem;font-weight:500}

/* ── EMAIL CAPTURE ── */
.email-capture{text-align:center;padding:44px 24px;margin:0 -24px;background:var(--surface2);border-top:1px solid var(--border);border-bottom:1px solid var(--border);position:relative}
.email-capture h2{font-family:var(--font-main);font-size:clamp(1.1rem,2.5vw,1.4rem);font-weight:700;color:var(--navy);margin-bottom:6px}
.email-capture .ec-sub{font-size:.88rem;color:var(--text2);margin-bottom:20px;max-width:440px;margin-left:auto;margin-right:auto;line-height:1.5}
.ec-form{display:flex;gap:8px;max-width:520px;margin:0 auto;flex-wrap:wrap;justify-content:center}
.ec-form input{flex:1;min-width:140px;padding:11px 14px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--white);font-size:.88rem;font-family:inherit;color:var(--text);outline:0;transition:border-color .15s}
.ec-form input:focus{border-color:var(--green);box-shadow:0 0 0 3px rgba(46,125,50,.08)}
.ec-form input::placeholder{color:var(--text4)}
.ec-form button{padding:11px 24px;border-radius:var(--radius-sm);font-size:.88rem;font-weight:700;color:var(--white);background:var(--green);border:none;cursor:pointer;font-family:inherit;transition:all .15s;white-space:nowrap}
.ec-form button:hover{background:var(--green2)}
.ec-form button:disabled{opacity:.5;cursor:not-allowed}
.ec-success{display:none;font-size:.9rem;color:var(--green);font-weight:600;padding:14px;background:var(--green-light);border-radius:var(--radius-sm);max-width:520px;margin:0 auto}
.ec-error{display:none;font-size:.82rem;color:var(--red);margin-top:8px}
.ec-note{font-size:.72rem;color:var(--text4);margin-top:12px}
.view-results .email-capture{display:none}

/* ── VIEW TOGGLE ── */
.view-toggle{display:flex;gap:2px;background:var(--surface2);border-radius:6px;padding:2px;border:1px solid var(--border)}
.view-toggle button{background:none;border:none;padding:5px 8px;border-radius:4px;cursor:pointer;color:var(--text3);transition:all .12s;display:flex;align-items:center}
.view-toggle button.active{background:var(--white);color:var(--green);box-shadow:0 1px 3px rgba(0,0,0,.1)}
.view-toggle button:hover:not(.active){color:var(--text)}
.view-toggle svg{width:16px;height:16px}

/* ── LOTS GRID ── */
.lots-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:16px;padding:0}
.lots-grid .section-divider{grid-column:1/-1}

/* ── LIST VIEW ── */
.lots-grid.list-view{grid-template-columns:1fr;gap:8px}
.lots-grid.list-view .lot-card{display:grid;grid-template-columns:180px 1fr auto;grid-template-rows:auto;overflow:hidden}
.lots-grid.list-view .card-image-wrapper{height:100%;min-height:120px;max-height:140px}
.lots-grid.list-view .card-body{padding:10px 14px;display:flex;flex-direction:column;justify-content:center}
.lots-grid.list-view .card-row1{margin-bottom:2px}
.lots-grid.list-view .card-chips{margin-top:4px}
.lots-grid.list-view .card-footer{display:flex;flex-direction:column;align-items:flex-end;justify-content:center;padding:10px 14px;gap:8px}
.lots-grid.list-view .card-details{margin-top:2px}
.btn-page{padding:4px 10px;border-radius:6px;border:1px solid var(--border);background:var(--surface2);color:var(--text);font-size:.8rem;font-family:inherit;cursor:pointer;transition:all .12s}
.btn-page:hover:not(.disabled):not(.active){background:var(--surface3);border-color:var(--green)}
.btn-page.active{background:var(--green);color:var(--white);border-color:var(--green)}
.btn-page.disabled{opacity:.4;cursor:default}

/* ── PHOTO LOT CARD ── */
.lot-card{background:var(--white);border:1px solid #d5dde5;border-radius:var(--radius);overflow:hidden;transition:all .15s ease;cursor:pointer}
.lot-card:hover{box-shadow:0 4px 20px rgba(26,42,58,0.12);transform:translateY(-2px)}
.lot-card.blurred .card-body{filter:blur(6px);pointer-events:none;user-select:none}
.lot-card.blurred .card-footer .card-view-link{display:none}
.lot-card.blurred{position:relative}
.lot-card.blurred::after{content:attr(data-blur-text);position:absolute;bottom:44px;left:0;right:0;background:linear-gradient(transparent,rgba(255,255,255,.95) 40%);padding:32px 16px 4px;text-align:center;font-weight:600;font-size:.8rem;color:var(--accent);pointer-events:none;z-index:1}
.card-image-wrapper{position:relative;height:200px;width:100%;overflow:hidden;background:#eef2f7}
.card-image{width:100%;height:100%;object-fit:cover;object-position:center;display:block}
.lot-status-overlay{position:absolute;top:0;left:0;right:0;bottom:0;display:flex;align-items:center;justify-content:center;z-index:2;pointer-events:none}
.lot-status-overlay::after{position:absolute;font-weight:700;font-size:1.1rem;letter-spacing:2px;padding:6px 60px;transform:rotate(-35deg);white-space:nowrap;color:#fff}
.lot-status-sold::after{content:'SOLD';background:rgba(195,57,43,0.85)}
.lot-status-stc::after{content:'SALE AGREED';background:rgba(230,126,34,0.85)}
.lot-status-withdrawn::after{content:'WITHDRAWN';background:rgba(127,140,141,0.85)}
.lot-status-unsold::after{content:'UNSOLD';background:rgba(142,68,173,0.85)}

/* ── Freshness / completeness / lender-match meta chips ── */
.freshness-row{display:flex;gap:4px;margin-top:4px;flex-wrap:wrap;font-size:.7rem}
.freshness-chip{padding:1px 6px;border-radius:10px;border:1px solid currentColor;opacity:.85;line-height:1.4;cursor:help}
.freshness-chip.fc-green{color:var(--accent)}
.freshness-chip.fc-amber{color:var(--accent-warn)}
.freshness-chip.fc-red{color:var(--accent-danger)}

/* ── Score breakdown popup ── */
.score-popup{position:absolute;bottom:calc(100% + 8px);right:0;z-index:50;background:var(--white);border:1px solid var(--border);border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.15);padding:12px 14px;min-width:200px;max-width:260px;font-size:.78rem;animation:fadeInUp .15s ease}
@keyframes fadeInUp{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}
.score-popup-title{font-weight:700;font-size:.82rem;margin-bottom:8px;color:var(--text);display:flex;justify-content:space-between;align-items:center}
.score-popup-row{display:flex;justify-content:space-between;align-items:center;padding:3px 0;gap:8px}
.score-popup-bar{flex:1;height:6px;background:var(--surface2);border-radius:3px;overflow:hidden;min-width:60px}
.score-popup-fill{height:100%;border-radius:3px;transition:width .2s}
.score-popup-label{color:var(--text);white-space:nowrap;flex-shrink:0;max-width:120px;overflow:hidden;text-overflow:ellipsis}
.score-popup-pts{font-weight:600;min-width:32px;text-align:right;flex-shrink:0}
.score-popup-total{border-top:1px solid var(--border);margin-top:6px;padding-top:6px;font-weight:700;display:flex;justify-content:space-between}
.score-popup-cat{font-size:.72rem;color:var(--text3);margin-bottom:4px}
.score-popup .close-x{background:none;border:none;font-size:1rem;cursor:pointer;color:var(--text3);padding:0 0 0 8px;line-height:1}
/* ── Score hover tooltip (lightweight preview) ── */
.score-tip{position:absolute;bottom:calc(100% + 6px);right:0;z-index:49;background:#1a2a3a;color:#fff;border-radius:8px;padding:6px 10px;font-size:.72rem;line-height:1.4;white-space:nowrap;pointer-events:none;box-shadow:0 4px 12px rgba(0,0,0,.15);animation:fadeInUp .12s ease;max-width:180px}
.score-tip::after{content:'';position:absolute;top:100%;right:12px;border:5px solid transparent;border-top-color:#1a2a3a}
.card-image-placeholder{height:100%;background:linear-gradient(135deg,#eef2f7 0%,#e4eaf2 50%,#dde5ef 100%);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px}
.card-image-placeholder svg{width:48px;height:48px;fill:#c0cad6;opacity:.7}
.card-image-placeholder .ph-label{font-size:.72rem;color:#a0aab4;font-weight:500;letter-spacing:.03em}
@keyframes shimmer{0%{background-position:-200% 0}100%{background-position:200% 0}}
.card-image-shimmer{position:absolute;inset:0;background:linear-gradient(90deg,#eef2f7 25%,#f5f7fa 50%,#eef2f7 75%);background-size:200% 100%;animation:shimmer 1.5s infinite}
.card-carousel{position:relative;width:100%;height:100%}
.card-carousel img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:0;transition:opacity 0.8s ease}
.card-carousel img.carousel-active{opacity:1}
.card-carousel .carousel-dots{position:absolute;bottom:6px;left:50%;transform:translateX(-50%);display:flex;gap:4px;z-index:2}
.card-carousel .carousel-dot{width:6px;height:6px;border-radius:50%;background:rgba(255,255,255,.5);transition:background .3s}
.card-carousel .carousel-dot.dot-active{background:#fff}
.exp-gallery{display:flex;flex-direction:column;gap:8px}
.exp-thumbs{display:flex;gap:6px;overflow-x:auto;padding:2px 0}
.exp-thumb{width:64px;height:48px;object-fit:cover;border-radius:4px;cursor:pointer;opacity:.6;transition:opacity .2s,border-color .2s;border:2px solid transparent}
.exp-thumb:hover,.exp-thumb-active{opacity:1;border-color:var(--accent)}
.skel-card{background:var(--white);border:1px solid #d5dde5;border-radius:var(--radius);overflow:hidden}
.skel-card .skel-img{height:200px;background:linear-gradient(90deg,#eef2f7 25%,#f5f7fa 50%,#eef2f7 75%);background-size:200% 100%;animation:shimmer 1.5s infinite}
.skel-card .skel-body{padding:16px;display:flex;flex-direction:column;gap:10px}
.skel-card .skel-line{height:14px;border-radius:4px;background:linear-gradient(90deg,#eef2f7 25%,#f5f7fa 50%,#eef2f7 75%);background-size:200% 100%;animation:shimmer 1.5s infinite}
.skel-card .skel-line.w80{width:80%}.skel-card .skel-line.w60{width:60%}.skel-card .skel-line.w40{width:40%}
.card-badge{position:absolute;border-radius:20px;padding:4px 10px;font-family:var(--font-main);font-size:11px;font-weight:600;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}
.badge-house{top:10px;left:10px;background:rgba(255,255,255,0.92);color:#1a2a3a;display:flex;align-items:center;gap:4px}
.badge-house-logo{width:16px;height:16px;border-radius:2px;flex-shrink:0}
.badge-dist{bottom:10px;left:10px;background:rgba(46,125,50,0.9);color:#fff;font-size:.65rem}
.badge-score{top:10px;right:10px;font-family:var(--font-main);font-weight:700;font-size:13px;border-radius:8px;padding:4px 10px}
.badge-score.high{background:rgba(192,57,43,0.9);color:#fff}
.badge-score.mid{background:rgba(230,126,34,0.9);color:#fff}
.badge-score.low{background:rgba(192,57,43,0.9);color:#fff}
.badge-vacant{position:absolute;bottom:10px;left:10px;background:rgba(192,57,43,0.85);color:#fff;font-size:10px;border-radius:20px;padding:3px 8px;font-family:var(--font-main)}
.badge-urgency{position:absolute;bottom:10px;right:10px;background:rgba(230,126,34,0.9);color:#fff;font-size:10px;font-weight:700;border-radius:20px;padding:3px 8px;font-family:var(--font-main)}
.badge-ended{position:absolute;bottom:10px;right:10px;background:rgba(120,120,120,0.85);color:#fff;font-size:10px;font-weight:700;border-radius:20px;padding:3px 8px;font-family:var(--font-main)}
/* Photo-count badge: "stay here, more inside" cue. Sits under badge-house. */
.badge-photos{top:42px;left:10px;background:rgba(26,26,24,0.78);color:#fff;font-size:10px;font-weight:600;border-radius:20px;padding:3px 8px;font-family:var(--font-main);letter-spacing:.02em}
.card-ended{opacity:0.72;position:relative;overflow:hidden}
.card-ended::after{content:'AUCTION ENDED';position:absolute;top:22px;right:-34px;background:rgba(192,57,43,0.88);color:#fff;font-size:9px;font-weight:900;font-family:var(--font-main);letter-spacing:1.5px;padding:4px 44px;transform:rotate(45deg);z-index:5;pointer-events:none}
.card-body{padding:14px 16px}
.card-row1{display:flex;justify-content:space-between;align-items:center}
.card-lot-info{font-family:var(--font-main);font-size:11px;color:#6b7c8d}
.card-price{font-family:var(--font-mono);font-weight:700;font-size:16px;color:var(--text)}
.card-address{font-family:var(--font-main);font-weight:600;font-size:15px;color:var(--text);margin-top:4px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.card-details{font-family:var(--font-main);font-size:12px;color:#6b7c8d;display:flex;flex-wrap:wrap;gap:6px;margin-top:6px;align-items:center}
.card-details .detail-pill{background:#eef2f7;padding:2px 8px;border-radius:12px}
.card-chips{display:flex;flex-wrap:wrap;gap:4px;margin-top:8px}
.chip{font-size:11px;font-family:var(--font-main);padding:3px 8px;border-radius:20px}
.chip-pos{background:var(--signal-pos-bg);color:var(--signal-pos)}
.chip-neg{background:#fdf0ee;color:#c0392b}
.chip-neu{background:#eef2f7;color:#6b7c8d}
.chip-more{background:#eef2f7;color:#6b7c8d;cursor:help}
.card-bullets{margin:6px 0 0;padding:0 0 0 14px;font-size:.75rem;color:var(--text2);line-height:1.45;list-style:disc outside}
.card-bullets li{margin-bottom:2px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.card-footer{border-top:1px solid #f0f2f5;padding:10px 16px;display:flex;justify-content:space-between;align-items:center}
.fundability-badge{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border-radius:999px;font-size:12px;font-weight:600;text-decoration:none;background:#dcfce7;color:#166534;border:1px solid #bbf7d0;transition:background .15s;cursor:pointer}
.fundability-badge:hover{background:#bbf7d0;text-decoration:none}
.fundability-badge.complex{background:#fef3c7;color:#92400e;border-color:#fde68a;cursor:default}
.fundability-badge.complex:hover{background:#fef3c7}
.card-view-link{font-family:var(--font-main);font-size:13px;color:var(--green);text-decoration:underline;text-underline-offset:2px}
.card-view-link:hover{color:var(--green2)}
.card-bm-btn{display:inline-flex;align-items:center;gap:4px;font-size:12px;font-weight:600;font-family:var(--font-main);color:#fff;background:var(--green);padding:7px 14px;border-radius:8px;border:none;cursor:pointer;text-decoration:none!important;transition:all .15s;white-space:nowrap}
.card-bm-btn:hover{background:var(--green2);transform:translateY(-1px);text-decoration:none!important}

/* ── EXPANDED CARD PANEL ── */
.expanded-panel{grid-column:1/-1;background:var(--white);border:1px solid #d5dde5;border-radius:0 0 var(--radius) var(--radius);padding:20px 24px;display:grid;grid-template-columns:1fr;gap:20px;animation:slideDown .25s ease;position:relative}
.exp-top{display:grid;grid-template-columns:60% 40%;gap:24px}
.exp-tools{display:grid;grid-template-columns:1fr;gap:10px}
.exp-tool-section{border:1px solid var(--border);border-radius:10px;overflow:hidden;background:var(--white)}
.exp-tool-summary{padding:12px 16px;font-family:var(--font-main);font-size:14px;font-weight:600;color:var(--text);cursor:pointer;background:var(--bg-card);list-style:none;display:flex;align-items:center;gap:8px;user-select:none}
.exp-tool-summary::-webkit-details-marker{display:none}
.exp-tool-summary::after{content:'\25B6';font-size:10px;margin-left:auto;transition:transform .2s;color:var(--text3)}
.exp-tool-section[open] .exp-tool-summary::after{transform:rotate(90deg)}
.exp-tool-badge{font-size:10px;font-weight:500;color:#2e86c1;margin-left:4px}
.exp-tools .finance-widget{border:none;border-radius:0;padding:14px 16px}
.exp-tools .deal-stack-widget{padding:14px 16px}
.ds-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:10px}
.ds-label{font-size:12px;color:var(--text-muted);display:block;margin-bottom:3px}
.ds-label-note{font-size:10px;font-weight:400;opacity:.7}
.ds-input{width:100%;padding:6px 8px;border:1px solid #ddd;border-radius:6px;font-size:13px;box-sizing:border-box;font-family:var(--font-main)}
.ds-options{display:flex;flex-wrap:wrap;gap:4px 16px;margin-bottom:10px}
.ds-check{font-size:12px;color:var(--text-muted);display:flex;align-items:center;gap:5px;cursor:pointer}
.ds-hint{font-size:10px;color:var(--text-muted);margin-top:3px;font-style:italic;opacity:.85}
.ds-btn{padding:6px 10px;border:1px solid var(--border,#ddd);background:var(--white,#fff);color:var(--text,#1a2a3a);border-radius:6px;font-size:12px;font-weight:600;cursor:pointer;font-family:inherit}
.ds-btn:hover{border-color:var(--accent);color:var(--accent)}
.ds-btn:disabled{opacity:.4;cursor:not-allowed}
.ds-btn-danger:not(:disabled):hover{border-color:var(--accent-danger,#c0392b);color:var(--accent-danger,#c0392b)}
.lot-card{position:relative}
.stacks-tick{position:absolute;top:8px;left:8px;width:34px;height:34px;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;font-size:18px;line-height:1;box-shadow:0 2px 6px rgba(0,0,0,0.15);z-index:3;pointer-events:none}
.exp-bottom{}
.exp-close-btn{position:absolute;top:10px;right:10px;width:32px;height:32px;border-radius:50%;border:1px solid var(--border);background:var(--white);color:var(--text2);font-size:1.1rem;cursor:pointer;display:flex;align-items:center;justify-content:center;z-index:5;transition:all .15s;line-height:1;padding:0;font-family:inherit;-webkit-tap-highlight-color:transparent;touch-action:manipulation}
.exp-close-btn:hover{background:var(--red-light);color:var(--red);border-color:var(--red)}
.coming-soon-label{display:inline-block;font-size:.65rem;font-weight:700;padding:2px 7px;border-radius:10px;background:var(--amber-light);color:var(--amber);margin-left:6px;vertical-align:middle;letter-spacing:.3px;text-transform:uppercase}
/* ── PREMIUM FEATURE SECTIONS ── */
.premium-feature{margin-top:12px;border:1px solid rgba(0,0,0,0.08);border-radius:10px;overflow:hidden}
.premium-feature summary{padding:10px 14px;font-family:var(--font-main);font-size:14px;font-weight:600;color:var(--text);cursor:pointer;background:var(--bg-card);list-style:none;display:flex;align-items:center;gap:8px}
.premium-feature summary::-webkit-details-marker{display:none}
.premium-feature summary::after{content:'\25B6';font-size:10px;margin-left:auto;transition:transform 0.2s}
.premium-feature[open] summary::after{transform:rotate(90deg)}
.premium-feature .pf-content{padding:12px 14px;font-size:13px;color:var(--text);border-top:1px solid rgba(0,0,0,0.06)}
.premium-feature .pf-blurred{position:relative;padding:12px 14px;border-top:1px solid rgba(0,0,0,0.06)}
.premium-feature .pf-blurred .pf-blur-content{filter:blur(4px);pointer-events:none;user-select:none}
.premium-feature .pf-blurred .pf-upgrade-cta{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;z-index:2;background:rgba(255,255,255,0.9);padding:16px 24px;border-radius:10px;box-shadow:0 2px 12px rgba(0,0,0,0.1)}
.premium-feature .pf-upgrade-cta button{margin-top:8px;padding:8px 20px;background:var(--accent);color:#fff;border:none;border-radius:6px;font-size:13px;font-weight:600;cursor:pointer}
.premium-feature .pf-upgrade-cta button:hover{background:var(--accent-hover)}
@keyframes slideDown{from{opacity:0;max-height:0}to{opacity:1;max-height:1000px}}
.expanded-panel .exp-left{}
.expanded-panel .exp-right{}
.exp-large-img{width:100%;max-height:280px;object-fit:cover;border-radius:8px}
.exp-large-img-placeholder{width:100%;height:180px;background:#eef2f7;border-radius:8px;display:flex;align-items:center;justify-content:center}
.exp-analysis{margin-top:16px;background:#f5f7fa;border-radius:8px;padding:14px 16px}
.exp-analysis-header{font-family:var(--font-main);font-weight:600;font-size:13px;color:#1a2a3a;margin-bottom:8px}
.exp-analysis-text{font-family:var(--font-main);font-size:14px;line-height:1.7;color:var(--text2)}
.exp-signals{margin-top:12px}
.exp-signal-row{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:13px;font-family:var(--font-main);color:var(--text2)}
.exp-signal-chip{font-family:var(--font-mono);font-size:11px;padding:2px 6px;border-radius:4px;font-weight:600}
.exp-bullets{list-style:none;padding:0;margin-top:12px}
.exp-bullets li{font-family:var(--font-main);font-size:13px;color:#1a2a3a;padding:4px 0 4px 12px;border-left:2px solid var(--border)}

/* ── FINANCE WIDGET ── */
.finance-widget{background:var(--white);border:1px solid #d5dde5;border-radius:var(--radius);padding:18px}
.fw-prefilled{margin-bottom:14px}
.fw-field{margin-bottom:8px}
.fw-field-label{font-size:10px;text-transform:uppercase;color:#6b7c8d;font-family:var(--font-main);letter-spacing:.03em}
.fw-field-value{font-family:var(--font-mono);font-size:14px;font-weight:500;color:#1a2a3a}
.fw-slider-row{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}
.fw-slider-label{font-family:var(--font-main);font-size:13px;color:#1a2a3a}
.fw-slider-value{font-family:var(--font-mono);font-weight:700;font-size:14px;color:#1a2a3a}
.fw-range{width:100%;accent-color:var(--green);margin-bottom:14px}
.fw-results{text-align:center;padding:16px 0}
.fw-count{font-family:var(--font-main);font-weight:700;font-size:36px;color:var(--green)}
.fw-count-label{font-family:var(--font-main);font-size:13px;color:#6b7c8d;margin-top:4px}
.fw-lenders{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;margin-top:10px}
.fw-lender-chip{background:var(--signal-pos-bg);color:var(--signal-pos);font-family:var(--font-main);font-size:11px;padding:3px 8px;border-radius:20px}
.fw-cta{display:block;width:100%;text-align:center;background:var(--navy);color:#fff;font-family:var(--font-main);font-weight:600;font-size:14px;padding:10px;border-radius:8px;border:none;cursor:pointer;text-decoration:none!important;margin-top:14px;transition:all .15s}
.fw-cta:hover{opacity:.9;text-decoration:none!important}
.fw-cta-label{text-align:center;font-size:12px;color:var(--text3);margin-top:14px;padding:8px}
.fw-loading{text-align:center;padding:20px 0}
@keyframes fwPulse{0%,100%{opacity:.4}50%{opacity:1}}
.fw-pulse{animation:fwPulse 1.2s ease infinite}
.fw-empty{font-family:var(--font-main);font-size:12px;color:#6b7c8d;text-align:center;padding:16px 0}
.fw-error{font-family:var(--font-main);font-size:12px;color:var(--red);text-align:center;padding:16px 0}

/* ── TOOLTIP SYSTEM ── */
[data-tip]{position:relative;cursor:help}
[data-tip]:hover::after{content:attr(data-tip);position:absolute;bottom:calc(100% + 6px);left:50%;transform:translateX(-50%);background:#1a2a3a;color:#fff;font-size:11px;font-family:var(--font-main);font-weight:400;line-height:1.4;padding:6px 10px;border-radius:6px;white-space:normal;width:max-content;max-width:220px;z-index:100;pointer-events:none;box-shadow:0 4px 12px rgba(0,0,0,.15);animation:fadeInUp .12s ease}
[data-tip]:hover::before{content:'';position:absolute;bottom:calc(100% + 2px);left:50%;transform:translateX(-50%);border:5px solid transparent;border-top-color:#1a2a3a;z-index:101;pointer-events:none}

/* ── PROPERTY DETAILS STRIP (expanded panel) ── */
.exp-prop-details{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.exp-prop-detail{display:flex;flex-direction:column;background:var(--surface2,#f0f2f5);border-radius:8px;padding:6px 12px;min-width:80px}
.exp-prop-detail .epd-label{font-size:10px;text-transform:uppercase;color:var(--text-muted,#6b7c8d);font-family:var(--font-main);letter-spacing:.03em}
.exp-prop-detail .epd-value{font-size:13px;font-weight:600;color:var(--text,#1a2a3a);font-family:var(--font-main)}
.exp-prop-detail.epd-gap .epd-value{color:var(--accent-warn,#e67e22);font-weight:500}

/* ── LENDER SUMMARY STRIP ── */
.lender-summary{display:flex;align-items:center;gap:10px;margin-top:12px;padding:10px 14px;background:linear-gradient(135deg,#f0f7ff,#e8f5ee);border-radius:8px;border:1px solid rgba(46,125,50,.15)}
.lender-summary .ls-count{font-family:var(--font-main);font-weight:700;font-size:20px;color:var(--green)}
.lender-summary .ls-text{font-family:var(--font-main);font-size:12px;color:var(--text2,#4a5568);line-height:1.3}
.lender-summary .ls-text strong{color:var(--text,#1a2a3a)}
.lender-summary .ls-loading{font-family:var(--font-main);font-size:12px;color:var(--text-muted);animation:fwPulse 1.2s ease infinite}

/* ── DATA GAP WARNING ── */
.data-gap-bar{display:flex;align-items:center;gap:6px;margin-top:8px;padding:6px 10px;background:#fef3e2;border-radius:6px;font-family:var(--font-main);font-size:11px;color:var(--accent-warn,#e67e22)}
.data-gap-bar .dgb-icon{flex-shrink:0}

/* ── SECTION HEADERS (grid) ── */
.section-divider{grid-column:1/-1;display:flex;align-items:center;gap:10px;padding:8px 0 4px;font-size:.78rem;color:var(--text3);font-family:var(--font-main);font-weight:600}
.section-divider::before,.section-divider::after{content:'';flex:1;height:1px;background:var(--border)}
.section-divider .sd-count{font-weight:400;color:var(--text4);font-size:.72rem}

/* ── FILTER BAR (sticky) ── */
.tb-select.active-filter{border-color:var(--green);color:var(--green)}

/* House dropdown popover */
.house-dropdown{position:relative;display:inline-block}
.house-dropdown-btn{padding:8px 14px;border-radius:8px;border:1px solid var(--border);background:var(--white);font-size:.84rem;min-height:40px;color:var(--text);font-family:inherit;cursor:pointer;white-space:nowrap;display:flex;align-items:center;gap:4px}
.house-dropdown-btn.active-filter{border-color:var(--green);color:var(--green)}
.house-dropdown-btn::after{content:'▾';font-size:.7rem;color:var(--text3)}
.house-popover{display:none;position:absolute;top:100%;left:0;margin-top:4px;background:var(--white);border:1px solid var(--border);border-radius:var(--radius-sm);box-shadow:0 4px 16px rgba(0,0,0,.1);z-index:100;min-width:240px;max-height:320px;overflow-y:auto}
.house-popover.open{display:block}
.house-popover-search{width:100%;padding:8px 10px;border:none;border-bottom:1px solid var(--border);font-size:.82rem;font-family:inherit;outline:none;background:var(--surface2)}
.house-popover label{display:flex;align-items:center;gap:8px;padding:6px 10px;font-size:.82rem;cursor:pointer;transition:background .1s}
.house-popover label:hover{background:var(--surface2)}
.house-popover label.all-label{font-weight:700;border-bottom:1px solid var(--border);padding:8px 10px}
.house-popover input[type="checkbox"]{accent-color:var(--green);width:14px;height:14px}
.house-popover .house-count{color:var(--text4);font-size:.75rem;margin-left:auto}

/* ── RESPONSIVE ── */
@media(max-width:1024px){
  .lots-grid{grid-template-columns:repeat(2,1fr)}
}
@media(max-width:768px){
  .hero h1{font-size:1.8rem}
  .unified-bar{gap:4px 6px}
  .unified-bar .tb-select,.unified-bar .tb-search{font-size:.76rem;padding:6px 8px;min-height:40px}
  .sp-search-row{flex-wrap:wrap}
  .sp-ai-group{min-width:160px}
  .sp-filter-row{gap:6px 8px}
  .sp-filter-row .tb-select,.sp-filter-row .tb-search{font-size:.78rem;padding:6px 10px;min-height:36px}
  .sp-secondary .tb-select,.sp-secondary .tb-search{font-size:.74rem;padding:5px 8px;min-height:32px}
  .stats-grid{grid-template-columns:1fr 1fr}
  .budget-row{grid-template-columns:1fr}
  .fp-row{grid-template-columns:1fr}
  .fp-ts-row{flex-direction:column;align-items:flex-start}
  .cal-card{grid-template-columns:48px 1fr;gap:12px}
  .cal-actions{grid-column:1/-1}
  .toolbar{flex-direction:column;align-items:stretch}
  .result-header{flex-direction:column;align-items:flex-start}
  .deal-grid{grid-template-columns:1fr 1fr}
  .oc-text{min-width:0}
  .scan-steps{gap:12px}
  .expanded-panel{grid-template-columns:1fr}
  .exp-top{grid-template-columns:1fr}
  .exp-tools{grid-template-columns:1fr}
}
@media(max-width:640px){
  .lots-grid{grid-template-columns:1fr}
  .lots-grid.list-view .lot-card{grid-template-columns:120px 1fr;grid-template-rows:auto auto}
  .lots-grid.list-view .card-footer{grid-column:1/-1;flex-direction:row;padding:6px 14px}
  .tools-grid{grid-template-columns:1fr}
  .landing-stats-inner{grid-template-columns:repeat(2,1fr);gap:16px}
  .hero-ctas{flex-direction:column;align-items:center}
  .cta-primary,.cta-secondary{width:100%;justify-content:center}
  .unified-bar{gap:4px}
  .sp-search-row{flex-direction:column;gap:6px}
  .sp-ai-group{width:100%}
  .sp-page-info{text-align:center;width:100%}
  .steps{grid-template-columns:1fr}
  .steps::before{display:none}
  .step{flex-direction:column;gap:12px;text-align:center;align-items:center}
}
@media(max-width:480px){
  .wrap{padding:0 14px}
  .nav-inner{padding:0 14px;height:48px}
  .logo{font-size:1.15rem}
  .nav-cta{padding:6px 12px;font-size:.78rem;max-width:140px}
  .nav-link-bm{padding:6px 10px;font-size:.75rem}
  .hero{padding:32px 0 24px}
  .hero h1{font-size:1.5rem}
  .hero-sub{font-size:.88rem;margin-bottom:20px}
  .search-panel{padding:0}
  .sp-search-row{padding:10px 12px}
  .sp-filter-row{padding:8px 12px}
  .sp-secondary{padding:5px 12px}
  .chip-row{padding:8px 12px}
  .search-input{padding:11px 14px;font-size:.88rem}
  .filters{grid-template-columns:1fr 1fr;gap:8px}
  .filter-field select,.filter-field input{padding:9px 10px;font-size:.82rem}
  .stats-grid{grid-template-columns:repeat(3,1fr);gap:6px}
  .stat-card{padding:10px 6px}
  .stat-card .v{font-size:1.1rem}
  .cal-card{grid-template-columns:1fr;gap:8px;padding:14px}
  .cal-date{display:flex;align-items:center;gap:8px}
  .cal-date .day{font-size:1.2rem}
  .modal{padding:24px 18px}
  .deal-grid{grid-template-columns:1fr}
  .oc-inner{padding:14px;gap:8px}
  .oc-text{min-width:0}
  .oc-input-row{flex-direction:column}
  .scan-steps{gap:8px;font-size:.75rem}
  .scan-title{font-size:1rem}
  .tb-search{min-width:0}
  .landing-stats{margin:0 -14px;padding:32px 14px}
  .card-image-wrapper{height:160px}
  .price-pop.open{left:auto;right:0;min-width:220px;max-width:calc(100vw - 28px)}
  .how-section,.two-tools,.bottom-cta,.email-capture{padding:24px 14px}
  .ec-form{flex-direction:column}
  .ec-form input{min-width:0}
  /* HIGH-14: WCAG 44px minimum touch targets on mobile */
  button,.chip,.filter-field select,.filter-field input,.nav-cta,.nav-link-bm,
  .sp-ai-group button,.preset-btn,.view-toggle-btn,.stat-card,
  input[type="checkbox"],input[type="radio"]{min-height:44px}
  input[type="checkbox"],input[type="radio"]{min-width:44px;min-height:44px}
  .chip{padding:10px 14px}
}
@media(max-width:360px){
  .nav-inner{padding:0 10px;gap:6px}
  .nav-link-bm{padding:5px 8px;font-size:.7rem}
  .nav-cta{padding:5px 10px;font-size:.72rem;max-width:110px}
  .logo{font-size:1.05rem}
  .filters{grid-template-columns:1fr}
  .stats-grid{grid-template-columns:1fr 1fr;gap:4px}
  .hero h1{font-size:1.3rem}
  .hero h1 br{display:none}
  .landing-stats-inner{grid-template-columns:repeat(2,1fr);gap:12px}
}

.hero{animation:none}

/* ── OWN CATALOGUE ── */
.own-catalogue{margin-bottom:24px}
.oc-inner{background:var(--white);border:2px dashed var(--border);border-radius:var(--radius);padding:20px 24px;display:flex;flex-wrap:wrap;gap:12px;align-items:center}
.oc-icon{font-size:1.6rem}
.oc-text{flex:1;min-width:200px}.oc-text strong{display:block;font-size:.9rem;color:var(--navy)}.oc-text span{font-size:.82rem;color:var(--text3)}
.oc-input-row{display:flex;gap:8px;width:100%}
.view-results .own-catalogue{display:none}

/* ── SCANNING ANIMATION ── */
@keyframes scanPulse{0%,100%{opacity:.6}50%{opacity:1}}
@keyframes scanSlide{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}
.scan-animation{background:var(--navy);border-radius:var(--radius);padding:28px;color:var(--white);text-align:center;margin-bottom:20px;overflow:hidden;position:relative}
.scan-animation::after{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(90deg,transparent,rgba(46,125,50,.15),transparent);animation:scanSlide 2s ease-in-out infinite}
.scan-title{font-family:var(--font-main);font-size:1.2rem;font-weight:700;margin-bottom:16px}
.scan-steps{display:flex;justify-content:center;gap:24px;flex-wrap:wrap;margin-bottom:16px}
.scan-step{display:flex;align-items:center;gap:6px;font-size:.82rem;color:rgba(255,255,255,.7)}
.scan-step.active{color:var(--green);font-weight:600}
.scan-step.done{color:var(--green)}
.scan-step .check{display:none}.scan-step.done .check{display:inline}.scan-step.done .spinner{display:none}
.scan-step .spinner{display:inline-block;width:14px;height:14px;border:2px solid rgba(255,255,255,.2);border-top-color:var(--green);border-radius:50%;animation:spin .8s linear infinite}
.scan-step.waiting .spinner{display:none}
.scan-step.waiting::before{content:'○';margin-right:2px;opacity:.4}
@keyframes spin{to{transform:rotate(360deg)}}
.scan-count{font-family:var(--font-mono);font-size:2rem;font-weight:700;color:var(--green);animation:scanPulse 1.5s ease infinite}
.scan-label{font-size:.78rem;color:rgba(255,255,255,.5);margin-top:4px}
.auto-detect-notice{font-size:.75rem;color:var(--text3);padding:4px 10px;background:rgba(244,196,48,.12);border:1px solid rgba(244,196,48,.25);border-radius:8px;margin-top:8px;display:inline-block}

/* ── CACHED CALENDAR BUTTON ── */
.cal-btn.cached{background:var(--green-light);color:var(--green);border:1px solid var(--green)}
.cal-btn.cached:hover{background:var(--green);color:var(--white)}
.cal-lots-badge{font-family:var(--font-mono);font-size:.72rem;background:var(--green-light);color:var(--green);padding:2px 8px;border-radius:10px;font-weight:700}

/* FIX-06: Deal stacking widget mobile reflow */
@media(max-width:600px){
  .ds-grid{grid-template-columns:1fr !important}
}

/* FIX-07: Sign-in modal text overflow */
#signupModal .modal{box-sizing:border-box;overflow-wrap:break-word;word-wrap:break-word;overflow-y:auto;max-height:calc(100vh - 40px);max-height:calc(100dvh - 40px)}
#signupModal .modal *{max-width:100%;box-sizing:border-box}
@media(max-width:440px){
  #signupModal .modal{max-width:calc(100vw - 32px) !important;min-width:0;margin:16px;padding:20px 16px;width:calc(100vw - 32px)}
}

/* ── TIER 3: Unsold lots toggle ── */
.unsold-toggle{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border-radius:20px;border:1px solid var(--border);background:var(--white);color:var(--text3);cursor:pointer;font-family:inherit;font-size:.82rem;font-weight:600;transition:all .15s}
.unsold-toggle:hover{background:#f3f0ff;color:#8e44ad;border-color:#8e44ad}
.unsold-toggle.active{background:#f3f0ff;color:#8e44ad;border-color:#8e44ad}
.unsold-toggle .ut-count{background:#8e44ad;color:#fff;font-size:.68rem;padding:1px 6px;border-radius:10px;font-weight:700}

/* ── TIER 3: Saved searches ── */
.saved-search-bar{display:flex;gap:6px;align-items:center;padding:0 18px 10px;flex-wrap:wrap}
.ss-chip{display:inline-flex;align-items:center;gap:4px;padding:5px 10px;border-radius:16px;border:1px solid var(--border);background:var(--white);font-size:.75rem;color:var(--text2);cursor:pointer;font-family:inherit;transition:all .15s;max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ss-chip:hover{border-color:var(--green);color:var(--green)}
.ss-chip .ss-del{margin-left:2px;color:var(--text4);font-size:.7rem}
.ss-chip .ss-del:hover{color:var(--accent-danger)}
.ss-save-btn{display:inline-flex;align-items:center;gap:4px;padding:5px 10px;border-radius:16px;border:1px dashed var(--border);background:transparent;font-size:.75rem;color:var(--text3);cursor:pointer;font-family:inherit;transition:all .15s}
.ss-save-btn:hover{border-color:var(--green);color:var(--green)}

/* ── TIER 3: Unsold alert banner ── */
.unsold-alert-bar{background:linear-gradient(135deg,#f3f0ff,#ede8ff);border:1px solid #d4c8f0;border-radius:var(--radius-sm);padding:10px 16px;margin:8px 0;display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:.82rem}
.unsold-alert-bar .ua-text{color:#5b3d99;font-weight:500}
.unsold-alert-bar .ua-btn{padding:6px 14px;border-radius:20px;border:none;background:#8e44ad;color:#fff;font-size:.78rem;font-weight:600;cursor:pointer;font-family:inherit;transition:all .15s;white-space:nowrap}
.unsold-alert-bar .ua-btn:hover{background:#7d3c98}
.unsold-alert-bar .ua-btn.subscribed{background:var(--white);color:#8e44ad;border:1px solid #8e44ad}

/* ── TIER 3: Onboarding modal ── */
#onboardingModal .modal{max-width:440px}
.ob-step{display:none}
.ob-step.active{display:block}
.ob-options{display:flex;flex-direction:column;gap:8px;margin:16px 0}
.ob-opt{padding:12px 16px;border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--white);cursor:pointer;font-size:.88rem;font-family:inherit;text-align:left;transition:all .15s;color:var(--text)}
.ob-opt:hover{border-color:var(--green);background:var(--green-light)}
.ob-opt.selected{border-color:var(--green);background:var(--green-light);font-weight:600}
.ob-opt .ob-opt-sub{font-size:.75rem;color:var(--text3);font-weight:400;margin-top:2px}
.ob-interests{display:flex;flex-wrap:wrap;gap:8px;margin:16px 0}
.ob-int{padding:8px 14px;border-radius:20px;border:1px solid var(--border);background:var(--white);cursor:pointer;font-size:.82rem;font-family:inherit;transition:all .15s;color:var(--text2)}
.ob-int:hover{border-color:var(--green);color:var(--green)}
.ob-int.selected{border-color:var(--green);background:var(--green-light);color:var(--green);font-weight:600}
.ob-progress{display:flex;gap:6px;justify-content:center;margin-bottom:16px}
.ob-dot{width:8px;height:8px;border-radius:50%;background:var(--border)}
.ob-dot.active{background:var(--green)}

/* ── Short lease warning ── */
.lease-warn{color:var(--accent-danger) !important;font-weight:600 !important}

/* ═══════════════════════════════════════════════════════════════════════
 * EDITORIAL REDESIGN — Trading Desk + Lot Detail
 * Source: AuctionBrain pages/design_handoff_search_and_lot_detail
 * ═══════════════════════════════════════════════════════════════════════
 *
 * High-fidelity reproduction of the design handoff. Border-radius is 0
 * throughout these components (intentional — the editorial direction).
 * The new lot-card markup is emitted by card() in public/app.js; the new
 * expanded panel is emitted by expandCard() (via the magazine-layout
 * helpers introduced alongside this CSS).
 *
 * Tokens are defined in :root above. Old chrome remains for components
 * not in the redesign (search panel, modals, hero).
 */

/* ── Utility classes ── */
.eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.eyebrow.ink{color:var(--ink)}
.tabular{font-variant-numeric:tabular-nums}
.serif{font-family:var(--font-display);font-weight:400;letter-spacing:-.01em}
.dot{display:inline-block;width:8px;height:8px;background:var(--ink);vertical-align:middle}
.dot.red{background:var(--red)}.dot.green{background:var(--signal-green)}.dot.amber{background:var(--signal-amber)}

.tag{
  display:inline-flex;align-items:center;gap:6px;
  font-family:var(--font-mono);font-size:11px;letter-spacing:.04em;
  padding:3px 8px;border:1px solid var(--ink);background:transparent;color:var(--ink);
  border-radius:0;white-space:nowrap;line-height:1.4
}
.tag.green{border-color:var(--signal-green);color:var(--signal-green)}
.tag.red  {border-color:var(--red);color:var(--red)}
.tag.amber{border-color:var(--signal-amber);color:var(--signal-amber)}

.chip-ed{
  height:30px;padding:0 12px;font:14px/1 var(--font-main);
  background:var(--paper);border:1px solid var(--border-strong);
  color:var(--ink);border-radius:0;cursor:pointer;display:inline-flex;align-items:center;gap:6px
}
.chip-ed:hover{border-color:var(--ink)}
.chip-ed.on{background:var(--ink);color:var(--bg);border-color:var(--ink)}

.btn-ed{
  height:38px;padding:0 18px;font:700 14px var(--font-main);
  border:1px solid var(--ink);background:var(--ink);color:var(--bg);
  border-radius:0;cursor:pointer;display:inline-flex;align-items:center;gap:8px;text-decoration:none
}
.btn-ed.red  {background:var(--red);border-color:var(--red);color:#fff}
.btn-ed.ghost{background:transparent;color:var(--ink)}
.btn-ed.sm   {height:30px;padding:0 12px;font-size:12px}
.btn-ed:hover{text-decoration:none}
.btn-ed .arr {font-family:var(--font-mono);font-weight:400}

/* ── New Lot Card (Trading Desk V2) ──
 * Replaces the old .lot-card markup. Emitted by card() in app.js.
 * Old .lot-card rules above still apply to expanded-panel cached
 * fragments and any legacy contexts; the v2 modifier scopes to grid cells
 * rendered with the new structure.
 */
.lot-card-v2{
  background:var(--paper);
  border:1px solid var(--ink);
  display:flex;flex-direction:column;
  border-radius:0;box-shadow:none;
  cursor:pointer;
  transition:border-color .15s,outline-color .15s;
  position:relative;
}
.lot-card-v2:hover{border-color:var(--red)}
.lot-card-v2.expanded{border-color:var(--red);outline:2px solid var(--red);outline-offset:-3px}

/* Header strip */
.lcv2-strip{
  background:var(--ink);color:var(--bg);
  padding:8px 14px;
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase
}
.lcv2-strip-l{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.lcv2-strip-r{display:inline-flex;align-items:center;gap:6px;flex-shrink:0}
.lcv2-strip-r .date{opacity:.6}

/* Hero: image mode */
.lcv2-hero-img{
  height:180px;background-size:cover;background-position:center;
  border-bottom:1px solid var(--border-strong)
}

/* Hero: no-image mode (diagonal stripe) */
.lcv2-hero-stripe{
  padding:22px 18px;min-height:130px;
  border-bottom:1px solid var(--border-strong);
  background:repeating-linear-gradient(135deg,var(--paper),var(--paper) 12px,var(--bg-2) 12px,var(--bg-2) 13px)
}
.lcv2-hero-stripe .noimg-label{
  font-family:var(--font-mono);font-size:10px;letter-spacing:.1em;
  text-transform:uppercase;color:var(--muted);display:block;margin-bottom:10px
}
.lcv2-hero-stripe .addr{
  font-family:var(--font-display);font-size:30px;line-height:1.05;font-weight:400;
  letter-spacing:-.01em;color:var(--ink);margin:0 0 6px
}
.lcv2-hero-stripe .pc{font-family:var(--font-mono);font-size:11px;color:var(--muted)}

/* Address row (only when image is shown) */
.lcv2-addr{padding:14px 18px 6px}
.lcv2-addr h3{
  font-family:var(--font-display);font-weight:400;font-size:22px;line-height:1.15;
  color:var(--ink);margin:0
}
.lcv2-addr .pc{font-family:var(--font-mono);font-size:11px;color:var(--muted);margin-top:4px;display:block}

/* Stat block (Guide / Yield / Score) */
.lcv2-stats{
  display:grid;grid-template-columns:1fr 1fr auto;
  margin:0 18px;border-top:0;
}
.lcv2-stats .cell{padding:14px 0;display:flex;flex-direction:column;gap:3px}
.lcv2-stats .cell.guide{padding-right:0}
.lcv2-stats .cell.yield{padding:14px 16px;border-left:1px solid var(--border-strong)}
.lcv2-stats .cell.score{padding:14px 0 14px 16px;border-left:1px solid var(--border-strong);align-items:flex-start}
.lcv2-stats .num{
  font-family:var(--font-main);font-weight:700;font-size:26px;color:var(--ink);
  font-variant-numeric:tabular-nums;line-height:1
}
.lcv2-stats .num.red{color:var(--red)}
.lcv2-stats .pct-glyph{font-family:var(--font-mono);font-size:14px;color:var(--muted);margin-left:2px;font-weight:400}
.lcv2-score-badge{
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  border:1px solid var(--muted);padding:5px 10px;min-width:44px;
}
.lcv2-score-badge.green{border-color:var(--signal-green)}
.lcv2-score-badge.green .num,.lcv2-score-badge.green .lbl{color:var(--signal-green)}
.lcv2-score-badge.amber{border-color:var(--signal-amber)}
.lcv2-score-badge.amber .num,.lcv2-score-badge.amber .lbl{color:var(--signal-amber)}
.lcv2-score-badge .lbl{font-family:var(--font-mono);font-size:9px;letter-spacing:.1em;color:var(--muted);text-transform:uppercase}
.lcv2-score-badge .num{font-family:var(--font-main);font-weight:700;font-size:18px;line-height:1;margin-top:2px;color:var(--ink);font-variant-numeric:tabular-nums}

/* Body chips section */
.lcv2-body{padding:0 18px 14px}
.lcv2-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.lcv2-meta{
  display:flex;align-items:center;flex-wrap:wrap;gap:16px;
  font-family:var(--font-mono);font-size:11px;color:var(--ink);margin-top:10px;
  text-transform:uppercase;letter-spacing:.06em
}
.lcv2-meta .sep{color:var(--border-strong)}
.lcv2-meta .epc-square{
  display:inline-flex;align-items:center;justify-content:center;
  width:16px;height:16px;color:#fff;font-size:10px;font-weight:700;font-family:var(--font-main);
  margin-left:6px;border-radius:0
}
.lcv2-meta .epc-square.green{background:var(--signal-green)}
.lcv2-meta .epc-square.amber{background:var(--signal-amber)}
.lcv2-meta .epc-square.red  {background:var(--red)}
.lcv2-meta .fz.red{color:var(--red)}
.lcv2-meta .fz.amber{color:var(--signal-amber)}

/* Editor's pull-quote (optional) */
.lcv2-quote{
  margin-top:12px;padding:8px 12px;background:var(--bg);
  border-left:2px solid var(--ink);
  font-family:var(--font-display);font-style:italic;font-size:14px;line-height:1.4;color:var(--ink-2)
}

/* Footer (CTA row) */
.lcv2-foot{
  display:grid;grid-template-columns:1fr 1fr;
  border-top:1px solid var(--ink);margin-top:auto
}
.lcv2-foot a{
  padding:12px 16px;font:700 13px var(--font-main);
  display:flex;align-items:center;justify-content:space-between;gap:8px;
  text-decoration:none;border-radius:0
}
.lcv2-foot a.view{color:var(--ink);background:transparent;border-right:1px solid var(--ink)}
.lcv2-foot a.view:hover{background:var(--bg)}
.lcv2-foot a.bm  {color:var(--bg);background:var(--red)}
.lcv2-foot a.bm:hover{background:var(--red-hover)}
.lcv2-foot .arr{font-family:var(--font-mono);font-weight:400}

/* Bug fix #1: blurred lots shouldn't show the BridgeMatch CTA */
.lot-card.blurred .card-bm-btn,
.lot-card-v2.blurred .lcv2-foot a.bm{display:none}

/* Status colour for the strip header */
.lcv2-status-live{color:#bde6c7}
.lcv2-status-unsold{color:#f3c76e}

/* Stacks tick for new card */
.lot-card-v2 .stacks-tick{position:absolute;top:8px;right:8px;z-index:2;font-size:14px;background:var(--paper);padding:2px 4px;border:1px solid var(--ink)}

/* ── Trading Desk masthead + filter bar ──
 * Editorial newspaper styling for the search header. Lives ABOVE the
 * results grid in the results view. The old .search-panel is still
 * used on the home view; .ab-masthead is the v2 results-view header.
 */
.ab-masthead{
  display:grid;grid-template-columns:auto 1fr auto;align-items:baseline;
  gap:24px;padding:28px 0 16px;border-bottom:1px solid var(--ink)
}
.ab-masthead .left{display:flex;flex-direction:column;gap:6px}
.ab-masthead .left .big{font-family:var(--font-display);font-size:44px;font-weight:400;letter-spacing:-.02em;line-height:1;color:var(--ink);font-variant-numeric:tabular-nums}
.ab-masthead .left .lbl{font-family:var(--font-main);font-size:18px;color:var(--muted);margin-left:8px}
.ab-masthead .right{display:flex;flex-direction:column;align-items:flex-end;gap:6px}
.ab-masthead .right .stamp{font-family:var(--font-mono);font-size:13px;color:var(--ink)}

.ab-meta-row{
  display:flex;align-items:center;justify-content:space-between;gap:16px;
  padding:12px 16px;border-bottom:1px solid var(--ink);flex-wrap:wrap
}
.ab-meta-row .left{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.ab-meta-row .matched-num{font-family:var(--font-display);font-size:28px;line-height:1;font-weight:400;color:var(--ink);font-variant-numeric:tabular-nums}
.ab-meta-row .of{font-family:var(--font-mono);font-size:12px;color:var(--muted)}
.ab-meta-row .show-all{font-family:var(--font-mono);font-size:12px;font-weight:700;color:var(--red);text-transform:uppercase;letter-spacing:.06em;text-decoration:none}
.ab-meta-row .show-all:hover{text-decoration:underline}
.ab-meta-row .right{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.ab-meta-row .right .lbl{font-family:var(--font-mono);font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}

/* Editorial filter bar — replaces .sp-filter-row look in results view */
.ab-filter-bar{
  display:flex;flex-wrap:wrap;gap:8px;align-items:center;
  padding:14px 0;border-bottom:1px solid var(--border-strong)
}

/* Pagination polish (bug fix #2: focus-visible on .btn-page) */
.btn-page{height:30px;padding:0 12px;font:500 12px var(--font-mono);background:var(--paper);border:1px solid var(--border-strong);color:var(--ink);border-radius:0;cursor:pointer}
.btn-page:hover{border-color:var(--ink)}
.btn-page.active,.btn-page[aria-current="page"]{background:var(--ink);color:var(--bg);border-color:var(--ink)}
.btn-page:focus-visible{outline:2px solid var(--red);outline-offset:2px;box-shadow:0 0 0 4px rgba(192,57,43,.15)}

.ab-pagination{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:18px 0;flex-wrap:wrap}
.ab-pagination .showing{font-family:var(--font-mono);font-size:12px;color:var(--muted)}
.ab-pagination .pages{display:flex;gap:6px;flex-wrap:wrap}

/* Lot card grid for the v2 results layout */
.lot-grid-v2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
@media (max-width:780px){
  .lot-grid-v2{grid-template-columns:1fr}
  .ab-masthead{grid-template-columns:1fr;gap:8px}
  .ab-masthead .right{align-items:flex-start}
}

/* ═══════════════════════════════════════════════════════════════════════
 * EDITORIAL REDESIGN — Lot Detail (expanded panel)
 * Magazine-style 2-column rebuild. The expanded panel is injected by
 * expandCard() in public/app.js. The new chrome wraps existing feature
 * blocks (yield analysis, comparables, deal stack, lender summary) so
 * the rich functionality is preserved — only the visual structure
 * changes.
 * ═══════════════════════════════════════════════════════════════════════
 */
.expanded-panel.exp-v2{
  background:transparent;border:none;padding:0;margin:24px 0 32px;
  display:grid;grid-template-columns:1fr 320px;gap:20px;border-radius:0
}
@media (max-width:980px){
  .expanded-panel.exp-v2{grid-template-columns:1fr}
}

/* Header card spans both columns */
.exp-v2 .exp-v2-header{
  grid-column:1 / -1;
  background:var(--paper);border:1px solid var(--ink);border-radius:0
}
.exp-v2 .exp-v2-header .strip{
  background:var(--ink);color:var(--bg);padding:8px 18px;
  font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;
  display:flex;align-items:center;justify-content:space-between;gap:12px
}
.exp-v2 .exp-v2-header .body{display:grid;grid-template-columns:1fr 320px;gap:0}
@media (max-width:780px){.exp-v2 .exp-v2-header .body{grid-template-columns:1fr}}
.exp-v2 .exp-v2-header .left{padding:26px}
.exp-v2 .exp-v2-header .left h1{
  font-family:var(--font-display);font-size:44px;line-height:1.05;font-weight:400;
  letter-spacing:-.02em;color:var(--ink);margin:6px 0
}
.exp-v2 .exp-v2-header .left .pc{font-family:var(--font-mono);font-size:13px;color:var(--muted)}
.exp-v2 .exp-v2-header .left .desc{
  font-family:var(--font-display);font-size:17px;line-height:1.55;color:var(--ink-2);
  max-width:520px;margin-top:18px
}
.exp-v2 .exp-v2-header .right{
  padding:26px;background:var(--bg-2);border-left:1px solid var(--border-strong);
  display:flex;flex-direction:column;justify-content:space-between;gap:18px
}
.exp-v2 .exp-v2-header .right .num-xl{
  font-family:var(--font-main);font-weight:700;font-size:56px;line-height:.95;
  color:var(--ink);font-variant-numeric:tabular-nums
}
.exp-v2 .exp-v2-header .right .below-mkt{
  font-family:var(--font-mono);font-size:12px;color:var(--signal-green);margin-top:6px
}
.exp-v2 .exp-v2-header .right .below-mkt.over{color:var(--red)}
.exp-v2 .exp-v2-header .right .ctas{display:flex;gap:8px;align-items:center}

/* Section cards */
.exp-v2 .exp-v2-left{display:flex;flex-direction:column;gap:16px}
.exp-v2 .exp-v2-right{display:flex;flex-direction:column;gap:16px}

.exp-v2 .sec{
  background:var(--paper);border:1px solid var(--border-strong);border-radius:0
}
.exp-v2 .sec.bold{border-color:var(--ink)}
.exp-v2 .sec .head{
  padding:12px 18px;border-bottom:1px solid var(--border-strong);
  display:flex;align-items:center;justify-content:space-between;gap:12px
}
.exp-v2 .sec .head.bold{background:var(--ink);color:var(--bg);border-bottom:none}
.exp-v2 .sec .body{padding:18px}

/* Due-diligence list */
.exp-v2 .dd-list{list-style:none;margin:0;padding:0}
.exp-v2 .dd-list li{
  padding:12px 18px;display:flex;align-items:center;gap:10px;
  border-top:1px solid var(--border);font-size:14px;color:var(--ink)
}
.exp-v2 .dd-list li:first-child{border-top:none}
.exp-v2 .dd-icon{
  display:inline-flex;align-items:center;justify-content:center;
  width:14px;height:14px;font-size:10px;font-weight:700;color:#fff;font-family:var(--font-main)
}
.exp-v2 .dd-icon.ok{background:var(--signal-green)}
.exp-v2 .dd-icon.warn{background:var(--signal-amber)}
.exp-v2 .dd-icon.bad{background:var(--red)}

/* Why-this-scores list */
.exp-v2 .ws-list{display:flex;flex-direction:column;gap:8px;margin:0;padding:0;list-style:none}
.exp-v2 .ws-list li{display:flex;align-items:flex-start;gap:8px;font-size:14px;color:var(--ink)}
.exp-v2 .ws-mark{font-family:var(--font-mono);font-weight:700;font-size:14px;line-height:1.3;flex-shrink:0;width:14px}
.exp-v2 .ws-mark.opp{color:var(--signal-green)}
.exp-v2 .ws-mark.risk{color:var(--red)}

/* Comparables */
.exp-v2 .cmp-top{display:flex;align-items:center;gap:18px;margin-bottom:14px}
.exp-v2 .cmp-num{font-family:var(--font-main);font-weight:700;font-size:44px;line-height:.95;color:var(--ink);font-variant-numeric:tabular-nums}
.exp-v2 .cmp-cap{font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;color:var(--muted);text-transform:uppercase}
.exp-v2 .cmp-bar-wrap{flex:1;position:relative}
.exp-v2 .cmp-bar{height:28px;background:var(--bg-2);border:1px solid var(--border-strong);position:relative}
.exp-v2 .cmp-bar .band{position:absolute;top:0;bottom:0;background:rgba(26,26,24,.06)}
.exp-v2 .cmp-bar .tick{position:absolute;top:-4px;bottom:-4px;width:2px;background:var(--ink)}
.exp-v2 .cmp-bar .tick.guide{background:var(--red)}
.exp-v2 .cmp-bar-labels{display:flex;justify-content:space-between;margin-top:6px;font-family:var(--font-mono);font-size:11px;color:var(--muted)}
.exp-v2 .cmp-verdict{
  border-top:1px solid var(--border-strong);padding-top:14px;
  display:flex;align-items:center;justify-content:space-between;gap:18px;flex-wrap:wrap
}
.exp-v2 .cmp-verdict .text{font-family:var(--font-display);font-size:18px;line-height:1.3;color:var(--ink);max-width:440px}
.exp-v2 .cmp-verdict .text .red{color:var(--red);font-weight:500}
.exp-v2 .cmp-verdict .more-link{font-family:var(--font-mono);font-size:12px;color:var(--ink);text-decoration:underline}

/* Deal stack rows */
.exp-v2 .ds-row{display:flex;align-items:baseline;justify-content:space-between;gap:12px;font-size:13px;line-height:1.7;color:var(--muted)}
.exp-v2 .ds-row .v{font-family:var(--font-mono);color:var(--ink);font-variant-numeric:tabular-nums}
.exp-v2 .ds-row.bold{color:var(--ink);font-weight:600;font-size:15px}
.exp-v2 .ds-row.bold .v{font-weight:700;font-size:15px}
.exp-v2 .ds-row.red{color:var(--red);font-weight:600;font-size:15px}
.exp-v2 .ds-row.red .v{color:var(--red);font-weight:700}
.exp-v2 .ds-divider{border:0;border-top:1px solid var(--ink);margin:10px 0}
.exp-v2 .ds-callout{
  margin-top:14px;padding:10px 12px;background:var(--bg-2);border-left:2px solid var(--red);
  font-family:var(--font-display);font-size:13px;line-height:1.4;color:var(--ink-2)
}

/* Fundability row */
.exp-v2 .fund-row{display:flex;align-items:center;justify-content:space-between;gap:12px}
.exp-v2 .fund-row .lbl{font-size:14px;color:var(--ink)}
.exp-v2 .fund-row .num-lg{font-family:var(--font-main);font-weight:700;font-size:28px;line-height:1;font-variant-numeric:tabular-nums;color:var(--ink)}
.exp-v2 .fund-tiers{display:flex;gap:6px;margin:10px 0}
.exp-v2 .fund-tiers .tag{flex:1;justify-content:center}

/* Auction logistics */
.exp-v2 .log-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 0;font-size:13px;line-height:1.7;border-bottom:1px dotted var(--border-strong)}
.exp-v2 .log-row:last-child{border-bottom:none}
.exp-v2 .log-row .k{color:var(--muted)}
.exp-v2 .log-row .v{color:var(--ink);font-family:var(--font-mono);font-variant-numeric:tabular-nums}

/* Breadcrumb above the panel */
.exp-v2-crumb{font-family:var(--font-mono);font-size:12px;color:var(--muted);margin-bottom:14px}
.exp-v2-crumb a{color:var(--muted)}
.exp-v2-crumb a:hover{color:var(--ink)}

/* ── Editorial restyle of the existing .expanded-panel ──
 * Phase 2 pragmatic path: rather than restructuring the panel's HTML
 * (which would risk breaking the premium-feature gating, deal-stack
 * scenario picker, comparables, lender summary, etc.), we apply the
 * editorial visual language to the existing structure. Hairline
 * borders, paper background, no rounding, Plex Serif headings.
 *
 * The full magazine 2-column restructure (left = DD/Why-scores/Comps,
 * right sticky deal stack) is left as a future Phase 2b once the data
 * shape is confirmed to support it without losing premium features.
 */
.expanded-panel{
  background:var(--paper);
  border:1px solid var(--ink);
  border-radius:0;
  padding:24px;
  margin:16px 0 24px;
  position:relative;
  box-shadow:none
}
.expanded-panel.expanded-panel-visible{display:block}

.expanded-panel .exp-close-btn{
  position:absolute;top:12px;right:12px;
  width:32px;height:32px;
  border:1px solid var(--ink);background:transparent;
  font-size:18px;line-height:1;color:var(--ink);cursor:pointer;
  border-radius:0;font-family:var(--font-mono)
}
.expanded-panel .exp-close-btn:hover{background:var(--ink);color:var(--bg)}

.expanded-panel .exp-top{margin-bottom:18px}
.expanded-panel .exp-tools{margin-top:18px;display:flex;flex-direction:column;gap:14px}

.expanded-panel .exp-signal-row{
  display:flex;align-items:center;gap:8px;padding:6px 0;
  font-size:14px;color:var(--ink)
}
.expanded-panel .exp-signal-chip{
  display:inline-flex;align-items:center;justify-content:center;
  width:18px;height:18px;font-family:var(--font-mono);font-weight:700;font-size:12px;
  border-radius:0;flex-shrink:0
}

/* Premium feature accordions inside the panel */
.expanded-panel .premium-feature{
  border:1px solid var(--border-strong);border-radius:0;background:var(--paper);
  margin-bottom:0
}
.expanded-panel .premium-feature summary{
  padding:12px 16px;cursor:pointer;font-family:var(--font-display);font-weight:500;font-size:16px;
  color:var(--ink);border-bottom:1px solid var(--border-strong);
  list-style:none;display:flex;align-items:center;justify-content:space-between
}
.expanded-panel .premium-feature summary::-webkit-details-marker{display:none}
.expanded-panel .premium-feature summary::after{
  content:'+';font-family:var(--font-mono);font-size:18px;color:var(--muted);
  transition:transform .15s
}
.expanded-panel .premium-feature[open] summary::after{content:'−'}
.expanded-panel .premium-feature .pf-content{padding:14px 16px;font-size:13px;line-height:1.6;color:var(--ink)}
.expanded-panel .premium-feature .pf-blurred{padding:14px 16px;position:relative}
.expanded-panel .premium-feature .pf-blur-content{filter:blur(4px);pointer-events:none;user-select:none;font-size:13px}
.expanded-panel .premium-feature .pf-upgrade-cta{
  position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
  text-align:center;background:var(--bg);padding:14px 20px;
  border:1px solid var(--ink);border-radius:0
}
.expanded-panel .premium-feature .pf-upgrade-cta button{
  margin-top:8px;height:32px;padding:0 16px;
  background:var(--red);color:#fff;border:1px solid var(--red);
  font:700 12px var(--font-main);cursor:pointer;border-radius:0
}

/* Deal stack widget inside the panel */
.expanded-panel .deal-stack-widget{
  background:var(--paper);border:1px solid var(--border-strong);
  border-radius:0;padding:18px
}
.expanded-panel .ds-grid{
  display:grid;grid-template-columns:1fr 1fr;gap:12px
}
.expanded-panel .ds-label{
  display:block;font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;
  color:var(--muted);text-transform:uppercase;margin-bottom:4px
}
.expanded-panel .ds-input{
  width:100%;height:36px;padding:0 10px;
  border:1px solid var(--border-strong);background:var(--bg);
  font-family:var(--font-main);font-size:14px;color:var(--ink);
  border-radius:0;outline:none
}
.expanded-panel .ds-input:focus{border-color:var(--ink)}
.expanded-panel .ds-btn{
  height:30px;padding:0 12px;font:600 12px var(--font-main);
  background:var(--ink);color:var(--bg);border:1px solid var(--ink);
  border-radius:0;cursor:pointer
}
.expanded-panel .ds-btn:hover{background:transparent;color:var(--ink)}
.expanded-panel .ds-btn-danger{background:var(--red);border-color:var(--red)}
.expanded-panel .ds-btn-danger:hover{background:transparent;color:var(--red)}
.expanded-panel .ds-btn[disabled]{opacity:.4;cursor:not-allowed}
.expanded-panel .ds-options{display:flex;flex-wrap:wrap;gap:14px;margin-top:12px}
.expanded-panel .ds-check{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--ink-2);cursor:pointer}
.expanded-panel .ds-check input[type="checkbox"]{accent-color:var(--ink)}
.expanded-panel .ds-hint{font-family:var(--font-mono);font-size:10px;color:var(--muted);margin-top:4px;letter-spacing:.04em;text-transform:uppercase}

/* Lender summary row */
.expanded-panel .lender-summary{
  font-size:13px;padding:10px 12px;
  background:var(--bg-2);border:1px solid var(--border-strong);
  font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.06em
}
.expanded-panel .ls-loading{color:var(--muted)}

/* The card-state .expanded outline override (replaces old colored outline). */
.lot-card.expanded{outline:2px solid var(--red);outline-offset:-3px;border-color:var(--red)}

/* ── Phase 3 — Editorial restyle of the existing search panel ──
 * The existing .search-panel layout (sp-search-row / sp-filter-row /
 * chip-row) keeps its JS-driven structure, but the visuals shift to
 * editorial tokens: hairline ink borders, no rounding, mono labels,
 * paper backgrounds, ink active states.
 */
.search-panel{
  background:var(--paper);
  border:1px solid var(--ink);
  border-radius:0;
  box-shadow:none
}

/* Search input pill -> hard-bordered search */
.search-panel .tb-search,
.sp-filter-row .tb-search,
.search-input{
  border-radius:0;
  border:1px solid var(--ink);
  background:var(--bg);
  font-family:var(--font-main);
  color:var(--ink)
}
.search-panel .tb-search:focus,
.sp-filter-row .tb-search:focus,
.search-input:focus{
  border-color:var(--red);
  box-shadow:none;
  outline:none
}

/* Selects */
.sp-filter-row .tb-select,
.search-panel .tb-select,
.tb-select{
  border-radius:0;
  border:1px solid var(--border-strong);
  background:var(--paper);
  font-family:var(--font-main);
  color:var(--ink)
}
.tb-select:hover{border-color:var(--ink)}

/* Search submit button — flush red */
.sp-ai-group .btn-main,
.btn-main{
  border-radius:0;
  background:var(--red);color:#fff;border:1px solid var(--red);
  font-family:var(--font-main);font-weight:700;letter-spacing:.02em
}
.sp-ai-group .tb-search{border-radius:0}
.sp-ai-group .btn-main{border-left:none}
.btn-main:hover{background:var(--red-hover);border-color:var(--red-hover)}

/* Filter chips — square, mono-ish */
.chip-row .ex-btn,
.sp-filter-row .ex-btn,
.ex-btn{
  border-radius:0;
  background:var(--paper);
  border:1px solid var(--border-strong);
  color:var(--ink);
  font-family:var(--font-main);font-weight:500
}
.ex-btn:hover{
  background:var(--paper);
  border-color:var(--ink);
  color:var(--ink)
}
.ex-btn.on,
.ex-btn[aria-pressed="true"]{
  background:var(--ink);color:var(--bg);border-color:var(--ink)
}

/* Filter labels — mono uppercase */
.sp-filter-label,
.sp-filter-row label,
.filter-field label,
.mf-field label{
  font-family:var(--font-mono);
  text-transform:uppercase;
  letter-spacing:.06em;
  font-size:.7rem;
  color:var(--muted)
}

/* "Clear all" + "more filters" */
.clear-all-btn{
  border-radius:0;border-color:var(--red);color:var(--red);
  background:transparent;font-family:var(--font-main);font-weight:600
}
.clear-all-btn:hover{background:var(--red);color:#fff}

.more-filters-btn{
  border-radius:0;border-color:var(--ink);background:var(--paper);
  color:var(--ink);font-family:var(--font-main);font-weight:500
}
.more-filters-btn:hover{border-color:var(--red);color:var(--red)}
.more-filters-pop{
  border-radius:0;border:1px solid var(--ink);background:var(--paper);
  box-shadow:0 8px 24px rgba(26,26,24,.18)
}

/* Price dropdown */
.price-dd-btn{
  border-radius:0;border-color:var(--border-strong);background:var(--paper);
  color:var(--ink);font-family:var(--font-main)
}
.price-dd-btn:hover{border-color:var(--ink)}
.price-dd-btn.active-filter{border-color:var(--ink);color:var(--ink);font-weight:600}
.price-pop{
  border-radius:0;border:1px solid var(--ink);background:var(--paper);
  box-shadow:0 8px 24px rgba(26,26,24,.18)
}

/* Favourite heart -- editorial square */
.fav-btn{
  border-radius:0;
  border:1px solid var(--border-strong);
  background:var(--paper);
  color:var(--muted);font-family:var(--font-main)
}
.fav-btn:hover{
  border-color:var(--red);
  color:var(--red);
  transform:none;background:var(--paper)
}
.fav-btn.fav-active{
  border-color:var(--red);color:var(--red);
  background:var(--red-soft)
}

/* ── Stats grid in results header — newspaper inserts ── */
.stats-grid{
  background:var(--paper);
  border:1px solid var(--ink);
  border-radius:0;
  padding:0;
  display:grid;
  grid-template-columns:repeat(5,1fr);
  gap:0;
  margin-bottom:20px
}
.stats-grid .stat-card{
  background:transparent;
  border:none;
  border-right:1px solid var(--border-strong);
  border-radius:0;
  padding:18px 16px;
  text-align:left
}
.stats-grid .stat-card:last-child{border-right:none}
.stats-grid .stat-card .v{
  font-family:var(--font-display);
  font-size:30px;
  font-weight:400;
  line-height:1;
  letter-spacing:-.02em;
  color:var(--ink);
  font-variant-numeric:tabular-nums
}
.stats-grid .stat-card .l{
  font-family:var(--font-mono);
  font-size:10px;
  letter-spacing:.1em;
  color:var(--muted);
  margin-top:6px
}
.stats-grid .v.g{color:var(--signal-green)}
.stats-grid .v.y{color:var(--signal-amber)}
.stats-grid .v.p{color:var(--ink)}

/* ── Result header h2 -> editorial display ── */
.result-header h2{
  font-family:var(--font-display);
  font-size:1.6rem;
  font-weight:400;
  letter-spacing:-.02em;
  color:var(--ink)
}

/* ── View toggle (grid/list) -> hairline tabs ── */
.view-toggle{
  background:transparent;
  padding:0;
  border:1px solid var(--ink);
  border-radius:0;
  gap:0
}
.view-toggle .vtog{
  border-radius:0;
  background:var(--paper);
  color:var(--ink);
  font-family:var(--font-mono);
  text-transform:uppercase;
  letter-spacing:.06em;
  font-size:11px;
  padding:8px 14px
}
.view-toggle .vtog.active{
  background:var(--ink);
  color:var(--bg);
  box-shadow:none
}

/* ── Toolbar -> hairline ── */
.toolbar .tb-btn{
  border-radius:0;
  border:1px solid var(--border-strong);
  background:var(--paper);
  color:var(--ink);
  font-family:var(--font-main)
}
.toolbar .tb-btn:hover{border-color:var(--ink);background:var(--paper);color:var(--ink)}

/* ── Back button -> editorial mono ── */
.back-btn{
  border-radius:0;
  border:1px solid var(--border-strong);
  background:var(--paper);
  font-family:var(--font-mono);
  text-transform:uppercase;
  letter-spacing:.06em;
  font-size:11px;
  color:var(--ink)
}
.back-btn:hover{
  background:var(--ink);
  color:var(--bg);
  border-color:var(--ink)
}

/* ── Hero CTAs override -> editorial flush buttons ── */
.cta-primary{
  border-radius:0;
  background:var(--red);
  color:#fff;
  border:1px solid var(--red);
  box-shadow:none;
  font-family:var(--font-main);font-weight:700
}
.cta-primary:hover{
  background:var(--red-hover);
  border-color:var(--red-hover);
  transform:none;
  box-shadow:none
}
.cta-secondary{
  border-radius:0;
  background:var(--paper);
  color:var(--ink);
  border:1px solid var(--ink);
  box-shadow:none;
  font-family:var(--font-main);font-weight:600
}
.cta-secondary:hover{
  background:var(--ink);
  color:var(--bg);
  border-color:var(--ink)
}

/* ── Hero h1 -> editorial display ── */
.hero h1{
  font-family:var(--font-display);
  font-weight:400;
  letter-spacing:-.02em;
  color:var(--ink)
}
.hero h1 em{font-style:italic;color:var(--red);font-weight:500}

.hero-badge{
  border-radius:0;
  border:1px solid var(--ink);
  background:var(--paper);
  font-family:var(--font-mono);
  text-transform:uppercase;
  letter-spacing:.08em;
  box-shadow:none
}

/* ── Nav -> editorial ink with mono red brand mark ── */
.nav{background:var(--ink);border-bottom:none}
.nav-cta{
  border-radius:0;
  background:var(--red);color:#fff;border:1px solid var(--red);
  font-family:var(--font-main);font-weight:700;letter-spacing:.02em
}
.nav-cta:hover{background:var(--red-hover);border-color:var(--red-hover)}
.nav-link-bm{
  border-radius:0;
  border-color:rgba(255,255,255,.25);
  font-family:var(--font-main);font-weight:600
}
.nav-link-bm:hover{background:rgba(255,255,255,.08)}
.logo{font-family:var(--font-display);font-weight:400;letter-spacing:-.02em;font-size:1.45rem;color:var(--white);text-decoration:none;line-height:1;display:inline-flex;align-items:baseline;gap:0}
.logo:hover{text-decoration:none;color:var(--white)}
.logo span{font-family:var(--font-mono);font-weight:500;color:var(--red-text-dark);letter-spacing:.02em;font-size:1.2rem;margin-left:.05em}
/* logo-sub kept for backward-compat if any cached HTML still ships it */
.logo-sub{display:none}

/* Editorial ghost link in the masthead — hairline ink-on-ink, mono caps,
 * matches the chip vocabulary from the filter bar. The trailing ↗ glyph
 * uses the mono family so it renders crisp at every size (vs. the old
 * 🧩 emoji which always rendered chunky on Windows + Android).
 * .nav-link-bm is the legacy class kept for any cached-HTML transition;
 * .nav-link-blog is the new class for the BridgeMatch blog link. */
.nav-link-blog,
.nav-link-bm{
  font-family:var(--font-mono);
  font-size:11px;
  letter-spacing:.08em;
  text-transform:uppercase;
  font-weight:500;
  color:#e8e4dc;
  padding:8px 12px;
  border:1px solid rgba(255,255,255,.25);
  border-radius:0;
  background:transparent;
  white-space:nowrap;
  text-decoration:none !important;
  display:inline-flex;align-items:center;gap:6px
}
.nav-link-blog:hover,
.nav-link-bm:hover{
  border-color:#fff;color:#fff;background:transparent;text-decoration:none !important
}
.nav-link-blog .ext-arr,
.nav-link-bm .ext-arr{font-family:var(--font-mono);font-weight:400;font-size:12px;opacity:.7}

/* ── Filter-bar polish — tighter editorial chips ──
 * The previous pass already squared off corners and aligned the palette.
 * This pass tightens the chip sizing, switches placeholder labels to
 * mono uppercase, and makes the active-filter state visible at a glance
 * (ink-fill instead of just a border-colour change). Vertical hairline
 * separators at strategic gaps group filters by purpose without needing
 * to restructure the underlying HTML.
 */

/* Filter row layout — flex with auto-grow.
 * Earlier the row was a grid with `auto-fill, minmax(140px, 1fr)`, but
 * with our 11 chips in a 6-col grid the second row always had one empty
 * cell on the right. Flex-wrap with `flex: 1 1 140px` on every child
 * lets remaining chips on each row stretch to fill the available space,
 * so there's never a trailing gap regardless of viewport width.
 * 140px stays the comfortable minimum width — chips below that get
 * cramped labels. */
.sp-filter-row{
  display:flex;
  flex-wrap:wrap;
  gap:8px;
  align-items:stretch;
  padding:10px 14px;
  background:var(--paper);
  border-bottom:1px solid var(--border-strong)
}
.sp-filter-row > *{
  flex:1 1 140px;
  min-width:140px;
  min-height:0
}
.sp-filter-row .tb-select,
.sp-filter-row .tb-search,
.sp-filter-row .price-dd-btn,
.sp-filter-row .more-filters-btn,
.sp-filter-row .clear-all-btn{width:100%}
.sp-secondary{padding:4px 14px;background:var(--paper);border-bottom:1px solid var(--border-strong)}
.chip-row{padding:8px 14px;gap:6px}
.sp-search-row{padding:10px 14px;border-bottom:1px solid var(--ink)}

/* Tighter, mono-styled chips throughout the filter row */
.sp-filter-row .tb-select,
.sp-filter-row .tb-search,
.sp-filter-row .price-dd-btn,
.sp-filter-row .more-filters-btn,
.sp-filter-row .clear-all-btn,
.sp-secondary .tb-select,
.sp-secondary .tb-search{
  height:32px;
  min-height:32px;
  padding:0 10px;
  font-family:var(--font-mono);
  font-size:11px;
  letter-spacing:.06em;
  text-transform:uppercase;
  border-radius:0;
  background:var(--paper);
  border:1px solid var(--border-strong);
  color:var(--ink);
  line-height:1
}

/* Selects need slightly more right padding for the native arrow */
.sp-filter-row .tb-select,
.sp-secondary .tb-select{padding-right:22px}

/* Plain text inputs (Town, Postcode) — match the chip vocabulary.
 * Mono-uppercase placeholder so they line up with the SELECT chips
 * around them (REGION, BEDROOMS, etc.). The user-typed value stays
 * mono but in the entered case so it's still legible — `text-transform`
 * does NOT apply to the typed value, only the rendering. */
.sp-filter-row input.tb-search,
.sp-secondary input.tb-search{
  font-family:var(--font-mono);
  text-transform:uppercase;
  letter-spacing:.06em;
  font-size:11px
}
.sp-filter-row input.tb-search::placeholder,
.sp-secondary input.tb-search::placeholder{
  font-family:var(--font-mono);
  text-transform:uppercase;
  letter-spacing:.06em;
  font-size:11px;
  color:var(--ink);
  opacity:.55
}

/* Hover */
.sp-filter-row .tb-select:hover,
.sp-filter-row .tb-search:hover,
.sp-filter-row .price-dd-btn:hover,
.sp-filter-row .more-filters-btn:hover{
  border-color:var(--ink);
  background:var(--paper);
  color:var(--ink)
}

/* Active filter state — ink-fill so a glance shows what's applied */
.sp-filter-row .tb-select.active-filter,
.sp-filter-row .price-dd-btn.active-filter,
.sp-filter-row .tb-search:not(:placeholder-shown){
  background:var(--ink);
  color:var(--bg);
  border-color:var(--ink)
}
.sp-filter-row .tb-select.active-filter option{
  background:var(--paper);
  color:var(--ink);
  text-transform:none;
  font-family:var(--font-main);
  letter-spacing:0
}

/* Clear all stays red but compact */
.sp-filter-row .clear-all-btn{
  color:var(--red);
  border-color:var(--red);
  background:transparent
}
.sp-filter-row .clear-all-btn:hover{
  background:var(--red);
  color:#fff;
  border-color:var(--red)
}

/* "Pro filters" disclosure — same chip dimensions but with the dot */
.sp-filter-row .more-filters-btn{gap:6px}
.sp-filter-row .more-filters-btn .mf-dot{
  width:6px;height:6px;background:var(--red);display:inline-block;border-radius:0
}

/* The page-info text + per-page select live in the search row — make
 * them mono and quiet. */
.sp-page-info{font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.sp-search-row .sp-per-page{
  height:32px;min-height:32px;padding:0 10px;
  font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;
  border:1px solid var(--border-strong);background:var(--paper);color:var(--ink);
  border-radius:0
}

/* View toggle — slightly thinner */
.view-toggle{height:32px}
.view-toggle .vtog{height:30px;padding:0 10px;font-size:10px}

/* Secondary chip row presets (Unsold lots / Favourites / Analysed / Save search)
 * are visually noisy. Demote them: smaller, hairline-only, no fill. */
.chip-row .ex-btn{
  height:28px;
  padding:0 10px;
  font-family:var(--font-mono);
  font-size:11px;
  letter-spacing:.06em;
  text-transform:uppercase;
  border:1px solid var(--border-strong);
  background:transparent;
  color:var(--ink);
  border-radius:0
}
.chip-row .ex-btn:hover{border-color:var(--ink);background:transparent;color:var(--ink)}
.chip-row .ex-btn.on,
.chip-row .ex-btn[aria-pressed="true"]{
  background:var(--ink);color:var(--bg);border-color:var(--ink)
}
.chip-row .adv-toggle{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}
.chip-row .adv-toggle:hover{color:var(--ink)}

/* Favourites/Analysed/Unsold-lots count-badges inside chips */
.chip-row .ex-btn .count,
.chip-row .ex-btn span[class*=badge]{
  font-family:var(--font-mono);font-size:10px;
  background:var(--ink);color:var(--bg);
  padding:1px 4px;margin-left:4px;border-radius:0
}

/* Visual grouping — superseded by the grid auto-fill layout above. The
 * grid gives each chip its own slot; the per-chip left-hairlines that
 * used to mark cluster boundaries would now read as random cell-internal
 * padding. Left here as a no-op for future fine-tuning. */
.sp-filter-row #fLocation,
.sp-filter-row #fSoldTop{margin-left:0;padding-left:10px;border-left:0}

/* Make the search submit button a touch tighter to match the chip row */
.sp-search-row .btn-main,
.sp-ai-group .btn-main{
  height:36px;
  padding:0 16px;
  font-size:12px;
  letter-spacing:.06em;
  text-transform:uppercase;
  border-radius:0
}

/* Search input itself — slightly tighter, mono placeholder, hairline ink */
.sp-ai-group .tb-search,
.sp-search-row .tb-search{
  height:36px;
  border-radius:0;
  border:1px solid var(--ink);
  font-family:var(--font-main);
  font-size:13px
}
.sp-ai-group .tb-search::placeholder{
  font-family:var(--font-mono);
  font-size:11px;
  letter-spacing:.06em;
  text-transform:uppercase;
  color:var(--muted-2)
}

/* ═══════════════════════════════════════════════════════════════
   Lot detail share-target page (routes/lots.js)
   Standalone landing for /lot/:id deep links — does not load the SPA.
   ═══════════════════════════════════════════════════════════════ */

.lot-detail-page {
  background: var(--bg, #f5f7fa);
  min-height: 100vh;
  font-family: 'DM Sans', -apple-system, BlinkMacSystemFont, sans-serif;
  color: var(--text, #1a2a3a);
}

.lot-detail-nav {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 16px 24px;
  background: linear-gradient(135deg, #1a3a5c, #2a5a8c);
  color: #fff;
}
.lot-detail-nav .logo {
  font-family: 'Sora', 'DM Sans', sans-serif;
  font-weight: 700;
  font-size: 24px;
  color: #fff;
  text-decoration: none;
  letter-spacing: -0.01em;
}
.lot-detail-nav .logo span { color: #8bc34a; }
.lot-detail-nav .nav-back {
  color: #fff;
  text-decoration: none;
  font-size: 14px;
  font-weight: 500;
  opacity: 0.85;
}
.lot-detail-nav .nav-back:hover { opacity: 1; }

.lot-detail-main {
  max-width: 880px;
  margin: 0 auto;
  padding: 32px 16px 64px;
}

.lot-detail-card {
  background: #fff;
  border-radius: 16px;
  overflow: hidden;
  box-shadow: 0 4px 24px rgba(15, 23, 42, 0.08);
}

.lot-hero {
  width: 100%;
  height: 420px;
  object-fit: cover;
  display: block;
  background: #eef2f7;
}
.lot-hero-placeholder {
  display: flex;
  align-items: center;
  justify-content: center;
  color: #6b7c8d;
  font-size: 16px;
}

.lot-detail-body { padding: 28px 28px 32px; }

.lot-detail-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: 12px;
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  font-weight: 600;
}
.lot-house-badge {
  padding: 4px 10px;
  background: #1a3a5c;
  color: #fff;
  border-radius: 999px;
}
.lot-prop-type {
  padding: 4px 10px;
  background: #eef2f7;
  color: #1a2a3a;
  border-radius: 999px;
}
.lot-status {
  padding: 4px 10px;
  background: #fef0ee;
  color: #c4392a;
  border-radius: 999px;
}

.lot-detail-address {
  font-family: 'Source Serif 4', Georgia, serif;
  font-size: clamp(24px, 3.2vw, 32px);
  font-weight: 600;
  line-height: 1.25;
  margin: 0 0 12px;
  color: #1a2a3a;
}

.lot-detail-price-row {
  display: flex;
  align-items: baseline;
  gap: 24px;
  flex-wrap: wrap;
  margin-bottom: 24px;
}
.lot-detail-price {
  font-family: 'JetBrains Mono', monospace;
  font-size: clamp(28px, 4vw, 36px);
  font-weight: 700;
  color: #0f8a5f;
}
.lot-detail-score {
  font-size: 14px;
  color: #6b7c8d;
}
.lot-detail-score strong {
  color: #1a2a3a;
  font-weight: 700;
  font-size: 18px;
}

.lot-section { margin-top: 24px; }
.lot-section h2 {
  font-size: 13px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  font-weight: 700;
  color: #6b7c8d;
  margin: 0 0 8px;
}

.lot-tags {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}
.lot-tags .tag {
  font-size: 13px;
  padding: 6px 10px;
  border-radius: 6px;
  font-weight: 500;
}
.tag-opp { background: #e8f5ee; color: #0b7a52; }
.tag-risk { background: #fef0ee; color: #c4392a; }

.lot-bullets {
  margin: 0;
  padding-left: 20px;
  font-size: 14px;
  color: #1a2a3a;
  line-height: 1.6;
}
.lot-bullets li { margin-bottom: 4px; }

.lot-detail-ctas {
  display: flex;
  gap: 12px;
  margin-top: 32px;
  flex-wrap: wrap;
}
.lot-detail-ctas .cta-primary,
.lot-detail-ctas .cta-secondary {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 48px;
  padding: 12px 22px;
  border-radius: 10px;
  font-size: 15px;
  font-weight: 600;
  text-decoration: none;
  transition: all .2s;
}
.lot-detail-ctas .cta-primary {
  background: linear-gradient(135deg, #0f8a5f, #0b7a52);
  color: #fff;
}
.lot-detail-ctas .cta-primary:hover { transform: translateY(-1px); box-shadow: 0 4px 12px rgba(15, 138, 95, 0.25); }
.lot-detail-ctas .cta-secondary {
  background: #fff;
  color: #1a2a3a;
  border: 1px solid #e4dfd6;
}
.lot-detail-ctas .cta-secondary:hover { border-color: #1a3a5c; }

.lot-detail-disclaimer {
  font-size: 12px;
  color: #8a847a;
  margin-top: 20px;
  font-style: italic;
}

@media (max-width: 600px) {
  .lot-detail-main { padding: 16px 12px 48px; }
  .lot-detail-body { padding: 20px 18px 24px; }
  .lot-hero { height: 240px; }
  .lot-detail-ctas { flex-direction: column; }
  .lot-detail-ctas .cta-primary,
  .lot-detail-ctas .cta-secondary { width: 100%; }
}

/* ═══════════════════════════════════════════════════════════════
   Mobile filter collapse — at ≤640px, filters and chips hide by
   default behind a "Filters" pill in the search row. Stops the
   500px-tall panel from eating the entire viewport above the fold.
   ═══════════════════════════════════════════════════════════════ */
.mobile-filters-toggle { display: none; }

@media (max-width: 640px) {
  .mobile-filters-toggle {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    border: 1px solid var(--border, #e4dfd6);
    background: var(--white, #fff);
    border-radius: 8px;
    padding: 8px 12px;
    font-size: .82rem;
    font-weight: 500;
    color: var(--text, #1a2a3a);
    cursor: pointer;
    flex-shrink: 0;
    min-height: 40px;
    white-space: nowrap;
  }
  .mobile-filters-toggle .mf-active-count {
    background: var(--accent, #c0392b);
    color: #fff;
    font-size: .68rem;
    padding: 1px 6px;
    border-radius: 999px;
    min-width: 18px;
    text-align: center;
    font-weight: 600;
  }
  .search-panel.mobile-expanded .mobile-filters-toggle {
    background: var(--text, #1a2a3a);
    color: #fff;
    border-color: var(--text, #1a2a3a);
  }
  /* Collapsed state — only the search row is visible */
  .search-panel .sp-filter-row,
  .search-panel .sp-toggle-row,
  .search-panel .sp-per-page,
  .search-panel .view-toggle,
  .search-panel .sp-page-info {
    display: none;
  }
  /* Expanded state — show everything except the per-page/view-toggle/
     page-info meta widgets which stay hidden on mobile (low-value chrome) */
  .search-panel.mobile-expanded .sp-filter-row { display: flex; }
  .search-panel.mobile-expanded .sp-toggle-row { display: flex; }
}

/* ═══════════════════════════════════════════════════════════════
   Save pill on lot cards — always visible, top-right of hero. Anon
   visitors tap → signup modal. Signed-in tap → favourite toggle.
   Replaces the previously hidden heart icon that lived inside the
   expanded view only.
   ═══════════════════════════════════════════════════════════════ */
.lcv2-hero-img,
.lcv2-hero-stripe { position: relative; }

.lcv2-save {
  position: absolute;
  top: 10px;
  right: 10px;
  z-index: 4;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  background: rgba(255, 255, 255, 0.96);
  color: #1a1714;
  border: none;
  border-radius: 999px;
  padding: 6px 14px;
  font-size: .82rem;
  font-weight: 600;
  cursor: pointer;
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.18);
  transition: background .15s, transform .1s, color .15s, box-shadow .15s;
  letter-spacing: 0.01em;
  white-space: nowrap;
}
.lcv2-save:hover {
  background: #fff;
  transform: translateY(-1px);
  box-shadow: 0 4px 10px rgba(0, 0, 0, 0.22);
}
.lcv2-save.is-saved {
  background: #c0392b;
  color: #fff;
}
.lcv2-save.is-saved:hover { background: #a83020; }

@media (max-width: 480px) {
  .lcv2-save {
    top: 8px;
    right: 8px;
    padding: 5px 11px;
    font-size: .78rem;
  }
}

/* Saved-search bell toggle — Pro feature */
.ss-bell {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 22px;
  margin-left: 4px;
  border-radius: 999px;
  font-size: .85rem;
  color: var(--text2, #6b7c8d);
  cursor: pointer;
  opacity: 0.7;
  transition: opacity .15s, background .15s, transform .1s;
}
.ss-bell:hover { opacity: 1; background: rgba(0,0,0,.05); }
.ss-bell-on {
  opacity: 1;
  background: var(--accent, #c0392b);
  color: #fff;
}
.ss-bell-on:hover { background: #a83020; }

/* ── Pricing page (4-tier comparison at /pricing) ── */
.pricing-page { background: var(--bg-primary, #f5f7fa); min-height: 100vh; }
.pricing-main { max-width: 1180px; margin: 0 auto; padding: 28px 22px 60px; }
.pricing-header { text-align: center; margin: 18px auto 32px; max-width: 720px; }
.pricing-header h1 { font-family: var(--font-main); font-size: 2.1rem; font-weight: 700; color: var(--navy); margin: 0 0 10px; line-height: 1.15; }
.pricing-header p { color: var(--text2); font-size: 1rem; line-height: 1.55; margin: 0; }
.pricing-tiers { display: grid; grid-template-columns: repeat(4, 1fr); gap: 18px; }
.pr-tier { background: #fff; border: 1px solid var(--border); border-radius: 14px; padding: 26px 22px 22px; position: relative; display: flex; flex-direction: column; }
.pr-tier h2 { margin: 0 0 12px; font-size: 1.05rem; font-weight: 700; color: var(--navy); font-family: var(--font-main); }
.pr-tier-featured { border-color: var(--accent); box-shadow: 0 8px 28px rgba(0,0,0,.08); transform: scale(1.02); }
.pr-tier-featured .pr-badge { position: absolute; top: -12px; left: 50%; transform: translateX(-50%); background: var(--accent); color: #fff; font-size: .65rem; font-weight: 700; padding: 5px 14px; border-radius: 99px; letter-spacing: .05em; white-space: nowrap; text-transform: uppercase; }
.pr-price { display: flex; align-items: baseline; gap: 6px; margin-bottom: 6px; }
.pr-amt { font-size: 1.9rem; font-weight: 800; color: var(--navy); font-family: var(--font-main); }
.pr-price-sub { font-size: .8rem; color: var(--text4); font-weight: 500; }
.pr-tagline { font-size: .85rem; color: var(--text2); margin: 4px 0 16px; line-height: 1.4; min-height: 38px; }
.pr-features { list-style: none; padding: 0; margin: 0 0 20px; font-size: .85rem; color: var(--text2); flex: 1; }
.pr-features li { padding: 6px 0 6px 22px; position: relative; line-height: 1.5; }
.pr-features li::before { content: '\2713'; position: absolute; left: 0; top: 6px; color: var(--green); font-weight: 700; }
.pr-feature-off { color: var(--text4); }
.pr-feature-off::before { content: '\2014' !important; color: var(--text4) !important; font-weight: 500 !important; }
.pr-btn { display: block; width: 100%; padding: 12px 16px; border-radius: 8px; border: none; cursor: pointer; font-size: .9rem; font-weight: 600; font-family: var(--font-main); text-align: center; text-decoration: none; transition: filter .15s, background .15s, color .15s; box-sizing: border-box; }
.pr-btn:hover { filter: brightness(.95); }
.pr-btn-primary { background: var(--accent); color: #fff; }
.pr-btn-secondary { background: var(--navy); color: #fff; }
.pr-btn-ghost { background: transparent; color: var(--text2); border: 1px solid var(--border); }
.pr-btn-ghost:hover { background: var(--cream); color: var(--navy); }
.pricing-faq { max-width: 760px; margin: 50px auto 0; }
.pricing-faq h2 { font-family: var(--font-main); font-size: 1.4rem; color: var(--navy); margin: 0 0 18px; text-align: center; }
.pricing-faq details { background: #fff; border: 1px solid var(--border); border-radius: 10px; padding: 14px 18px; margin-bottom: 10px; }
.pricing-faq summary { cursor: pointer; font-weight: 600; color: var(--navy); font-size: .95rem; }
.pricing-faq details[open] summary { margin-bottom: 8px; }
.pricing-faq details p { margin: 0; font-size: .88rem; color: var(--text2); line-height: 1.55; }
.pricing-fine-print { text-align: center; font-size: .78rem; color: var(--text4); margin: 36px 0 0; }
@media (max-width: 980px) {
  .pricing-tiers { grid-template-columns: repeat(2, 1fr); }
  .pr-tier-featured { transform: none; }
}
@media (max-width: 560px) {
  .pricing-main { padding: 20px 14px 50px; }
  .pricing-header h1 { font-size: 1.6rem; }
  .pricing-tiers { grid-template-columns: 1fr; gap: 14px; }
  .pr-tier { padding: 22px 18px 18px; }
}

/* ── Anonymous-browsing nudge toast (Milestone 1) ── */
.anon-toast {
  position: fixed;
  bottom: 22px;
  left: 50%;
  transform: translateX(-50%);
  background: var(--navy, #1a2332);
  color: #fff;
  padding: 12px 14px 12px 18px;
  border-radius: 12px;
  font-size: .88rem;
  box-shadow: 0 12px 36px rgba(0, 0, 0, 0.25);
  z-index: 9999;
  display: flex;
  align-items: center;
  gap: 12px;
  max-width: calc(100vw - 32px);
  animation: anon-toast-in .3s ease-out;
  font-family: var(--font-main);
}
.anon-toast-msg { line-height: 1.4; }
.anon-toast-cta {
  color: var(--accent, #c0392b);
  font-weight: 700;
  text-decoration: underline;
  cursor: pointer;
}
.anon-toast-cta:hover { color: #fff; }
.anon-toast-close {
  background: transparent;
  border: none;
  color: rgba(255, 255, 255, 0.7);
  font-size: 1.3rem;
  line-height: 1;
  padding: 2px 8px;
  cursor: pointer;
  border-radius: 6px;
  flex-shrink: 0;
}
.anon-toast-close:hover { color: #fff; background: rgba(255, 255, 255, 0.1); }
.anon-toast-out { opacity: 0; transform: translate(-50%, 8px); transition: all .35s ease-in; }
@keyframes anon-toast-in {
  from { opacity: 0; transform: translate(-50%, 12px); }
  to { opacity: 1; transform: translate(-50%, 0); }
}
@media (max-width: 560px) {
  .anon-toast { bottom: 14px; padding: 11px 12px 11px 16px; font-size: .82rem; }
}

/* ── Footer weekly-digest signup (Milestone 6) ── */
.digest-form {
  max-width: 440px;
  margin: 18px auto 24px;
  text-align: left;
  background: rgba(255, 255, 255, 0.7);
  border: 1px solid var(--border, #e4dfd6);
  border-radius: 12px;
  padding: 18px 20px;
}
.digest-form-label {
  display: block;
  font-family: var(--font-main, system-ui);
  font-size: .92rem;
  font-weight: 600;
  color: var(--navy, #1a2332);
  margin-bottom: 10px;
  text-align: center;
}
.digest-form-row {
  display: flex;
  gap: 8px;
  align-items: stretch;
}
.digest-form-row input {
  flex: 1;
  padding: 10px 12px;
  border: 1px solid var(--border, #e4dfd6);
  border-radius: 8px;
  font-size: .9rem;
  font-family: var(--font-main, system-ui);
  background: #fff;
  color: var(--navy, #1a2332);
  min-width: 0;
}
.digest-form-row input:focus {
  outline: none;
  border-color: var(--accent, #c0392b);
  box-shadow: 0 0 0 3px rgba(192, 57, 43, 0.15);
}
.digest-form-btn {
  background: var(--accent, #c0392b);
  color: #fff;
  border: none;
  border-radius: 8px;
  padding: 10px 18px;
  font-size: .9rem;
  font-weight: 600;
  cursor: pointer;
  font-family: var(--font-main, system-ui);
  white-space: nowrap;
  transition: filter .15s;
}
.digest-form-btn:hover:not(:disabled) { filter: brightness(.92); }
.digest-form-btn:disabled { opacity: 0.65; cursor: wait; }
.digest-form-status {
  font-size: .8rem;
  margin-top: 8px;
  min-height: 1.1em;
  text-align: center;
  color: var(--text2, #6b7c8d);
}
.digest-form-status-ok { color: var(--green, #0f8a5f); font-weight: 600; }
.digest-form-status-error { color: var(--accent, #c0392b); font-weight: 600; }
.digest-form-fine {
  text-align: center;
  font-size: .72rem;
  color: var(--text4, #8a847a);
  margin-top: 4px;
}
@media (max-width: 480px) {
  .digest-form { padding: 16px 14px; margin: 14px auto 20px; }
  .digest-form-row { flex-direction: column; gap: 8px; }
  .digest-form-btn { width: 100%; padding: 11px 16px; }
}

/* ── Pro-tool gating — items with [data-pro-only] only render for premium users ── */
[data-pro-only] { display: none !important; }
body.is-pro [data-pro-only] { display: inline-flex !important; }
.unsold-toggle .pro-badge {
  font-family: var(--font-mono);
  font-size: 9px;
  font-weight: 700;
  letter-spacing: .08em;
  background: var(--ink, #1a1a18);
  color: var(--paper, #fff);
  padding: 2px 6px;
  border-radius: 3px;
  margin-right: 4px;
  vertical-align: middle;
}

/* ── Numbered section heading badges — replace the "§1 · Title" pattern that
   rendered as garbled glyphs on iOS Safari and on fonts missing the
   section-sign character. The badge pattern is robust to font availability. ── */
.sec-head {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  min-width: 0;
}
.sec-num-badge {
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  border-radius: 4px;
  background: var(--ink, #1a1a18);
  color: var(--paper, #fff);
  font-family: var(--font-mono, monospace);
  font-weight: 700;
  font-size: 11px;
  line-height: 1;
  font-variant-numeric: tabular-nums;
}
.exp-v2 .sec.bold .head .sec-num-badge {
  background: var(--paper, #fff);
  color: var(--ink, #1a1a18);
}

/* ── Expanded-card "View on auction site ↗" + "Save" button polish.
   Previously these were unstyled and rendered as a default underlined
   link "I want to bid →" immediately followed by a bare "♥" button —
   read as a single garbled string. Now: clear pill bid button on the
   left, distinct outlined Save button on the right, sensible gap. ── */
.exp-v2 .exp-v2-header .right .ctas {
  gap: 10px;
  flex-wrap: wrap;
}
.exp-v2-bid {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: var(--red, #c0392b);
  color: var(--paper, #fff);
  padding: 11px 18px;
  border-radius: 6px;
  font-family: var(--font-main);
  font-weight: 600;
  font-size: 14px;
  text-decoration: none;
  line-height: 1;
  transition: filter .15s, transform .1s;
  white-space: nowrap;
}
.exp-v2-bid:hover { filter: brightness(.94); }
.exp-v2-bid:active { transform: translateY(1px); }
.exp-v2-bid.disabled {
  background: transparent;
  color: var(--muted, #6b7c8d);
  border: 1px dashed var(--border-strong, #ccc);
}
.exp-v2-bid-arr {
  font-family: var(--font-mono, monospace);
  font-size: 13px;
  opacity: 0.95;
}
.exp-v2-bid-label {
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 240px;
}
.exp-v2-fav {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: var(--paper, #fff);
  color: var(--ink, #1a1a18);
  border: 1px solid var(--ink, #1a1a18);
  padding: 10px 14px;
  border-radius: 6px;
  font-family: var(--font-main);
  font-weight: 600;
  font-size: 13px;
  cursor: pointer;
  transition: background .15s, color .15s;
  line-height: 1;
}
.exp-v2-fav:hover { background: var(--bg, #f5f1ea); }
.exp-v2-fav.fav-active {
  background: var(--red, #c0392b);
  color: var(--paper, #fff);
  border-color: var(--red, #c0392b);
}
.exp-v2-fav-icon { font-size: 15px; line-height: 1; }
.exp-v2-fav-label { font-size: 13px; }

/* ── Mobile right-edge clipping fixes. The lot-card body has a few flex
   rows that didn't allow children to shrink below their content width
   (default behaviour) — that overflowed to the right on narrow viewports
   and clipped trailing characters. Force min-width:0 on the wrappers and
   word-break on long strings. ── */
@media (max-width: 560px) {
  .lot-card-v2 { min-width: 0; }
  .lot-card-v2 .lcv2-strip { min-width: 0; }
  .lot-card-v2 .lcv2-strip-l,
  .lot-card-v2 .lcv2-strip-r { min-width: 0; }
  .lot-card-v2 .lcv2-meta { min-width: 0; word-break: break-word; }
  .lot-card-v2 .lcv2-quote { word-break: break-word; overflow-wrap: anywhere; }
  .lot-card-v2 .lcv2-foot { min-width: 0; }
  .lot-card-v2 .lcv2-foot a {
    padding: 11px 12px;
    font-size: 12px;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .exp-v2 .exp-v2-header .right .ctas { width: 100%; }
  .exp-v2-bid { flex: 1 1 auto; justify-content: center; }
  .exp-v2-bid-label { max-width: none; }
  .exp-v2-fav { flex-shrink: 0; }
  /* The Pro/Favourites/Analysed pill row was overflowing on narrow phones —
     allow horizontal scroll instead of clipping trailing text. */
  .sp-toggle-row {
    flex-wrap: nowrap;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
  }
  .sp-toggle-row::-webkit-scrollbar { display: none; }
}

/* ═══════════════════════════════════════════════════════════════
   Mobile launch fixes (audits/mobile-ui-review-2026-05-10.md)
   B1, B2, F2, F4, L5, L8 — small surgical CSS, applied at the
   widths the issues actually appear at.
   ═══════════════════════════════════════════════════════════════ */

/* B1 — At iPhone-SE width, the right-hand nav (Pricing + Blog + Sign-in)
   exceeded the 375px viewport, pushing the Sign-in CTA ~17px past the
   right edge (overflow:hidden on body clipped it silently). Hide the
   secondary text links at <420px — both are reachable from the footer. */
@media (max-width: 419px) {
  .nav .nav-link-blog { display: none !important; }
}

/* B2 — paywall modal was 1158px tall in 667–812px viewports with
   overflow:visible and max-height:none; the title and reason text sat
   at top:-148..-245 (off-screen, unreachable). Mirror the existing
   #signupModal .modal scroll-within rule. */
.modal.pw-modal {
  max-height: calc(100vh - 32px);
  max-height: calc(100dvh - 32px);
  overflow-y: auto;
  overflow-x: hidden;
}
@media (max-width: 720px) {
  .modal.pw-modal {
    max-height: calc(100vh - 16px);
    max-height: calc(100dvh - 16px);
  }
}

/* L5 — address postcode (.pc) was inline by default and collided with
   the wrapped final word of the address h3 on narrow viewports
   ("Whitehall Road, WhitehallBS5 9BJ"). Force it onto its own line. */
.lcv2-addr .pc { display: block; margin-top: 4px; }

/* F4 — every interactive input/select on mobile should clear the WCAG
   2.5.5 minimum (44×44). Previous heights ranged 36–40px. Scoped to
   <=720px so desktop can keep its tighter chrome. */
@media (max-width: 720px) {
  .tb-search,
  .tb-select,
  .digest-form-row input[type="email"],
  input[type="text"]:not([class*="bc"]),
  input[type="email"]:not([class*="bc"]),
  input[type="number"]:not([class*="bc"]),
  .mobile-filters-toggle {
    min-height: 44px;
  }
  .pw-close { min-width: 44px; }
}

/* F2 — footer text links (Pricing / Privacy Policy / Terms / Contact)
   were 16px tall as plain inline anchors. Pad them out so each is a
   reasonable tap target. The horizontal margins are kept via the
   existing inline `margin: 0 8px` on the anchors in index.html. */
footer p a {
  display: inline-block;
  padding: 8px 4px;
  min-height: 32px;
  line-height: 1.6;
}

/* L8 — Save pill was positioned at the absolute right edge of the lot
   hero image; on aerial-style photos it felt precarious. Push it inward
   a few px so it has visual breathing room. */
.lcv2-save { right: 12px !important; top: 12px !important; }

/* L11 — expanded-panel address H1 was using a clamp that overshot at
   <420px (3-line wrap for short addresses like "Whitehall Road,
   Whitehall"). Cap the lower bound so it doesn't dominate. */
@media (max-width: 480px) {
  .exp-v2 .exp-v2-header .left h1 {
    font-size: clamp(1.6rem, 6.5vw, 2.2rem);
    line-height: 1.15;
  }
}

/* L3 / L9 — expanded panel hero image. Added when the section gained
   buildExpV2HeroImage() so it has somewhere to render at the top. */
.exp-v2 .exp-v2-hero {
  display: block;
  width: 100%;
  height: 220px;
  object-fit: cover;
  border-bottom: 1px solid var(--border-strong);
}
@media (max-width: 480px) {
  .exp-v2 .exp-v2-hero { height: 180px; }
}

/* ───────────────────────────────────────────────────────────────
   CURATOR WIDGET — homepage "Today's top deals" section, populated
   client-side by app.js::renderCuratorWidget() from /api/curator/today.
   Lives between the user bar and the filter panel; collapses gracefully
   when no approved picks exist for today.
   ─────────────────────────────────────────────────────────────── */
.curator-section { margin: 16px 0 20px; }
.curator-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; margin: 0 0 12px; flex-wrap: wrap; }
.curator-head h2 { font-family: var(--font-display); font-size: 1.4rem; font-weight: 600; color: var(--ink); letter-spacing: -.01em; }
.curator-head .curator-meta { font-size: .78rem; color: var(--text3); display: inline-flex; align-items: center; gap: 8px; }
.curator-head .curator-stale-tag { font-size: .68rem; padding: 2px 8px; background: var(--amber-light); color: var(--amber); border-radius: 10px; font-weight: 600; }
.curator-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; }
@media (max-width: 980px) { .curator-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 540px) { .curator-grid { grid-template-columns: 1fr; } }

.curator-card { background: var(--paper); border: 1px solid var(--border-strong); border-radius: var(--radius); overflow: hidden; display: flex; flex-direction: column; transition: transform .15s, box-shadow .15s; cursor: pointer; }
.curator-card:hover { transform: translateY(-2px); box-shadow: 0 6px 20px rgba(26,26,24,.06); border-color: var(--red); }
.curator-card-img { aspect-ratio: 1.4/1; background: var(--cream2); position: relative; overflow: hidden; }
.curator-card-img img { width: 100%; height: 100%; object-fit: cover; display: block; }
.curator-card-img .curator-rank { position: absolute; top: 8px; left: 8px; font-family: var(--font-mono); font-size: .7rem; font-weight: 600; color: #fff; background: rgba(26,26,24,.72); padding: 3px 8px; border-radius: 4px; letter-spacing: .02em; }
.curator-card-img .curator-score { position: absolute; bottom: 8px; right: 8px; font-family: var(--font-mono); font-size: .72rem; font-weight: 700; color: #fff; background: var(--red); padding: 3px 8px; border-radius: 4px; }
.curator-card-body { padding: 12px 14px 14px; display: flex; flex-direction: column; flex: 1; }
.curator-card-headline { font-family: var(--font-display); font-size: .98rem; font-weight: 600; color: var(--ink); line-height: 1.3; margin: 0 0 6px; }
.curator-card-price { font-family: var(--font-mono); font-size: .78rem; color: var(--text2); margin: 0 0 8px; }
.curator-card-house { color: var(--text3); }
.curator-card-hook { font-size: .8rem; color: var(--text2); line-height: 1.5; flex: 1; margin: 0 0 12px; }
.curator-card-cta { font-family: var(--font-main); font-size: .78rem; font-weight: 600; color: var(--red); align-self: flex-start; }
.curator-card:hover .curator-card-cta { text-decoration: underline; }

.curator-signup { margin-top: 18px; padding: 14px 18px; background: var(--paper); border: 1px solid var(--border-strong); border-radius: var(--radius); display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.curator-signup .curator-signup-copy { flex: 1; min-width: 220px; }
.curator-signup .curator-signup-copy strong { display: block; font-family: var(--font-display); font-size: 1rem; color: var(--ink); margin-bottom: 2px; }
.curator-signup .curator-signup-copy span { font-size: .82rem; color: var(--text2); }
.curator-signup form { display: flex; gap: 8px; flex: 1; min-width: 280px; }
.curator-signup input[type="email"] { flex: 1; min-width: 0; padding: 10px 12px; border: 1px solid var(--border-strong); border-radius: var(--radius-sm); font-family: var(--font-main); font-size: .85rem; background: var(--white); color: var(--ink); }
.curator-signup input[type="email"]:focus { outline: none; border-color: var(--red); }
.curator-signup button { padding: 10px 18px; border: none; border-radius: var(--radius-sm); background: var(--red); color: #fff; font-family: var(--font-main); font-size: .82rem; font-weight: 600; cursor: pointer; transition: background .15s; }
.curator-signup button:hover { background: var(--red-hover); }
.curator-signup button:disabled { opacity: .5; cursor: wait; }
.curator-signup-msg { font-size: .8rem; color: var(--signal-green); padding: 4px 0; flex-basis: 100%; min-height: 1.2em; }
.curator-signup-msg.err { color: var(--red); }

@media (max-width: 540px) {
  .curator-head h2 { font-size: 1.15rem; }
  .curator-card-img { aspect-ratio: 1.6/1; }
}

/* ───────────────────────────────────────────────────────────────
   VALUE ESTIMATOR — "Estimated value" section on /lot/:id pages
   (rendered server-side by routes/lots-render.js::renderValueEstimateSection)
   plus the one-liner under the price on homepage cards.
   ─────────────────────────────────────────────────────────────── */
.lot-est-value { background: var(--paper); border: 1px solid var(--border-strong); border-radius: var(--radius-sm); padding: 16px 18px; }
.lot-est-value h2 { font-family: var(--font-display); font-size: 1.05rem; font-weight: 600; margin: 0 0 12px; color: var(--ink); }
.lev-headline { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; margin-bottom: 10px; }
.lev-band { font-family: var(--font-mono); font-size: 1.25rem; font-weight: 600; color: var(--ink); }
.lev-mid { font-family: var(--font-main); font-size: .85rem; color: var(--text2); }
.lev-conf { font-size: .7rem; font-weight: 600; padding: 3px 9px; border-radius: 12px; letter-spacing: .02em; }
.lev-conf-high { background: rgba(46,125,50,.10); color: var(--signal-green); border: 1px solid rgba(46,125,50,.20); }
.lev-conf-medium { background: var(--amber-light); color: var(--amber); border: 1px solid rgba(196,122,21,.20); }
.lev-conf-low { background: var(--cream2); color: var(--text3); border: 1px solid var(--border-strong); }
.lev-working { font-size: .82rem; color: var(--text2); margin: 0 0 10px; }
.lev-working summary { cursor: pointer; color: var(--red); font-weight: 600; padding: 4px 0; }
.lev-working summary:hover { text-decoration: underline; }
.lev-working p { margin: 8px 0 0; line-height: 1.55; color: var(--text2); }
.lev-disclaimer { font-size: .72rem; color: var(--text3); margin: 0; line-height: 1.45; }

/* Card variant — single-line "Est. £172k · medium" beneath the price.
   Designed to slot under .lcv2-price (existing list-card price line). */
.card-est-value { font-size: .72rem; color: var(--text3); margin-top: 2px; display: inline-flex; gap: 6px; align-items: center; font-family: var(--font-mono); }
.card-est-value .ce-band { color: var(--text2); font-weight: 600; }
.card-est-value .ce-conf-high { color: var(--signal-green); }
.card-est-value .ce-conf-medium { color: var(--amber); }
.card-est-value .ce-conf-low { color: var(--text3); }

/* ═══════════════════════════════════════════════════════════════
   SMARTPHONE UI — Rightmove-aligned redesign.

   Strategy (Option A, single DOM, CSS-only morph):
   - Desktop (≥641px): `.sp-sheet-body` is `display:contents` — it
     vanishes from layout and the filter rows render exactly as before.
   - Mobile (≤640px): `.sp-sheet-body` becomes a fixed bottom sheet
     that slides up when `body.sheet-open` is set by toggleMobileFilters().
   - Sticky top bar carries Search + Filters + Sort + Grid/List on mobile.
   - Lot card hero overlays AI score (top-left) + Save (top-right) +
     auction date pill (bottom-left); body re-orders so guide price,
     address, house and fundability fit above the card fold.
   - Colour, font and radius tokens (--red, --paper, --font-display, etc.)
     are reused 1:1 — no new design tokens introduced.
   ═══════════════════════════════════════════════════════════════ */

/* Sheet body wrapper — invisible to layout on desktop. */
.sp-sheet-body { display: contents; }
.sp-sheet-header,
.sp-sheet-footer { display: none; }
#sheetBackdrop { display: none; }
.sp-date-chips { display: none; }
.sp-sort-mirror { display: none; }

/* Keywords (BETA) section — Rightmove-aligned. Demotes the AI search
   from a prominent top-bar CTA to a labelled refinement tool inside
   the filter area. Renders inline on desktop (since .sp-sheet-body is
   display:contents) and inside the bottom sheet on mobile.
   --------------------------------------------------------------- */
.sp-keywords-section {
  padding: 14px 18px;
  background: var(--paper);
  border-bottom: 1px solid var(--border-strong);
}
.sp-keywords-head { margin-bottom: 10px; }
.sp-keywords-title {
  font-family: var(--font-display);
  font-size: 1.05rem;
  font-weight: 600;
  color: var(--ink);
  margin: 0;
  display: inline-flex;
  align-items: center;
  gap: 8px;
}
.beta-tag {
  font-family: var(--font-mono);
  font-size: .62rem;
  font-weight: 600;
  letter-spacing: .08em;
  color: var(--ink);
  border: 1px solid var(--ink);
  background: transparent;
  padding: 2px 7px;
  border-radius: 999px;
  text-transform: uppercase;
}
.sp-keywords-sub {
  font-family: var(--font-main);
  font-size: .82rem;
  color: var(--text2);
  margin: 4px 0 0;
  line-height: 1.4;
}
.sp-keywords-section .sp-ai-group {
  position: relative;
  display: flex;
  gap: 8px;
  align-items: stretch;
  margin: 6px 0 10px;
}
.sp-keywords-section .sp-ai-group #smartQuery {
  flex: 1 1 auto;
  min-width: 0;
  height: auto;
  min-height: 44px;
  padding: 10px 14px;
  font-family: var(--font-main);
  font-size: .9rem;
  text-transform: none;
  letter-spacing: 0;
  border: 1px solid var(--border-strong);
  border-radius: 10px;
  background: var(--white);
  color: var(--ink);
}
.sp-keywords-section .sp-ai-group #smartQuery::placeholder {
  font-family: var(--font-main);
  text-transform: none;
  letter-spacing: 0;
  font-size: .9rem;
  color: var(--text3);
  opacity: 1;
}
.sp-keywords-section .sp-ai-group #mainBtn {
  flex: 0 0 auto;
  height: auto;
  padding: 0 18px;
  min-height: 44px;
  border-radius: 10px;
  border: 1px solid var(--red);
  background: var(--red);
  color: var(--white);
  font-family: var(--font-main);
  font-size: .9rem;
  font-weight: 600;
  text-transform: none;
  letter-spacing: 0;
  cursor: pointer;
}
.sp-keywords-section .sp-ai-group #mainBtn:hover { background: var(--red-hover); border-color: var(--red-hover); }
.sp-keywords-disclaimer {
  font-family: var(--font-main);
  font-size: .74rem;
  color: var(--text3);
  line-height: 1.45;
  margin: 0;
}

@media (max-width: 640px) {
  /* ── Sticky top bar (Rightmove pattern) ──
     Row 1 (.sp-search-row) becomes the always-visible bar: search input,
     Filters pill, Sort mirror, Grid/List toggle. Per-page select hides on
     mobile (low-value chrome — defaults to 30/page).
  */
  .search-panel { box-shadow: 0 1px 2px rgba(0,0,0,.04); }
  .sp-search-row {
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    padding: 10px 12px;
  }
  .sp-search-row .mobile-filters-toggle { order: 1; flex: 1 1 auto; }
  .sp-search-row .sp-sort-mirror {
    display: inline-flex;
    order: 2;
    flex: 1 1 auto;
    min-width: 0;
    max-width: 160px;
    padding: 8px 10px;
    font-size: .82rem;
    border: 1px solid var(--border);
    background: var(--white);
    border-radius: 8px;
  }
  .sp-search-row .view-toggle { display: flex; order: 3; flex: 0 0 auto; }
  .sp-search-row .sp-per-page,
  .sp-search-row .sp-page-info { display: none !important; }

  /* Hide the desktop in-row sort and the desktop Pro-filters trigger —
     both are surfaced inside the sheet instead. */
  .sp-filter-row #fSort { display: none; }
  .sp-filter-row .more-filters-btn { display: none; }

  /* ── Bottom sheet ── */
  .sp-sheet-body {
    display: block;
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    max-height: 88vh;
    background: var(--white);
    border-radius: 16px 16px 0 0;
    box-shadow: 0 -8px 32px rgba(26,26,24,.18);
    transform: translateY(100%);
    transition: transform .22s ease;
    z-index: 60;
    overflow-y: auto;
    overscroll-behavior: contain;
    -webkit-overflow-scrolling: touch;
    padding-bottom: 96px; /* room for sticky footer */
  }
  body.sheet-open .sp-sheet-body { transform: translateY(0); }

  /* Backdrop */
  #sheetBackdrop {
    display: block;
    position: fixed;
    inset: 0;
    background: rgba(26,26,24,.45);
    opacity: 0;
    pointer-events: none;
    transition: opacity .2s ease;
    z-index: 59;
  }
  body.sheet-open #sheetBackdrop { opacity: 1; pointer-events: auto; }

  /* Lock body scroll while the sheet is open. Use `overscroll-behavior`
     and explicit overflow rather than `touch-action: none`, because
     `touch-action: none` cascades to descendants and disables taps on
     the sheet's own controls — leaving every filter looking inert. */
  body.sheet-open { overflow: hidden; }
  body.sheet-open #wrap { overflow: hidden; }

  /* Stacking-context escape. `.search-panel` is `position: sticky;
     z-index: 10`, which creates a stacking context that traps any
     descendant z-index relative to it. The bottom sheet inside the panel
     declares `z-index: 60`, but in the root stacking context the whole
     panel still sits at z:10 — below `#sheetBackdrop` at z:59. The
     visible symptom: controls in the sheet look greyed out (the
     backdrop's 45% black paints on top of them) and every tap lands on
     the backdrop instead of the underlying control. Raising the panel
     above the backdrop while the sheet is open fixes both. */
  body.sheet-open .search-panel { z-index: 70; }

  /* Sheet header — drag handle + title + close */
  .sp-sheet-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 14px 18px 10px;
    border-bottom: 1px solid var(--border);
    position: sticky;
    top: 0;
    background: var(--white);
    z-index: 2;
  }
  .sp-sheet-header::before {
    content: '';
    position: absolute;
    top: 6px;
    left: 50%;
    transform: translateX(-50%);
    width: 36px;
    height: 4px;
    background: var(--border-strong);
    border-radius: 2px;
  }
  .sp-sheet-title {
    font-family: var(--font-display);
    font-size: 1.1rem;
    font-weight: 600;
    color: var(--ink);
    margin: 4px 0 0;
  }
  .sp-sheet-close {
    background: transparent;
    border: none;
    font-size: 1.2rem;
    color: var(--text2);
    cursor: pointer;
    padding: 8px;
    min-width: 44px;
    min-height: 44px;
    margin-top: 4px;
  }

  /* Sheet sections — make every secondary row stack to full width */
  .sp-sheet-body .sp-filter-row,
  .sp-sheet-body .sp-toggle-row {
    flex-direction: column;
    align-items: stretch;
    gap: 10px;
    padding: 14px 18px;
    border-bottom: 1px solid var(--border);
    background: var(--white);
  }
  .sp-sheet-body .sp-filter-row > *,
  .sp-sheet-body .sp-toggle-row > * {
    width: 100%;
    /* The desktop `.sp-filter-row > *` rule sets `flex: 1 1 140px` to equalise
       widths in a horizontal row. Under the sheet's `flex-direction: column`
       that 140px becomes the basis on the *vertical* axis — every child
       renders 140px tall (massive "Clear all" / select boxes). Reset. */
    flex: 0 0 auto;
    min-height: 0;
  }
  /* Restyle the editorial chips (uppercase mono on cream paper — designed
     for the desktop chip row) so they read as normal interactive form
     fields inside the white sheet. Without this override they look
     "greyed out" — the existing rules at styles.css:1797–1815 win on the
     properties this block doesn't explicitly set. */
  .sp-sheet-body .sp-filter-row .tb-select,
  .sp-sheet-body .sp-filter-row .tb-search,
  .sp-sheet-body .sp-filter-row .price-dd-btn,
  .sp-sheet-body .sp-filter-row .clear-all-btn,
  .sp-sheet-body .more-filters-pop .tb-select,
  .sp-sheet-body .more-filters-pop .tb-search,
  .sp-sheet-body .more-filters-pop .house-dropdown-btn {
    width: 100%;
    max-width: none;
    height: auto;
    min-height: 48px;
    padding: 12px 14px;
    font-family: var(--font-main);
    font-size: .95rem;
    text-transform: none;
    letter-spacing: 0;
    background: var(--white);
    color: var(--ink);
    border: 1px solid var(--border-strong);
    border-radius: 10px;
    line-height: 1.2;
    -webkit-appearance: none;
    appearance: none;
  }
  /* Native arrow indicator for selects (the appearance reset removes it) */
  .sp-sheet-body .sp-filter-row .tb-select,
  .sp-sheet-body .more-filters-pop .tb-select {
    background-image: linear-gradient(45deg, transparent 50%, var(--text2) 50%),
                      linear-gradient(135deg, var(--text2) 50%, transparent 50%);
    background-position: calc(100% - 18px) 50%, calc(100% - 13px) 50%;
    background-size: 5px 5px, 5px 5px;
    background-repeat: no-repeat;
    padding-right: 34px;
  }
  /* Placeholders are normal-case inside the sheet, not the desktop's
     uppercase mono. */
  .sp-sheet-body .sp-filter-row input.tb-search,
  .sp-sheet-body .more-filters-pop input.tb-search {
    font-family: var(--font-main);
    text-transform: none;
    letter-spacing: 0;
    font-size: .95rem;
  }
  .sp-sheet-body .sp-filter-row input.tb-search::placeholder,
  .sp-sheet-body .more-filters-pop input.tb-search::placeholder {
    font-family: var(--font-main);
    text-transform: none;
    letter-spacing: 0;
    font-size: .95rem;
    color: var(--text3);
    opacity: 1;
  }
  /* Active-filter ink-fill from the desktop row would invert text/bg
     awkwardly inside the white sheet — neutralise it. */
  .sp-sheet-body .sp-filter-row .tb-select.active-filter,
  .sp-sheet-body .sp-filter-row .price-dd-btn.active-filter,
  .sp-sheet-body .sp-filter-row .tb-search:not(:placeholder-shown) {
    background: var(--white);
    color: var(--ink);
    border-color: var(--red);
  }
  /* "Clear all" inside the sheet — drop the red outline button styling */
  .sp-sheet-body .sp-filter-row .clear-all-btn {
    color: var(--text2);
    border-color: var(--border-strong);
    background: var(--white);
  }

  /* Auction-date chip group — Rightmove-style segmented control,
     mirrors #fLookahead. */
  .sp-date-chips {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    padding: 14px 18px;
    border-bottom: 1px solid var(--border);
  }
  .sp-section-label {
    flex: 1 1 100%;
    font-family: var(--font-main);
    font-size: .72rem;
    text-transform: uppercase;
    letter-spacing: .06em;
    color: var(--text3);
    font-weight: 600;
    margin-bottom: 2px;
  }
  .sp-chip {
    flex: 1 1 0;
    min-height: 44px;
    border: 1px solid var(--border-strong);
    background: var(--white);
    color: var(--text);
    font-family: var(--font-main);
    font-size: .85rem;
    font-weight: 500;
    border-radius: 999px;
    padding: 8px 14px;
    cursor: pointer;
    transition: background .15s, color .15s, border-color .15s;
  }
  .sp-chip.is-active {
    background: var(--ink);
    border-color: var(--ink);
    color: var(--white);
  }

  /* Promote the "Pro filters" popover into an inline sheet subsection
     on mobile — the floating popover doesn't suit the sheet column. */
  .sp-sheet-body .more-filters-dd { width: 100%; }
  .sp-sheet-body .more-filters-pop {
    display: block !important;
    position: static;
    box-shadow: none;
    border: none;
    padding: 0;
    background: transparent;
    min-width: 0;
    width: 100%;
  }
  .sp-sheet-body .more-filters-pop .mf-grid {
    display: flex;
    flex-direction: column;
    gap: 10px;
  }
  .sp-sheet-body .more-filters-pop .mf-field { width: 100%; }
  .sp-sheet-body .more-filters-pop .mf-field label {
    display: block;
    font-size: .72rem;
    text-transform: uppercase;
    letter-spacing: .06em;
    color: var(--text3);
    font-weight: 600;
    margin-bottom: 4px;
  }
  .sp-sheet-body .mf-clear { display: none; }

  /* Sheet sticky footer — Reset + Show N results */
  .sp-sheet-footer {
    display: flex;
    gap: 10px;
    padding: 12px 16px;
    position: sticky;
    bottom: 0;
    background: var(--white);
    border-top: 1px solid var(--border);
    box-shadow: 0 -4px 12px rgba(0,0,0,.06);
    z-index: 2;
  }
  .sp-sheet-reset {
    flex: 0 0 40%;
    min-height: 48px;
    background: var(--white);
    border: 1px solid var(--border-strong);
    color: var(--text);
    font-family: var(--font-main);
    font-size: .9rem;
    font-weight: 600;
    border-radius: 10px;
    cursor: pointer;
  }
  .sp-sheet-apply {
    flex: 1 1 auto;
    min-height: 48px;
    background: var(--red);
    border: 1px solid var(--red);
    color: var(--white);
    font-family: var(--font-main);
    font-size: .95rem;
    font-weight: 600;
    border-radius: 10px;
    cursor: pointer;
  }
  .sp-sheet-apply:active { background: var(--red-hover); border-color: var(--red-hover); }

  /* The existing .mobile-expanded mechanism (which used to surface
     the filter rows inline) is superseded by the sheet — make sure
     the inline rows aren't displayed when the sheet isn't open. */
  .search-panel .sp-filter-row,
  .search-panel .sp-toggle-row { display: flex; }

  /* ── Lot card mobile reorg ──
     Surface above-the-fold: AI score (top-left of hero), save (top-right
     of hero, existing), auction-house + lot # + date pill (bottom-left
     of hero), then guide price, address, fundability. The desktop dark
     header strip is hidden — same info is encoded in the hero overlay. */
  .lot-card-v2 .lcv2-strip { display: none; }
  .lot-card-v2 .lcv2-hero-img,
  .lot-card-v2 .lcv2-hero-stripe { position: relative; overflow: hidden; }
  .lot-card-v2 .lcv2-hero-img::after,
  .lot-card-v2 .lcv2-hero-stripe::after {
    /* Gradient scrim so the auction-house pill stays legible on light photos. */
    content: '';
    position: absolute;
    inset: auto 0 0 0;
    height: 55%;
    background: linear-gradient(to top, rgba(26,26,24,.55), rgba(26,26,24,0));
    pointer-events: none;
    z-index: 1;
  }
  .lot-card-v2 .lcv2-mobile-overlays { display: contents; }
  /* Auction house · lot # · date — footer pill inside hero */
  .lot-card-v2 .lcv2-strip-mobile {
    position: absolute;
    left: 10px;
    bottom: 10px;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    background: rgba(26,26,24,.78);
    color: var(--white);
    font-family: var(--font-mono);
    font-size: .68rem;
    text-transform: uppercase;
    letter-spacing: .04em;
    padding: 5px 10px;
    border-radius: 6px;
    z-index: 3;
    max-width: calc(100% - 20px);
  }
  .lot-card-v2 .lcv2-strip-mobile span:not(.dot) {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    min-width: 0;
  }
  .lot-card-v2 .lcv2-strip-mobile .dot {
    width: 6px; height: 6px; border-radius: 999px; display: inline-block; flex-shrink: 0;
    background: var(--signal-green);
  }
  .lot-card-v2 .lcv2-strip-mobile .dot.red { background: var(--red); }
  .lot-card-v2 .lcv2-strip-mobile .dot.amber { background: var(--signal-amber); }
  .lot-card-v2 .lcv2-strip-mobile .dot.green { background: var(--signal-green); }
  /* AI score badge — overlay top-left of hero */
  .lot-card-v2 .lcv2-score-mobile {
    position: absolute;
    top: 10px;
    left: 10px;
    z-index: 4;
    min-width: 36px;
    height: 36px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    background: var(--white);
    color: var(--ink);
    font-family: var(--font-mono);
    font-size: .95rem;
    font-weight: 700;
    border-radius: 999px;
    padding: 0 8px;
    box-shadow: 0 2px 6px rgba(0,0,0,.18);
  }
  .lot-card-v2 .lcv2-score-mobile.green { background: var(--signal-green); color: var(--white); }
  .lot-card-v2 .lcv2-score-mobile.amber { background: var(--signal-amber); color: var(--white); }
  /* Hide the in-flow score cell on mobile — overlay surfaces it instead */
  .lot-card-v2 .lcv2-stats .cell.score { display: none; }
  /* Promote guide price + yield to a two-column row below hero */
  .lot-card-v2 .lcv2-stats {
    grid-template-columns: 1fr auto;
    padding: 12px 14px 8px;
  }
  .lot-card-v2 .lcv2-stats .cell.guide .num {
    font-family: var(--font-mono);
    font-size: 1.35rem;
    font-weight: 700;
    color: var(--ink);
  }
  .lot-card-v2 .lcv2-stats .cell.yield .num { font-size: .9rem; }
  /* Address tightens */
  .lot-card-v2 .lcv2-addr {
    padding: 4px 14px 0;
  }
  .lot-card-v2 .lcv2-addr h3.addr,
  .lot-card-v2 .lcv2-addr .addr {
    font-size: 1rem;
    line-height: 1.3;
  }
  .lot-card-v2 .lcv2-addr .pc { font-size: .75rem; color: var(--text3); }
  /* Body — slightly less padding on mobile */
  .lot-card-v2 .lcv2-body { padding: 8px 14px 4px; }
  .lot-card-v2 .lcv2-tags { gap: 4px; }

  /* Save pill is already absolutely positioned by the existing rule —
     keep it on top of the hero scrim. */
  .lot-card-v2 .lcv2-save { z-index: 4; }
}

/* Tablet+ — keep the desktop inline layout. Defensive — `display:contents`
   on .sp-sheet-body already does this above 640px, but spell it out. */
@media (min-width: 641px) {
  .sp-sheet-header,
  .sp-sheet-footer,
  .sp-date-chips,
  #sheetBackdrop,
  .sp-sort-mirror,
  .lcv2-mobile-overlays { display: none !important; }
}

/* ───────────────────────────────────────────────────────────────
   LOT GALLERY + LIGHTBOX (PR A3)
   Shown inside expanded lot panel, between the header (with big hero)
   and the analysis grid. Spans both columns of .exp-v2 layout so the
   thumbnails get room to breathe.
   ─────────────────────────────────────────────────────────────── */
.exp-gallery {
  grid-column: 1 / -1;
  border: 1px solid var(--border, rgba(0,0,0,.08));
  border-radius: 10px;
  background: var(--paper, #fff);
  overflow: hidden;
  margin-bottom: 16px;
}
.exp-gallery-head {
  padding: 10px 14px;
  background: var(--cream2, #E8E4DC);
  border-bottom: 1px solid var(--border, rgba(0,0,0,.08));
}
.exp-gallery-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 8px;
  padding: 12px;
}
@media (max-width: 900px) { .exp-gallery-grid { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 600px) { .exp-gallery-grid { grid-template-columns: repeat(2, 1fr); gap: 6px; padding: 8px; } }

.exp-gallery-tile {
  position: relative;
  aspect-ratio: 4 / 3;
  padding: 0;
  border: 1px solid var(--border, rgba(0,0,0,.08));
  border-radius: 6px;
  background: var(--cream, #F5F1EA);
  cursor: pointer;
  overflow: hidden;
  transition: transform .15s ease, box-shadow .15s ease;
}
.exp-gallery-tile:hover,
.exp-gallery-tile:focus-visible {
  transform: scale(1.02);
  box-shadow: 0 4px 12px rgba(0,0,0,.12);
  outline: none;
  border-color: var(--red, #C0392B);
}
.exp-gallery-tile img {
  width: 100%; height: 100%;
  object-fit: cover;
  display: block;
}
.exp-gallery-more {
  position: absolute; inset: 0;
  display: flex; align-items: center; justify-content: center;
  background: rgba(26, 26, 24, 0.65);
  color: #fff;
  font-family: var(--font-mono, monospace);
  font-size: 16px;
  font-weight: 600;
  letter-spacing: .04em;
  pointer-events: none;
}
.exp-gallery-floorplan {
  /* Floor plan is a different content type — cream background + label
     to distinguish from photos in the grid. */
  background: var(--cream, #F5F1EA);
}
.exp-gallery-floorplan img {
  object-fit: contain;
  background: #fff;
  padding: 6px;
}
.exp-gallery-fp-label {
  position: absolute;
  left: 6px; bottom: 6px;
  padding: 2px 6px;
  background: var(--ink, #1A1A18);
  color: var(--paper, #fff);
  font-family: var(--font-mono, monospace);
  font-size: 9px;
  font-weight: 600;
  letter-spacing: .06em;
  text-transform: uppercase;
  border-radius: 3px;
  pointer-events: none;
}

/* ─── Lightbox overlay ─── */
.exp-lightbox {
  display: none;
  position: fixed; inset: 0;
  z-index: 9999;
  background: rgba(15, 15, 14, 0.92);
  align-items: center; justify-content: center;
  padding: 32px;
}
.exp-lightbox.open { display: flex; }
.exp-lightbox-stage {
  position: relative;
  max-width: min(1400px, 95vw);
  max-height: 90vh;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 12px;
}
.exp-lightbox-img {
  max-width: 100%;
  max-height: calc(90vh - 40px);
  object-fit: contain;
  background: #fff;
  border-radius: 4px;
  box-shadow: 0 4px 24px rgba(0,0,0,.4);
}
.exp-lightbox-caption {
  font-family: var(--font-mono, monospace);
  font-size: 12px;
  color: rgba(255,255,255,.85);
  letter-spacing: .04em;
  text-transform: uppercase;
  text-align: center;
}
.exp-lightbox-close,
.exp-lightbox-nav {
  position: absolute;
  background: rgba(255,255,255,.1);
  color: #fff;
  border: 1px solid rgba(255,255,255,.25);
  cursor: pointer;
  font-family: var(--font-mono, monospace);
  line-height: 1;
  border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  transition: background .15s ease, border-color .15s ease;
}
.exp-lightbox-close:hover,
.exp-lightbox-nav:hover,
.exp-lightbox-close:focus-visible,
.exp-lightbox-nav:focus-visible {
  background: rgba(255,255,255,.2);
  border-color: rgba(255,255,255,.5);
  outline: none;
}
.exp-lightbox-close {
  top: 16px; right: 16px;
  width: 40px; height: 40px;
  font-size: 24px;
}
.exp-lightbox-nav {
  top: 50%;
  transform: translateY(-50%);
  width: 48px; height: 48px;
  font-size: 28px;
}
.exp-lightbox-prev { left: 16px; }
.exp-lightbox-next { right: 16px; }
@media (max-width: 600px) {
  .exp-lightbox { padding: 8px; }
  .exp-lightbox-close { top: 8px; right: 8px; width: 36px; height: 36px; }
  .exp-lightbox-nav { width: 40px; height: 40px; font-size: 24px; }
  .exp-lightbox-prev { left: 8px; }
  .exp-lightbox-next { right: 8px; }
}
