/* =====================================================================
   PROPERTYKE — DESIGN SYSTEM
   Palette: deep teal (trust, land/nature) + warm gold (value, sunlight)
   Type: Plus Jakarta Sans (display) / Inter (body)
   ===================================================================== */

:root{
  --teal-900:#015f4f;
  --teal-800:#015f4f;
  --teal-700:#015f4f;
  --teal-600:#1c6363;
  --teal-50:#eef6f5;
  --gold-500:#ff8400;
  --gold-600:#ff8400;
  --gold-100:#fbf1dc;
  --ink-900:#151a19;
  --ink-700:#3d4644;
  --ink-500:#6b7573;
  --ink-300:#a6afac;
  --line:#e4e9e7;
  --bg:#fff;
  --white:#ffffff;
  --danger:#c0392b;
  --success:#1c7a4b;
  --radius:2px;
  --radius-sm:2px;
  --shadow:0 2px 10px rgba(11,46,46,.08);
  --shadow-lg:0 12px 32px rgba(11,46,46,.16);
  --header-h:68px;
  --bottomnav-h:60px;
}

*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;
  font-family:'Inter',system-ui,-apple-system,Segoe UI,Roboto,sans-serif;
  color:var(--ink-900);
  background:var(--bg);
  line-height:1.5;
  padding-bottom:0;
}
body.has-bottom-nav{padding-bottom:var(--bottomnav-h)}
h1,h2,h3,h4{font-family:'Plus Jakarta Sans','Inter',sans-serif;margin:0 0 .5em;line-height:1.2;color:var(--ink-900)}
h1{font-size:clamp(1.6rem,4vw,2.4rem);font-weight:800}
h2{font-size:clamp(1.3rem,3vw,1.7rem);font-weight:800}
h3{font-size:1.1rem;font-weight:700}
p{margin:0 0 1em}
a{color:inherit;text-decoration:none}
img{max-width:100%;display:block}
ul{margin:0;padding:0;list-style:none}
button{font-family:inherit;cursor:pointer}
input,select,textarea{font-family:inherit;font-size:1rem}
.container{max-width:1220px;margin:0 auto;padding:0 20px}
:focus-visible{outline:3px solid var(--gold-500);outline-offset:2px}
@media (prefers-reduced-motion: reduce){*{animation:none!important;transition:none!important}}

/* ---------- Buttons ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;
  padding:12px 22px;border-radius:2px;font-weight:700;font-size:.95rem;border:2px solid transparent;
  transition:transform .12s ease, box-shadow .12s ease;}
.btn:active{transform:scale(.97)}
.btn-primary{background:var(--gold-500);color:var(--teal-900)}
.btn-primary:hover{background:var(--gold-600)}
.btn-outline{background:transparent;border-color:var(--white);color:var(--white)}
.btn-outline-dark{background:transparent;border-color:var(--teal-800);color:var(--teal-800)}
.btn-teal{background:var(--teal-800);color:var(--white)}
.btn-teal:hover{background:var(--teal-700)}
.btn-block{width:100%}
.btn-sm{padding:8px 16px;font-size:.85rem}
.btn-danger{background:var(--danger);color:#fff}
.btn-ghost{background:var(--teal-50);color:var(--teal-800)}

/* ---------- Header ---------- */
.site-header{position:sticky;top:0;z-index:100;background:var(--white);border-bottom:1px solid var(--line);height:var(--header-h)}
.site-header .container{display:flex;align-items:center;justify-content:space-between;height:100%;gap:20px}
.logo{font-family:'Plus Jakarta Sans',sans-serif;font-weight:800;font-size:1.4rem;color:var(--teal-900);display:flex;align-items:center;gap:6px}
.logo span{color:var(--gold-500)}
.main-nav{display:none}
.main-nav ul{display:flex;gap:26px;align-items:center}
.main-nav a{font-weight:600;font-size:.95rem;color:var(--ink-700)}
.main-nav a:hover{color:var(--teal-800)}
.main-nav .dropdown{position:relative}
.main-nav .dropdown-menu{display:none;position:absolute;top:100%;left:0;background:var(--white);
  box-shadow:var(--shadow-lg);border-radius:var(--radius-sm);padding:10px;min-width:220px;border:1px solid var(--line)}
.main-nav .dropdown:hover .dropdown-menu{display:block}
.main-nav .dropdown-menu a{display:block;padding:8px 12px;border-radius:2px;font-weight:500}
.main-nav .dropdown-menu a:hover{background:var(--teal-50)}
.header-actions{display:flex;align-items:center;gap:10px}
.header-actions .btn{padding:9px 16px;font-size:.85rem}
.header-right{display:flex;align-items:center;gap:10px}
.mobile-menu-btn{display:flex;align-items:center;justify-content:center;background:none;border:none;
  padding:6px;font-size:1.4rem;color:var(--teal-900);line-height:1;cursor:pointer}
@media(min-width:960px){
  .main-nav{display:block}
  .mobile-menu-btn{display:none}
}

/* Toggle menu (hamburger) panel — main nav on all screens below 960px,
   plus the logged-in account links (Dashboard, Add Property, etc.) */
.mobile-menu-panel{position:absolute;top:100%;left:0;right:0;background:var(--white);
  border-bottom:1px solid var(--line);box-shadow:var(--shadow-lg);z-index:99;
  max-height:calc(100vh - var(--header-h));overflow-y:auto}
.mobile-menu-panel[hidden]{display:none}
.mobile-menu-panel .container{display:flex;flex-direction:column;align-items:stretch;padding-top:10px;padding-bottom:14px}
.mobile-menu-panel a{display:flex;align-items:center;justify-content:flex-start;text-align:left;gap:10px;padding:12px 4px;font-weight:600;
  font-size:.94rem;color:var(--ink-700);border-bottom:1px solid var(--line)}
.mobile-menu-panel a:last-child{border-bottom:none}
.mobile-menu-panel a:hover{color:var(--teal-800)}
.mmp-group-label{padding:10px 4px 4px;font-size:.72rem;font-weight:700;text-transform:uppercase;text-align:left;
  letter-spacing:.05em;color:var(--ink-500)}
.mmp-divider{border-top:1px solid var(--line);margin:6px 0}
@media(min-width:960px){.mobile-menu-panel{display:none!important}}

/* ---------- Hero / Search ---------- */
.hero{position:relative;background:linear-gradient(180deg,var(--teal-900),var(--teal-700));
  padding:36px 0 90px;color:var(--white);overflow:hidden}
.hero::after{content:'';position:absolute;inset:0;background:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200"><circle cx="180" cy="20" r="120" fill="%23ffffff" opacity="0.03"/></svg>');pointer-events:none}
.hero h1{color:var(--white);max-width:640px}
.hero p.lead{color:var(--teal-50);opacity:.85;max-width:520px;margin-bottom:24px}

.search-card{background:var(--white);border-radius:var(--radius);box-shadow:var(--shadow-lg);
  padding:16px;margin-top:8px;position:relative;z-index:5}
.search-tabs{display:flex;gap:6px;margin-bottom:14px;background:var(--teal-50);padding:5px;border-radius:2px;width:fit-content}
.search-tabs button{border:none;background:transparent;padding:9px 20px;border-radius:2px;font-weight:700;color:var(--teal-800);font-size:.88rem}
.search-tabs button.active{background:var(--teal-800);color:var(--white)}
.search-fields{display:grid;grid-template-columns:1fr;gap:10px}
@media(min-width:820px){.search-fields{grid-template-columns:1.3fr 1.3fr auto}}
.search-fields select,.search-fields input{width:100%;padding:13px 14px;border-radius:var(--radius-sm);
  border:1.5px solid var(--line);background:var(--white);color:var(--ink-900)}
.search-fields select:focus,.search-fields input:focus{border-color:var(--teal-600)}
.search-fields .btn{padding:13px 26px;white-space:nowrap}

/* ---------- Category chips (homepage) ---------- */
.category-strip{display:flex;gap:14px;overflow-x:auto;padding:22px 0 6px;-webkit-overflow-scrolling:touch}
.category-chip{flex:0 0 auto;min-width:130px;background:var(--white);border:1px solid var(--line);border-radius:var(--radius);
  padding:16px 14px;text-align:center;box-shadow:var(--shadow)}
.category-chip .icon{font-size:1.6rem;margin-bottom:8px}
.category-chip strong{display:block;font-size:.88rem}

/* ---------- Section headers ---------- */
.section{padding:44px 0}
.section-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:18px;gap:12px;flex-wrap:wrap}
.section-head .see-more{font-weight:700;color:var(--teal-700);font-size:.9rem}

/* ---------- Property Grid & Cards ---------- */
/* 2-up on mobile/small screens (the default, mobile-first), 3-up from tablet+ */
.property-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;align-items:stretch}
@media(min-width:520px){.property-grid{gap:16px}}
@media(min-width:760px){.property-grid{grid-template-columns:repeat(3,1fr)}}
@media(min-width:1100px){.property-grid{grid-template-columns:repeat(4,1fr)}}

/* ---------- Blog Grid & Cards ---------- */
.blog-grid{display:grid;grid-template-columns:1fr;gap:20px}
@media(min-width:600px){.blog-grid{grid-template-columns:1fr 1fr}}
@media(min-width:960px){.blog-grid{grid-template-columns:repeat(3,1fr)}}
.blog-card{display:block;background:var(--white);border:1px solid var(--line);border-radius:var(--radius);
  overflow:hidden;text-decoration:none;color:inherit;transition:box-shadow .15s ease}
.blog-card:hover{box-shadow:var(--shadow)}
.blog-card img{width:100%;height:170px;object-fit:cover;display:block;background:var(--teal-50)}
.blog-card-body{padding:14px}
.blog-card-title{font-weight:700;color:var(--ink-900);font-size:1rem;overflow-wrap:anywhere;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.blog-card-excerpt{color:var(--ink-500);font-size:.86rem;margin:8px 0 0;overflow-wrap:anywhere;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.blog-card-date{margin-top:10px;font-size:.76rem;color:var(--ink-500)}

.property-card{background:var(--white);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow);
  border:1px solid var(--line);transition:box-shadow .15s ease, transform .15s ease;display:flex;flex-direction:column;
  min-width:0;height:100%}
.property-card:hover{box-shadow:var(--shadow-lg);transform:translateY(-2px)}
.property-card .thumb{position:relative;height:150px;background:var(--teal-50);flex-shrink:0}
.property-card .thumb img{width:100%;height:150px;object-fit:cover;display:block}
.property-card .badge{position:absolute;top:8px;left:8px;background:var(--teal-900);color:#fff;
  font-size:.64rem;font-weight:700;padding:4px 8px;border-radius:2px;text-transform:uppercase;letter-spacing:.03em}
.property-card .badge.featured{background:var(--gold-500);color:var(--teal-900)}
.property-card .save-btn{position:absolute;top:8px;right:8px;background:rgba(255,255,255,.9);border:none;
  border-radius:50%;width:28px;height:28px;display:flex;align-items:center;justify-content:center;font-size:.9rem}
.property-card .body{padding:10px;flex:1;display:flex;flex-direction:column;gap:4px}
.property-card .price{font-family:'Plus Jakarta Sans',sans-serif;font-weight:800;font-size:.92rem;color:var(--teal-900)}
.property-card .price small{font-weight:600;font-size:.68rem;color:var(--ink-500)}
/* Reserve space for a full 2 lines (line-height x 2) even when the title
   is short — otherwise a 1-line title leaves the rest of the card's
   content sitting higher than a neighbouring card with a 2-line title. */
.property-card .title{font-weight:600;font-size:.8rem;color:var(--ink-700);line-height:1.35;min-height:2.7em;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
/* Reserve one line's height even when a listing has no bedrooms/bathrooms/
   size to show (e.g. bare land) — otherwise that card's meta row collapses
   to nothing while a house card's meta row still takes up a full line. */
.property-card .meta{display:flex;gap:8px;font-size:.7rem;color:var(--ink-500);flex-wrap:wrap;min-height:1.4em}
.property-card .meta span{display:flex;align-items:center;gap:3px;white-space:nowrap}
/* Always sits flush at the bottom of the card, regardless of how much (or
   little) content sits above it, so every card's location line lines up
   in the same row — the actual visible mechanism that makes a grid of
   cards with different amounts of content still look uniform. */
.property-card .loc{font-size:.7rem;color:var(--ink-500);display:flex;align-items:center;gap:3px;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap;margin-top:auto;padding-top:4px}

/* From tablet width up, cards get room to breathe again */
@media(min-width:520px){
  .property-card .badge{top:10px;left:10px;font-size:.72rem;padding:5px 10px}
  .property-card .save-btn{top:10px;right:10px;width:32px;height:32px;font-size:1rem}
  .property-card .body{padding:14px;gap:6px}
  .property-card .price{font-size:1.1rem}
  .property-card .price small{font-size:.75rem}
  .property-card .title{font-size:.92rem}
  .property-card .meta,.property-card .loc{font-size:.8rem}
}

/* ---------- Filters sidebar (listing page) ---------- */
.listing-layout{display:grid;grid-template-columns:1fr;gap:24px}
@media(min-width:960px){.listing-layout{grid-template-columns:280px 1fr}}
.filter-panel{background:var(--white);border:1px solid var(--line);border-radius:var(--radius);padding:18px;
  align-self:start}
@media(min-width:960px){.filter-panel{position:sticky;top:calc(var(--header-h) + 16px)}}
.filter-panel h3{margin-bottom:10px;font-size:1rem}
.filter-group{margin-bottom:18px;min-width:0}
.filter-group label{display:block;font-size:.85rem;font-weight:600;margin-bottom:6px;color:var(--ink-700)}
.filter-group select,.filter-group input{width:100%;padding:10px;border-radius:var(--radius-sm);border:1.5px solid var(--line)}
/* Pair up two filter fields per row (e.g. Category + Subtype, County +
   Town) so mobile doesn't force a long single-column scroll through the
   whole filter panel. The 280px desktop sidebar stays single-column —
   two-up would be too cramped there. */
.filter-row-2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
@media(min-width:960px){.filter-row-2{grid-template-columns:1fr}}
.checkbox-list label{display:flex;align-items:center;gap:8px;font-weight:500;font-size:.88rem;margin-bottom:6px;color:var(--ink-700)}
.results-toolbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;flex-wrap:wrap;gap:10px}
.results-count{font-size:.9rem;color:var(--ink-500)}

/* ---------- Property Detail ---------- */

/* Lister/owner strip — pulled up close to the page header, above the gallery */
.lister-strip{display:flex;align-items:center;gap:10px;margin:14px 0;flex-wrap:wrap}
.lister-strip-avatar{width:44px;height:44px;border-radius:50%;object-fit:cover;border:1px solid var(--line);flex:0 0 auto}
.lister-strip>div{min-width:0}
.lister-strip-name{font-weight:700;font-size:.92rem;color:var(--ink-900);overflow-wrap:anywhere}
.lister-strip-meta{font-size:.78rem;color:var(--ink-500);display:flex;align-items:center;gap:4px;flex-wrap:wrap}
.lister-strip-meta .static-stars{color:var(--gold-500,#d4a017);font-size:.85rem;letter-spacing:1px}

/* Top row: photo on the left, lister info + contact form on the right */
.detail-top{display:grid;grid-template-columns:1fr;gap:20px;margin:14px 0 26px}
@media(min-width:860px){.detail-top{grid-template-columns:3fr 2fr;align-items:start}}
.detail-top-side{display:flex;flex-direction:column;gap:16px;min-width:0}

/* Main photo + thumbnail strip (reduced size — sits beside the lister/contact column) */
.detail-gallery{display:flex;flex-direction:column;gap:8px}
.main-photo-wrap{position:relative;border-radius:var(--radius);overflow:hidden;background:var(--teal-50);cursor:zoom-in}
.main-photo-wrap img{width:100%;max-height:340px;object-fit:cover;aspect-ratio:4/3;display:block}
.main-photo-wrap .zoom-hint{position:absolute;right:10px;bottom:10px;background:rgba(1,95,79,.8);color:#fff;
  font-size:.72rem;font-weight:700;padding:5px 10px;border-radius:20px;pointer-events:none;opacity:0;transition:opacity .15s ease}
.main-photo-wrap:hover .zoom-hint{opacity:1}
/* Wrap onto more lines instead of horizontal-scrolling — with many photos
   a scroll strip can visually crowd/overlap on narrow screens; wrapping
   keeps every thumbnail fully visible with no overlap. */
.thumb-strip{display:flex;flex-wrap:wrap;gap:8px}
.thumb-item{flex:0 0 auto;width:72px;height:54px;border-radius:var(--radius-sm);overflow:hidden;padding:0;
  border:2px solid transparent;background:none;cursor:pointer;opacity:.75;transition:opacity .15s,border-color .15s}
.thumb-item img{width:100%;height:100%;object-fit:cover;display:block}
.thumb-item:hover{opacity:1}
.thumb-item.active{opacity:1;border-color:var(--teal-700)}
@media(min-width:760px){.thumb-item{width:84px;height:62px}}

/* ---------- Full-screen zoomable photo lightbox (property detail) ---------- */
.photo-lightbox{position:fixed;inset:0;background:rgba(4,10,9,.94);z-index:1000;display:none;
  align-items:center;justify-content:center;overflow:auto;padding:20px}
.photo-lightbox.open{display:flex}
.lightbox-viewport{max-width:92vw;max-height:86vh;display:flex;align-items:center;justify-content:center}
.lightbox-viewport img{max-width:92vw;max-height:86vh;object-fit:contain;cursor:zoom-in;user-select:none;transition:transform .15s ease}
.lightbox-viewport img.zoomed{max-width:none;max-height:none;width:auto;height:auto;transform:scale(1.9);cursor:zoom-out}
.lightbox-close{position:absolute;top:16px;right:18px;background:rgba(255,255,255,.12);border:none;color:#fff;
  font-size:1.3rem;width:40px;height:40px;border-radius:50%;cursor:pointer;line-height:1;z-index:2}
.lightbox-nav{position:absolute;top:50%;transform:translateY(-50%);background:rgba(255,255,255,.14);
  border:none;color:#fff;font-size:2rem;width:46px;height:46px;border-radius:50%;cursor:pointer;
  display:flex;align-items:center;justify-content:center;line-height:1;z-index:2}
.lightbox-prev{left:14px}
.lightbox-next{right:14px}
.lightbox-hint{position:absolute;bottom:14px;left:0;right:0;text-align:center;color:rgba(255,255,255,.6);font-size:.75rem}
@media(max-width:600px){.lightbox-nav{width:38px;height:38px;font-size:1.6rem}.lightbox-close{width:36px;height:36px;font-size:1.1rem}}

.detail-layout{display:grid;grid-template-columns:1fr;gap:28px;margin-top:0}

/* Ratings & reviews */
.static-stars{color:var(--gold-500,#d4a017);letter-spacing:2px}
.static-stars.lg{font-size:1.3rem}
.star-input{display:flex;flex-direction:row-reverse;justify-content:flex-end;gap:2px}
.star-input input{position:absolute;opacity:0;pointer-events:none}
.star-input label{font-size:1.9rem;line-height:1;color:var(--line);cursor:pointer;transition:color .1s}
.star-input input:checked ~ label,
.star-input label:hover,
.star-input label:hover ~ label{color:var(--gold-500,#d4a017)}
.review-item{padding:14px 0;border-top:1px solid var(--line)}
.review-avatar{width:36px;height:36px;border-radius:50%;object-fit:cover;flex:0 0 auto}
.review-item-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.review-item-head>div:not(.review-item-stars){min-width:0}
.review-item-head>div:not(.review-item-stars)>div:first-child{overflow-wrap:anywhere}
.review-item-stars{margin-left:auto}

/* Payment safety warning, under the Contact Lister card */
.payment-warning{background:#fff8ec;border:1px solid #f2d9a0;border-radius:var(--radius);padding:16px}
.payment-warning strong{display:block;color:#8a6100;font-size:.9rem;margin-bottom:6px}
.payment-warning p{margin:0;font-size:.82rem;color:var(--ink-700);line-height:1.5}

.escrow-promo{display:flex;gap:12px;align-items:flex-start;background:var(--teal-50);border:1px solid var(--line);border-radius:var(--radius);padding:16px}
.escrow-promo-logo{width:40px;height:40px;object-fit:contain;flex:0 0 auto;border-radius:8px;background:var(--white)}
.escrow-promo>div{min-width:0}
.escrow-promo strong{display:block;color:var(--teal-900);font-size:.9rem;margin-bottom:6px}
.escrow-promo p{margin:0;font-size:.82rem;color:var(--ink-700);line-height:1.5}
.escrow-promo a{color:var(--teal-700);font-weight:700}
.detail-header{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:10px}
.detail-header>div:first-child{min-width:0;flex:1 1 220px}
.detail-header h1{overflow-wrap:anywhere;word-break:break-word}
.detail-price{font-size:1.7rem;font-weight:800;color:var(--teal-900);font-family:'Plus Jakarta Sans',sans-serif;flex:0 0 auto}
.spec-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px;margin:20px 0;padding:18px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
@media(min-width:520px){.spec-grid{grid-template-columns:repeat(4,1fr)}}
.spec-item{text-align:center}
.spec-item .val{font-weight:800;font-size:1.15rem;color:var(--teal-900)}
.spec-item .lbl{font-size:.75rem;color:var(--ink-500)}
.amenity-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
@media(min-width:600px){.amenity-grid{grid-template-columns:repeat(3,1fr)}}
.amenity-grid li{display:flex;align-items:center;gap:8px;font-size:.9rem;min-width:0;overflow-wrap:anywhere}
.amenity-grid li::before{content:'✓';color:var(--success);font-weight:800;flex:0 0 auto}

.contact-card{background:var(--white);border:1px solid var(--line);border-radius:var(--radius);padding:20px;
  box-shadow:var(--shadow)}
.contact-card .phone-btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;margin-bottom:10px}
.map-embed{border-radius:var(--radius-sm);overflow:hidden;border:1px solid var(--line);margin-top:14px}
.map-embed iframe{width:100%;height:220px;border:0}

/* ---------- Forms (auth, add property, admin) ---------- */
.auth-wrap{max-width:440px;margin:50px auto;background:var(--white);border:1px solid var(--line);
  border-radius:var(--radius);padding:32px;box-shadow:var(--shadow)}
.form-group{margin-bottom:16px}
.form-group label{display:block;font-weight:600;font-size:.88rem;margin-bottom:6px}
.form-group .hint{font-size:.78rem;color:var(--ink-500);margin-top:4px}
.form-control{width:100%;padding:12px 14px;border:1.5px solid var(--line);border-radius:var(--radius-sm);background:var(--white)}
.form-control:focus{border-color:var(--teal-600)}
.form-row{display:grid;grid-template-columns:1fr;gap:14px}
@media(min-width:600px){.form-row.cols-2{grid-template-columns:1fr 1fr}.form-row.cols-3{grid-template-columns:1fr 1fr 1fr}}
.divider-or{display:flex;align-items:center;gap:12px;margin:18px 0;color:var(--ink-300);font-size:.8rem}
.divider-or::before,.divider-or::after{content:'';flex:1;height:1px;background:var(--line)}
.google-btn{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;padding:12px;
  border:1.5px solid var(--line);border-radius:2px;background:var(--white);font-weight:700;color:var(--ink-700)}
.alert{padding:12px 16px;border-radius:var(--radius-sm);margin-bottom:16px;font-size:.9rem;font-weight:500}
.alert-error{background:#fdeceb;color:var(--danger)}
.alert-success{background:#e9f7ef;color:var(--success)}
.alert-info{background:var(--teal-50);color:var(--teal-800)}

/* ---------- Custom in-page warning notice (never a native confirm()/alert()
   dialog — reliable in every modern browser ---------- */
.warning-notice{margin-top:14px;padding:14px;background:#fff3f2;border:1px solid #f3c6c2;border-radius:10px}
.warning-notice p{margin:0 0 10px;color:#8a1f12;font-weight:600;font-size:.88rem}

/* ---------- Dashboard / Admin shell ---------- */
.dash-shell{display:grid;grid-template-columns:1fr;min-height:70vh}
@media(min-width:900px){.dash-shell{grid-template-columns:240px 1fr}}
.dash-sidebar{background:var(--teal-900);color:var(--white);padding:20px 0}
.dash-sidebar a{display:flex;align-items:center;gap:10px;padding:11px 22px;color:var(--teal-50);font-weight:600;font-size:.9rem}
.dash-sidebar a:hover,.dash-sidebar a.active{background:rgba(255,255,255,.08);color:var(--white);border-right:3px solid var(--gold-500)}
.dash-sidebar .group-label{padding:16px 22px 6px;font-size:.72rem;text-transform:uppercase;letter-spacing:.05em;color:var(--teal-300,#7fb3b3)}
.dash-main{padding:26px 20px;background:var(--bg)}

/* ---------- Admin panel: no site header/footer, edge-to-edge ---------- */
/* includes/header.php and includes/footer.php skip the public site chrome
   for /admin/* pages and add this class to <body> instead. The .container
   the admin pages sit in normally centers at max-width:1220px with side
   padding — !important overrides that here since the padding-top:20px on
   the container is set inline per admin page. */
body.admin-area{padding-bottom:0;margin:0}
body.admin-area .container{max-width:none!important;margin:0!important;padding:0!important}
body.admin-area .dash-shell{min-height:100vh}
body.admin-area .dash-main{padding:24px 28px}
/* Below 900px the header's own toggle menu (☰) already lists Dashboard,
   Add Property, My Properties etc. for a logged-in normal user, so
   portal/_sidebar.php would just duplicate it there — hide only that one
   (not admin/_sidebar.php, which has no header-menu equivalent yet) and
   let dash-main use the full width. */
@media(max-width:899px){.dash-sidebar.portal-sidebar{display:none}}
.stat-cards{display:grid;grid-template-columns:1fr;gap:14px;margin-bottom:24px}
@media(min-width:640px){.stat-cards{grid-template-columns:repeat(3,1fr)}}
@media(min-width:960px){.stat-cards{grid-template-columns:repeat(4,1fr)}}
/* Use on a row that only ever has 3 cards (e.g. My Earnings) so it doesn't
   grow a 4th empty column on wide screens. Still 1-column on mobile. */
.stat-cards.stat-cards-3{grid-template-columns:1fr}
@media(min-width:640px){.stat-cards.stat-cards-3{grid-template-columns:repeat(3,1fr)}}
@media(min-width:960px){.stat-cards.stat-cards-3{grid-template-columns:repeat(3,1fr)}}
.stat-card{background:var(--white);border-radius:var(--radius);padding:18px;border:1px solid var(--line)}
.stat-card .num{font-size:1.6rem;font-weight:800;color:var(--teal-900);font-family:'Plus Jakarta Sans',sans-serif}
.stat-card .lbl{font-size:.82rem;color:var(--ink-500)}
.data-table{width:100%;border-collapse:collapse;background:var(--white);border-radius:var(--radius);overflow:hidden;border:1px solid var(--line)}
.data-table th,.data-table td{padding:12px 14px;text-align:left;font-size:.87rem;border-bottom:1px solid var(--line)}
.data-table th{background:var(--teal-50);font-weight:700;color:var(--teal-800)}
.status-pill{padding:4px 10px;border-radius:2px;font-size:.72rem;font-weight:700;text-transform:uppercase}
.status-pending{background:#fff4d9;color:#8a6100}
.status-approved{background:#e9f7ef;color:var(--success)}
.status-rejected{background:#fdeceb;color:var(--danger)}
.table-wrap{overflow-x:auto}

/* ---------- Portal "manage listing" card list — used on the dashboard,
   My Properties and My Earnings so a long title wraps onto more lines
   instead of overlapping neighboring content or forcing horizontal
   scroll (a <table> can't do this on a narrow screen; this can). ---------- */
.listing-mini-list{display:flex;flex-direction:column;gap:10px}
.listing-mini-card{background:var(--white);border:1px solid var(--line);border-radius:var(--radius);
  padding:14px;display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px}
.listing-mini-thumb{width:56px;height:44px;object-fit:cover;border-radius:6px;flex-shrink:0}
.listing-mini-main{flex:1 1 180px;min-width:0}
.listing-mini-name{font-weight:700;color:var(--teal-800);font-size:.92rem;
  display:block;overflow-wrap:anywhere;word-break:break-word}
.listing-mini-meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin-top:4px;
  font-size:.78rem;color:var(--ink-500);min-width:0}
.listing-mini-meta span{min-width:0;overflow-wrap:anywhere}
.listing-mini-price{font-weight:700;color:var(--ink-900);font-size:.88rem;white-space:nowrap}
.listing-mini-note{margin-top:4px;font-size:.78rem;color:var(--danger);overflow-wrap:anywhere}
.listing-mini-actions{flex:0 0 auto;margin-left:auto;display:flex;flex-wrap:wrap;gap:6px}
.listing-mini-actions .btn{padding:8px 14px;font-size:.8rem}
@media(max-width:420px){
  .listing-mini-card{padding:12px}
  .listing-mini-actions{width:100%;margin-left:0}
  .listing-mini-actions .btn{width:100%}
}

/* ---------- Rich text editor (Quill) for description / review textareas ---------- */
.rte-wrap{margin-bottom:4px}
.rte-wrap .ql-toolbar.ql-snow{border-color:var(--line);border-radius:8px 8px 0 0;background:var(--teal-50)}
.rte-wrap .ql-container.ql-snow{border-color:var(--line);border-radius:0 0 8px 8px;font-family:'Inter',sans-serif;font-size:.92rem;min-height:110px}
.rte-wrap .ql-editor{min-height:110px}
/* Kept in the form (still a real, focusable control) but visually hidden —
   NOT display:none, so a leftover `required` on an un-upgraded textarea
   (Quill CDN blocked) still validates normally instead of silently
   blocking submission. */
.rte-source{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0,0,0,0);white-space:nowrap;border:0}
.rte-content ul,.rte-content ol{margin:10px 0;padding-left:22px}
.rte-content p{margin:0 0 10px}
.rte-content p:last-child{margin-bottom:0}

/* ---------- Add Property — photo preview row with a clickable "main photo" ---------- */
.photo-thumb-grid{display:flex;flex-wrap:wrap;gap:8px}
.photo-thumb{position:relative;width:92px;height:74px;border-radius:8px;overflow:hidden;cursor:pointer;
  border:2px solid transparent;flex-shrink:0}
.photo-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.photo-thumb.is-main{border-color:var(--gold-500)}
.photo-thumb-badge{position:absolute;left:0;right:0;bottom:0;background:var(--gold-500);color:var(--teal-900);
  font-size:.62rem;font-weight:800;text-align:center;padding:3px 0;text-transform:uppercase;letter-spacing:.03em}
.photo-thumb-setmain{position:absolute;left:0;right:0;bottom:0;background:rgba(1,95,79,.8);color:#fff;
  font-size:.6rem;font-weight:700;text-align:center;padding:3px 0;opacity:0;transition:opacity .12s ease}
.photo-thumb:hover .photo-thumb-setmain,.photo-thumb:focus .photo-thumb-setmain{opacity:1}

/* ---------- Contact subscription plans ---------- */
.sub-plans{display:grid;grid-template-columns:1fr;gap:14px;max-width:760px;margin-top:18px}
@media(min-width:640px){.sub-plans{grid-template-columns:repeat(3,1fr)}}
.sub-plan-card{background:var(--white);border:1.5px solid var(--line);border-radius:var(--radius);
  padding:20px;text-align:center;transition:border-color .12s ease, box-shadow .12s ease}
.sub-plan-card.selected{border-color:var(--gold-500);box-shadow:var(--shadow)}
.sub-plan-name{font-weight:700;font-size:.85rem;text-transform:uppercase;letter-spacing:.04em;color:var(--teal-800)}
.sub-plan-price{font-family:'Plus Jakarta Sans',sans-serif;font-weight:800;font-size:1.5rem;margin:8px 0 4px;color:var(--ink-900)}
.sub-plan-desc{font-size:.8rem;color:var(--ink-500);margin-bottom:14px;min-height:32px}

/* ---------- Property detail — subscribe-instead note ---------- */
.subscribe-instead-note{margin-top:14px;padding:12px 14px;background:var(--teal-50);
  border:1px dashed var(--teal-600);border-radius:var(--radius-sm);font-size:.85rem;color:var(--teal-800)}
.subscribe-instead-note a{font-weight:700;text-decoration:underline}

/* ---------- Footer ---------- */
.site-footer{background:var(--teal-900);color:var(--teal-50);padding:44px 0 24px;margin-top:40px}
.footer-grid{display:grid;grid-template-columns:1fr;gap:26px}
@media(min-width:760px){.footer-grid{grid-template-columns:2fr 1fr 1fr 1fr}}
.site-footer h4{color:var(--white);font-size:.9rem;text-transform:uppercase;letter-spacing:.04em;margin-bottom:12px}
.site-footer a{color:var(--teal-50);opacity:.8;font-size:.88rem;display:block;margin-bottom:8px}
.site-footer a:hover{opacity:1;text-decoration:underline}
.footer-bottom{border-top:1px solid rgba(255,255,255,.12);margin-top:30px;padding-top:18px;
  display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px;font-size:.8rem;opacity:.75}
.footer-legal-links a{display:inline;margin-bottom:0;opacity:1;color:inherit}
.footer-legal-links a:hover{text-decoration:underline}

/* ---------- Footer partner logos — small, max 3, shown below the app badge ---------- */
.footer-partners{margin-top:10px}
.footer-partners a.footer-partners-label{display:block;font-size:.72rem;text-transform:uppercase;letter-spacing:.04em;opacity:.6;margin-bottom:8px}
.footer-partners-row{display:flex;align-items:center;gap:12px}
.footer-partners-row a,.footer-partners-row img{display:block;margin-bottom:0}
.footer-partners-row img{width:140px;height:40px;object-fit:contain;background:#fff;border-radius:2px;padding:4px;opacity:.9;transition:opacity .15s ease}
.footer-partners-row a:hover img{opacity:1}

/* ---------- Mobile bottom nav ---------- */
.bottom-nav{position:fixed;bottom:0;left:0;right:0;z-index:200;background:var(--white);
  border-top:1px solid var(--line);display:flex;justify-content:space-around;
  padding:6px 4px calc(6px + env(safe-area-inset-bottom));box-shadow:0 -2px 12px rgba(0,0,0,.06)}
@media(min-width:960px){.bottom-nav{display:none}}
.bottom-nav a{display:flex;flex-direction:column;align-items:center;gap:3px;font-size:.68rem;font-weight:600;
  color:var(--ink-500);padding:4px 8px;border-radius:2px;position:relative}
.bottom-nav a.active{color:var(--teal-800)}
.bottom-nav a .bn-icon{font-size:1.25rem;line-height:1}
.bottom-nav a.cta .bn-icon{background:var(--gold-500);color:var(--teal-900);width:38px;height:38px;
  border-radius:50%;display:flex;align-items:center;justify-content:center;margin-top:-18px;box-shadow:var(--shadow-lg);font-size:1.4rem}

/* ---------- Misc ---------- */
.empty-state{text-align:center;padding:60px 20px;color:var(--ink-500)}
.empty-state .icon{font-size:2.6rem;margin-bottom:12px}
.pagination{display:flex;gap:6px;justify-content:center;margin-top:26px}
.pagination a,.pagination span{padding:9px 14px;border-radius:var(--radius-sm);border:1px solid var(--line);font-weight:600;font-size:.85rem}
.pagination a:hover{background:var(--teal-50)}
.pagination .current{background:var(--teal-800);color:#fff;border-color:var(--teal-800)}
.badge-inline{display:inline-block;background:var(--gold-100);color:var(--gold-600);font-weight:700;
  font-size:.75rem;padding:3px 10px;border-radius:2px}
.section-alt{background:var(--white);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.step-list{counter-reset:step;display:grid;grid-template-columns:1fr;gap:18px}
@media(min-width:760px){.step-list{grid-template-columns:repeat(4,1fr)}}
.step-list li{list-style:none;background:var(--white);border:1px solid var(--line);border-radius:var(--radius);padding:18px}
.step-list li::before{counter-increment:step;content:counter(step);display:flex;align-items:center;justify-content:center;
  width:32px;height:32px;border-radius:50%;background:var(--teal-800);color:#fff;font-weight:800;margin-bottom:10px}