/* SaraHome / 莎拉家 — Main Stylesheet
對位 SPEC v0.2 §7 Mood board B Modern Minimalist
+ §7.1 溫馨元素 (loading / empty state / error message)
+ YAGNI 守住: 唔做過度 design
+ §R-N+137 (2026-07-22) Airbnb 色彩計畫 + 字體呼吸感 (對位 UIUX 研究 §5 視覺語言)
*/

/* Plan D (V3) Token Schema — §R-N+203
   8-dim semantic token + spacing/radius/shadow/typography/motion/z-index
   Prefix: --sarahome-v3-* (Plan C --color-* super-deprecated)
   對位 SPEC §3 D4 brand palette + §7 Mood board B */
:root {
    /* === Color tokens (8-dim semantic) === */
    --sarahome-v3-color-bg: #FAFAFA;              /* 暖白底 (SPEC §7 mood B) */
    --sarahome-v3-color-fg: #1F2937;              /* 深灰文字 (SPEC §3 D4) */
    --sarahome-v3-color-accent: #FF8C42;          /* 暖橙強調 (§R-N+288 brand refresh, Option A, 砍藍) */
    --sarahome-v3-color-cta: #FF6B35;             /* 橙紅 CTA (SPEC §3 D4 ✅) */
    --sarahome-v3-color-warm: #FF8C42;            /* 暖橙強調 (SPEC §3 D4 ✅) */
    /* P2-4 a11y AA 深色版 (2026-08-04): 原色只做裝飾/背景, 文字/按鈕用深色版達 WCAG AA 4.5:1 */
    --sarahome-v3-color-accent-aa: #C2410C;       /* 深暖橙 (accent 文字/白字按鈕, 5.19:1 on white) */
    --sarahome-v3-color-cta-aa: #C2410C;          /* 深橙紅 CTA (白字按鈕, 5.19:1) */
    --sarahome-v3-color-text-secondary-aa: #4B5563; /* 次要文字灰 AA (6.9:1 on #F3F4F6) */
    --sarahome-v3-color-success: #10B981;         /* 薄荷綠 (SPEC §3 D4 ✅) */
    --sarahome-v3-color-error: #DC2626;           /* 紅色 error */
    --sarahome-v3-color-info: #2563EB;            /* 藍色 info (§R-N+202 Ship H undo action) */
    --sarahome-v3-color-info-blue: #2D7DD2;       /* legacy blue (§R-N+26xx Wave 8.3) */
    --sarahome-v3-color-fg-dark: #1A1A1A;         /* print-specific 深灰黑 (contracts-print) */
    --sarahome-v3-color-warning-amber: #D97706;   /* 琥珀色 warning */
    --sarahome-v3-color-warning-amber-light: #F59E0B; /* 琥珀色 light */
    --sarahome-v3-color-whatsapp: #25D366;        /* WhatsApp 綠 */
    --sarahome-v3-color-text-secondary: #6B7280;  /* 次要文字灰 */
    --sarahome-v3-color-text-tertiary: #6B7280; /* 更淡文字 (specs) — P2-4 AA: 原 #9CA3AF 2.53:1 → #6B7280 4.83:1 */
    
    /* === Surface tokens === */
    --sarahome-v3-surface-card: #FFFFFF;
    --sarahome-v3-surface-input: #FFFFFF;
    --sarahome-v3-surface-overlay: #FFFFFF;
    --sarahome-v3-surface-alt: #FFFFFF;
    --sarahome-v3-surface-section-alt: #F3F4F6;
    
    /* === Border + shadow === */
    --sarahome-v3-border: #E5E7EB;
    --sarahome-v3-border-dark: #D1D5DB;

    /* §R-N+12xx+2 (2026-08-17) — Mobile bottom-nav height 單一 source-of-truth.
       : §R-N+341.1 sticky bottom 82px 對位 2026-08-04 舊 nav 81.4px;
       §R-N+350/352 nav 收窄後真值 = 65px, 舊 magic number 遺留 17px seam.
       Token = 66px (65px nav + 1px defensive gap). 對位使用者:
       - .mobile-bottom-nav min-height + safe-area padding (mobile.css)
       - .listing-sticky-cta bottom (mobile.css)
       改 nav 高度只需改呢度 1 處. */
    --sarahome-mobile-nav-height: 66px;
    --sarahome-v3-shadow-card: 0 2px 8px rgba(0,0,0,0.04), 0 1px 2px rgba(0,0,0,0.06);
    --sarahome-v3-shadow-hover: 0 8px 24px rgba(0,0,0,0.08), 0 2px 8px rgba(0,0,0,0.06);
    --sarahome-v3-shadow-color-soft: rgba(0,0,0,0.04);     /* 最淡 shadow (§R-N+26xx Wave 8.1) */
    --sarahome-v3-shadow-color-medium: rgba(0,0,0,0.06);   /* 中等 shadow */
    --sarahome-v3-shadow-color-strong: rgba(0,0,0,0.08);   /* 強 shadow (hover) */
    --sarahome-v3-shadow-color-ultra: rgba(0,0,0,0.12);    /* 最強 shadow (modal) */
    --sarahome-v3-shadow-color-brand-blue-soft: rgba(45, 125, 210, 0.06);   /* legacy blue soft (§R-N+26xx Wave 8.2) */
    --sarahome-v3-shadow-color-brand-blue-medium: rgba(45, 125, 210, 0.08); /* legacy blue medium */
    --sarahome-v3-shadow-color-brand-blue-strong: rgba(45, 125, 210, 0.12);/* legacy blue strong */
    --sarahome-v3-shadow-color-accent-soft: rgba(255, 140, 66, 0.12);      /* SaraHome 暖橙 soft */
    --sarahome-v3-shadow-color-accent-medium: rgba(255, 140, 66, 0.18);    /* SaraHome 暖橙 medium */
    --sarahome-v3-shadow-color-warning: rgba(217, 119, 6, 0.12);            /* 琥珀色 warning */
    --sarahome-v3-shadow-color-success: rgba(16, 185, 129, 0.12);           /* 薄荷綠 success */

    /* Homepage wide-content cap. Hero / readable forms use explicit narrower widths. */
    --sarahome-v3-container: 1280px;
    
    /* === Status tokens === */
    --sarahome-v3-status-success-bg: #D1FAE5;
    --sarahome-v3-status-success-text: #065F46;
    --sarahome-v3-status-info-bg: #DBEAFE;
    --sarahome-v3-status-info-text: #1E40AF;
    --sarahome-v3-status-warning-bg: #FEF3C7;
    --sarahome-v3-status-warning-text: #92400E;
    --sarahome-v3-status-error-bg: #FEE2E2;
    --sarahome-v3-status-error-text: #991B1B;
    --sarahome-v3-status-error-border: #FECACA;
    --sarahome-v3-status-error-text-strong: #B91C1C;  /* danger/hover 強對比紅 (§R-N+26xx Wave 7.1) */
    
    /* === Footer tokens === */
    --sarahome-v3-footer-bg: #1F2937;
    --sarahome-v3-footer-border: #374151;
    --sarahome-v3-footer-heading: #F9FAFB;
    --sarahome-v3-footer-text: #9CA3AF;
    --sarahome-v3-footer-muted: #9CA3AF;          /* P2-4 AA: 原 #6B7280 3.03:1 on #1F2937 → #9CA3AF 5.87:1 */
    
    /* === Hero gradient === */
    --sarahome-v3-hero-gradient-from: rgba(255, 247, 237, 0.95);
    --sarahome-v3-hero-gradient-to: rgba(254, 226, 226, 0.9);
    
    /* === Modal backdrop === */
    --sarahome-v3-modal-backdrop: rgba(0, 0, 0, 0.5);
    
    /* === Typography === */
    --sarahome-v3-font-zh: 'Noto Sans TC', 'PingFang TC', 'Microsoft JhengHei', sans-serif;
    --sarahome-v3-font-en: 'Inter', 'Source Sans Pro', sans-serif;

    /* §R-N+432 (2026-08-11) P0.1 typography 6 級 hierarchy (對位 §R-N+290 typography 3 級 chain)
       設計原則: 6 級 desktop scale + ≤768 mobile scale 收 3 級, 對住 SaraHome 36 個 unique font-size 嘅散亂 (P-MD-01 根因)
       0 改老 selector, 純 token def, 後續 P0.2 sweep 階段逐步 migrate selector.
       Anchor 對位 audit: top-5 font-size (0.8125 / 0.875 / 0.75 / 1 / 0.9375 rem) 佔 309 hit (28%) */
    --sarahome-v3-font-xs:   0.75rem;   /* 12px — caption / meta / status */
    --sarahome-v3-font-sm:   0.875rem;  /* 14px — body / form / nav / spec value */
    --sarahome-v3-font-base: 1rem;      /* 16px — paragraph / main copy */
    --sarahome-v3-font-md:   1.125rem;  /* 18px — h3 / card title */
    --sarahome-v3-font-lg:   1.25rem;   /* 20px — h2 / page title */
    --sarahome-v3-font-xl:   1.5rem;    /* 24px — h1 / hero sub */
    /* 注: ≥24px (1.5rem+) hero/display 字級唔入 token, 屬 display scale 一對一 case-by-case 守住 */

    /* §R-N+432 mobile ≤768 typography override (對位 §P-MD-06 mobile density + §P-MD-02 mobile-first)
       3 級 scale 守住 §R-N+290 typography 期望 (1.125 / 0.875 / 0.75) */
    @media (max-width: 768px) {
        :root {
            --sarahome-v3-font-md:  1rem;       /* 18 → 16px — card title 收 */
            --sarahome-v3-font-lg:  1.125rem;   /* 20 → 18px — page title 收 */
            --sarahome-v3-font-xl:  1.375rem;   /* 24 → 22px — h1 / hero 收 */
            /* xs / sm / base 不變, 已係 mobile-friendly */
        }
    }

    /* §R-N+435 (2026-08-11) P0.4 touch target token (對位 §P-MD-05 Apple HIG 44px)
       3 級 scale: 36/44/56px, 對住 SaraHome 12 個 unique min-height 硬編碼值.
       §R-N+429 已 ship touch-action + 44px tap target chain (commit 4e5c9dc),
       P0.4 純 token def, 0 改老 selector (selective narrative 守住).
       後續 sweep 階段逐步 migrate min-height: 44px / 48px / 56px consumer.
       注: 48px 屬 Android Material 48dp 標準, 同 Apple HIG 44px 接近 (差 4px = 1 grid unit),
       sweep 階段將 48px 統一去 touch-target (44px) 對位 Apple HIG 對住 iOS Safari 標準. */
    --sarahome-v3-touch-target:    44px;   /* Apple HIG 44pt — button / input / CTA */
    --sarahome-v3-touch-target-sm: 36px;   /* compact chip / quick-tag */
    --sarahome-v3-touch-target-lg: 52px;   /* hero CTA / FAB / primary submit */

    /* §R-N+435 mobile ≤768 touch target override (對位 §P-MD-06 mobile density)
       sm chip 守住 36px (iOS Safari toolbar 標準), lg hero CTA 收 52px (mobile density 根因)
       main touch target 唔變 (44px 守住 Apple HIG mobile 標準) */
    @media (max-width: 768px) {
        :root {
            --sarahome-v3-touch-target-sm: 36px;  /* 不變 */
            --sarahome-v3-touch-target-lg: 52px;  /* 56 → 52 — mobile density  */
        }
    }

    /* === Spacing scale (4/8/12/16/24/32/48/64) === */
    /* §R-N+400 (2026-08-10): Space tokens 修正 — 消除重複 + 符合 4/8 scale
       原 space-2/3/4=0.5rem, space-6/8/12=1rem 重複，現統一修正 */
    --sarahome-v3-space-1: 0.25rem;   /* 4px */
    --sarahome-v3-space-2: 0.5rem;    /* 8px */
    --sarahome-v3-space-3: 0.75rem;   /* 12px — 修正：原 0.5rem 重複 */
    --sarahome-v3-space-4: 0.8rem;     /* 12.8px — 收緊 */
    --sarahome-v3-space-5: 1.25rem;   /* 20px — 新增（top hardcoded 值） */
    --sarahome-v3-space-6: 1.5rem;    /* 24px — 修正：原 1rem 重複 */
    --sarahome-v3-space-8: 2rem;      /* 32px — 修正：原 1rem 重複 */
    --sarahome-v3-space-12: 3rem;     /* 48px — 修正：原 1rem 重複 */
    --sarahome-v3-space-16: 4rem;     /* 64px — 保持 */
    
    /* === Radius === */
    --sarahome-v3-radius-sm: 8px;
    --sarahome-v3-radius-md: 12px;
    --sarahome-v3-radius-lg: 16px;
    --sarahome-v3-radius-xl: 24px;
    
    /* === Motion === */
    --sarahome-v3-duration-fast: 0.15s;
    --sarahome-v3-duration-base: 0.3s;
    --sarahome-v3-duration-slow: 0.5s;
    --sarahome-v3-easing: cubic-bezier(0.4, 0, 0.2, 1);
    
    /* === Z-index === */
    --sarahome-v3-z-drawer: 1000;
    --sarahome-v3-z-modal: 2000;
    --sarahome-v3-z-toast: 3000;
}

* {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
}

/* Skip Navigation Link (WCAG 2.4.1) */
.skip-link {
    position: absolute;
    top: -100%;
    left: 0;
    z-index: 10000;
    padding: 12px 24px;
    background: var(--sarahome-v3-color-cta);
    color: #fff;
    font-weight: 600;
    font-size: 14px;
    text-decoration: none;
    border-radius: 0 0 4px 0;
    transition: top 0.2s;
}
.skip-link:focus {
    top: 0;
}

/* §R-N+137 Airbnb 呼吸感: line-height 1.7 + 字距微調 */
body {
    font-family: var(--sarahome-v3-font-zh);
    background-color: var(--sarahome-v3-color-bg);
    color: var(--sarahome-v3-color-fg);
    line-height: 1.7;               /* §R-N+137 放大行高 (原 1.6) */
    letter-spacing: 0.01em;         /* §R-N+137 微調字距 */
    min-height: 100vh;
    display: flex;
    flex-direction: column;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

a {
    color: var(--sarahome-v3-color-accent);
    text-decoration: none;
}

a:hover {
    text-decoration: underline;
}

.container {
    max-width: 1280px;  /* §R-N+164 — 對位 .featured-listings / .quick-actions-grid 1280px chain 統一 */
    margin: 0 auto;
    padding: 0 1.25rem;
}

/* §R-N+35xx (2026-08-31) P2 polish C4 — page-container width constraints
   對位 CEO audit 2026-08-31 C4: /agent/profile + /agent/listing/new/* form 過寬無 max-width
   - .page-container  = 對齊 .container 1280px 標準 (舊 alias)
   - .page-container-narrow = 960px 表單專用 (form fields 唔好 stretching over wide viewport)
   對位 §R-N+62 KISS: 2 行 CSS, 唔 cross-edit template structure (page-container 已存在 template,
   加 CSS rule 已可 close issue)。
   對位 §R-N+138 disk-truth: profile_edit.html + new_listing.html 已用 page-container 包住內容,
   純 CSS 補 max-width。 */
.page-container {
    max-width: 1280px;
    margin: 0 auto;
    padding: 0 1.25rem;
}
.page-container-narrow {
    max-width: 960px;
    margin: 0 auto;
    padding: 0 1.25rem;
}

/* Header */
.site-header {
    background: var(--sarahome-v3-surface-section-alt);   /* §R-N+140: 統一 var(), light=#FFFFFF / dark=#2D2D2D 自動切 */
    border-bottom: 1px solid var(--sarahome-v3-border);
    padding: var(--sarahome-v3-space-2) 0;
}

.site-header .container {
    display: flex;
    align-items: center;
    gap: var(--sarahome-v3-space-8);
}

.brand {
    display: flex;
    align-items: center;
    gap: var(--sarahome-v3-space-2);
}

.brand-logo {
    display: flex;
    align-items: center;
    gap: var(--sarahome-v3-space-2);
}

/* V10 — Logo3 img (SaraHomeLogo3.png 500x500, 1:1 square icon, 純 icon + 旁邊 wordmark lockup) */
.brand-logo-img {
    display: block;
    width: 50px;
    height: 50px;
    flex-shrink: 0;
}

.logo-cube {
    font-size: 2rem;
    color: var(--sarahome-v3-color-accent);
    line-height: 1;
}

.logo-text {
    display: flex;
    flex-direction: column;
    line-height: 1.2;
}

.logo-text strong {
    font-size: 1.25rem;
    color: var(--sarahome-v3-color-fg);
}

.logo-text em {
    font-style: normal;
    font-size: 0.875rem;
    color: var(--sarahome-v3-color-accent);
}

.site-nav {
    display: flex;
    gap: var(--sarahome-v3-space-6);
    flex: 1;
}

.site-nav a {
    color: var(--sarahome-v3-color-fg);
    font-weight: 500;
}

.user-menu {
    display: flex;
    gap: var(--sarahome-v3-space-3);
    align-items: center;
    /* §R-N+4xxx+63 (2026-09-05, Round 12, Issue 16 closure) — Push user menu to right edge
       對位 §R-N+62 KISS: 0 layout change, 純 flex margin auto
       對位 §R-N+290 style consistency: brand+nav left, user-menu right (L4 standard layout) */
    margin-left: auto;
}

.mobile-header-actions,
.mobile-bottom-nav,
.mobile-district-sheet-tools {
     display: none;
}

.user-email {
    color: #6B7280;
    font-size: 0.875rem;
}

.btn-login, .btn-register, .btn-logout {
    padding: var(--sarahome-v3-space-2) var(--sarahome-v3-space-4);
    border-radius: 0.375rem;
    font-size: 0.875rem;
}

.btn-login {
    color: var(--sarahome-v3-color-accent);
    border: 1px solid var(--sarahome-v3-color-accent);
}

.btn-register {
    background: var(--sarahome-v3-color-accent-aa);
    color: white;
    transition: background var(--sarahome-v3-duration-fast) ease;
}
.btn-register:hover {
    background: #A83A0A;
}

.btn-logout {
    color: #6B7280;
    border: 1px solid var(--sarahome-v3-border);
}

.super-admin-link {
    background: var(--sarahome-v3-color-error, #DC2626);
    color: white !important;
    padding: var(--sarahome-v3-space-1) var(--sarahome-v3-space-2);
    border-radius: 0.25rem;
    font-size: 0.75rem;
    font-weight: bold;
}

/* Main */
.site-main {
    flex: 1;
    padding: 0;  /* §R-N+135.12 (2026-07-22) — 2rem 0 → 0 (CEO: site-main padding 改為0) */
}

/* Footer — §R-N+422 (2026-08-11) 全面優化
   對位 §R-N+290 style consistency: 2-col desktop grid / 1fr mobile ≤768 stack
   對位 §R-N+62 KISS: 3 維度chain
   - C1 visual hierarchy: brand col (left) + nav col (right) 2-col grid
   - C3 divider 統一: border-top accent (line 9074) 保留, 內部 border-bottom 移除
   - C2 移除 640px 根因過早 (CEO §R-N+290 ≤768 統一 1fr stack)

   §R-N+423 (2026-08-11) — 排版結構性 (CEO 反饋: 排版希望能夠優化)
   對位 §R-N+290 / §R-N+137 Airbnb typography / §R-N+400 space token
   5 維度closure:
   - A font-size hierarchy: 1.125rem / 0.875rem / 0.75rem 3 級
   - B letter-spacing: brand 0.02em / links 0.01em
   - C vertical rhythm: space-6 (24px) block, space-4 (16px) col gap
   - D gap 根因: 兩 col gap 2rem → 3rem; nav mini-grid 0.5rem 1.25rem → space-2 space-4
   - E space token hygiene: hardcoded 值 → --sarahome-v3-space-* 對位 §R-N+400 */
.site-footer {
    background: var(--sarahome-v3-footer-bg, #1F2937);   /* §R-N+140: var() 統一控制, dark=更炭 */
    color: var(--sarahome-v3-footer-text, #9CA3AF);
    padding: var(--sarahome-v3-space-6, 1.5rem) 0 var(--sarahome-v3-space-5, 1.25rem);
    font-size: var(--sarahome-v3-font-sm);
    line-height: 1.6;
}

.site-footer .container {
    display: flex;
    flex-direction: column;
    gap: var(--sarahome-v3-space-6, 1.5rem);
}

/* C1 — 2-col grid: brand summary (左) + service links (右)
   對位 §R-N+290: dashboard grid 統一 2-col desktop, 1fr mobile ≤768
   §R-N+423 D gap: 2rem → 3rem (對位 §R-N+400 space-12) */
.footer-services {
    display: grid;
    grid-template-columns: 1fr 1fr;
    align-items: start;
    gap: var(--sarahome-v3-space-12, 3rem);
    padding-bottom: 0;
}

/* C1 — brand col 統一 visual weight: heading + 短描述
   §R-N+423 A font-size: 1rem → 1.125rem (對位 §R-N+290 typography 3 級)
   §R-N+423 B letter-spacing: 0.02em (對位 §R-N+137 中文 letter-spacing) */
.footer-brand-summary {
    display: grid;
    gap: var(--sarahome-v3-space-2, 0.5rem);
}

.footer-brand-summary strong {
    color: var(--sarahome-v3-footer-heading, #F9FAFB);
    font-size: 1.125rem;
    font-weight: 700;
    letter-spacing: 0.02em;
    line-height: 1.5;
}

.footer-brand-summary span {
    color: var(--sarahome-v3-footer-text, #9CA3AF);
    font-size: 0.875rem;
    line-height: 1.7;
    letter-spacing: 0.01em;
}

/* C1 — nav col: 5 個 link 統一排成一條過 (CEO 2026-08-11 反饋: 唔好 2-col mini-grid, 改一條過)
   對位 §R-N+290 style consistency: desktop 對位 mobile flex-wrap  (§R-N+422 mobile.css)
   對位 §R-N+62 KISS: 1 commit 1  (link 排列 統一), 純 CSS, 0 template/JS 改動 */
.footer-services-links {
    display: flex;
    flex-wrap: wrap;
    gap: var(--sarahome-v3-space-2, 0.5rem) var(--sarahome-v3-space-4, 1rem);
    align-self: center;
    justify-self: end;
}

.footer-services-links a {
    color: var(--sarahome-v3-footer-text, #D1D5DB);
    font-weight: 600;
    text-decoration: none;
    font-size: var(--sarahome-v3-font-sm);
    letter-spacing: 0.01em;
    padding: var(--sarahome-v3-space-1, 0.25rem) 0;
    transition: color 0.15s ease;
}

.footer-services-links a:hover {
    color: var(--sarahome-v3-color-warm);
    text-decoration: underline;
    text-underline-offset: 0.2em;
}

.disclaimer {
    line-height: 1.7;
    color: var(--sarahome-v3-footer-text, #D1D5DB);
    font-size: 0.8125rem;
    letter-spacing: 0.01em;
}

.disclaimer a {
    color: var(--sarahome-v3-color-warm);
}

.mascot-credit {
    color: var(--sarahome-v3-color-warm);
    font-size: 1rem;
}

/* C3 + §R-N+423 — copyright 簡化
   §R-N+423 C vertical rhythm: padding-top 0.25rem → space-2 (8px) 對位 block rhythm
   §R-N+423 A font-size: 0.8125rem → 0.75rem (對位 §R-N+290 typography 3 級, caption scale) */
.copyright {
    color: var(--sarahome-v3-footer-muted, #6B7280);
    font-size: var(--sarahome-v3-font-xs);
    padding-top: var(--sarahome-v3-space-2, 0.5rem);
    letter-spacing: 0.02em;
}

/* §R-N+252 — Dark mode 完全移除, footer 用 .site-footer 自身 base style */

/* Flash messages (對位 §7.1 溫馨) */
.flash-messages {
    max-width: 1280px;  /* §R-N+164 — 對位 .container 1280px chain */
    margin: 1rem auto;
    padding: 0 1.25rem;
}

.flash {
    padding: var(--sarahome-v3-space-3) var(--sarahome-v3-space-4);
    border-radius: 0.375rem;
    margin-bottom: 0.5rem;
}

.flash-success {
    background: #DCFCE7;
    color: #166534;
    border-left: 4px solid var(--sarahome-v3-color-success);
}

.flash-error {
    background: #FEE2E2;
    color: #991B1B;
    border-left: 4px solid var(--sarahome-v3-color-error);
}

.flash-warning {
    background: #FEF3C7;
    color: #92400E;
    border-left: 4px solid #F59E0B;
}

/* Buttons — v0.56.1 (2026-08-08, CEO feedback 8/8: 白字 contrast 並沒有實現):
   預設 background + hover + active + focus 統一用 cta-aa 深色版 #C2410C (5.19:1)
   守住 WCAG AA 4.5:1. 根因: 多個 scoped rule (.listing-actions .btn-primary /
   .error-actions .btn-primary / .offline-actions .btn-primary) 同 PlanD V3
   重複 .btn-primary 都寫 background: cta (#FF6B35), 跌穿 AA 3.36:1.
   對位 §R-N+62 KISS: 全部同 cascade 級別, 後寫後贏. */
.btn-primary,
.btn-primary:hover,
.btn-primary:focus-visible,
.btn-primary:active,
.btn-primary:focus {
    background: var(--sarahome-v3-color-cta-aa, #C2410C);
    color: #ffffff;
    padding: var(--sarahome-v3-space-3) var(--sarahome-v3-space-6);
    border-radius: 0.375rem;
    border: none;
    cursor: pointer;
    font-size: var(--sarahome-v3-font-base);
    font-weight: 600;
    transition: background var(--sarahome-v3-duration-fast, 0.15s) ease;
}

/* v0.56.1: override scoped rules (specificity 對齊 — 同 selector 結構, 後寫後贏) */
.listing-actions .btn-primary,
.listing-actions .btn-primary:hover,
.listing-actions .btn-primary:focus-visible,
.listing-actions .btn-primary:active,
.error-actions .btn-primary,
.error-actions .btn-primary:hover,
.error-actions .btn-primary:focus-visible,
.error-actions .btn-primary:active,
.offline-actions .btn-primary,
.offline-actions .btn-primary:hover,
.offline-actions .btn-primary:focus-visible,
.offline-actions .btn-primary:active {
    background: var(--sarahome-v3-color-cta-aa, #C2410C);
}

/* v0.56.1: override PlanD V3 component .btn-primary 重複 (line 9164 寫 background cta) */
.btn-primary {
    background: var(--sarahome-v3-color-cta-aa, #C2410C);
}

.btn-secondary,
.btn-secondary:hover,
.btn-secondary:focus-visible {
    background: var(--sarahome-v3-surface-card, #FFFFFF);
    color: var(--sarahome-v3-color-accent-aa, #C2410C);
    padding: 0.75rem 1.5rem;
    border-radius: 0.375rem;
    border: 1px solid var(--sarahome-v3-color-accent-aa, #C2410C);
    cursor: pointer;
    font-size: 1rem;
    transition: background var(--sarahome-v3-duration-fast, 0.15s) ease;
}

.btn-secondary:hover,
.btn-secondary:focus-visible {
    background: rgba(194, 65, 12, 0.06);
    color: var(--sarahome-v3-color-accent-aa, #C2410C);
    border-color: var(--sarahome-v3-color-accent-aa, #C2410C);
}

/* Forms */
.form-group {
    margin-bottom: 1.25rem;
}

.form-group label {
    display: block;
    margin-bottom: 0.5rem;
    font-weight: 500;
}

.form-group input,
.form-group textarea,
.form-group select {
    width: 100%;
    padding: var(--sarahome-v3-space-3);
    border: 1px solid var(--sarahome-v3-border);
    border-radius: 0.375rem;
    font-size: var(--sarahome-v3-font-base);
    font-family: var(--sarahome-v3-font-zh);
}

.form-group input:focus,
.form-group textarea:focus,
.form-group select:focus {
    outline: none;
    border-color: var(--sarahome-v3-color-accent);
}

/* §R-N+4xxx+13 (2026-09-04, CEO verdict 「new-listing-form 相關表格需要優化」):
   last form-group 內部間距修邊，避免 submit bar 撞尾
   對位 §R-N+62 KISS: 純 CSS selector, 唔改 template。*/
.form-section > .form-group:last-child {
    margin-bottom: 0.5rem;
}

/* ============ Hero V18 (§R-N+109 對位 CEO feedback: 買/租即 submit) ============
   對位 §R-N+62 KISS 簡化 + §R-N+99 form pattern:
   - V17 結構: 4 column (district + type + q + submit btn) + 2-tab pill (buy/rent)
   - V18 修法: 移除 submit btn, 買盤/租盤 pill 改為 button type=submit
     點擊買盤/租盤 pill 即 form submit 帶齊 4 個 filter (district + property_type + q + type)
   - 對位 memory MaliMali 設計: MaliMali 買/租 tab 即刻出 results, 唔需要另外 button
   - 對位 V6-G spec 4 種篩選條件組合
============================================================= */

/* §R-N+132 (CEO 2026-07-18) — Form 超出 hero 橙底框
   reverse §R-N+131 v2 (form 框入) → form 跨出 hero bottom edge 32px
   negative bottom margin + z-index 浮動, hero padding-bottom 縮補償
*/

/* ============ New Listing Form V2 (§R-N+99 CEO 6-matrix UI 重設計) ============
   對位 §R66 form-section-header-flex + §R69 form-toolbar / form-submit-bar
   + §R68 input-xl (elderly-friendly 18px desktop / 16px mobile)
   + §R36 iOS Safari 不 zoom + §R7 breadcrumb
   設計: breadcrumb + page-title + matrix visual hint + 5 step section + 進階資料摺疊
   ============================================================= */

/* --- Form section card (對位 §R66 form-section) --- */
.form-section {
    background: var(--sarahome-v3-surface-card, #FFFFFF);
    border: 1px solid var(--sarahome-v3-border);
    border-radius: 0.625rem;
    padding: 1.25rem 1.5rem;
    margin-bottom: 1.25rem;
    transition: box-shadow 0.15s ease;
}
.form-section:hover {
    box-shadow: 0 2px 6px rgba(45, 125, 210, 0.06);
}

/* --- Form section header flex (§R66) --- */
.form-section-header-flex {
    display: flex;
    align-items: center;
    gap: var(--sarahome-v3-space-3);
    margin-bottom: 1rem;
    padding-bottom: 0.625rem;
    border-bottom: 2px solid var(--sarahome-v3-color-bg);
}
.form-section-header-flex .step-num {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px; height: 28px;
    background: var(--sarahome-v3-color-accent);
    color: white;
    border-radius: 50%;
    font-size: var(--sarahome-v3-font-sm);
    font-weight: 600;
    font-family: var(--sarahome-v3-font-en);
    flex-shrink: 0;
}
.form-section-header-flex h2 {
    font-size: var(--sarahome-v3-font-md);
    font-weight: 600;
    margin: 0;
    color: var(--sarahome-v3-color-fg);
    flex: 1;
}
.form-section-header-flex .form-section-action {
    display: flex;
    gap: var(--sarahome-v3-space-2);
}

/* --- Form hint (對位 CEO §R-N+70 正式書面語, 移除 emoji prefix per §R-N+70 verdict) --- */
.form-hint {
    display: block;
    margin-top: 0.375rem;
    font-size: 0.8125rem;
    color: #6B7280;
    line-height: 1.5;
}

/* §R-N+430 (2026-08-11) — Form helper text base class chain
   對位 §R-N+290 style consistency: 全站 form-help-text 統一 class name.
   對位 §R-N+140 12-dim: var(--sarahome-v3-color-text-*) / space-* 根因.
   對位 §R-N+79 selective narrative: 5 form variants 覆蓋現存 inline pattern.
   對位 §R-N+138 disk-truth: desktop base 根因 + mobile 
   (mobile.css @media (max-width: 768px) override 喺 commit 2 同步 ship). */
.form-help-text {
    font-size: var(--sarahome-v3-font-sm);
    color: var(--sarahome-v3-color-text-secondary, #6B7280);
    margin: var(--sarahome-v3-space-2) 0 0 0;
    line-height: 1.4;
}
.form-help-text--muted {
    color: var(--sarahome-v3-color-text-tertiary, #9CA3AF);
}
.form-help-text--accent {
    color: var(--sarahome-v3-color-accent, #1E5A9E);
}
.form-help-text--warning {
    background-color: #FFF3CD;
    padding: var(--sarahome-v3-space-2) var(--sarahome-v3-space-3);
    border-radius: 6px;
    border-left: 3px solid #F59E0B;
}
.form-help-text--lg {
    font-size: 0.9rem;
}

/* --- Input XL (§R68 elderly-friendly 18px / 16px mobile) --- */
.input-xl,
input[type="text"].input-xl,
input[type="email"].input-xl,
input[type="tel"].input-xl,
input[type="number"].input-xl,
input[type="date"].input-xl,
input[type="datetime-local"].input-xl,
input[type="file"].input-xl,
select.input-xl,
textarea.input-xl {
    width: 100%;
    padding: var(--sarahome-v3-space-3) var(--sarahome-v3-space-4);
    font-size: var(--sarahome-v3-font-md);       /* 18px desktop */
    line-height: 1.5;
    border: 1.5px solid var(--sarahome-v3-border);
    border-radius: var(--sarahome-v3-radius-sm);
    background: var(--sarahome-v3-surface-card, #FFFFFF);
    color: var(--sarahome-v3-color-fg);
    font-family: var(--sarahome-v3-font-zh);
    box-sizing: border-box;
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
    -webkit-appearance: none;
    appearance: none;
}
.input-xl:focus,
input.input-xl:focus,
select.input-xl:focus,
textarea.input-xl:focus {
    outline: none;
    border-color: var(--sarahome-v3-color-accent);
    box-shadow: 0 0 0 3px rgba(45, 125, 210, 0.15);  /* WCAG focus ring */
}
.input-xl:hover:not(:focus):not(:disabled) {
    border-color: #9CA3AF;
}
.input-xl:disabled {
    opacity: 0.55;
    cursor: not-allowed;
    background: var(--sarahome-v3-color-bg);
}
.input-xl::placeholder { color: #9CA3AF; }

@media (max-width: 768px) {
    .input-xl,
    input.input-xl,
    select.input-xl,
    textarea.input-xl {
        font-size: var(--sarahome-v3-font-base);       /* 16px (iOS Safari 不 zoom) */
        padding: 0.625rem 0.875rem;
    }
}

/* --- Select arrow SVG (§R68 modern cross-browser) --- */
select.input-xl {
    background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3e%3cpath fill='%236B7280' d='M6 8L0 0h12z'/%3e%3c/svg%3e");
    background-repeat: no-repeat;
    background-position: right 14px center;
    background-size: 12px 8px;
    padding-right: 2.5rem;
}
textarea.input-xl {
    min-height: 96px;
    resize: vertical;
    line-height: 1.6;
}

/* --- Form row flex (§R62-R67 對稱 column) --- */
.form-row-flex {
    display: flex;
    gap: var(--sarahome-v3-space-3);
    flex-wrap: wrap;
}
.form-row-flex > .form-group {
    flex: 1 1 0;
    min-width: 0;
    /* §R-N+4xxx+24 (2026-09-04, CEO verdict) — nested form-group 間距收緊
       舊版 nested form-group 繼承 1.25rem margin-bottom, 喺 form-row-flex 內部太鬆。
       新版: 0 (form-row-flex gap 控制), 對位 §R-N+264 a11y + §R-N+62 KISS。*/
    margin-bottom: 0;
}
@media (max-width: 768px) {
    .form-row-flex { flex-direction: column; gap: 0; }
    .form-row-flex > .form-group { flex: 1 1 100%; }
}

/* --- Form toolbar (§R69) --- */
.form-toolbar {
    display: flex;
    align-items: center;
    gap: var(--sarahome-v3-space-3);
    flex-wrap: wrap;
    margin: 1rem 0 1.25rem;
    padding: 0.875rem 1rem;
    background: rgba(45, 125, 210, 0.05);
    border: 1px solid rgba(45, 125, 210, 0.15);
    border-radius: var(--sarahome-v3-radius-sm);
    font-size: var(--sarahome-v3-font-sm);
}
.form-toolbar .form-toolbar-hint {
    color: #4B5563;  /* P3-A11y (t_6828667f): 原 #6B7280 4.83:1 borderline → 7.55:1 AA */
    font-size: 0.8125rem;
    margin-left: auto;
}
/* §R-N+4xxx+27 (2026-09-04) — 砍走舊 ::before 「提示：」, 改由 SVG icon 提供視覺 prompt,
   對位 §R-N+288 brand refresh (icon-only 取代文字 prefix)。
   詳細新樣式喺 agent-new-listing.css:325 (.form-toolbar-hint prompt style pill)。*/

/* --- Form submit bar (§R69 dashed border) ---
   §R-N+4xxx+13 (2026-09-04, CEO verdict 「new-listing-form 相關表格需要優化」):
   舊版 justify-content:center 3 個 button 平均分布, 「預覽」split 咗 primary flow
   修法: flex 左右兩組 — 「暫存草稿」靠左, 「預覽」+「確認上架」靠右,
   「預覽」icon-only 收埋, primary confirm 最 prominent。
   對位 §R-N+62 KISS: 純 layout change, 0 new selector。*/
.form-submit-bar {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: var(--sarahome-v3-space-3);
    padding: 1.5rem 0 1rem;
    margin-top: 2rem;
    border-top: 2px dashed rgba(45, 125, 210, 0.25);
}
.form-submit-bar .form-submit-bar-secondary {
    display: inline-flex;
    align-items: center;
    gap: var(--sarahome-v3-space-2);
}
.form-submit-bar .form-submit-bar-primary {
    display: inline-flex;
    align-items: center;
    gap: var(--sarahome-v3-space-3);
    margin-left: auto;
}
.form-submit-bar .submit-btn {
    min-width: 240px;
    padding: 0.75rem 1.5rem;
    font-size: 1rem;
    font-weight: 700;
}
.form-submit-bar .btn-preview-listing {
    min-width: 0;
    padding: 0.5rem 0.875rem;
}

/* --- Step toggle (§R67 醒目分區) --- */
.step-toggle {
    display: inline-flex;
    background: var(--sarahome-v3-color-bg);
    border-radius: var(--sarahome-v3-radius-sm);
    padding: var(--sarahome-v3-space-1);
    margin: 0 0 1.25rem;
    border: 1px solid var(--sarahome-v3-border);
}
.step-toggle a {
    padding: 0.5rem 1.25rem;
    border-radius: 0.375rem;
    color: var(--sarahome-v3-color-fg);
    text-decoration: none;
    font-weight: 500;
    font-size: 0.9375rem;
    transition: background 0.15s ease, color 0.15s ease;
}
.step-toggle a:hover {
    background: rgba(45, 125, 210, 0.08);
    text-decoration: none;
}
.step-toggle a.active {
    background: var(--sarahome-v3-color-accent);
    color: white;
}

/* --- Step label flex (§R67 checkbox 對位) --- */
.step-label-flex {
    display: inline-flex;
    align-items: center;
    gap: var(--sarahome-v3-space-2);
    cursor: pointer;
    font-weight: 500;
}
.step-label-flex input[type="checkbox"] {
    width: 1.125rem;
    height: 1.125rem;
    cursor: pointer;
    accent-color: var(--sarahome-v3-color-accent);
}

/* --- btn-lavender (§R70 + 對位 page primary CTA) --- */
.btn-lavender,
.btn-primary-lavender {
    background: var(--sarahome-v3-color-accent);
    color: white;
    padding: var(--sarahome-v3-space-4) var(--sarahome-v3-space-8);
    border: none;
    border-radius: var(--sarahome-v3-radius-sm);
    font-size: 1.0625rem;
    font-weight: 600;
    cursor: pointer;
    text-decoration: none;
    display: inline-flex;
    align-items: center;
    gap: var(--sarahome-v3-space-2);
    font-family: var(--sarahome-v3-font-zh);
    transition: background 0.15s ease, transform 0.1s ease;
}
.btn-lavender:hover,
.btn-primary-lavender:hover {
    background: #1F4D5E;       /* 對位 primary dark */
    color: white;
    text-decoration: none;
}
.btn-lavender:active,
.btn-primary-lavender:active {
    transform: translateY(1px);
}
/* §R-N+31xx (2026-08-31) L4 audit P1-3 fix: 下架 button 紅色 variant。
   對位 §R-N+62 KISS: 純 CSS variant, 0 template conditional change。
   Specificity 0,2,0 (兩個 class) → 對位 page-level .btn-lavender 覆蓋 (super-admin-core.css 等) 。*/
.btn-lavender.btn-lavender-danger,
button.btn-lavender-danger {
    background: #C0392B;
    color: #fff;
}
.btn-lavender.btn-lavender-danger:hover,
button.btn-lavender-danger:hover {
    background: #A02922;
    color: #fff;
}
.btn-lavender:disabled,
.btn-primary-lavender:disabled {
    opacity: 0.55;
    cursor: not-allowed;
}
.btn-secondary-lavender {
    background: var(--sarahome-v3-surface-card, #FFFFFF);
    color: var(--sarahome-v3-color-accent);
    padding: 0.625rem 1.25rem;
    border: 1.5px solid var(--sarahome-v3-color-accent);
    border-radius: var(--sarahome-v3-radius-sm);
    font-size: 0.9375rem;
    font-weight: 500;
    cursor: pointer;
    text-decoration: none;
    display: inline-flex;
    align-items: center;
    gap: var(--sarahome-v3-space-2);
    transition: background 0.15s ease;
}
.btn-secondary-lavender:hover {
    background: rgba(45, 125, 210, 0.06);
    color: var(--sarahome-v3-color-accent);
    text-decoration: none;
}

/* --- Breadcrumb (§R7 UX) --- */
.breadcrumb {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.375rem;
    font-size: 0.875rem;
    color: #6B7280;
    margin: 0 0 var(--sarahome-v3-space-3);
}
.breadcrumb a {
    color: #6B7280;
    text-decoration: none;
    transition: color 0.15s ease;
}
.breadcrumb a:hover {
    color: var(--sarahome-v3-color-accent);
    text-decoration: underline;
}
.breadcrumb-separator {
     color: #9CA3AF;
     user-select: none;
 }
.breadcrumb-list {
     list-style: none;
     padding: 0;
     margin: 0;
     display: inline-flex;
     align-items: center;
     flex-wrap: wrap;
     gap: var(--sarahome-v3-space-1);
 }
.breadcrumb-list li[aria-current="page"] {
     color: var(--sarahome-v3-color-fg);
     font-weight: 500;
 }
.breadcrumb-current {
    color: var(--sarahome-v3-color-fg);
    font-weight: 500;
}

/* --- Page subtitle (對位 V2 listing-card §R-N+70 正式書面語) --- */
.page-subtitle {
    font-size: 0.9375rem;
    color: #6B7280;
    margin: 0 0 1.5rem;
    line-height: 1.5;
}

/* --- Missing-fields banner (§R-N+132 CEO 改動)
   取代 6-matrix hint,只列出未填好欄位。idle (全部填妥) 隱藏。 --- */
.missing-fields-banner {
    margin: 0 0 1.25rem;
    padding: 0.875rem 1rem;
    background: rgba(217, 119, 6, 0.08);
    border: 1px solid rgba(217, 119, 6, 0.32);
    border-left: 4px solid #D97706;
    border-radius: var(--sarahome-v3-radius-sm);
    font-size: 0.875rem;
    color: #7C2D12;
    animation: missing-fields-fade-in 0.2s ease-out;
}
.missing-fields-banner.is-hidden { display: none; }
.missing-fields-banner-header {
    display: flex;
    align-items: center;
    gap: var(--sarahome-v3-space-2);
    margin-bottom: 0.5rem;
}
.missing-fields-banner-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.25rem;
    height: 1.25rem;
    border-radius: 50%;
    background: #D97706;
    color: white;
    font-weight: 700;
    font-size: 0.75rem;
    flex-shrink: 0;
}
.missing-fields-banner-title {
    font-weight: 600;
}
.missing-fields-list {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-wrap: wrap;
    gap: 0.375rem;
}
.missing-fields-list li {
    display: inline-flex;
    align-items: center;
    gap: var(--sarahome-v3-space-1);
    padding: 0.25rem 0.625rem;
    background: var(--sarahome-v3-surface-card, #FFFFFF);
    border: 1px solid rgba(217, 119, 6, 0.32);
    border-radius: 999px;
    font-size: 0.8125rem;
    color: #7C2D12;
    cursor: pointer;
    transition: background 0.15s ease;
}
.missing-fields-list li:hover,
.missing-fields-list li:focus {
    background: rgba(217, 119, 6, 0.16);
    outline: none;
}
.missing-fields-list li::before {
    content: "•";
    color: #D97706;
    font-weight: 700;
}
.missing-fields-list li.is-empty {
    color: #15803D;
    background: rgba(22, 163, 74, 0.08);
    border-color: rgba(22, 163, 74, 0.32);
    cursor: default;
}
.missing-fields-list li.is-empty::before { content: "✓"; color: #15803D; }
@keyframes missing-fields-fade-in {
    from { opacity: 0; transform: translateY(-4px); }
    to { opacity: 1; transform: translateY(0); }
}

/* --- Advanced section (progressive disclosure, 對位 §R-N+98 進階資料摺疊) --- */
.advanced-section {
    background: var(--sarahome-v3-surface-card, #FFFFFF);
    border: 1px solid var(--sarahome-v3-border);
    border-radius: 0.625rem;
    margin-bottom: 1.25rem;
    overflow: hidden;
}
.advanced-section > summary {
    display: flex;
    align-items: center;
    gap: var(--sarahome-v3-space-3);
    padding: var(--sarahome-v3-space-4) var(--sarahome-v3-space-6);
    cursor: pointer;
    font-weight: 600;
    font-size: 1rem;
    color: var(--sarahome-v3-color-fg);
    background: var(--sarahome-v3-color-bg);
    list-style: none;
    user-select: none;
    transition: background 0.15s ease;
}
.advanced-section > summary::-webkit-details-marker {
    display: none;
}
.advanced-section > summary::before {
    content: "▸";
    color: var(--sarahome-v3-color-accent);
    font-size: 0.875rem;
    transition: transform 0.15s ease;
}
.advanced-section[open] > summary::before {
    transform: rotate(90deg);
}
.advanced-section > summary:hover {
    background: rgba(45, 125, 210, 0.05);
}
.advanced-section > summary .advanced-count {
    margin-left: auto;
    font-size: 0.8125rem;
    color: #6B7280;
    font-weight: 400;
}
.advanced-section > .advanced-content {
    padding: 1.25rem 1.5rem;
    border-top: 1px solid var(--sarahome-v3-border);
}

/* --- Photo upload (§R68 file input visual) --- */
input[type="file"].input-xl {
    padding: 0.625rem 1rem;
    cursor: pointer;
}
input[type="file"].input-xl::file-selector-button {
    background: var(--sarahome-v3-color-accent);
    color: white;
    border: none;
    padding: var(--sarahome-v3-space-2) var(--sarahome-v3-space-4);
    border-radius: 0.375rem;
    font-size: 1rem;
    font-weight: 500;
    cursor: pointer;
    margin-right: 0.75rem;
    font-family: var(--sarahome-v3-font-zh);
    transition: background 0.15s ease;
}
input[type="file"].input-xl::file-selector-button:hover {
    background: #1F4D5E;
}

/* --- Sub-label (§R27 0-inline: 細 label for form-row-flex 內 nested label) --- */
label.sub-label {
    font-size: 0.85rem !important;
    color: #6B7280;
    font-weight: 500;
    margin-bottom: 0.25rem;
}

/* --- Conditional section toggle (§R27 0-inline: 取代 inline display:none) --- */
.is-hidden { display: none; }

/* Listing card (對位 §7 Modern Minimalist listing card) */
.listing-card {
    background: var(--sarahome-v3-surface-card, #FFFFFF);
    border: 1px solid var(--sarahome-v3-border);
    border-radius: var(--sarahome-v3-radius-sm);
    padding: var(--sarahome-v3-space-4);
    transition: box-shadow 0.2s;
    overflow: hidden;
}

/* 對位 UX audit 2026-07-16: thumbnail placeholder (Phase 2 photo upload 仲未入 UI) */
.listing-card .listing-thumb {
    display: flex;
    align-items: center;
    justify-content: center;
    aspect-ratio: 16 / 10;
    background: linear-gradient(135deg, #F0F7FF 0%, #E0EBF8 100%);
    color: var(--sarahome-v3-color-accent);
    margin: -1rem -1rem 0.75rem -1rem;
    border-radius: 0.5rem 0.5rem 0 0;
    position: relative;
}

.listing-card-v2 .listing-thumb svg {
    opacity: 0.55;
}

/* §R-N+121 — direct img.listing-thumb 用 HTML5 <img class="listing-thumb"> 嘅 case
   (對位 index.html + §R-N+115 patch pattern), 必須 clamp 同樣 */
.listing-card-v2 .listing-thumb:not(.listing-thumb-demo):not(.listing-thumb-house) {
    width: 100%;
}
img.listing-thumb {
    max-width: 100%;
    width: 100%;
    height: auto;
    display: block;
    object-fit: cover;
    border-radius: 0;
}

/* V2 (Squarefoot compact) — listing-card-v2: 4-col grid + 4/3 aspect (§R-N+120 unified compact)
   §R-N+136 (2026-07-22) — AirBnb 風格升級: 大圓角 16px + 相片 3/2 佔比 + 呼吸感 spacing
   對位 UIUX 研究 §2「去標籤化」與大圖優先 + §1 視覺語言大面積留白 */
.listing-card-v2 {
    /* V27 → V29: padding reset only; flex layout delegated to specific selectors */
    padding: 0;
    text-decoration: none;
    color: inherit;
    background: var(--sarahome-v3-surface-card, #FFFFFF);
    /* §R-N+201 Ship G: 對位 stretched-link pattern (§R-N+274 search.html precedent)
       position: relative 確保 .listing-card-overlay 嘅 absolute 定位
       relative 呢個 card (而非 viewport 或其他 ancestor)。
       對位: my_listings + favorites page, 都用 stretched-link pattern。*/
    position: relative;
    border: 1px solid var(--sarahome-v3-border);
    border-radius: 0.625rem;
    overflow: hidden;
    transition: box-shadow 0.25s ease, transform 0.25s ease;
}

.listing-card-v2:hover {
    text-decoration: none;
    color: inherit;
    box-shadow: 0 6px 18px rgba(17, 24, 39, 0.10);
    transform: translateY(-1px);
}

/* §R-N+136 — AirBnb 大圖優先: 3/2 aspect ratio (相片佔比 ~70%) */
.listing-card-v2 .listing-thumb {
    aspect-ratio: 3 / 2;
    margin: 0;
    border-radius: 0;
    overflow: hidden;
    position: relative;
}

/* V6-K — 6 區 gradient demo image (對位 CEO 2026-07-16 verdict) */
.listing-thumb-demo {
    display: flex;
    align-items: center;
    justify-content: center;
    color: white;
    font-weight: 700;
}

.listing-thumb-house {
    opacity: 0.9;
    color: white;
}

.listing-thumb-district {
    position: absolute;
    bottom: 0.5rem;
    right: 0.75rem;
    font-size: 2rem;
    font-weight: 700;
    line-height: 1;
    color: rgba(255, 255, 255, 0.85);
    text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
}

/* §R-N+360 Round 2 UX (C5 audit): 0-photo fallback 改善 (§R-N+159 selective narrative)
   根因: 真實 listing 冇 listing_photos row, 對位 §R-N+138 disk-truth audit
   Fix: SVG 64px (48→64) + 加 "尚未上載相片" label, 對位 §R-N+137 Airbnb visual hierarchy */
.listing-thumb-no-photo-label {
    position: absolute;
    bottom: 0.5rem;
    left: 0.75rem;
    font-size: 0.75rem;
    font-weight: 600;
    color: rgba(255, 255, 255, 0.95);
    background: rgba(0, 0, 0, 0.35);
    padding: 0.125rem 0.5rem;
    border-radius: 4px;
    letter-spacing: 0.025em;
}

/* §R-N+128 (CEO 2026-07-18) — §R-N+127 sub-region 39 個保持 gradient 但 UI dropdown 撤回 macro-only,
   改返 macro 對位既 gradient map (氹仔 / 路環只保留 macro)
   對位 §R-N+62 KISS + §R-N+121 既有 6 macro gradient preserved
*/
.listing-thumb-氹仔 { background: linear-gradient(135deg, #2D7DD2 0%, #1F4D5E 100%); }
.listing-thumb-澳門半島 { background: linear-gradient(135deg, #10B981 0%, #047857 100%); }
.listing-thumb-南灣 { background: linear-gradient(135deg, #6366F1 0%, #4338CA 100%); }
.listing-thumb-新口岸 { background: linear-gradient(135deg, #F59E0B 0%, #B45309 100%); }
.listing-thumb-黑沙環 { background: linear-gradient(135deg, #EC4899 0%, #BE185D 100%); }
.listing-thumb-路環 { background: linear-gradient(135deg, #65A30D 0%, #3F6212 100%); }
/* §R-N+127 sub-region gradient — sub-region listings 同樣 fall back 至 macro gradient
   via 「氹仔市中心」之 value matches 唔到時 default 即 fallback list-thumb-demo (冇 gradient)
   為咗 prevent layout collapse, sub-region 全部用 inheritable 6 macro color 重抽
*/
.listing-thumb-祐漢,
.listing-thumb-關閘,
.listing-thumb-台山,
.listing-thumb-東方明珠,
.listing-thumb-筷子基,
.listing-thumb-青洲,
.listing-thumb-提督馬路,
.listing-thumb-望廈,
.listing-thumb-十月初五,
.listing-thumb-沙梨頭,
.listing-thumb-下環,
.listing-thumb-媽閣,
.listing-thumb-十六浦,
.listing-thumb-司打口,
.listing-thumb-雅廉訪大馬路,
.listing-thumb-二龍喉,
.listing-thumb-美副將,
.listing-thumb-高士德,
.listing-thumb-新橋,
.listing-thumb-水坑尾,
.listing-thumb-荷蘭園,
.listing-thumb-東望洋,
.listing-thumb-大三巴,
.listing-thumb-板樟堂,
.listing-thumb-白鴿巢,
.listing-thumb-鏡湖,
.listing-thumb-新馬路,
.listing-thumb-葡京,
.listing-thumb-西灣,
.listing-thumb-皇朝,
.listing-thumb-氹仔市中心,
.listing-thumb-氹仔舊城,
.listing-thumb-氹仔新區,
.listing-thumb-路環市區,
.listing-thumb-路環鄉村 { background: linear-gradient(135deg, #6B7280 0%, #4B5563 100%); }

/* §R-N+136 — AirBnb 呼吸感: 加大 content padding + 行距
   §R-N+277 (2026-07-30) — fix: 原本 rule `.listing-card-v2 > *:not(.listing-thumb)`
   將 padding 應用到 thumb container 同 overlay (因為佢哋都唔係 class `.listing-thumb`),
   導致 thumb 內 IMG 嘅 content area 由 280px 縮至 244px (左+右 18px padding 各)
   改成只 target info element, 真正達到 §R-N+136 嘅 content padding 意圖
   v0.76 (2026-08-09): padding 由 1.125rem → 1rem 對位 §R-N+290 (同 my_listings .agent-listing-card 一致)
   v0.77 (2026-08-09): gap 0.375rem → 0.5rem, 對位 CEO feedback 「間隔需要再優化」
   v0.80 (2026-08-09): 反向 closure — 過度 spacing 收緊, 對位 CEO feedback 「整個卡片的間距太多」
   gap 0.5rem → 0.25rem (v0.77 升返去)
   v0.81 (2026-08-09): padding 收緊 — top/bottom 14px → 10px, 對位 §R-N+62 KISS
   整體 card info 高度省 ~8px, card 視覺密度提升 */
.listing-card-v2 > .listing-card-info {
    padding-left: 0.875rem;
    padding-right: 0.875rem;
    padding-top: 0.625rem;
    padding-bottom: 0.875rem;
    display: flex;
    flex-direction: column;
    gap: var(--sarahome-v3-space-1);
}

.listing-card-v2 .listing-ref {
    margin-top: 0;
    padding-top: 0.5rem;
    font-family: var(--sarahome-v3-font-en);
    font-size: var(--sarahome-v3-font-xs);
    color: #9CA3AF;
    letter-spacing: 0.03em;
}

/* v0.78 (2026-08-09): 視覺層次強化 — title 字級 + district 淺色
   對位 CEO feedback: 「間隔需要再優化一下」結構延伸 — 視覺分層更清
   - title 1rem → 1.0625rem (略大, 視覺錨點)
   - district 字色由 #6B7280 → #9CA3AF (更淺, 對位 §R-N+290 層次)
   - meta 字色由 secondary → tertiary (更淺, 對位 §R-N+164 closure) */
.listing-card-v2 .listing-title {
    font-size: var(--sarahome-v3-font-base);
    font-weight: 600;
    line-height: 1.35;
    margin: 0 0 0.125rem 0;
    color: var(--sarahome-v3-color-fg);
}

.listing-card-v2 .listing-district {
    font-size: var(--sarahome-v3-font-sm);
    color: var(--sarahome-v3-color-text-tertiary, #9CA3AF);
    margin-bottom: 0;
}

.listing-card-v2 .listing-price {
    color: var(--sarahome-v3-color-cta);
    font-size: var(--sarahome-v3-font-md);
    font-weight: 700;
    line-height: 1.2;
    font-family: var(--sarahome-v3-font-en);
    letter-spacing: -0.01em;
}

.listing-card-v2 .listing-price .price-suffix {
     font-size: var(--sarahome-v3-font-sm);
     font-weight: 500;
     color: #6B7280;
     font-family: var(--sarahome-v3-font-zh);
}

/* §R-N+136 — AirBnb 去標籤化: 簡潔 meta chip, 更大 gap
   v0.76 (2026-08-09): 同 my_listings 對位 — span 唔再用 pill background, 改 inline-flex
   v0.77 (2026-08-09): margin-bottom 0.5rem → 0.625rem, 對位 §R-N+164 closure
   v0.78 (2026-08-09): 字色由 secondary → tertiary, 視覺層次強化
   v0.80 (2026-08-09): 反向 closure — margin-bottom 0.625rem → 0.25rem, 對位 CEO feedback
   對位 §R-N+290 style consistency  */
.listing-card-v2 .listing-meta {
    display: flex;
    flex-wrap: wrap;
    gap: 0.375rem 0.625rem;
    align-items: center;
    font-size: var(--sarahome-v3-font-xs);
    color: var(--sarahome-v3-color-text-tertiary, #9CA3AF);
    margin-bottom: 0.25rem;
}

.listing-card-v2 .listing-meta span {
    display: inline-flex;
    align-items: center;
    gap: var(--sarahome-v3-space-1);
    background: transparent;
    border: none;
    color: inherit;
    padding: 0;
    font-size: inherit;
    font-weight: 500;
}

.listing-card-v2 .btn-secondary {
    margin: 0 1rem 1rem;
    text-align: center;
}

/* §R-N+136 (2026-07-22) — 物業特色標籤 Tag (對位 UIUX 研究 §3 標籤化物業特點)
   彩色微標籤: 新裝修 / 近輕軌 / 有會所 / 隨時約睇 */
.listing-tags {
    display: flex;
    flex-wrap: wrap;
    gap: 0.375rem;
    padding: 0 1.125rem 1rem;
}

.listing-tag {
    display: inline-block;
    padding: 0.2rem 0.5rem;
    border-radius: 4px;
    font-size: 0.72rem;
    font-weight: 600;
    line-height: 1.4;
    background: #EFF6FF;
    color: #1D4ED8;
}

.listing-tags-detail {
    padding: 0;
    margin-bottom: 1.25rem;
}

.listing-tags-detail .listing-tag {
    font-size: 0.8125rem;
    padding: 0.3rem 0.75rem;
}

/* 對位 memory mobile-ux-elderly: btn-block 用全寬 */
.btn-block {
    display: block;
    width: 100%;
}

.btn-search {
    width: 100%;
    height: 100%;
    min-height: 56px;
    font-size: 1.125rem;
}

/* V2 — corner badge (top-right of thumb) */
/* §R-N+4xxx+10 (2026-09-04, CEO verdict 「badge-corner 放在右手邊」)
   對位 §R-N+62 KISS: 1 CSS rule 改 left → right, 0 cascade 影響
   對位 §R-N+264 a11y: 視覺位置改但 label text / 顏色 / contrast 唔變
   對位 §R-N+138 disk-truth: 沿用 .badge-corner selector, 0 新 selector */
.badge-corner {
    position: absolute;
    top: 0.5rem;
    right: 0.5rem;
    padding: 0.25rem 0.625rem;
    border-radius: 0.25rem;
    font-size: 0.75rem;
    font-weight: 600;
    color: white;
    z-index: 2;
}

/* V2 — 4-col compact grid (Squarefoot style) — §R-N+120 auto-fill max 220px 統一卡片尺寸
   §R-N+125 P55 : minmax 用 minmax(0, 1fr) 而唔係 minmax(220px, 1fr)
   因為 grid item 預設 min-width: auto = content intrinsic min-width,
   對位 long unbreakable text (中文 + listing_ref + price) 會超過 220px,
   用 minmax(220px, 1fr) 會 1 column 排成 L-shape (§R-N+132.5  audit).
   minmax(0, 1fr) 允許 grid  壓縮到 1fr, grid  4-3-2-1 column
   對位 desktop / tablet / mobile . */
.listing-grid-v2 {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(0, 1fr));
    gap: var(--sarahome-v3-space-4);
    margin-top: 1.5rem;
    /* §R-N+159 (CEO 2026-07-27) — align-items: stretch 撐齊 card 高度
       §R-N+135.8 multi-v  audit + §R-N+62 KISS */
    align-items: stretch;
}

@media (min-width: 1100px) {
    .listing-grid-v2 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}
@media (max-width: 1024px) {
    .listing-grid-v2 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 768px) {
    .listing-grid-v2 { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--sarahome-v3-space-3); }
}
@media (max-width: 768px) {
    .listing-grid-v2 { grid-template-columns: 1fr; }
}

/* V6-L — Hero padding 收細 (CEO 2026-07-16 verdict) */
.hero {
    padding: 2.5rem 0 2.5rem;
    border-radius: 0 0 1rem 1rem;
    margin-bottom: 2rem;
    /* §R-N+140: gradient 改由 .hero-v17 統一控制 (用 var()), 避免 specificity 競爭 */
}

.hero-inner {
    max-width: 800px;
    margin: 0 auto;
    text-align: center;
    padding: 0 1.5rem;
}

/* V6-B — Hero search-first (Option A: segmented toggle + 6 zone pill + Search CTA) */
.search-form-v2 {
    background: var(--sarahome-v3-surface-card, #FFFFFF);
    border-radius: var(--sarahome-v3-radius-md);
    padding: var(--sarahome-v3-space-4);
    box-shadow: 0 4px 12px rgba(45, 125, 210, 0.08);
    margin-top: 2rem;
    display: flex;
    flex-direction: column;
    gap: var(--sarahome-v3-space-3);
}

/* V9-N — featured-listings 6→12 個 + meta inline · separator (對位 MaliMali + Squarefoot 真值 pattern) */
.listing-grid-v9n {
    grid-template-columns: repeat(4, 1fr);
    gap: var(--sarahome-v3-space-4);
}

.listing-meta-v9n {
    display: flex;
    flex-wrap: wrap;
    gap: 0;
    font-size: 0.8125rem;
    color: var(--sarahome-v3-color-text-secondary, #4B5563);
    margin-top: 0.25rem;
}

.listing-meta-v9n span {
    white-space: nowrap;
}

.listing-meta-v9n span:not(:last-child)::after {
    content: " · ";
    color: var(--sarahome-v3-color-text-secondary, #9CA3AF);
    margin: 0 0.25rem;
}

.featured-listings {
    max-width: 1280px;  /* §R-N+121 cap featured section 唔超過 1280px */
    margin: 0 auto;
    padding: 0 1.25rem;
}

.featured-listings-more {
    text-align: center;
    margin-top: 1.5rem;
}

@media (max-width: 768px) {
    .listing-grid-v9n {
        grid-template-columns: repeat(3, 1fr);
    }
}

@media (max-width: 768px) {
    .listing-grid-v9n {
        grid-template-columns: repeat(2, 1fr);
        gap: var(--sarahome-v3-space-3);
    }
}

@media (max-width: 768px) {
    .listing-grid-v9n {
        grid-template-columns: 1fr;
    }
}

/* V6-B — Row 1: segmented Buy/Rent toggle (visual upgrade from <select>) */
.search-toggle {
    display: grid;
    grid-template-columns: 3fr 9fr;
    background: var(--color-bg-soft, #F3F4F6);
    border-radius: var(--sarahome-v3-radius-sm);
    padding: var(--sarahome-v3-space-1);
    gap: var(--sarahome-v3-space-1);
}

.search-toggle-option {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0.625rem 1rem;
    border-radius: 0.375rem;
    font-size: 0.9375rem;
    font-weight: 600;
    color: var(--sarahome-v3-color-text-secondary, #4B5563);
    cursor: pointer;
    transition: background 0.15s, color 0.15s;
    user-select: none;
}

.search-toggle-option input[type="radio"] {
    position: absolute;
    opacity: 0;
    pointer-events: none;
}

.search-toggle-option:has(input:checked) {
    background: var(--sarahome-v3-surface-card, #FFFFFF);
    color: var(--sarahome-v3-color-accent, #FF8C42);
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
}

.search-form-mode {
     display: flex;
     flex-wrap: wrap;
     gap: 0.5rem 0.625rem;
     align-items: center;
     padding-bottom: 0.625rem;
     margin-bottom: 0.5rem;
     border-bottom: 1px solid var(--sarahome-v3-border);
}
.search-type-option.active {
     background: var(--sarahome-v3-surface-card, #FFFFFF);
     color: var(--sarahome-v3-color-accent, #2D7DD2);
     box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
}

/* V7-A — MaliMali 9-icon quick actions grid (5+4 mobile-first) */
.quick-actions-grid {
    padding: var(--sarahome-v3-space-6) 0;  /* P55 §R-N+125: override 5-col grid default, 用 flex column 容納 .quick-actions-row */
    max-width: 1280px;  /* §R-N+163 (CEO 2026-07-27) — 對位 §R-N+121 chain (.featured-listings 1280px) + .quick-actions-row 1280px chain, 統一 top-level container ship */
    margin: 0 auto;
}

.quick-action-card {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: var(--sarahome-v3-space-2);
    padding: 1rem 0.5rem;
    background: var(--sarahome-v3-surface-card, #FFFFFF);
    border: 1px solid var(--sarahome-v3-border, #E5E7EB);
    border-radius: var(--sarahome-v3-radius-lg);  /* §R-N+160 (2026-07-27) — 對位 .listing-card-v2 圓角 (1rem / 16px) */
    text-decoration: none;
    color: var(--sarahome-v3-color-fg, #1F2937);
    transition: border-color 0.15s, background 0.15s, transform 0.1s;
    min-height: 88px;
}

.quick-action-card:hover {
    border-color: var(--sarahome-v3-color-accent, #FF8C42);
    background: var(--color-bg-soft, #F3F4F6);
    transform: translateY(-1px);
}

/* §R-N+159 (CEO 2026-07-27) — quick-action disabled state (§R-N+153 + P102-F)
   對位 §R-N+79 selective narrative 守住入口可發現性:
   - 唔隱藏 0-count card, 改用 data-disabled 灰掉 + 「即將推出」badge
   - hover lift 取消 (§R-N+138  根因 audit 守住 UX)
   - 守住 click navigation 入口 (a 仲可 click, 只係視覺 disable) */
.quick-action-card.quick-action-card-disabled,
.quick-action-card[data-disabled] {
    opacity: 0.5;
    cursor: not-allowed;
    pointer-events: auto;  /* 保留 click 但視覺灰掉 */
}
.quick-action-card.quick-action-card-disabled:hover,
.quick-action-card[data-disabled]:hover {
    border-color: var(--sarahome-v3-border, #E5E7EB);
    background: var(--sarahome-v3-surface-card, #FFFFFF);
    transform: none;
}
.quick-action-card.quick-action-card-disabled .status-pill,
.quick-action-card[data-disabled] .status-pill {
    margin-left: 0.5rem;
    vertical-align: middle;
}

.quick-action-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--sarahome-v3-color-accent, #FF8C42);
}

.quick-action-card:nth-child(5n+2) .quick-action-icon { color: #E76F51; }
.quick-action-card:nth-child(5n+3) .quick-action-icon { color: #10B981; }
.quick-action-card:nth-child(5n+4) .quick-action-icon { color: #F59E0B; }
.quick-action-card:nth-child(5n+5) .quick-action-icon { color: #6366F1; }

.quick-action-label {
    font-size: 0.8125rem;
    font-weight: 500;
    text-align: center;
    line-height: 1.2;
}

@media (max-width: 768px) {
    .quick-actions-grid {
        grid-template-columns: repeat(4, 1fr);
        gap: var(--sarahome-v3-space-2);
        padding: 1rem 0.75rem;
    }
    .quick-action-card {
        min-height: 76px;
        padding: 0.75rem 0.25rem;
    }
    .quick-action-label {
        font-size: var(--sarahome-v3-font-xs);
    }
}

/* V6-B — Row 3: Search CTA full-width button */
.search-row-v2 {
    display: grid;
    grid-template-columns: 1fr;
    gap: 0;
}

.search-field {
    display: flex;
    flex-direction: column;
    text-align: left;
}

.search-field label {
    font-size: 0.75rem;
    color: #6B7280;
    margin-bottom: 0.25rem;
    font-weight: 500;
}

.search-field-button {
    align-self: stretch;
}

.btn-search {
    width: 100%;
    min-height: 56px;
    font-size: 1.125rem;
    font-weight: 600;
    border-radius: var(--sarahome-v3-radius-sm);
}

/* V6-J — 文字輸入框 (對位 §R-N+70 正式書面語 placeholder) */
.search-field-q {
    margin-top: 0.25rem;
}

.search-field-q .search-input-v2 {
    width: 100%;
}

.search-field-label {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

.search-select-v2,
.search-input-v2 {
    height: 48px;
    padding: 0 0.875rem;
    border: 1px solid var(--sarahome-v3-border);
    border-radius: 0.375rem;
    font-size: 1rem;
    background: var(--sarahome-v3-surface-card, #FFFFFF);
    color: var(--sarahome-v3-color-fg);
    font-family: var(--sarahome-v3-font-zh);
}

.search-input-v2:focus,
.search-select-v2:focus {
    outline: 2px solid var(--sarahome-v3-color-accent);
    outline-offset: 1px;
}

/* V2 — Stats strip (4-stat dashboard) */
.stats-strip {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: var(--sarahome-v3-space-4);
    margin-bottom: 2.5rem;
}

.stat-card {
    background: var(--sarahome-v3-surface-card, #FFFFFF);
    border: 1px solid var(--sarahome-v3-border);
    border-radius: var(--sarahome-v3-radius-sm);  /* §R-N+120 統一 card radius 對位 listing-card-v2 */
    padding: 1rem 1.25rem;
    text-align: center;
    transition: box-shadow 0.2s;
}

.stat-card:hover {
    box-shadow: 0 4px 12px rgba(45, 125, 210, 0.1);
}

.stat-card .stat-number {
    font-size: 1.5rem;  /* §R-N+120 統一 downsize 對位 listing card size */
    font-weight: 700;
    color: var(--sarahome-v3-color-accent);
    line-height: 1;
    margin-bottom: 0.375rem;
    font-family: var(--sarahome-v3-font-en);
}

.stat-card-vr .stat-number {
    color: var(--sarahome-v3-color-warm);
}

.stat-card .stat-label {
    font-size: 0.875rem;
    color: #6B7280;
    font-weight: 500;
}

@media (max-width: 768px) {
    .stats-strip {
        grid-template-columns: repeat(2, 1fr);
    }
}

.search-quick-tab.active {
    background: var(--sarahome-v3-color-accent);
    color: white;
}
.search-quick-tab.active:hover {
    background: #1F4D5E;
    color: white;
}
/* §R-N+26xx Wave 5.4 — 抽 admin-dashboard V2 + status-pill cluster 落 pages/admin-dashboard.css (對位 §R-N+22xx Plan B precedent) */

/* §R-N+26xx Wave 5.2 — 抽 .admin-list-item cluster 落 pages/admin-list.css (對位 §R-N+22xx Plan B precedent) */

/* --- Empty state (對位 §R36 友善 empty state UX) --- */
.empty-state {
    text-align: center;
    padding: var(--sarahome-v3-space-8) var(--sarahome-v3-space-4);
    background: var(--sarahome-v3-color-bg);
    border-radius: var(--sarahome-v3-radius-sm);
    border: 1px dashed var(--sarahome-v3-border);
}
.empty-state-text {
    font-size: 1rem;
    color: var(--sarahome-v3-color-fg);
    font-weight: 500;
    margin: 0 0 var(--sarahome-v3-space-1);
}
.empty-state-hint {
    font-size: 0.8125rem;
    color: #6B7280;
    margin: 0;
}

/* V2 — Tab pattern (MaliMali style) */
.section-title {
    font-size: 1.5rem;
    font-weight: 700;
    color: var(--sarahome-v3-color-fg);
    margin-bottom: 1rem;
}

.listings-with-tabs {
    margin-bottom: 3rem;
}

.listing-tabs {
    display: flex;
    gap: var(--sarahome-v3-space-2);
    border-bottom: 2px solid var(--sarahome-v3-border);
    margin-bottom: 1rem;
    overflow-x: auto;
}

.tab-button {
    background: none;
    border: none;
    padding: 0.75rem 1.25rem;
    font-size: 0.95rem;
    font-weight: 500;
    color: #6B7280;
    cursor: pointer;
    border-bottom: 2px solid transparent;
    margin-bottom: -2px;
    white-space: nowrap;
    transition: color 0.15s, border-color 0.15s;
    font-family: var(--sarahome-v3-font-zh);
}

.tab-button:hover {
    color: var(--sarahome-v3-color-accent);
}

.tab-button.active {
    color: var(--sarahome-v3-color-accent);
    border-bottom-color: var(--sarahome-v3-color-accent);
    font-weight: 600;
}

.tab-panel[hidden] {
    display: none;
}

/* Hero title (對位 UX audit 2026-07-16: H1 hardcode) */
.hero-title {
    font-size: 2.5rem;
    font-weight: 700;
    line-height: 1.25;
    color: var(--sarahome-v3-color-fg);
    margin: 0 0 var(--sarahome-v3-space-3);
    letter-spacing: -0.02em;
}

.hero-subtitle {
    font-size: 1.125rem;
    color: #4B5563;
    margin: 0 0 var(--sarahome-v3-space-2);
}

@media (max-width: 768px) {
    .hero-title {
        font-size: 1.75rem;
    }
}

.listing-card:hover {
    box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}

.listing-card .listing-ref {
    color: #6B7280;
    font-size: 0.75rem;
    font-family: var(--sarahome-v3-font-en);
}

.listing-card .listing-title {
    font-size: 1.125rem;
    font-weight: 600;
    margin: 0.25rem 0;
}

.listing-card .listing-price {
    color: var(--sarahome-v3-color-cta);
    font-size: 1.25rem;
    font-weight: 700;
}

.listing-card .listing-badge {
    display: inline-block;
    padding: 0.125rem 0.5rem;
    border-radius: 0.25rem;
    font-size: 0.75rem;
    margin-right: 0.25rem;
}

/* V6-E — 移除 .badge-vr (VR 系統停用, 將來可重新啟用) */

.badge-photo {
    background: var(--sarahome-v3-color-accent);
    color: white;
}

.badge-transparent {
    background: var(--sarahome-v3-color-accent);
    color: white;
}

.badge-sold {
    background: #6B7280;
    color: white;
}

/* P3 (2026-07-16) — Mobile filter toggle button + collapse UX (對位 R68 input-xl + mobile-ux-elderly) */
.filter-toggle-btn {
    display: inline-flex;
    align-items: center;
    gap: var(--sarahome-v3-space-2);
    padding: 0.625rem 1.125rem;
    background: var(--sarahome-v3-surface-card, #FFFFFF);
    border: 1px solid var(--sarahome-v3-border);
    border-radius: var(--sarahome-v3-radius-sm);
    font-size: 0.9375rem;
    font-weight: 500;
    color: var(--sarahome-v3-color-fg);
    cursor: pointer;
    font-family: var(--sarahome-v3-font-zh);
    transition: background 0.15s, border-color 0.15s;
}

.filter-toggle-btn:hover {
    background: var(--sarahome-v3-color-bg);
    border-color: var(--sarahome-v3-color-accent);
}

.filter-toggle-btn[aria-expanded="true"] {
    background: var(--sarahome-v3-color-accent);
    color: white;
    border-color: var(--sarahome-v3-color-accent);
}

.filter-toggle-btn .filter-toggle-icon {
    display: inline-flex;
}

.filter-toggle-btn .filter-toggle-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 1.5rem;
    height: 1.5rem;
    padding: 0 0.375rem;
    background: var(--sarahome-v3-color-cta);
    color: white;
    border-radius: 9999px;
    font-size: 0.75rem;
    font-weight: 600;
}

.filter-toggle-btn[aria-expanded="true"] .filter-toggle-badge {
    background: var(--sarahome-v3-surface-card, #FFFFFF);
    color: var(--sarahome-v3-color-accent);
}

/* Desktop 真實永久顯示 filter-toggle-btn 之外 */
@media (min-width: 769px) {
    .filter-toggle-btn {
        display: none;
    }

    .filter-sidebar {
        display: block !important;
    }
}

/* Mobile 真實 default collapsed (對位 mobile-ux-elderly) */
@media (max-width: 768px) {
    .search-page .filter-toggle-btn {
        margin-bottom: 0.75rem;
    }

    .search-page .filter-sidebar {
        display: none;
        margin-bottom: 1rem;
    }

    .search-page .filter-sidebar.is-open {
        display: block;
    }
}

/* Mobile responsive — header hamburger (P1-1, 對位 §R-N+62 KISS + §R-N+99 a11y)
   ≤768px: hide desktop nav, show hamburger button + slide-down panel
   ≥769px: hide hamburger button + panel (handled below via @media min-width)
*/
@media (max-width: 768px) {
    .site-header .container {
        flex-direction: row;
        flex-wrap: wrap;
        justify-content: space-between;
        gap: var(--sarahome-v3-space-2);
    }

    .site-nav,
    .user-menu {
        display: none;
    }

    .nav-toggle {
        display: flex;
    }

    .site-header {
        position: sticky;
        top: 0;
        z-index: 90;
        padding: 0.375rem 0 !important;
        box-shadow: 0 1px 8px rgba(17, 24, 39, 0.08);
    }

    .site-header .container {
        min-height: 56px;
        flex-wrap: nowrap;
    }

    .site-header .brand-logo-img {
        width: 40px;
        height: 40px;
    }

    .site-header .logo-text strong {
        font-size: 1rem;
    }

    .site-header .logo-text em {
        display: none;
    }

    .mobile-header-actions {
        display: flex;
        align-items: center;
        gap: var(--sarahome-v3-space-1);
        margin-left: auto;
    }

    .mobile-header-action {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        width: var(--sarahome-v3-touch-target);
        height: var(--sarahome-v3-touch-target);
        color: var(--sarahome-v3-color-fg);
        border-radius: 50%;
    }

    .mobile-header-action:focus-visible {
        outline: 3px solid var(--sarahome-v3-color-warm);
        outline-offset: 1px;
    }

    .nav-toggle-panel {
        display: block;
    }

    body {
        padding-bottom: calc(60px + env(safe-area-inset-bottom));
    }

    /* §R-N+352 (2026-08-04) — Mobile bottom-nav 上下 padding 再收窄 (52px → 48px, -8%)
       根因: CEO 追問 §R-N+350 (-12%) 投訴「上下收窄多啲」, 對位 Apple HIG 44pt strict.
       Real audit: §R-N+350 ship 後 padding: 0.125rem 0 ... = 2px top + 2px bottom + 48px item = 52px.
       Fix: 將 top padding 0.125rem → 0 (節省 2px), bottom padding 保留 env(safe-area-inset-bottom)
       (iOS safe area 必須留住, 否則 home indicator 區域 click 失效).
       對位 §R-N+351 守住 56px magic number: 56px - 4px = 52px 仍有 4px defensive gap, sheet 唔會撞 nav.
       min-height 48px 不變 (守 §R-N+62 KISS + a11y tap-target).
       對位 §R-N+62 KISS: 1 commit 1 , 純 CSS, 0 mobile.css 改動.
       對位 §R-N+135.8 selective narrative「CEO 投訴audit 2 根因 = 2 commit 守住」.

       §R-N+437 (2026-08-11) — P1.1 mobile-bottom-nav selective extract (style.css → mobile.css)
       對位 §R-N+348 selective chain pattern (Stage 0 Commit 2  根因).
       mobile-bottom-nav chain (§R-N+350/351/352) 全部 ship 落 mobile.css
       集中 mobile-first 根因 (對位 §P-MD-02 mobile-first), 0 specificity 變動,
       0 老 selector 改動 (selective narrative 守住).
       base.html cascade order: mobile.css 喺 style.css 後, source-order 後寫後贏,
       對住 mobile 根因 (≤768 override), 唔影響 desktop 根因.
       對位 §R-N+62 KISS 1 commit 1 根因. */
    /* .mobile-bottom-nav chain 已 selective extract 落 mobile.css (§R-N+437) */

    .mobile-header-action:focus-visible {
        outline: 3px solid var(--sarahome-v3-color-warm);
        outline-offset: 1px;
    }

    .nav-toggle-panel {
        display: block;
    }
}

/* P1-1 — Hamburger button base style (default flex, mobile visible) */
.nav-toggle {
    flex-direction: column;
    justify-content: space-between;
    width: var(--sarahome-v3-touch-target-sm);
    height: 32px;
    padding: 6px 4px;
    background: transparent;
    border: 1px solid var(--sarahome-v3-border);
    border-radius: 6px;
    cursor: pointer;
    align-items: stretch;
}

.nav-toggle-bar {
    display: block;
    width: 100%;
    height: 3px;
    background-color: var(--sarahome-v3-color-fg);
    border-radius: 2px;
    transition: transform 0.2s ease, opacity 0.2s ease;
}

.nav-toggle[aria-expanded="true"] .nav-toggle-bar:nth-child(1) {
    transform: translateY(8px) rotate(45deg);
}

.nav-toggle[aria-expanded="true"] .nav-toggle-bar:nth-child(2) {
    opacity: 0;
}

.nav-toggle[aria-expanded="true"] .nav-toggle-bar:nth-child(3) {
    transform: translateY(-8px) rotate(-45deg);
}

.nav-toggle:focus-visible {
    outline: 2px solid var(--sarahome-v3-color-accent);
    outline-offset: 2px;
}

/* P1-1 — Mobile collapsed panel content (slides down) */
.nav-toggle-panel {
    background: var(--sarahome-v3-surface-card);
    border-top: 1px solid var(--sarahome-v3-border);
    padding: 0.75rem 0;
}

.nav-toggle-panel[hidden] {
    display: none;
}

.mobile-nav,
.mobile-user-menu {
    display: flex;
    flex-direction: column;
    max-width: 1280px;  /* §R-N+164 — 對位 .container 1280px chain */
    margin: 0 auto;
    padding: 0 1.25rem;
}

.mobile-nav a,
.mobile-user-menu a {
    padding: 0.85rem 0.5rem;
    color: var(--sarahome-v3-color-fg);
    text-decoration: none;
    font-size: 1rem;
    font-weight: 500;
    border-bottom: 1px solid var(--sarahome-v3-border);
    transition: background-color 0.15s ease;
}

.mobile-nav a:hover,
.mobile-nav a:focus,
.mobile-user-menu a:hover,
.mobile-user-menu a:focus {
    background-color: var(--sarahome-v3-surface-section-alt);
    border-radius: 6px;
}

.mobile-nav a:last-child,
.mobile-user-menu a:last-child {
    border-bottom: none;
}

.mobile-user-menu .user-email {
    padding: 0.85rem 0.5rem;
    font-size: 0.9rem;
    color: var(--sarahome-v3-color-text-secondary);
    border-bottom: 1px solid var(--sarahome-v3-border);
}

.mobile-user-menu {
    border-top: 1px solid var(--sarahome-v3-border);
    margin-top: 0.5rem;
    padding-top: 0.5rem;
}

.mobile-user-menu .btn-login-mobile,
.mobile-user-menu .btn-register-mobile {
    border-radius: 6px;
    margin-top: 0.25rem;
}

.mobile-user-menu .btn-login-mobile {
    background-color: transparent;
    color: var(--sarahome-v3-color-accent);
    border: 1px solid var(--sarahome-v3-color-accent);
    text-align: center;
}

.mobile-user-menu .btn-register-mobile {
    background-color: var(--sarahome-v3-color-cta);
    color: #ffffff;
    text-align: center;
}

.mobile-user-menu .btn-logout {
    color: var(--sarahome-v3-color-error);
}

/* Desktop (≥769px): hide hamburger + panel (對位 P1-1) */
@media (min-width: 769px) {
    .nav-toggle {
        display: none;
    }

    .nav-toggle-panel {
        display: none !important;
    }

    .mobile-header-actions,
    .mobile-bottom-nav {
        display: none !important;
    }
}

.listing-actions {
    display: flex;
    flex-direction: column;
    gap: var(--sarahome-v3-space-2);
    padding: 0 1rem 1rem;
}
/* P5 (2026-07-16) — Agent dashboard V2 polish (對位 V2 home + §R-N+79 disk selective narrative) */
.agent-dashboard-v2 {
    max-width: 1280px;  /* §R-N+164 — 對位 .container 1280px chain 統一全站 */
    margin: 0 auto;
}

.dashboard-welcome {
    color: #4B5563;
    margin-bottom: 1.5rem;
    font-size: 0.9375rem;
}

.dashboard-section {
    margin-bottom: 2.5rem;
}

.dashboard-section .section-title {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 1rem;
    font-size: 1.25rem;
    font-weight: 600;
    color: var(--sarahome-v3-color-fg);
    border-bottom: 2px solid var(--sarahome-v3-border);
    padding-bottom: 0.5rem;
}

.dashboard-section .section-action {
    font-size: 0.875rem;
    font-weight: 500;
    color: var(--sarahome-v3-color-accent);
    text-decoration: none;
}

.dashboard-section .section-action:hover {
    text-decoration: underline;
}

/* Listing status badge 對位 §R-N+70 真實 selective narrative — 不真賣 */
.listing-status {
    display: inline-block;
    font-size: 0.7rem;
    font-weight: 500;
    padding: 0.125rem 0.5rem;
    border-radius: 0.25rem;
    margin-left: 0.375rem;
    vertical-align: middle;
}
.listing-status.status-active {
    background: rgba(5, 150, 105, 0.10);
    color: #065F46;
}

.listing-status.status-sold {
    background: #FEE2E2;
    color: #B91C1C;
}


/* Dashboard meta footer */
.dashboard-meta {
    margin-top: 1rem;
    text-align: right;
    font-size: 0.875rem;
    color: #6B7280;
}

.dashboard-meta a {
    color: var(--sarahome-v3-color-accent);
    text-decoration: underline;
}

/* V3-B — Listing Detail Page (對位 Squarefoot + MaliMali UX ref 2026-07-16)
   1. .listing-detail container card + inner padding
   2. .listing-price-large 紅色大字 (對位 MaliMali HK$880萬 染色)
   3. .listing-specs-v2 icon-prefix vertical list (對位 MaliMali 11 項欄位)
   4. .listing-chips chip pill (對位 V3 listing-card-v2 pill 升級)
   5. .listing-section-title 統一 section header
   守住 §R-N+62 ascii 標點 + §R-N+70 formal register + R72 no special-char */

.listing-detail {
    max-width: 1280px;  /* §R-N+412 (2026-08-07) — 1100px → 1280px, 對位 §R-N+164 chain (.container / .featured-listings / .search-page-v2 / .favorites-page-v2 全站 1280px 統一) */
    margin: 0.25rem auto;  /* §R-N+135.10 v2 — 0.5rem → 0.25rem (-50%, CEO: header/main 間距大量縮減) */
    padding: 0.5rem 1.25rem;  /* §R-N+135.10 v2 — 0.75rem → 0.5rem (-33%, 對位 §R-N+62 KISS) */
    background: var(--sarahome-v3-surface-card, #FFFFFF);
    border: 1px solid var(--sarahome-v3-border);
    border-radius: var(--sarahome-v3-radius-sm);
}

/* Phase 2 — Desktop search hierarchy and card scan efficiency.
   Desktop only: primary fields first, secondary modes second, price beside title. */
@media (min-width: 1024px) {
    .search-form-compact {
        display: flex;
        flex-direction: column;
    }

    .search-filter-header {
        order: 0;
    }

    .search-filter-fields {
        /* §R-N+15xx+2 (2026-08-18, CEO verdict D) — drawer 移除 inline 展開 3 fields
           對位 §R-N+4xx+44 desktop phase 2: 9 col grid (keyword/district/type/price/rooms/view/decoration/facing/submit)
           高級篩選 0 hidden, 全部 row 1 visible. */
        order: 1;
        grid-template-columns: minmax(180px, 1.4fr) minmax(110px, 0.9fr) minmax(110px, 0.9fr) minmax(160px, 1.2fr) minmax(85px, 0.7fr) minmax(110px, 0.9fr) minmax(110px, 0.9fr) minmax(110px, 0.9fr) auto;
        gap: 0.625rem;
    }

    .search-form-mode {
        order: 2;
        margin: 0.625rem 0 0;
        padding: 0.625rem 0 0;
        border-top: 1px solid var(--sarahome-v3-border);
        border-bottom: 0;
    }
    /* §R-N+4xx+44 (2026-08-12) — T4 desktop filter panel 垂直收緊
       根因 (live audit 1440): filterPanel h=183px, mode row (toggle+tabs)
       margin+padding 0.625rem×2 = 20px 分隔 fields; 收緊至 0.375rem,
       panel 183 → ~170px (-7%), 對位 §R-N+62 KISS 1 commit 1 根因. */
    .search-page-v2 .search-form-mode {
        margin-top: 0.375rem;
        padding-top: 0.375rem;
    }

    .search-page-v2 .search-field-input input,
    .search-page-v2 .search-field-input select,
    .search-page-v2 .search-field-price input,
    /* §R-N+15xx+2 (2026-08-18) — .filter-drawer-open selector 已 ship 走
       (drawer 移除), min-height rule 留 spread 對位 .search-submit-btn + select/input */
    .search-page-v2 .search-submit-btn {
        min-height: 40px;
    }

    .search-type-option,
    .search-quick-tab {
        min-height: 36px;
    }

    .search-results .listing-card-info {
        position: relative;
        padding: var(--sarahome-v3-space-3) var(--sarahome-v3-space-4);
    }

    .search-results .listing-card-info .listing-title {
        padding-right: 210px;
        min-height: 1.4em;
    }

    .search-results .listing-card-info .listing-card-price {
        position: absolute;
        top: 0.75rem;
        right: 2.75rem;
        z-index: 2;
        pointer-events: none;
        gap: 0.125rem;
    }

    .search-page-v2 .search-results .listing-card-info .listing-card-footer {
        margin-top: auto;
        padding-top: 0.5rem;
        border-top: 0;
    }
}

/* §R-N+120 dashboard section header — 含右側 CTA */
.dashboard-section-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 0.75rem;
    flex-wrap: wrap;
    gap: var(--sarahome-v3-space-2);
}

.dashboard-section-header .section-title {
    margin: 0;
}

.dashboard-section-header .section-action {
    font-size: 0.875rem;
    color: var(--sarahome-v3-color-cta, #B91C1C);
    text-decoration: none;
    font-weight: 500;
}

.dashboard-section-header .section-action:hover {
    text-decoration: underline;
}

/* §R-N+120 dashboard preview — 3-col compact (最近 3 個) 限 max 280px */
.agent-dashboard-preview-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(220px, 280px));
    gap: var(--sarahome-v3-space-3);
    margin-top: 0.5rem;
}

@media (max-width: 768px) {
    .agent-dashboard-preview-grid {
        grid-template-columns: repeat(2, 1fr);
    }
}
@media (max-width: 768px) {
    .agent-dashboard-preview-grid {
        grid-template-columns: 1fr;
    }
}

.listing-header {
    margin-bottom: 0.375rem;  /* §R-N+135.10 v3 — 0.5rem → 0.375rem */
    padding-bottom: 0.375rem;  /* §R-N+135.10 v3 — 0.5rem → 0.375rem */
    border-bottom: 1px solid var(--sarahome-v3-border);
}

.listing-ref {
    display: flex;
    gap: var(--sarahome-v3-space-2);  /* §R-N+135.10 — 0.75rem → 0.5rem */
    flex-wrap: wrap;
    margin-bottom: 0.125rem;  /* §R-N+135.10 v3 — 0.25rem → 0.125rem */
}

.listing-ref-id,
.agent-ref {
    font-family: var(--sarahome-v3-font-en);
    font-size: 0.75rem;
    color: #6B7280;
    letter-spacing: 0.02em;
}

.listing-title {
    font-size: 1.375rem;  /* §R-N+135.10 v3 — 1.5rem → 1.375rem (略小, CEO 整體緊湊) */
    font-weight: 700;
    line-height: 1.2;  /* §R-N+135.10 v3 — 1.25 → 1.2 */
    color: var(--sarahome-v3-color-fg);
    margin: 0.125rem 0 0.25rem;  /* §R-N+135.10 v3 — 0.25/0.375 → 0.125/0.25 */
}

.listing-badge {
    display: inline-block;
    padding: 0.125rem 0.625rem;
    border-radius: 0.25rem;
    font-size: 0.75rem;
    font-weight: 500;
    margin-right: 0.375rem;
}

.listing-badge.badge-sold {
    background: #FEE2E2;
    color: #B91C1C;
}

.listing-district {
    font-size: 0.875rem;
    color: #6B7280;
}

.listing-price-section {
    padding: var(--sarahome-v3-space-4) 0;
    border-bottom: 1px solid var(--sarahome-v3-border);
    margin-bottom: 1rem;
}

.listing-price-large {
    font-family: var(--sarahome-v3-font-en);
    font-size: 1.75rem;
    font-weight: 800;
     color: var(--sarahome-v3-color-cta);
     letter-spacing: -0.01em;
     line-height: 1.2;
}

.listing-actions {
    padding: var(--sarahome-v3-space-4) 0;
    display: flex;
    justify-content: center;
}

.listing-actions .btn-primary {
    display: inline-block;
    padding: 0.75rem 2rem;
    background: var(--sarahome-v3-color-cta);
    color: #FFFFFF;
    font-size: var(--sarahome-v3-font-base);
    font-weight: 600;
    border-radius: 0.375rem;
    text-decoration: none;
    transition: opacity 0.15s;
}

.listing-actions .btn-primary:hover {
    opacity: 0.9;
}
.report-listing-toggle {
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
    font-size: 0.8125rem;
    color: #9CA3AF;
    cursor: pointer;
    transition: color 0.2s;
}
/* §R-N+26xx Wave 5.1 — 抽 agent-my-listings cluster 落 pages/agent-my-listings.css (對位 §R-N+22xx Plan B precedent) */

/* §R-N+137 步驟引導式表單 (對位 UIUX 研究 §4) */
.form-step-indicator {
    display: flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 2rem;
    padding: var(--sarahome-v3-space-4) 0;
}

.form-step-item {
    display: flex;
    align-items: center;
    gap: var(--sarahome-v3-space-2);
    opacity: 0.4;
    transition: opacity var(--transition-smooth);
}

.form-step-item.active {
    opacity: 1;
}

.form-step-num {
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background: var(--sarahome-v3-border);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 0.875rem;
    font-weight: 600;
    color: var(--sarahome-v3-color-text-secondary);
    transition: background var(--transition-smooth), color var(--transition-smooth);
}

.form-step-item.active .form-step-num {
    background: var(--sarahome-v3-color-accent);
    color: white;
}

.form-step-label {
    font-size: 0.8125rem;
    font-weight: 500;
    color: var(--sarahome-v3-color-text-secondary);
}

.form-step-item.active .form-step-label {
    color: var(--sarahome-v3-color-fg);
}

.form-step-divider {
    flex: 1;
    max-width: 60px;
    height: 2px;
    background: var(--sarahome-v3-border);
    margin: 0 0.75rem;
}

.form-step-nav {
    display: flex;
    justify-content: space-between;
    margin: var(--sarahome-v3-space-6) 0;
}

.form-step-nav .btn-secondary,
.form-step-nav .btn-lavender {
    min-width: 120px;
    text-align: center;
}

/* §R-N+137 Map View CSS (對位 UIUX 研究 §2+§5) */
.view-toggle {
    display: inline-flex;
    border: 1px solid var(--sarahome-v3-border);
    border-radius: var(--sarahome-v3-radius-sm);
    overflow: hidden;
    flex-shrink: 0;
}

.view-toggle-btn {
    display: inline-flex;
    align-items: center;
    gap: var(--sarahome-v3-space-1);
    padding: 0.375rem 0.75rem;
    border: none;
    background: var(--sarahome-v3-surface-section-alt);
    color: var(--sarahome-v3-color-text-secondary);
    cursor: pointer;
    font-size: 0.8125rem;
    transition: all var(--transition-smooth);
}

.view-toggle-btn.active {
    background: var(--sarahome-v3-color-accent);
    color: white;
}

.view-toggle-btn:not(:last-child) {
    border-right: 1px solid var(--sarahome-v3-border);
}

.map-container {
    width: 100%;
    height: 480px;
    border-radius: var(--sarahome-v3-radius-md);
    overflow: hidden;
    margin-bottom: 1.5rem;
    border: 1px solid var(--sarahome-v3-border);
}

.map-loading {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100%;
    color: var(--sarahome-v3-color-text-secondary);
}

/* V4-A — Error Pages (對位 user-facing defensive layer)
   403 / 404 / 500 共用 layout + 統一 brand token */

.error-page {
    min-height: 60vh;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: var(--sarahome-v3-space-8) var(--sarahome-v3-space-4);
}

.error-container {
    max-width: 480px;
    text-align: center;
}

.error-code {
    font-family: var(--sarahome-v3-font-en);
    font-size: 5rem;
    font-weight: 800;
    color: var(--sarahome-v3-color-accent);
    line-height: 1;
    margin-bottom: 0.5rem;
    opacity: 0.85;
}

.error-500 .error-code {
    color: var(--sarahome-v3-color-error);
}

.error-403 .error-code {
    color: var(--sarahome-v3-color-warm);
}

.error-title {
    font-size: 1.5rem;
    font-weight: 700;
    color: var(--sarahome-v3-color-fg);
    margin: 0.5rem 0 1rem;
}

.error-message {
    font-size: 0.9375rem;
    line-height: 1.6;
    color: #6B7280;
    margin: 0 0 1.5rem;
}

.error-message a {
    color: var(--sarahome-v3-color-accent);
    text-decoration: underline;
}

.error-actions {
    display: flex;
    gap: var(--sarahome-v3-space-3);
    justify-content: center;
    flex-wrap: wrap;
}

.error-actions .btn-primary,
.error-actions .btn-secondary {
    display: inline-block;
    padding: 0.625rem 1.5rem;
    border-radius: 0.375rem;
    font-size: 0.9375rem;
    font-weight: 600;
    text-decoration: none;
    transition: opacity 0.15s;
}

.error-actions .btn-primary {
    background: var(--sarahome-v3-color-cta);
    color: #FFFFFF;
}

.error-actions .btn-secondary {
    background: var(--sarahome-v3-surface-card, #FFFFFF);
    color: var(--sarahome-v3-color-accent);
    border: 1px solid var(--sarahome-v3-color-accent);
}

.error-actions .btn-primary:hover,
.error-actions .btn-secondary:hover {
    opacity: 0.9;
}


/* V4-C — Search page a11y + active filter chip (對位 MaliMali active filter pill)
   守住 §R-N+62 ascii 標點 + §R-N+70 formal register */

.visually-hidden {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

/* V4-D — Dashboard mobile responsive polish (對位 1100/1200 breakpoint) */

@media (min-width: 1100px) {
    .container {
        max-width: 1080px;
    }
    .stats-strip {
        grid-template-columns: repeat(4, 1fr);
    }
}

/* V4-F — Cache bust hint (對位 R78.7 staging cache SOP 預備)
   active filter chip 加 box-shadow 統一辨識 */

.listing-card-v2 {
    transition: box-shadow 0.18s ease;
}
.listing-card-v2:hover {
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.06);
}





.search-filter-panel {
    margin: 0 0 0.875rem;
    padding: 0.625rem 0.875rem;
    background: var(--sarahome-v3-surface-card, #FFFFFF);
    border: 1px solid var(--sarahome-v3-border);
    border-radius: var(--sarahome-v3-radius-sm);
    box-shadow: 0 1px 4px rgba(31, 41, 55, 0.04);
    z-index: 1;
    position: relative;
}
.search-filter-header h2 {
    display: inline-flex;
    align-items: center;
    gap: 0.375rem;
    margin: 0;
    font-size: 0.8125rem;
    font-weight: 700;
    color: var(--sarahome-v3-color-fg);
}
/* a11y: visually hidden but screen-reader accessible */
.sr-only {
    position: absolute !important;
    width: 1px !important;
    height: 1px !important;
    padding: 0 !important;
    margin: -1px !important;
    overflow: hidden !important;
    clip: rect(0, 0, 0, 0) !important;
    white-space: nowrap !important;
    border: 0 !important;
}

.search-submit-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--sarahome-v3-space-1);
    min-height: 32px;
    padding: 0.375rem 1rem;
    font-size: 0.8125rem;
    font-weight: 700;
    color: #FFFFFF;
    background: var(--sarahome-v3-color-accent, #2D7DD2);
    border: none;
    border-radius: 0.375rem;
    cursor: pointer;
    box-shadow: 0 1px 3px rgba(45, 125, 210, 0.18);
    transition: background 0.15s ease, transform 0.1s ease, box-shadow 0.15s ease;
    white-space: nowrap;
}
/* V25: search page listing card (永遠 1 列, 縮圖 16:9 landscape)
   用戶要求: 不要兩列, 要一列 + 圖片橫向 */
.search-results .listing-grid-v2 {
     grid-template-columns: 1fr;
     gap: var(--sarahome-v3-space-2);
     margin-top: 0.5rem;
 }
 @media (min-width: 768px) {
     .search-results .listing-grid-v2 {
         gap: 0.625rem;
     }
 }
/* §R-N+420+1 tag-detail-grid 4-col override 已移除 (§R-N+420+2 CEO verdict 2026-08-07:
   唔要 4-col, tag page grid 樣式同 listing-grid-v2 一樣 = V25 1-列 style apply,
   對位 §R-N+62 KISS + §R-N+79 selective narrative) */
/* V29 — Card layout: thumb left + info right (flex row)
   Structure: <a.listing-card-v2> > [.thumb] + [.info]
   Info flow: badges → title → subtitle+district → meta → tags → footer(ref|price) → payment */

.search-results .listing-card-v2 {
     display: flex;
     flex-direction: row;
     /* grid align-items: stretch 令所有 card 同高度，保持整齊 */
     align-items: stretch;
     gap: 0;
     overflow: hidden;
     border-radius: 0.375rem;
     transition: box-shadow 0.2s ease, transform 0.2s ease;
    /* §R-N+274 (2026-07-30) — stretched-link parent 必須 position: relative,
       overlay <a> 先可以 absolute 蓋滿成個 card (對位 §R-N+142 同樣 pattern) */
    position: relative;
}
.search-results .listing-card-v2:hover {
    box-shadow: 0 6px 18px rgba(17, 24, 39, 0.10);
    transform: translateY(-1px);
}

/* Thumb container — 縮細 fixed width + aspect-ratio: 16:9 保持橫向
   §R-N+279 (2026-07-30) — 對位 user 「現在圖片太大了」
   - default 320px wide, ≥1100px 360px wide (≈ 55% size reduction vs commit c83f93b 嘅 550px)
   - height auto (從 aspect-ratio 16:9 推算)
   - align-items: flex-start 確保 thumb 唔被 stretch 拉高, 維持 16:9 真正比例 */
.search-results .listing-card-thumb {
      position: relative;
      flex: 0 0 240px;
      width: 240px;
      height: 100%;
      overflow: hidden;
      background: var(--color-bg-soft, #F3F4F6);
  }
 @media (min-width: 1100px) {
     .search-results .listing-card-thumb {
         flex: 0 0 280px;
         width: 280px;
     }
 }
.search-results .listing-card-thumb .listing-thumb {
     width: 100%;
     height: 100%;
     object-fit: cover;
     margin: 0;
     border-radius: 0;
 }

/* Info — flex 1, vertical flow inside
   §R-N+279 (2026-07-30) — 對位 user 「資訊卡片相對應都要跟住變小」
   §R-N+281 (2026-07-30) — 對位 user 「能夠和現在圖片大小一致」
   info height = card height (從 align-items stretch 推算 thumb height 16:9)
   compact 對齊: 細 font + 緊 padding + 細 gap + 隱藏低位元素 */
.search-results .listing-card-info {
    display: flex;
    flex-direction: column;
     gap: 0.125rem;        /* 0.25 → 0.125 (方案 A: 再收窄) */
    flex: 1 1 auto;
    min-width: 0;
      /* §R-N+285 — padding 加大, 由 0.3125 0.625 → 0.75 0.875 (頂底各 +0.5rem)
         §R-N+290 — 收窄頂底: 0.75 → 0.5rem → 0.375rem → 0.25rem → 0.125rem (方案 A) */
      padding: 0.125rem 0.875rem;
    height: auto;           /* §R-N+285 — info 跟 content height 自然 grow, 唔被 thumb height 撐高 */
    overflow: visible;
    /* §R-N+284 — listing-type-char (售/租) 喺 right-top corner, 必須 relative parent */
    position: relative;
}

/* Badges row — §R-N+285 — 加大 padding 對位 spacing preferences */
.search-results .listing-card-info .listing-badges-row {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--sarahome-v3-space-1);
    font-size: 0.75rem;
}
.search-results .listing-card-info .listing-badges-row .listing-badge {
     padding: 0.0625rem 0.4375rem;  /* 0.125 → 0.0625 (方案 B: badge 再緊湊) */
 }

/* Title — §R-N+285 — 大幅加大 (0.875 → 1.0625rem, +25%) 對位 user 「放大一點相關文字」 */
.search-results .listing-card-info .listing-title {
     margin: 0;
     font-size: 1.0625rem;
     font-weight: 700;
     line-height: 1.15;
     color: var(--sarahome-v3-color-fg);
     overflow: hidden;
     text-overflow: ellipsis;
     display: -webkit-box;
     -webkit-line-clamp: 2;
     -webkit-box-orient: vertical;
     letter-spacing: -0.015em;
 }
@media (min-width: 1280px) {
    .search-results .listing-card-info .listing-title {
        font-size: 1.125rem;  /* 1280px+ width, +17px title */
    }
}

/* Subtitle + District — §R-N+285 — 加大 (0.75 → 0.875rem) */
.search-results .listing-card-info .listing-subtitle-row {
     display: flex;
     align-items: center;
     gap: 0.4375rem;
     flex-wrap: wrap;
     margin: 0;
     line-height: 1.3;
 }
.search-results .listing-card-info .listing-subtitle {
    font-size: 0.875rem;
    color: var(--sarahome-v3-color-cta, #E63946);
    font-weight: 500;
}
.search-results .listing-card-info .listing-meta-dot {
    color: #CBD5E1;
    font-weight: 400;
}
.search-results .listing-card-info .listing-district {
    font-size: 0.875rem;
    color: #4B5563;
    display: inline-flex;
    align-items: center;
    gap: var(--sarahome-v3-space-1);
    /* §R-N+286 (2026-07-30) — 防止 CJK district name 字符斷裂 (如「路」換行變「路 / 環」) */
    white-space: nowrap;
    flex-shrink: 0;
}

/* Meta inline — §R-N+285 — gap + icon size 加大, font 0.6875 → 0.8125rem */
.search-results .listing-card-info .listing-meta {
     display: flex;
     flex-wrap: wrap;
     align-items: center;
     gap: var(--sarahome-v3-space-2);
     margin: 0;
     line-height: 1.4;
 }
.search-results .listing-card-info .listing-meta span {
    font-size: 0.8125rem;
    color: #374151;
    line-height: 1.4;
    display: inline-flex;
    align-items: center;
    gap: var(--sarahome-v3-space-1);
    font-weight: 500;
}
/* §R-N+285 — meta icon 加大 11 → 13px (對位 bigger title hierarchy)
   §R-N+286 — icon 視覺分類: meta icon 用中性灰 (對應 content/measurement) */
.search-results .listing-card-info .listing-meta .meta-icon {
    width: 13px;
    height: 13px;
    opacity: 0.65;
    flex-shrink: 0;
    color: #4B5563;
}
/* §R-N+276 (2026-07-30) — view count social proof
   §R-N+285 — 加大字 + padding 對位 spacious design */
.search-results .listing-card-info .listing-card-view-count {
    display: inline-flex;
    align-items: center;
    gap: 0.1875rem;
    color: #6B7280;
    font-size: 0.6875rem;
    background: rgba(107, 114, 128, 0.08);
    padding: 0.125rem 0.5rem;
    border-radius: 999px;
    line-height: 1;
    margin-left: auto;
}
.search-results .listing-card-info .listing-card-view-count svg {
    opacity: 0.7;
    color: #6B7280;
}
/* 2026-09-15 (CEO: view-count 遮蓋價錢) — ≥1024px desktop 橫卡: price block 喺上面
   @media (min-width:1024px) 轉做 absolute top-right (top 0.75rem / right 2.75rem, 高 ~72px,
   對位 title padding-right:210px reserved zone)。上面 base rule 嘅 margin-left:auto
   會將 chip push 去 info 最右 → 實拍 1280px: chip 頂部 ~10px 疊入 price block 底,
   遮蓋 price-secondary (售 MOP$…萬) 右側字。
   Fix: ≥1024px chip 改跟 meta items (房/衛/呎²) inline 左排 — 對位 .agent-listings-grid
   同 class 無 margin-left:auto 嘅既有 pattern, chip 永遠唔會進入 absolute price zone。
   Mobile/tablet (<1024px, price 喺 footer in-flow) 保留右錨行為。
   ⚠️ 必須喺 base rule (margin-left:auto) 之後: 同 specificity (0,3,0) source-order 後贏。 */
@media (min-width: 1024px) {
    .search-results .listing-card-info .listing-card-view-count {
        margin-left: 0;
    }
}

/* Spec row — §R-N+285 (2026-07-30) — 加大 padding + font + icon 對位 spacious design
   4 chip 唔再頂到, 有 padding 同 background highlight
   §R-N+286 — 4 種 spec category 各有 semantic color-coded background */
.search-results .listing-card-info .listing-spec-row {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
     gap: var(--sarahome-v3-space-1);
     font-size: 0.8125rem;       /* §R-N+285: 0.6875 → 0.8125 (+18%) */
     color: #1F2937;
     line-height: 1.2;
     border-top: 1px solid rgba(0, 0, 0, 0.06);   /* §R-N+285: dashed → solid (更 visible) */
      padding-top: 0.25rem;        /* 0.375 → 0.25 (方案 A) */
     margin-top: 0.125rem;
}
.search-results .listing-card-info .listing-spec-row .listing-spec-item {
     display: inline-flex;
     align-items: center;
     gap: var(--sarahome-v3-space-1);
     white-space: nowrap;
     padding: 0.125rem 0.375rem;       /* 0.1875 0.5 → 0.125 0.375 (最終收窄) */
     border-radius: 0.375rem;
     background: rgba(125, 125, 125, 0.08);   /* §R-N+285: 0.06 → 0.08 (slight darker) */
     font-weight: 500;
     color: #1F2937;
 }
.search-results .listing-card-info .listing-spec-row .spec-icon {
    width: 13px;
    height: 13px;
    opacity: 0.85;            /* §R-N+286: 0.55 → 0.85 (icon 顏色分類見 below, opacity 提升對應) */
    flex-shrink: 0;
}
/* §R-N+286 (2026-07-30) — Spec chip 4 種語意類別 color-coded
   樓層 = blue (藍) | 座向 = purple (紫) | 裝修 = gold (金) | 樓齡 = green (綠)
   semantic color 在 icon 同 text 應用, bg 對應 category, 全部 opacity 0.10 muted */
.search-results .listing-spec-item-floor {
    background: rgba(45, 125, 210, 0.10) !important;
    color: #1E3A8A;
}
.search-results .listing-spec-item-floor .spec-icon { color: #1E3A8A; }

.search-results .listing-spec-item-facing {
    background: rgba(139, 92, 246, 0.10) !important;
    color: #5B21B6;
}
.search-results .listing-spec-item-facing .spec-icon { color: #5B21B6; }

.search-results .listing-spec-item-decoration {
    background: rgba(245, 158, 11, 0.12) !important;
    color: #92400E;
}
.search-results .listing-spec-item-decoration .spec-icon { color: #92400E; }

.search-results .listing-spec-item-age {
    background: rgba(16, 185, 129, 0.10) !important;
    color: #065F46;
}
.search-results .listing-spec-item-age .spec-icon { color: #065F46; }

/* W5-A1 (2026-08-01) — Rental 租期 chip (對位 DB lease_term_months)
   semantic color = 琥珀色 (rental convention), 對位 §R-N+286 4 種 spec chip color scheme */
.search-results .listing-spec-item-lease {
    background: rgba(217, 119, 6, 0.12) !important;
    color: #92400E;
}
.search-results .listing-spec-item-lease .spec-icon { color: #D97706; }

/* Per-sqft price line — §R-N+282 (Commit 2 visual polish) */
.search-results .listing-card-price .price-per-sqft {
    color: var(--sarahome-v3-color-success, #10B981);
    font-weight: 600;
    letter-spacing: 0.01em;
}

/* §R-N+281 — 隱藏低位元素 (tags + payment-row) */
.search-results .listing-card-info .listing-tags,
.search-results .listing-card-info .listing-payment-row {
    display: none;
}

/* Footer — §R-N+285 — 對位 spacious design: 加大 padding-top + border weight */
.search-results .listing-card-info .listing-card-footer {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: var(--sarahome-v3-space-3);
    margin-top: auto;
     padding-top: 0.25rem;        /* 0.375 → 0.25 (方案 A) */
    border-top: 1px solid rgba(0, 0, 0, 0.08);   /* §R-N+285: lighter color */
}
.search-results .listing-card-info .listing-ref {
    flex-shrink: 0;
    font-size: 0.6875rem;
    color: #9CA3AF;
    font-family: var(--sarahome-v3-font-en);
}

/* Price block — §R-N+285 — 對位 spacious design, gap 加大 */
.search-results .listing-card-info .listing-card-price {
    flex-shrink: 0;
    text-align: right;
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 0.1875rem;
}
.search-results .listing-card-price .price-primary {
    font-size: 1.375rem;        /* §R-N+285: 1.0625 → 1.375 (+29%, 22px) 顯眼 */
    font-weight: 800;
    color: var(--sarahome-v3-color-cta, #E63946);
    font-family: var(--sarahome-v3-font-en);
    line-height: 1.1;
    letter-spacing: -0.015em;
}
@media (min-width: 1280px) {
    .search-results .listing-card-price .price-primary {
        font-size: var(--sarahome-v3-font-xl);       /* 1280px+ width, 24px 顯眼 */
    }
}
.search-results .listing-card-price .price-secondary {
    font-size: 0.625rem;
    color: #9CA3AF;
    line-height: 1.2;
}
.search-results .listing-card-price .price-suffix {
    font-size: 0.6875rem;
    color: #6B7280;
    font-weight: 500;
    margin-top: 0;
}
.search-results .listing-card-info .listing-payment-link:hover {
    text-decoration: underline;
}


/* Mobile adjustments */
@media (max-width: 768px) {
    .search-results .listing-card-v2 {
        flex-direction: row;
        min-height: auto;
    }
    .search-results .listing-card-thumb {
        flex: 0 0 130px;
        width: 130px;
    }
    /* §R-N+278 — IMG aspect-ratio 由 base rule 控制 (16:9), 此處唔重覆覆寫 */
    .search-results .listing-card-info {
        gap: var(--sarahome-v3-space-1);
        padding: 0.75rem 0.875rem;
    }
    .search-results .listing-card-info .listing-title {
        font-size: 1rem;
    }
    .search-results .listing-card-info .listing-subtitle {
        font-size: 0.8125rem;
    }
    .search-results .listing-card-info .listing-district {
        font-size: 0.875rem;
    }
    .search-results .listing-card-info .listing-meta span {
        font-size: 0.75rem;
    }
    .search-results .listing-card-price .price-primary {
        font-size: var(--sarahome-v3-font-md);
    }
    .search-results .listing-card-info .listing-card-footer {
        gap: var(--sarahome-v3-space-2);
    }
}

/* §R-N+274 (2026-07-30) — Stretched-link pattern: 避免 nested <a> 違反 HTML5 spec
   - overlay <a> position:absolute 蓋滿成個 card (靠 card 嘅 position:relative)
   - text-indent:-9999em + overflow:hidden 隱藏 overlay 文字但保留 a11y
   - 對位 agent/my_listings §R-N+142 已建立嘅「避免 nested <a>」pattern */
 .search-results .listing-card-overlay {
     position: absolute;
     inset: 0;
     z-index: 1;
     text-indent: -9999em;
     overflow: hidden;
     color: transparent;
 }

/* Payment link 必須喺 overlay 之上,先可以 click 跳計數機/聯絡,
   而唔係被 overlay 截走 click 跳樓盤 detail (§R-N+99 form pattern) */
.search-results .listing-card-info .listing-payment-link {
    position: relative;
    z-index: 2;
}

/* §R-N+275 (2026-07-30) — UX batch 1: card affordance + mobile polish
   - ♥ 收藏按鈕: 右上角浮動,z-index:2 高過 overlay 同 thumb 內容
   - 新盤 badge: 綠色 pill, ≤7 日顯示
   - Active filter chip group: 藍色 accent highlight 價格 range 合併 chip
   - MOBILE thumb-top: ≤768px 改 stacked column, content 100% 闊 */

/* Heart + new badge actions container */
.search-results .listing-card-actions {
    position: absolute;
    top: 0.5rem;
    right: 0.5rem;
    display: flex;
    align-items: center;
    gap: 0.3125rem;
    z-index: 2;
}

/* §R-N+284 (2026-07-30) — Listing type 字 badge 喺 listing-card-info top-right
   對位 user 「listing-card-info 嘅右上角, 並且可以用一個字」
   - 24x24 細小方形 badge + 單 character (售 or 租), 取代 §R-N+283 嘅 49x28 "售盤/租盤" pill
   - position: absolute relative to .listing-card-info (父元素)
   - 售盤: warm orange/red CTA (matches Sarahome V3 color hierarchy)
   - 租盤: cool blue accent (distinguishes from sales)
   對位 §R-N+79 selective narrative:
   - mobile 影響 (stacked): 同位置 (right-top of info column below thumb)
   - 縮 card info padding 0.125rem right 留位, 不會壓 badges */
.search-results .listing-card-info .listing-type-char {
    position: absolute;
    top: 0.25rem;
    right: 0.25rem;
    width: 22px;
    height: 22px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: 0.375rem;
    color: #FFFFFF;
    font-size: 0.875rem;
    font-weight: 700;
    line-height: 1;
    letter-spacing: 0;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12);
    z-index: 2;
    user-select: none;
}
.search-results .listing-type-char-sales {
    background: linear-gradient(135deg, #FF6B35 0%, #E63946 100%);
}
.search-results .listing-type-char-rental {
    background: linear-gradient(135deg, #0EA5E9 0%, #2D7DD2 100%);
}

/* 新盤 badge — P3-A11y (t_6828667f): 原 #10B981 白字 2.36:1 → #047857 白字 4.55:1 AA */
.search-results .listing-new-badge {
    background: #047857;
    color: #FFFFFF;
    font-size: 0.7rem;
    font-weight: 700;
    padding: var(--sarahome-v3-space-1) var(--sarahome-v3-space-2);
    border-radius: 999px;
    line-height: 1;
    letter-spacing: 0.02em;
}

/* R-N+L1-Q2 (2026-08-19) — search card L1→L2 register nudge
   Anon icon-link 喺 thumb top-left, 同新盤 badge 一齊位於 .listing-card-actions 區塊.
   已登入 user 唔顯示 (對位 listing_detail §R-N+12xx+1 真値 ship pattern 一致)。
   z-index: 2 高過 overlay, 點唔會被 overlay 截走 (對位 §R-N+275 P3 affordance ).
   對位 §R-N+62 KISS + §R-N+290 style consistency (card 一致 visual hierarchy). */
.search-results .listing-card-register-nudge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.625rem;
    height: 1.625rem;
    background: rgba(255, 255, 255, 0.92);
    color: var(--sarahome-v3-color-accent, #2D7DD2);
    border-radius: 999px;
    text-decoration: none;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12);
    transition: background 0.15s ease, transform 0.15s ease;
}
.search-results .listing-card-register-nudge:hover {
    background: var(--sarahome-v3-color-accent, #2D7DD2);
    color: #FFFFFF;
    transform: scale(1.05);
}
.search-results .listing-card-register-nudge svg {
    display: block;
}

/* §R-N+31xx (2026-08-31) — P1 UX: search card favorite btn (logged-in L1)
   Mirror listing-card-register-nudge size (1.625rem circle, top-left thumb position).
   aria-pressed=true → filled heart (currentColor), aria-pressed=false → outline heart.
   對位 §R-N+138 disk-truth: 真値 render aria-pressed (favorited_ids set lookup). */
.search-results .listing-card-fav-form {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    margin: 0;
}
.search-results .listing-card-fav-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.625rem;
    height: 1.625rem;
    background: rgba(255, 255, 255, 0.92);
    color: var(--sarahome-v3-color-accent, #2D7DD2);
    border: none;
    border-radius: 999px;
    cursor: pointer;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12);
    transition: background 0.15s ease, transform 0.15s ease;
}
.search-results .listing-card-fav-btn:hover {
    background: var(--sarahome-v3-color-accent, #2D7DD2);
    color: #FFFFFF;
    transform: scale(1.05);
}
.search-results .listing-card-fav-btn[aria-pressed="true"] {
    /* 已收藏: 紅色 filled heart (對位 listing-sticky-cta-fav pressed state) */
    color: var(--sarahome-v3-color-error, #DC2626);
}
.search-results .listing-card-fav-btn[aria-pressed="true"]:hover {
    background: var(--sarahome-v3-color-error, #DC2626);
    color: #FFFFFF;
}
.search-results .listing-card-fav-btn svg {
    display: block;
}
/* §R-N+31xx+5 (2026-09-04) pulse animation: optimistic UI feedback
   search-engagement.js toggleFav() 加 .listing-card-fav-btn--pulse class,
   1-shot scale + color flash → user 即時見到 click 有反應 (0 server 延遲)。
   animation-fill-mode: forwards + 350ms 需 > transition 才唔會被 transition 拮走。 */
.search-results .listing-card-fav-btn--pulse {
    animation: sarahome-fav-pulse 0.35s ease-out;
}
@keyframes sarahome-fav-pulse {
    0%   { transform: scale(1); }
    35%  { transform: scale(1.35); }
    70%  { transform: scale(0.92); }
    100% { transform: scale(1); }
}
@media (prefers-reduced-motion: reduce) {
    .search-results .listing-card-fav-btn--pulse {
        animation: none;
    }
}

/* MOBILE thumb-top stacked layout (≤768px)
   解決之前 130px thumb + 178px content 太窄嘅問題
   §R-N+278 — thumb 改 16:9 全闊, content 100% 闊度 stack 喺下面
   (對位 user 「使用16:9會好一點」) */
@media (max-width: 768px) {
    .search-results .listing-card-v2 {
        flex-direction: column;
    }
    .search-results .listing-card-thumb {
        flex: none;
        width: 100%;
        height: auto;
        aspect-ratio: 16 / 9;
        overflow: hidden;
    }
    .search-results .listing-card-thumb .listing-thumb {
        aspect-ratio: 16 / 9;
        width: 100%;
        height: 100%;
    }
    /* §R-N+4xx+41 (2026-08-12) — T1 mobile card density 收斂
       根因: mobile 390px 每卡 406px 高 (thumb 205px 16:9 + info 201px),
       20 卡 = 8407px scroll; info 內 7 rows 全部展開.
       收斂: info padding 0.875rem 1rem → 0.5rem 0.75rem,
       badges-row mobile 隱藏 (type-char 已表達 售/租, 相片已表達置頂/有相),
       spec-row font 收細 + padding 收緊, footer margin-top 收緊. */
    .search-results .listing-card-info {
        padding: var(--sarahome-v3-space-2) var(--sarahome-v3-space-3);
        gap: 0.0625rem;
    }
    .search-results .listing-card-info .listing-title {
        font-size: 1rem;
        line-height: 1.2;
    }
    .search-results .listing-card-info .listing-subtitle,
    .search-results .listing-card-info .listing-district {
        font-size: 0.875rem;
    }
    /* T1: badges-row 隱藏 (mobile 相片已表達 置頂/有相, type-char 已表達 售/租) */
    .search-results .listing-card-info .listing-badges-row {
        display: none;
    }
    /* T1: spec-row compact */
    .search-results .listing-card-info .listing-spec-row {
        gap: var(--sarahome-v3-space-1);
        font-size: 0.75rem;
        padding-top: 0.1875rem;
        margin-top: 0.0625rem;
    }
    .search-results .listing-card-info .listing-spec-row .listing-spec-item {
        padding: 0.0625rem 0.3125rem;
    }
    .search-results .listing-card-info .listing-card-footer {
        padding-top: 0.1875rem;
        margin-top: 0.0625rem;
    }
    /* Heart button moves to top-right of thumb on mobile */
    .search-results .listing-card-actions {
        top: 0.625rem;
        right: 0.625rem;
    }
}

@media (max-width: 768px) {
    .search-filter-panel { padding: 0.625rem; }
    .search-filter-header { align-items: center; }
    /* V24: 頂部橫條 mobile ≤600px fallback: 雖然 mobile 用 bottom-sheet, 但保留 defensive */
    .search-filter-fields { gap: var(--sarahome-v3-space-2); }
}


.current-photo-summary {
    display: flex;
    justify-content: space-between;
    gap: var(--sarahome-v3-space-4);
    margin-bottom: 0.75rem;
    padding: var(--sarahome-v3-space-3) var(--sarahome-v3-space-4);
    background: #EFF6FF;
    border-left: 4px solid #2D7DD2;
    color: #1F2937;
}
.current-photo-summary span { color: #4B5563; font-size: 0.875rem; }
.photo-manager-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
    gap: var(--sarahome-v3-space-4);
    margin-bottom: 1.25rem;
}
.photo-manager-card { position: relative; overflow: hidden; border: 1px solid #D1D5DB; border-radius: var(--sarahome-v3-radius-sm); background: var(--sarahome-v3-surface-card, #FFFFFF); }
.photo-manager-card img { display: block; width: 100%; height: 150px; object-fit: cover; }
.photo-primary-badge { position: absolute; top: 0.5rem; left: 0.5rem; padding: var(--sarahome-v3-space-1) var(--sarahome-v3-space-2); background: #10B981; color: #FFFFFF; border-radius: 999px; font-size: 0.75rem; font-weight: 700; }
.photo-manager-actions { display: flex; gap: var(--sarahome-v3-space-2); padding: var(--sarahome-v3-space-3); }
.photo-manager-actions button { min-height: 40px; padding: var(--sarahome-v3-space-2) var(--sarahome-v3-space-3); border-radius: 0.375rem; font-weight: 700; cursor: pointer; }

/* §R-N+299 (2026-08-01) Ship-M commit 1 — drag-and-drop photo reorder
   對位 §R-N+62 KISS: 純 visual feedback, 0 額外 markup
   對位 §R-N+140 dark var system: 用 --sarahome-v3-* tokens (light + dark mode 自動對位) */
.photo-drag-handle {
    position: absolute;
    top: 0.5rem;
    right: 0.5rem;
    z-index: 10;
    padding: var(--sarahome-v3-space-1) var(--sarahome-v3-space-2);
    background: rgba(0, 0, 0, 0.6);
    color: #FFFFFF;
    border-radius: 0.25rem;
    font-size: 0.875rem;
    font-weight: 700;
    letter-spacing: -0.1em;
    cursor: grab;
    user-select: none;
    line-height: 1;
}
.photo-manager-card[draggable="true"]:hover .photo-drag-handle {
    background: rgba(0, 0, 0, 0.8);
}
.photo-manager-card[draggable="true"]:active .photo-drag-handle {
    cursor: grabbing;
}
.photo-manager-card.is-dragging {
    opacity: 0.5;
    transform: scale(0.95);
    transition: transform 0.15s ease, opacity 0.15s ease;
}
.photo-manager-card.is-drag-over {
    border-color: #6366F1;
    border-style: dashed;
    box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.2);
}
.photo-manager-card[draggable="true"]:focus {
    outline: 2px solid #6366F1;
    outline-offset: 2px;
}

/* =====================================================================
 * 2026-07-28: featured-v3-card Modern Redesign
 * 拎走全局 a:hover { text-decoration: underline } 干擾, 改善 card layout
 * 現代美感: subtle lift + image scale + 漸層 overlay + better typography
 * ===================================================================== */
.featured-v3-card,
.featured-v3-card:link,
.featured-v3-card:visited,
.featured-v3-card:hover,
.featured-v3-card:focus,
.featured-v3-card:active {
    text-decoration: none !important;
    color: inherit;
    display: flex;
    flex-direction: column;
    background: var(--sarahome-v3-surface-card, #FFFFFF);
    border-radius: 14px;
    overflow: hidden;
    box-shadow: 0 1px 3px rgba(15, 23, 42, 0.06), 0 1px 2px rgba(15, 23, 42, 0.04);
    transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1),
                box-shadow 0.25s cubic-bezier(0.4, 0, 0.2, 1),
                border-color 0.25s ease;
    border: 1px solid rgba(15, 23, 42, 0.04);
    position: relative;
    cursor: pointer;
}

.featured-v3-card:hover {
    transform: translateY(-4px);
    box-shadow: 0 12px 28px rgba(15, 23, 42, 0.12), 0 4px 10px rgba(15, 23, 42, 0.06);
    border-color: rgba(45, 125, 210, 0.25);
}

.featured-v3-card:hover .featured-v3-card-img {
    transform: scale(1.05);
}

.featured-v3-card-image {
    position: relative;
    aspect-ratio: 16 / 9;  /* Phase 1.7 (2026-08-20) — 3 / 2 → 16 / 9 (統一 search card / detail 視覺) */
    overflow: hidden;
    background: #F1F5F9;
}

/* 圖片底都加柔光漸層令下方文字 badge 清楚讀 */
.featured-v3-card-image::after {
    content: "";
    position: absolute;
    inset: 0;
    background: linear-gradient(180deg,
        rgba(0, 0, 0, 0) 50%,
        rgba(0, 0, 0, 0.45) 100%);
    pointer-events: none;
    z-index: 1;
}

.featured-v3-card-img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

/* 左上 badge (買/租) */
.featured-v3-card-badge {
    position: absolute;
    top: 0.625rem;
    left: 0.625rem;
    z-index: 2;
    display: flex;
    gap: var(--sarahome-v3-space-1);
}

/* 右上 badge (本週新/精選) */
.featured-v3-card-badges-right {
    position: absolute;
    top: 0.625rem;
    right: 0.625rem;
    z-index: 2;
    display: flex;
    flex-direction: column;
    gap: var(--sarahome-v3-space-1);
    align-items: flex-end;
}

/* 內容區: 较 紧凑 + better spacing */
.featured-v3-card-content {
    padding: 1rem 1.125rem 1.125rem;
    display: flex;
    flex-direction: column;
    gap: 0.1rem;
    flex: 1;
}

.featured-v3-card-ref {
    font-size: 0.6875rem;
    color: #94A3B8;
    font-family: ui-monospace, "SF Mono", Menlo, monospace;
    letter-spacing: 0.02em;
    text-transform: uppercase;
    line-height: 1.2;
}

.featured-v3-card-title {
    font-size: var(--sarahome-v3-font-base);
    font-weight: 600;
    line-height: 1.4;
    color: #0F172A;
    margin: 0;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    letter-spacing: -0.01em;
    transition: color 0.2s ease;
    /* §R-N+374 (2026-08-06): min-height 對位 2 line clamped title - cards 行高對齊
       calc(0.75em * 2) = 2 line × font-size 1rem × 0.75 line-height baseline
       (對位 1.4 line-height + line-clamp:2 fixed grid alignment)
       對位 §R-N+62 KISS: 1 surgical line ship. */
    min-height: calc(0.75em * 2);
}

.featured-v3-card:hover .featured-v3-card-title {
    color: var(--sarahome-v3-color-accent, #FF8C42);
}

.featured-v3-card-location {
    font-size: 0.8125rem;
    color: #64748B;
    line-height: 1.3;
    display: flex;
    align-items: center;
    gap: var(--sarahome-v3-space-1);
    margin: 0;
}

.featured-v3-card-location::before {
    content: "📍";
    font-size: var(--sarahome-v3-font-xs);
    opacity: 0.7;
}

.featured-v3-card-price {
    font-size: var(--sarahome-v3-font-lg);
    font-weight: 700;
    color: #DC2626;
    line-height: 1.2;
    margin: 0.25rem 0 0;
    letter-spacing: -0.02em;
    display: flex;
    align-items: baseline;
    gap: var(--sarahome-v3-space-1);
    flex-wrap: wrap;
}

.featured-v3-card-price .price-suffix {
    font-size: 0.8125rem;
    font-weight: 500;
    color: #94A3B8;
}

.featured-v3-card-price-per-sqft {
    font-size: var(--sarahome-v3-font-xs);
    color: #64748B;
    margin: 0;
    line-height: 1.3;
}

.featured-v3-card-meta {
    display: flex;
    flex-wrap: wrap;
    gap: 0.375rem;
    margin-top: auto;
    /* §R-N+377 (2026-08-06): padding-top 收緊至 0.25rem (4px).
       對位 §R-N+374  (border-top 0px) — 內部 padding 仍保留視覺分隔.
       V3-B sister 根因 8066 同步加 padding-top: 0.25rem 對位 consistency. */
    padding-top: 0.25rem;
    border-top: 0px solid rgba(15, 23, 42, 0.05);
}

.featured-v3-card-chip {
    display: inline-flex;
    align-items: center;
    gap: 0.2rem;
    padding: 0.2rem 0.5rem;
    background: #F1F5F9;
    color: #475569;
    border-radius: 999px;
    font-size: var(--sarahome-v3-font-xs);
    font-weight: 500;
    line-height: 1.2;
    white-space: nowrap;
}

.featured-v3-card-chip.chip-view-sea { background: #DBEAFE; color: #1E40AF; }
.featured-v3-card-chip.chip-view-mountain { background: #DCFCE7; color: #166534; }
.featured-v3-card-chip.chip-view-city { background: #F3E8FF; color: #6B21A8; }
.featured-v3-card-chip.chip-view-garden { background: #FEF3C7; color: #92400E; }
.btn-photo-primary { flex: 1; border: 1px solid #2D7DD2; background: var(--sarahome-v3-surface-card, #FFFFFF); color: #2D7DD2; }
.btn-photo-delete { border: 1px solid #DC2626; background: var(--sarahome-v3-surface-card, #FFFFFF); color: #DC2626; }

.photo-upload-native {
    padding: var(--sarahome-v3-space-4);
    background: #F9FAFB;
    border: 1px solid #D1D5DB;
    border-radius: var(--sarahome-v3-radius-sm);
}
.photo-upload-native-input {
    display: block;
    width: 100%;
    min-height: 52px;
    padding: var(--sarahome-v3-space-2);
    background: var(--sarahome-v3-surface-card, #FFFFFF);
    color: #1F2937;
    border: 1px solid #D1D5DB;
    border-radius: 0.375rem;
    cursor: pointer;
}
.photo-upload-native-input::file-selector-button {
    margin-right: 0.75rem;
    padding: 0.625rem 1rem;
    background: #2D7DD2;
    color: #FFFFFF;
    border: 0;
    border-radius: 0.375rem;
    font-weight: 700;
    cursor: pointer;
}
.photo-upload-native-input::-webkit-file-upload-button {
    margin-right: 0.75rem;
    padding: 0.625rem 1rem;
    background: #2D7DD2;
    color: #FFFFFF;
    border: 0;
    border-radius: 0.375rem;
    font-weight: 700;
    cursor: pointer;
}
.existing-photos-note { margin-top: 0.5rem; color: #4B5563; font-size: 0.875rem; }

/* ============================================================ */
/* §R-N+124 D 方案 — 首頁精選區 D 方案 (CEO D verdict 2026-07-18) */
/*   3 sections on /: 精選 (featured→fallback) + 分類探索 + 最新 */
/* ============================================================ */

/* §R-N+124 D 方案 — 首頁精選區 D 方案 (CEO D verdict 2026-07-18)
   UI 修整 §R-N+125 (CEO UI feedback 2026-07-18):
   - Section 2 quick-action-card-lg 用 flex 而非 grid, 每個 card 對齊桌面 4 個 col 寬度
     避免中文字符 char-wrapping 變 vertical stack
   - Section 4 (更多服務) nav 改用 4-cols grid 比 Section 2 較少相同 markup
   - 全寬 1280px cap 但 desktop 4-col 唔再 minmax(0, 1fr) 推細卡
*/

/* Section header — title + optional status pill / action right-aligned */
.section-title-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    max-width: 1280px;
    margin: 0 auto 0.75rem;
    padding: 0 1.5rem;
    gap: var(--sarahome-v3-space-4);
    flex-wrap: wrap;
}
.section-title-row .section-title {
    margin: 0;
    font-size: 1.25rem;
    font-weight: 700;
    color: var(--sarahome-v3-color-fg, #1F2937);
}

/* Section 2 — 分類探索 4 大類 (D2) — 對齊 DB enum
   用 flex wrap 4-cols，避免 narrow column 中文 char-wrapping 變 vertical stack */
.quick-actions-row {
    display: flex;
    flex-wrap: wrap;
    gap: var(--sarahome-v3-space-4);
    padding: 0 1.5rem 1.5rem;
    max-width: 1280px;
    margin: 0 auto;
    align-items: stretch;  /* P57 §R-N+126 fix: 撐齊 card height */
}
.quick-action-card-lg {
    /* P57 §R-N+126 fix: 改 box-sizing + 顯式 height: 100% + flex-direction: column
       撐齊 4 card height 一致 (買盤・住宅 / 買盤・車位 / 買盤・商舗 / 租盤・住宅 全部同高)
       §R-N+159 (CEO 2026-07-27) — 6 card grid (max-width 16.66%)
       §R-N+160 (CEO 2026-07-27) — 對位 .listing-card-v2 視覺 weight:
         - 圓角 0.75rem → 1rem (與樓盤 card 一致)
         - min-height 144px → 120px (對齊 thumb 3/2 撐起嘅 content 區高度)
         - box-shadow 同 .listing-card-v2 預設 (subtle lift)
       §R-N+161 (CEO 2026-07-27) — Stage 2 structural alignment:
         - min-height 120px → 156px (對齊 .listing-card-v2 content 區高度,
           視覺 weight 一致, 唔郁 thumb chain)
         - title font-size 1rem → 1.05rem (對齊 .listing-card-v2 .listing-title) */
    flex: 1 1 220px;
    min-width: 220px;
    max-width: calc(16.66% - 0.85rem);
    min-height: 156px;
    height: 100%;
    box-sizing: border-box;
    padding: 1.25rem 0.75rem !important;
    gap: var(--sarahome-v3-space-2);
    border-width: 1px;
    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05);
    text-align: center;
    display: flex !important;
    flex-direction: column !important;
    align-items: center;
    justify-content: center;
}
/* P55: prevent 內部 <span> 變 vertical stack, 確保 title + meta 1-line render */
.quick-action-card-lg > .quick-action-title,
.quick-action-card-lg > .quick-action-meta {
    display: block;
    width: 100%;
    min-width: 0;  /* allow shrink, override html default min-content */
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.quick-action-card-lg .quick-action-icon {
    width: 56px; height: 56px;
    border-radius: 14px;
    background: var(--color-bg-soft, #F3F4F6);
    color: var(--sarahome-v3-color-accent, #FF8C42);
    margin: 0 auto;
    flex-shrink: 0;
}
.quick-action-card-lg .quick-action-title {
    /* §R-N+161 (CEO 2026-07-27) — Stage 2 structural alignment:
       title font-size 1rem → 1.05rem 對齊 .listing-card-v2 .listing-title */
    font-size: 1.05rem;
    font-weight: 600;
    line-height: 1.4;
    color: var(--sarahome-v3-color-fg, #1F2937);
}
.quick-action-card-lg .quick-action-meta {
    font-size: 0.8125rem;
    color: #6B7280;
    line-height: 1.4;
}
.quick-action-card-lg:hover {
    border-color: var(--sarahome-v3-color-accent, #FF8C42);
    background: linear-gradient(135deg, #FFFFFF 0%, var(--color-bg-soft, #F3F4F6) 100%);
}

/* §R-N+159 (CEO 2026-07-27) — .latest-listings + .latest-listings-actions 全 DELETE
   §R-N+79 selective narrative:
   - .latest-listings section (§R-N+135.13 已 ship刪, Stage-3 IA  audit)
   - .latest-listings-actions 0 ref (dead class)
   - §R-N+62 KISS: 全部 dead class 一齊 DELETE, 唔留 "no harm" placeholder
*/
.section-action {
    color: var(--sarahome-v3-color-accent, #FF8C42);
    text-decoration: none;
    font-size: 0.9375rem;
    font-weight: 500;
    padding: var(--sarahome-v3-space-2) var(--sarahome-v3-space-4);
    border-radius: var(--sarahome-v3-radius-sm);
    transition: background 0.15s;
}
.section-action:hover {
    background: var(--color-bg-soft, #F3F4F6);
}

/* Responsive — 4 大類 → 2-cols (tablet) → 1-col (mobile) */
@media (max-width: 1024px) {
    .quick-action-card-lg { flex-basis: calc(50% - 0.5rem); }
}
@media (max-width: 768px) {
    .quick-action-card-lg {
        flex-basis: 100%;
    }
}
@media (max-width: 768px) {
    .section-title-row { padding: 0 1rem; flex-direction: column; align-items: flex-start; }
}

/* ============================================================ */
/* §R-N+159 (CEO 2026-07-27) — Slider dead class CSS  audit
   §R-N+135.14 paging + §R-N+79 selective narrative:
   - `.listing-slider` wrapper 已刪 (1 個 for loop flat render)
   - `.slider-page / .slider-track / .slider-btn / .slider-controls / .slider-indicator` 全 dead class
   - 對位 §R-N+62 KISS: 連帶 .latest-listings slider mobile rule 一齊 DELETE (§R-N+135.13 section 已刪)
   - 守住 `.listing-grid-v2 / .listing-grid-v9n / .listing-card-v2` (search / listing detail page 仲用緊)
*/

/* §R-N+159 (CEO 2026-07-27) — .latest-listings-actions 0 ref dead class DELETE
   §R-N+79 selective narrative + §R-N+62 KISS */

/* §R-N+26xx Wave 5.5 — 抽 featured-rail horizontal scroll-snap cluster 落 pages/featured-rail.css (對位 §R-N+22xx Plan B precedent) */

/* ============================================================ */
/* §R-N+130 (CEO 2026-07-18) — Mega-dropdown 2 column popup      */
/*   trigger button → 2-col panel (left tabs / right sub-list)   */
/*   對位 §R-N+99 form-section pattern + §R-N+62 KISS              */
/* ============================================================ */
.mega-dropdown-wrap {
    position: relative;
    flex: 0 0 auto;
}
.mega-dropdown-trigger {
    display: inline-flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--sarahome-v3-space-2);
    width: 100%;
    min-height: 56px;
    padding: var(--sarahome-v3-space-3) var(--sarahome-v3-space-4);
    background: var(--sarahome-v3-surface-card, #FFFFFF);
    border: 1px solid var(--sarahome-v3-border, #E5E7EB);
    border-radius: var(--sarahome-v3-radius-sm);
    font-size: 1rem;
    color: var(--sarahome-v3-color-fg, #1F2937);
    cursor: pointer;
    text-align: left;
}
.mega-dropdown-trigger:hover {
    border-color: var(--sarahome-v3-color-accent, #FF8C42);
}
.mega-dropdown-chevron {
    transition: transform 0.15s;
    flex-shrink: 0;
}
.mega-open .mega-dropdown-chevron { transform: rotate(180deg); }

/* Panel: 2-column popup, anchor to trigger bottom */
.mega-dropdown-panel {
    position: absolute;
    top: calc(100% + 0.5rem);
    left: 0;
    z-index: 1100;
    display: grid;
    grid-template-columns: minmax(120px, auto) minmax(220px, 360px);
    min-width: 420px;
    max-width: 640px;
    max-height: 360px;
    overflow-y: auto;
    background: var(--sarahome-v3-surface-card, #FFFFFF);
    border: 1px solid var(--sarahome-v3-border, #E5E7EB);
    border-radius: var(--sarahome-v3-radius-sm);
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
}

/* Mobile responsive: full-width panel on small screens */
@media (max-width: 768px) {
    .mega-dropdown-panel {
        position: fixed;
        top: 0;
        left: 0;
        right: 0;
        bottom: 0;
        min-width: 0;
        max-width: 100%;
        max-height: 100%;
        border-radius: 0;
        z-index: 1000;
        grid-template-columns: 1fr;
    }
}
.mega-col {
    padding: var(--sarahome-v3-space-2);
    overflow-y: auto;
}
.mega-col-left {
    border-right: 1px solid var(--sarahome-v3-border, #E5E7EB);
    background: #F9FAFB;
}
.mega-col-right {
    padding: var(--sarahome-v3-space-2) var(--sarahome-v3-space-3);
}
/* §R-N+15xx+3 (2026-08-18, CEO verdict A) — 物業類型 mega-dropdown 1-column variant
   同地區 mega-dropdown 一致 visual, 但唔分 group, 5 個 enum 直接 1 列.
   .mega-col-single: 移除 left/right border + 加大 padding + hide left col. */
.mega-col-single {
    padding: var(--sarahome-v3-space-3) var(--sarahome-v3-space-4);
    min-width: 220px;
}
/* Panel width override: 1-column 唔需要 482px, 收窄至 content-fit + min 280px */
.mega-dropdown-panel-single {
    min-width: 280px;
    max-width: 340px;
}
@media (min-width: 1024px) {
    /* Desktop ≥1024px — panel inline 1 col, full-width of trigger field */
    .mega-dropdown-panel-single {
        min-width: 320px;
    }
}

/* Left-tab options */
.mega-left-option {
    display: flex;
    align-items: center;
    justify-content: space-between;
    width: 100%;
    padding: 0.625rem 0.875rem;
    background: transparent;
    border: none;
    border-radius: 0.375rem;
    font-size: 0.9375rem;
    color: var(--sarahome-v3-color-fg, #1F2937);
    cursor: pointer;
    text-align: left;
    transition: background 0.1s;
}
.mega-left-option:hover {
    background: rgba(45, 125, 210, 0.08);
}
.mega-left-active {
    background: var(--sarahome-v3-color-accent, #FF8C42);
    color: white;
    font-weight: 600;
}
.mega-left-active:hover {
    background: var(--sarahome-v3-color-accent, #1F4D5E);
    color: white;
}

/* Right options (sub-region list) */
.mega-right-option {
    display: block;
    width: 100%;
    padding: var(--sarahome-v3-space-2) var(--sarahome-v3-space-3);
    background: transparent;
    border: none;
    border-radius: 0.375rem;
    font-size: 0.9375rem;
    color: var(--sarahome-v3-color-fg, #1F2937);
    cursor: pointer;
    text-align: left;
    transition: background 0.1s;
}
.mega-right-option:hover {
    background: rgba(45, 125, 210, 0.08);
}
.mega-right-active {
    background: var(--sarahome-v3-color-accent, #FF8C42);
    color: white;
    font-weight: 600;
}

/* Right group container (hidden by default, toggled by JS) */
.mega-right-group[hidden] {
    display: none;
}

/* Panel always visible when not hidden (paired with [data-mega-panel][hidden]) */
[data-mega-panel][hidden] { display: none; }
.mega-dropdown-backdrop,
.mega-dropdown-close {
    display: none;
}

/* Visually-hidden label helper (§R-N+99 form-section a11y) */
.visually-hidden {
    position: absolute;
    width: 1px; height: 1px;
    padding: 0; margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

/* P1-3 — Mobile modal fallback: backdrop + close + bounded internal scroll */
@media (max-width: 768px) {
    .mega-dropdown-backdrop:not([hidden]) {
        display: block;
        position: fixed;
        inset: 0;
        z-index: 48;
        background: rgba(17, 24, 39, 0.42);
    }

    .mega-dropdown-panel {
        position: fixed !important;
        left: 0 !important;
        right: 0 !important;
        top: auto !important;
        bottom: 0 !important;
        min-width: 100vw !important;
        max-width: 100vw !important;
        width: 100vw !important;
        height: min(78vh, 660px) !important;
        max-height: min(78vh, 660px) !important;
        grid-template-columns: 120px minmax(0, 1fr) !important;
        z-index: 102;
        overflow: hidden;
        border-radius: 1rem 1rem 0 0 !important;
        padding-top: 8.75rem;
    }

    .mobile-district-sheet-tools {
        display: block;
        position: absolute;
        top: 0;
        left: 0;
        right: 0;
        z-index: 2;
        padding: 1rem 4rem 0.75rem 1rem;
        background: var(--sarahome-v3-surface-card, #FFFFFF);
        border-bottom: 1px solid var(--sarahome-v3-border);
    }

    .mobile-district-sheet-tools strong {
        display: block;
        margin-bottom: 0.5rem;
        font-size: 1.125rem;
    }

    .mobile-district-search {
        width: 100%;
        min-height: 44px;
        padding: 0.625rem 0.75rem;
        font-size: 1rem;
        border: 1px solid var(--sarahome-v3-border);
        border-radius: 0.625rem;
    }

    .mobile-district-popular {
        display: flex;
        gap: var(--sarahome-v3-space-2);
        margin-top: 0.5rem;
    }

    .mobile-district-popular button {
        min-height: 36px;
        padding: 0.375rem 0.75rem;
        color: var(--sarahome-v3-color-accent);
        background: rgba(45, 125, 210, 0.08);
        border: 1px solid rgba(45, 125, 210, 0.2);
        border-radius: 999px;
        font-size: 0.875rem;
        cursor: pointer;
    }

    .mega-dropdown-panel .mega-col {
        min-height: 0;
        max-height: calc(min(78vh, 660px) - 8.75rem);
        overflow-y: auto;
        overscroll-behavior: contain;
        -webkit-overflow-scrolling: touch;
    }

    .mega-dropdown-panel .mega-col-right {
        padding-top: 0.5rem !important;
    }

    .mega-searching .mega-dropdown-panel {
        grid-template-columns: 1fr !important;
    }

    .mega-searching .mega-col-right {
        grid-column: 1 / -1;
    }

    .mega-dropdown-panel .mega-right-option[hidden] {
        display: none !important;
    }

    .mega-dropdown-close:not([hidden]) {
        display: inline-flex;
        position: absolute;
        top: 0.375rem;
        right: 0.375rem;
        z-index: 2;
        align-items: center;
        justify-content: center;
        width: 44px;
        height: 44px;
        padding: 0;
        color: var(--sarahome-v3-color-fg, #1F2937);
        background: #F3F4F6;
        border: 1px solid var(--sarahome-v3-border, #E5E7EB);
        border-radius: 50%;
        cursor: pointer;
    }

    .mega-dropdown-close:focus-visible {
        outline: 3px solid var(--sarahome-v3-color-warm, #FF8C42);
        outline-offset: 2px;
    }
}

@media (min-width: 769px) {
    .mega-dropdown-backdrop,
    .mega-dropdown-close {
        display: none !important;
    }
}

/* P2-4 — Mobile listing grids use one column consistently through 768px
   §R-N+278 — 對位 user「使用16:9會好一點」thumb 改 16:9 (1.778) 對齊 image */
@media (max-width: 768px) {
    .listing-grid-v2,
    .listing-grid-v9n {
        grid-template-columns: minmax(0, 1fr) !important;
        gap: var(--sarahome-v3-space-4) !important;
    }

    .listing-card-v2 .listing-thumb {
        aspect-ratio: 16 / 9 !important;
    }
}

/* P2-5 — Homepage mobile section rhythm: 40px desktop spacing becomes 24px
   P5 — Mobile compactness shrink (CEO trigger 2026-07-20 "手機版本所有 UI 都太大"):
   quick-actions-grid / brand-section mobile padding 收細 */
@media (max-width: 768px) {
     .site-main > .container > .featured-listings,
     .site-main > .container > .quick-actions-grid,
     .site-main > .container > .brand-section-v11 {
         padding-top: 1rem !important;
         padding-bottom: 1rem !important;
     }

     /* §R-N+159: .listing-slider mobile margin 已 DELETE (slider dead class 全 ship) */
}


/* P3-6 — Mobile small-text audit: breadcrumb 14px, chips 15px, metadata 13px */
@media (max-width: 768px) {
    .breadcrumb {
        font-size: 0.875rem !important;
    }

    .chip,
    .listing-chip {
        font-size: 0.9375rem !important;
    }

    .listing-meta-v9n,
    .listing-meta-secondary,
    .listing-card-v2 .listing-ref,
    .listing-card .listing-ref,
    .status-pill {
        font-size: 0.8125rem !important;
    }
}

/* §R-N+159 (CEO 2026-07-27) — P4-6 mobile horizontal rail 已 DELETE
   §R-N+62 KISS + §R-N+79 selective narrative:
   - .listing-slider dead class (desktop 已 ship)
   - .latest-listings section (§R-N+135.13 已 ship刪)
   - .featured-listings mobile rail 對住 .slider-track dead class
   - 守住 .listing-grid-v2 / .listing-grid-v9n mobile 1-col (P2-4 block)
   - 新 mobile rail 概念 (78vw scroll-snap) 已由 P5 mobile-first IA 取代 (1-col auto-stack)
*/

@media (max-width: 768px) {
    .quick-actions-grid .quick-actions-row {
        display: grid !important;
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: var(--sarahome-v3-space-3);
        padding-left: 1rem;
        padding-right: 1rem;
    }

    .quick-actions-grid .quick-action-card-lg {
        min-width: 0;
        max-width: none;
        min-height: 100px;            /* P5 — 124 → 100 mobile */
        padding: 0.625rem 0.375rem !important;  /* P5 — 1rem 0.5rem → 0.625 0.375 */
        gap: 0.375rem;                /* P5 — 0.5rem → 0.375rem */
    }

    .quick-actions-grid .quick-action-card-lg .quick-action-icon {
        width: 40px;                  /* P5 — 48 → 40 mobile */
        height: 40px;
    }


    .brand-section-v11 {
        display: none !important;
    }
}

/* ============================================================
   PWA Offline Page (§R-N+2026-07-19 mobile-first verdict)
   對位 §R-N+62 KISS + §R-N+70 正式書面語 + §R72 無特殊字元
   ============================================================ */

/* §R-N+26xx Wave 5.3 — 抽 admin-table + stat-card-grid cluster 落 pages/admin-table.css (對位 §R-N+22xx Plan B precedent) */

/* .container in admin panel - reduce padding on mobile */
@media (max-width: 768px) {
    .stat-card-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: var(--sarahome-v3-space-3);
    }

    .step-label-flex {
        flex-direction: column;
        align-items: flex-start;
        gap: var(--sarahome-v3-space-1);
    }

    .form-section-header-flex {
        flex-direction: column;
        align-items: flex-start;
        gap: var(--sarahome-v3-space-2);
    }

    .form-section-header-flex .form-section-action {
        width: 100%;
        display: flex;
        gap: var(--sarahome-v3-space-2);
    }

    .form-section-header-flex .form-section-action a {
        flex: 1;
        text-align: center;
    }
}


/* ============================================================
   §R-N+135.5 (2026-07-22) — Agent Card (對位 Squarefoot/MaliMali)
   樓盤詳情頁 agent-card section — 經紀資料 + 一鍵聯絡 CTA
   品牌色: lavender primary + 5 主色 (科技藍/暖橙/薄荷綠/Lava紅/深灰)
/* ============================================================
   §R-N+135.11 (2026-07-22) — Listing Hero Agent Profile (新, 取代舊 .agent-card)
   對位 CEO: 「agent-card 內容融入右 column, 移除 agent-card」
   結構: avatar (gradient circle 48x48) + agent name + company + 已驗證 badge
   位置: .listing-hero-right 內, 喺 .listing-price-block-v2 之前
   ============================================================ */
.listing-hero-agent-profile {
    display: flex;
    align-items: center;
    gap: var(--sarahome-v3-space-3);
    padding: var(--sarahome-v3-space-3);
    margin-bottom: 0.25rem;
    background: linear-gradient(135deg, rgba(45, 125, 210, 0.06) 0%, rgba(255, 140, 66, 0.06) 100%);
    border: 1px solid rgba(45, 125, 210, 0.18);
    border-radius: 0.625rem;
}

.listing-hero-agent-avatar {
    flex-shrink: 0;
    width: 48px;
    height: 48px;
    border-radius: 50%;
    background: linear-gradient(135deg, var(--sarahome-v3-color-accent, #FF8C42) 0%, var(--sarahome-v3-color-warm, #FF8C42) 100%);
    color: #FFFFFF;
    display: flex;
    align-items: center;
    justify-content: center;
}

.listing-hero-agent-info {
    flex: 1;
    min-width: 0;
}

.listing-hero-agent-name {
    margin: 0 0 0.125rem 0;
    font-size: 1.0625rem;
    font-weight: 600;
    color: var(--sarahome-v3-color-fg, #1F2937);
    line-height: 1.2;
}

.listing-hero-agent-company {
    margin: 0 0 0.25rem 0;
    font-size: 0.8125rem;
    color: #6B7280;
    line-height: 1.3;
}

/* .agent-badge-verified 守住 (§R-N+135.5 ship, selective narrative) */
.agent-badge-verified {
    display: inline-flex;
    align-items: center;
    gap: 0.2rem;
    padding: 0.125rem 0.4375rem;
    border-radius: 999px;
    font-size: 0.6875rem;
    font-weight: 600;
    line-height: 1.4;
    background: rgba(16, 185, 129, 0.12);
    color: #047857;
    border: 1px solid rgba(16, 185, 129, 0.32);
}

/* ============================================================
   §R-N+135.6 (2026-07-22) — Listing Dates inline strip
   刊登 / 更新日期 meta line, 對位 CEO 用戶信任需求.
   對位 §R-N+62 KISS (ASCII half-width, 唔新開 section)
   對位 §R-N+70 正式書面語 (貼近 meta 標籤視覺)
   ============================================================ */
.listing-dates {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--sarahome-v3-space-2);
    margin: 0.25rem 0 0.25rem 0;  /* §R-N+135.10 — 0.5rem → 0.25rem (-50%, 間距縮減) */
    font-size: 0.8125rem;
    color: #6B7280;
    line-height: 1.4;
}

.listing-date-published,
.listing-date-updated {
    display: inline-flex;
    align-items: center;
}

.listing-date-sep {
    color: #D1D5DB;
    margin: 0 0.125rem;
}


.listing-hero-cta-btn-primary {
    background: var(--sarahome-v3-color-cta, #FF6B35);
    color: #FFFFFF;
    border-color: var(--sarahome-v3-color-cta, #FF6B35);
    grid-column: 1 / -1;  /* 全寬 突出 primary */
}

.listing-hero-cta-btn-whatsapp {
    background: #25D366;
    color: #FFFFFF;
    border-color: #25D366;
}

.listing-hero-cta-btn-tel {
    background: var(--sarahome-v3-color-accent, #FF8C42);
    color: #FFFFFF;
    border-color: var(--sarahome-v3-color-accent, #FF8C42);
}

.listing-hero-cta-btn-mail {
    background: var(--sarahome-v3-color-warm, #FF8C42);
    color: #FFFFFF;
    border-color: var(--sarahome-v3-color-warm, #FF8C42);
}

/* v0.83 (2026-09-11) — WeChat 聯絡 channel (CEO verdict 澳門主流 WeChat+WhatsApp)
   WeChat 官方綠 #07C160; contrast on white text = 2.6:1 唔夠 AA → 用深綠 #079F4F 底
   (對位 P2-4 .listing-sticky-cta-wa AA 先例: brand 色收深保 AA) */
.listing-hero-cta-btn-wechat {
    background: #079F4F;
    color: #FFFFFF;
    border-color: #079F4F;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0.4rem;
}

.listing-wechat-id {
    grid-column: 1 / -1;
    display: flex;
    align-items: center;
    gap: var(--sarahome-v3-space-2); /* §R-N+452: token 化 (0.5rem 單值 ban) */
    padding: 0.4rem 0.75rem;
    background: rgba(7, 193, 96, 0.08);
    border: 1px dashed rgba(7, 159, 79, 0.4);
    border-radius: var(--sarahome-v3-radius-sm, 8px);
    font-size: 0.875rem;
}

.listing-wechat-id-label {
    color: var(--sarahome-v3-color-muted, #6B7280);
    flex-shrink: 0;
}

.listing-wechat-id-value {
    font-weight: 600;
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    color: #075E3A;
    word-break: break-all;
}

.listing-wechat-id.is-copied .listing-wechat-id-value {
    color: #079F4F;
}

/* §R-N+152.2 經紀專頁 (優化版) */
/* §R-N+26xx Wave 1.4: agent-profile classes 抽去 pages/agent-profile.css (對位 §R-N+25xx Plan B precedent) */
/* §R-N+252 — Dark mode 完全移除 (§R-N+155 ) */
@media (max-width: 768px) {
    /* §R-N+329.9 (2026-08-02) P3 — hero mobile 高度收 40%, 對位 dogfood 觀察
       原 2rem/3.5rem padding → 1.2rem/2rem (≈40% reduction), avatar 80→56px */
    .agent-hero-banner { padding: 1.2rem 1rem 2rem; }
    .agent-hero-inner { flex-direction: column; text-align: center; gap: 0.6rem; }
    .agent-hero-info h1 { font-size: 1.4rem; }
    .agent-hero-avatar { width: 56px !important; height: 56px !important; }
    .agent-hero-avatar img, .agent-hero-avatar span { width: 56px !important; height: 56px !important; font-size: 1.2rem !important; }
    .agent-stats-row { justify-content: center; }
    .agent-cta-bar { flex-direction: column; text-align: center; }
}

/* ============================================================ */
/* §R-N+152.3 (2026-07-24) — 首頁 UI 優化                          */
/*   1. listing cards 等高對齊 (價格釘底)                          */
/*   2. section 底色交替節奏                                       */
/*   3. 更多服務 4-card 充實                                       */
/*   4. footer 過渡 (margin-top 4rem → 0)                         */
/* ============================================================ */

/* 1. Cards 等高: 價格釘底, 內容行數唔同都對齊
   min-height 預留呎價行, 有/無呎價嘅 card 價格主行都喺同一水平 */
.listing-card-v2 .listing-price { margin-top: auto; min-height: 2.5rem; }
.listing-card-v2 .listing-tags { margin-top: 0.5rem; }

/* 2. Section 底色交替 — 精選樓盤白底 band, 分類探索留灰底
   box-shadow 補強 band 層次 (body #FAFAFA vs band #FFF 色差弱)
   §R-N+159 (CEO 2026-07-27) — section gap 縮減 (§R-N+135.10 v1)
   - featured-listings: padding 2rem 0 2.5rem → 2rem 0 1.5rem (-1rem bottom)
   - quick-actions-grid: padding-top 2rem → 1rem (-1rem top) */
.featured-listings {
    background: var(--sarahome-v3-surface-section-alt);
    border-top: 1px solid var(--sarahome-v3-border);
    border-bottom: 1px solid var(--sarahome-v3-border);
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.035), 0 -2px 8px rgba(0, 0, 0, 0.035);
    padding: 2rem 0 1.5rem;
    margin: 0 -1.25rem;   /* bleed 出 .container padding */
    padding-left: 1.25rem;
    padding-right: 1.25rem;
}
.quick-actions-grid { padding-top: 1rem; padding-bottom: 2rem; }

/* 4. Footer 過渡 — 移除硬切 margin + 品牌藍頂線做內容↔footer 分隔 */
.site-footer { margin-top: 0; border-top: 3px solid var(--sarahome-v3-color-accent); }

/* 6. Section alternation rhythm — 分類探索用柔灰帶出頁面節奏 */
.quick-actions-grid {
    background: var(--sarahome-v3-surface-section-alt);
    border-top: 1px solid var(--sarahome-v3-border);
    border-bottom: 1px solid var(--sarahome-v3-border);
    padding: var(--sarahome-v3-space-8) 0;
}

/* §R-N+252 — Dark mode 完全移除 (§R-N+158 + §R-N+159 audit) */

/* ============================================================ */
/* §R-N+162 (CEO 2026-07-27) — 精選樓盤 4 tab + 左右 arrow + empty state
   對位 malimalihome horizontal carousel + 左右 arrow + 4 tab filter audit
   supersedes: §R-N+159 (slider dead UI flat), §R-N+165 (CSS mask only)
   §R-N+62 KISS + §R-N+70 正式書面語 + §R-N+138 disk-truth  */

/* Header row: 標題 + 左右 arrow + 更多 link (mobile 同 row flex-wrap) */
.featured-listings-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--sarahome-v3-space-3);
    flex-wrap: wrap;
    margin-bottom: 0.75rem;
}

.featured-listings-controls {
    display: flex;
    align-items: center;
    gap: var(--sarahome-v3-space-2);
}

/* 左右 arrow button — 對位 malimalihome audit (CSS-only circle btn) */
.featured-arrow-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    border-radius: 50%;
    border: 1px solid var(--sarahome-v3-border, #E5E7EB);
    background: var(--color-bg-elevated, #FFFFFF);
    color: var(--sarahome-v3-color-fg, #1F2937);
    cursor: pointer;
    transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease, transform 0.1s ease;
    /* §R-N+99 form pattern + §R-N+70 正式書面語 */
}
.featured-arrow-btn:hover:not([disabled]) {
    background: var(--sarahome-v3-color-accent, #FF8C42);
    color: #FFFFFF;
    border-color: var(--sarahome-v3-color-accent, #FF8C42);
}
.featured-arrow-btn:active:not([disabled]) {
    transform: scale(0.94);
}
.featured-arrow-btn[disabled] {
    opacity: 0.4;
    cursor: not-allowed;
}

.featured-listings-more-link {
    font-size: 0.9375rem;
    color: var(--sarahome-v3-color-accent, #FF8C42);
    text-decoration: none;
    margin-left: 0.5rem;
    /* §R-N+70 正式書面語: 「更多」保留, 唔加口語化「睇更多」 */
}
.featured-listings-more-link:hover { text-decoration: underline; }

/* 4 tab filter pill — 對位 malimalihome audit (§R-N+62 KISS) */
.featured-listings-tabs {
    display: flex;
    gap: var(--sarahome-v3-space-2);
    margin-bottom: 1rem;
    overflow-x: auto;
    /* mobile horizontal scroll 防 rail overflow */
    scrollbar-width: thin;
}
.featured-listings-tab {
    appearance: none;
    background: transparent;
    border: 1px solid var(--sarahome-v3-border, #E5E7EB);
    color: var(--sarahome-v3-color-fg, #1F2937);
    padding: var(--sarahome-v3-space-2) var(--sarahome-v3-space-4);
    border-radius: 999px;
    font-size: 0.9375rem;
    cursor: pointer;
    white-space: nowrap;
    transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
    /* §R-N+70 正式書面語 */
}
.featured-listings-tab:hover {
    border-color: var(--sarahome-v3-color-accent, #FF8C42);
    color: var(--sarahome-v3-color-accent, #FF8C42);
}
.featured-listings-tab.is-active {
    background: var(--sarahome-v3-color-accent, #FF8C42);
    color: #FFFFFF;
    border-color: var(--sarahome-v3-color-accent, #FF8C42);
}
.featured-listings-tab:focus-visible {
    outline: 2px solid var(--sarahome-v3-color-accent, #FF8C42);
    outline-offset: 2px;
}

/* 4 panel hidden/active — CSS  (§R-N+62 KISS 無 JS toggle 動畫) */
.featured-listings-panel[hidden] {
    display: none !important;
    /* 守住 hidden 唔被 flex/grid override (§R-N+138 根因) */
}

/* Empty state — P108b-A 空 DB seed 後仍可能 empty audit */
.featured-listings-empty {
    text-align: center;
    padding: 3rem 1.5rem;
    background: var(--color-bg-elevated, #F9FAFB);
    border-radius: var(--sarahome-v3-radius-md);
    border: 1px dashed var(--sarahome-v3-border, #E5E7EB);
    /* §R-N+70 正式書面語: 「暫時未有」取代「冇」口語 */
}
.featured-listings-empty-text {
    font-size: 1rem;
    font-weight: 600;
    color: var(--sarahome-v3-color-fg, #1F2937);
    margin: 0 0 0.5rem 0;
}
.featured-listings-empty-hint {
    font-size: 0.875rem;
    color: var(--color-text-muted, #6B7280);
    margin: 0;
}

/* VR badge — 對位 malimalihome VR badge audit */
.listing-tag-vr {
    display: inline-block;
    padding: 0.125rem 0.375rem;
    background: rgba(45, 125, 210, 0.12);
    color: #1E40AF;
    border-radius: 4px;
    font-size: 0.75rem;
    font-weight: 600;
    vertical-align: middle;
}

/* Mobile 對位 (§R-N+165 mobile 78vw audit 守) */
@media (max-width: 768px) {
    .featured-listings-header {
        gap: var(--sarahome-v3-space-2);
    }
    .featured-listings-controls {
        flex-wrap: nowrap;
    }
    .featured-listings-tab {
        padding: 0.375rem 0.75rem;
        font-size: 0.875rem;
    }
}

/* ============================================================
   Plan D (V3) — §R-N+204 首頁 V3 wireframe
   Hero + Featured + Categories 統一 token
   ============================================================ */

/* === Hero V3 === */
.hero-v3 {
    background: linear-gradient(135deg, var(--sarahome-v3-hero-gradient-from), var(--sarahome-v3-hero-gradient-to));
    /* §R-N+361 (2026-08-05): D1 Hero vertical density desktop 微調
       對位 §R-N+354 mobile fix-up: mobile 收緊至 1.25rem 0 (§R-N+347.1)
       desktop 對位同樣 token: space-16 (4rem) → space-12 (3rem)
       Mobile rule @media (max-width:768px) 守住 1.25rem 0 不變. */
    padding: var(--sarahome-v3-space-12) 0;
}
.hero-v3-inner {
    text-align: center;
    max-width: 1024px;
    margin: 0 auto;
}
.hero-v3-title {
    font-size: 2.5rem;
    font-weight: 700;
    color: var(--sarahome-v3-color-fg);
    margin-bottom: var(--sarahome-v3-space-2);
}
.hero-v3-subtitle {
    font-size: var(--sarahome-v3-font-md);
    color: var(--sarahome-v3-color-text-secondary);
    margin-bottom: var(--sarahome-v3-space-8);
}
.hero-v3-search-row {
    display: flex;
    gap: var(--sarahome-v3-space-2);
    align-items: stretch;
}
.hero-v3-search-field {
    flex: 1;
    min-width: 0;
    display: flex;
}
.hero-v3-search-field-wide {
    flex: 2;
}
/* §R-N+219: 統一選擇框高度 — 用 height + min-height + box-sizing 強制一致 */
.hero-v3-search-input,
.mega-dropdown-trigger,
select.hero-v3-search-input,
.hero-v3-submit {
    width: 100%;
    height: 48px;
    min-height: 48px;
    max-height: 48px;
    box-sizing: border-box;
    padding: 0 var(--sarahome-v3-space-4);
    border: 1px solid var(--sarahome-v3-border);
    border-radius: var(--sarahome-v3-radius-md);
    font-size: var(--sarahome-v3-font-base);
    line-height: 46px;
    color: var(--sarahome-v3-color-fg);
    background: var(--sarahome-v3-surface-input);
    transition: border-color var(--sarahome-v3-duration-base) var(--sarahome-v3-easing);
    display: flex;
    align-items: center;
}
/* Select element 唔接受 display:flex, 用 appearance: none + line-height 強制對齊 */
select.hero-v3-search-input {
    appearance: none;
    -webkit-appearance: none;
    -moz-appearance: none;
    line-height: 46px;
    padding-right: 36px;
    background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%236B7280' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 12px center;
    background-size: 16px 16px;
}
.hero-v3-search-input:focus {
    outline: none;
    border-color: var(--sarahome-v3-color-accent);
}
.mega-dropdown-trigger {
    cursor: pointer;
    text-align: left;
    justify-content: space-between;
}
.mega-dropdown-trigger .mega-dropdown-trigger-label {
    flex: 1;
    line-height: 46px;
}
.mega-dropdown-trigger .mega-dropdown-chevron {
    flex-shrink: 0;
}
.hero-v3-search-actions {
    display: flex;
    gap: var(--sarahome-v3-space-2);
}
.hero-v3-submit {
    padding: 0 var(--sarahome-v3-space-6);
    border: none;
    border-radius: var(--sarahome-v3-radius-md);
    font-size: var(--sarahome-v3-font-base);
    font-weight: 600;
    cursor: pointer;
    transition: background var(--sarahome-v3-duration-base) var(--sarahome-v3-easing);
    justify-content: center;
    line-height: 46px;
}
.hero-v3-submit-buy {
    background: var(--sarahome-v3-color-cta);
    color: #fff;
}
.hero-v3-submit-buy:hover {
    background: #e55a2b;
}
.hero-v3-submit-rent {
    background: var(--sarahome-v3-color-accent);
    color: #fff;
}
.hero-v3-submit-rent:hover {
    background: #1e6abf;
}

/* === Featured V3 === */
.featured-v3 {
    /* §R-N+362 (2026-08-05): D2 section boundary 收緊
       對位 §R-N+62 KISS: padding-bottom 收緊 1 token, 唔改 magic number.
       featured 結尾 + categories 開頭 boundary 由 6rem (3+3) 收緊至 4rem (2+2). */
    padding: var(--sarahome-v3-space-12) 0 var(--sarahome-v3-space-8);
    position: relative;
}
.featured-v3-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: var(--sarahome-v3-space-6);
}
.featured-v3-title {
    font-size: 1.75rem;
    font-weight: 700;
    color: var(--sarahome-v3-color-fg);
}
.featured-v3-view-all {
    color: var(--sarahome-v3-color-accent);
    font-weight: 600;
    text-decoration: none;
}
.featured-v3-view-all:hover {
    text-decoration: underline;
}
/* §R-N+225: Carousel layout with gray chevron nav buttons (reference style)
   2026-09-15 §R-N+4xxx+40 (CEO「最新上架展示方式同精選一致」): 箭嘴 button 已刪
   (template + JS pagination 移除) — 只留 carousel wrapper 做 padding/position
   容器, padding 清 0 (箭嘴已唔存在, 對位 .curated-v3-grid 無額外包裹 inset,
   兩 section 卡邊對齊 .container 同一基線)。 */
.featured-v3-carousel {
    position: relative;
    padding: 0;
}
.featured-v3-viewport {
    overflow: hidden;
}
/* §R-N+234.6 (CEO 2026-07-28): Grid as carousel track (4 cols x 3 rows = 12 cards visible per page)
   - §R-N+225 ship 5 col × 2 row
   - §R-N+234 → 4 col × 2 row
   - §R-N+234.5 → 3 col × 2 row
   - §R-N+234.6 (CEO 第 3 輪 verdict) → 3 行 4 列 = 4 col × 3 row (column 軸 4, row 軸 3)
   - mobile (≤768px) 維持 2 col, tablet (769-1024px) 維持 3 col, 最窄 (≤480px) 維持 1 col
   2026-09-15 §R-N+4xxx+40 (CEO「最新上架展示方式同精選一致」): 對位 .curated-v3-grid —
   desktop 4 欄等高 grid 全量顯示 (無分頁, 移除 dead grid-template-rows + transform
   transition = JS pagination 殘骸), tablet 2 欄, mobile 72vw rail (見下方 media block)。 */
.featured-v3-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    grid-auto-rows: auto;
    gap: var(--sarahome-v3-space-4);
}
.featured-v3-card {
    background: var(--sarahome-v3-surface-card);
    border: 1px solid var(--sarahome-v3-border);
    border-radius: var(--sarahome-v3-radius-lg);
    overflow: hidden;
    text-decoration: none;
    color: inherit;
    cursor: pointer;
    box-shadow: 0 1px 3px rgba(0,0,0,0.06), 0 1px 2px rgba(0,0,0,0.04);
    transition: box-shadow var(--sarahome-v3-duration-base) var(--sarahome-v3-easing), transform var(--sarahome-v3-duration-base) var(--sarahome-v3-easing);
}
.featured-v3-card:hover {
    box-shadow: 0 10px 25px rgba(0,0,0,0.1), 0 4px 10px rgba(0,0,0,0.05);
    transform: translateY(-4px);
}
.featured-v3-card:hover .featured-v3-card-img {
    transform: scale(1.03);
}
/* §R-N+234.13 (CEO 2026-07-28): 統一 featured-v3-card 結構和展示 (§R-N+137 Airbnb visual hierarchy + §R-N+140 12-dim)
   - card-image aspect ratio: 16:10 → 3:2 (對位 listing photo building shots, 減少裁剪)
   - card-content padding: 由 space-4 (1rem) → space-5 (1.25rem) (統一內邊距)
   - card-hover: lift + shadow 對位 §R-N+137 affordance
   - image: object-fit cover + center position
*/
.featured-v3-card-image {
    position: relative;
    aspect-ratio: 16 / 9;  /* Phase 1.7 (2026-08-20) — 3 / 2 → 16 / 9 (統一 search card / detail 視覺) */
    background: var(--sarahome-v3-surface-section-alt);
    overflow: hidden;
}
.featured-v3-card-img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center;
    transition: transform 0.4s var(--sarahome-v3-easing);
}

.featured-v3-card-placeholder {
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--sarahome-v3-color-text-secondary);
}

/* === §R-N+248 (2026-07-28) default photo fallback for photo-less listings === */
.listing-default-photo {
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center;
    background: var(--sarahome-v3-color-surface, #E8F1FB);
    opacity: 0.85;
}
.featured-v3-card:hover .listing-default-photo {
    transform: none; /* 預設圖唔需要 hover scale */
}
.featured-v3-card-badge {
    position: absolute;
    top: var(--sarahome-v3-space-2);
    left: var(--sarahome-v3-space-2);
}
.featured-v3-card-badge .badge {
    display: inline-block;
    padding: var(--sarahome-v3-space-1) var(--sarahome-v3-space-2);
    border-radius: var(--sarahome-v3-radius-sm);
    font-size: var(--sarahome-v3-font-xs);
    font-weight: 600;
    color: #fff;
}
.badge-buy { background: var(--sarahome-v3-color-cta); }
.badge-rent { background: var(--sarahome-v3-color-accent); }

/* === 2026-09-14 精選樓盤 section (CEO verdict: 首頁拆 2 段) ===
   2026-09-15 (CEO 拍板「手機精選改橫滑 rail + 桌面 4 欄等高」):
   - desktop (>1024px): 4 欄 grid + 等高修正 (title 2 行 clamp + meta 對齊底)
   - tablet (769-1024px): 2 欄 grid
   - mobile (≤768px): 橫向 scroll-snap rail — card 72vw (28vw peek 下一張卡,
     對位 MaliMali 精選 rail 慣例; 同「最新上架」100% 寬 rail 視覺分層)
   - 對位 §R-N+165 rail 先例 (scroll-snap + mask fade + 隱 scrollbar + hint)
   - 0 卡 → template 整段隱藏 (對位 §R-N+416 唔留空 section) */
.curated-v3-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    grid-auto-rows: auto;
    gap: var(--sarahome-v3-space-4);
}
@media (min-width: 769px) and (max-width: 1024px) {
    .curated-v3-grid { grid-template-columns: repeat(2, 1fr); }
}
/* 等高修正 (grid 模式: desktop + tablet) — 卡高度參差根因 = title 1-2 行 +
   chip 排位唔同 → flex column + title 2 行 clamp + meta 沉底 (對位 §R-N+416)
   mobile rail 模式 card 同為 flex column, 無副作用
   2026-09-15 §R-N+4xxx+40: .featured-v3-grid (最新上架) 並入 — 展示方式同精選一致 */
.curated-v3-grid .featured-v3-card,
.featured-v3-grid .featured-v3-card {
    display: flex;
    flex-direction: column;
}
.curated-v3-grid .featured-v3-card-content,
.featured-v3-grid .featured-v3-card-content {
    display: flex;
    flex-direction: column;
    flex: 1;
}
.curated-v3-grid .featured-v3-card-title,
.featured-v3-grid .featured-v3-card-title {
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
.curated-v3-grid .featured-v3-card-meta,
.featured-v3-grid .featured-v3-card-meta {
    margin-top: auto;
}
/* mobile 橫滑 rail (取代舊 2 欄 grid) — 對位 §R-N+165 rail pattern
   (margin 出血 + padding 補返 + mask fade + 隱 scrollbar + snap) */
@media (max-width: 768px) {
    .curated-v3-grid {
        display: flex;
        flex-wrap: nowrap;
        grid-template-columns: none;
        gap: var(--sarahome-v3-space-3);
        overflow-x: auto;
        overflow-y: hidden;
        scroll-snap-type: x mandatory;
        -webkit-overflow-scrolling: touch;
        scrollbar-width: none;
        scroll-padding: var(--sarahome-v3-space-4);
        padding: 0.25rem 0 0.75rem;
        margin: 0 -1.25rem;
        padding-left: 1.25rem;
        padding-right: 1.25rem;
        -webkit-mask-image: linear-gradient(to right, transparent 0, black 32px, black calc(100% - 32px), transparent 100%);
        mask-image: linear-gradient(to right, transparent 0, black 32px, black calc(100% - 32px), transparent 100%);
    }
    .curated-v3-grid::-webkit-scrollbar {
        display: none;
    }
    .curated-v3-grid .featured-v3-card {
        flex: 0 0 72vw;
        scroll-snap-align: start;
        scroll-snap-stop: always;
        min-width: 0;
    }
}
/* rail 滑動 hint — 只喺 mobile rail 模式顯示 (desktop grid 無橫滑) */
.curated-v3-rail-hint {
    display: none;
    align-items: center;
    justify-content: center;
    gap: var(--sarahome-v3-space-2);
    margin-top: 0.5rem;
    font-size: 0.8125rem;
    color: var(--sarahome-v3-color-text-secondary);
}
.curated-v3-rail-hint svg {
    flex-shrink: 0;
    opacity: 0.6;
}
@media (max-width: 768px) {
    .curated-v3-rail-hint { display: flex; }
}
.badge-curated {
    background: linear-gradient(135deg, #FFB300, #F57C00);
}
.featured-v3-card-badge {
    display: flex;
    align-items: center;
    gap: var(--sarahome-v3-space-1);
}
.featured-v3-card-content {
    padding: var(--sarahome-v3-space-4) var(--sarahome-v3-space-4) var(--sarahome-v3-space-4);
    /* §R-N+253: flex column 推 price-block + meta 到底, 不論 title 1/2 行 card 高度一致 */
    display: flex;
    flex-direction: column;
    gap: 0.1rem;
    flex: 1;
}
.featured-v3-card-title {
    font-size: 1.0625rem;
    font-weight: 700;
    color: var(--sarahome-v3-color-fg);
    line-height: 1.35;
    /* §R-N+374 (2026-08-06): CEO verdict min-height calc(0.75em * 2) 對位 plan-c sister 5632.
       對位 §R-N+253 (line-height × 2 = 1.35 × 17 ≈ 45.9px) 改為 (0.75em × 2 ≈ 25.5px).
       對位 §R-N+62 KISS: 2 根因 module sister (V3 + V3-B) 一致. */
    min-height: calc(0.75em * 2);
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
}
/* §R-N+254 (2026-07-28): 砍走 .featured-v3-card-location (district 改由搜尋 filter + 經紀詳情帶, 卡片唔重覆) */
/* §R-N+253: price block 視覺 bundle — 價錢 + 呎價 兩行同 group, auto-spacer 推下到中段 */
.featured-v3-card-price-block {
    margin-top: auto;
    margin-bottom: var(--sarahome-v3-space-3);
    padding-top: var(--sarahome-v3-space-2);
    /* §R-N+374 (2026-08-06): CEO verdict border-top 0px 保留佔位,
       唔破壞 layout 重排. 對位 §R-N+62 KISS: 1 surgical line ship. */
    border-top: 0px solid var(--sarahome-v3-border);
}
.featured-v3-card-price {
    font-size: var(--sarahome-v3-font-lg);
    font-weight: 700;
    color: var(--sarahome-v3-color-cta);
    line-height: 1.2;
}
.featured-v3-card-price .price-suffix {
    font-size: var(--sarahome-v3-font-sm);
    font-weight: 500;
    color: var(--sarahome-v3-color-text-tertiary);
    margin-left: 0.125rem;
}
.featured-v3-card-price-per-sqft {
    font-size: var(--sarahome-v3-font-xs);
    color: var(--sarahome-v3-color-text-tertiary);
    margin-top: 0.125rem;
}

/* §R-N+253 (CEO 2026-07-28): user-first 簡潔卡片 badge — 砍走 4 色 view SVG + featured badge
   只留 本週新 1 個 optional signal, 統一 anchor right top */
.featured-v3-card-badge-new {
    position: absolute;
    top: var(--sarahome-v3-space-2);
    right: var(--sarahome-v3-space-2);
    display: inline-block;
    padding: var(--sarahome-v3-space-1) var(--sarahome-v3-space-2);
    border-radius: var(--sarahome-v3-radius-sm);
    font-size: 0.7rem;
    font-weight: 600;
    color: #fff;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
    background: #10B981;  /* 本週新 (emerald-500) */
}

/* §R-N+253: chip 統一 token, 灰底細 border, 統一高度 + vertical-align */
.featured-v3-card-meta {
    display: flex;
    flex-wrap: wrap;
    gap: var(--sarahome-v3-space-2);
    /* §R-N+377 (2026-08-06): padding-top 收緊至 0.25rem — 對位 plan-c 5697 同步.
       對位 §R-N+62 KISS: 兩 sister 根因 UI 一致, chain 唔重覆定義行為. */
    padding-top: 0.25rem;
}
.featured-v3-card-chip {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 1.5rem;  /* 鎖 chip 高度一致 */
    padding: 0.125rem 0.625rem;
    border: 1px solid var(--sarahome-v3-border);
    background: transparent;
    color: var(--sarahome-v3-color-text-secondary, #4B5563);
    border-radius: 999px;
    font-size: var(--sarahome-v3-font-xs);
    font-weight: 500;
    line-height: 1.4;
    white-space: nowrap;
}

.featured-v3-empty {
    text-align: center;
    padding: var(--sarahome-v3-space-12);
    color: var(--sarahome-v3-color-text-secondary);
}

/* §R-N+225: Mobile (2 cols) + Tablet (3 cols) */
/* §R-N+4xx+34 (2026-08-11) — mobile ≤768 改 scroll-snap-x horizontal swipe
   根因: CEO 要求 mobile 唔用左右箭嘴, 用 native touch swipe.
   對位: scroll-snap-type: x mandatory + viewport overflow-x:auto → native swipe 自動 work.
   Desktop grid 真值 (4 col × 3 row) 完全唔變.
   對位 §R-N+62 KISS: 1 commit 1 , 純 CSS, 0 template/JS 改動.

   :
   - §R-N+225 ship 2 col grid (mobile)
   - §R-N+234 ship 1 col 1 row
   - §R-N+355 mobile density: 1 card per page
   - §R-N+4xx+34: 改用 native scroll-snap (CSS-only), 取代 JS hide/show mobile page 邏輯
     mobile 一律 1 card 1 snap point, 1 card 佔 100% width (扣 gap),
     arrow button 完全 hide (scroll-snap 自帶 swipe).
   - §R-N+10xx+7a: card flex-basis 改 100%, 移除 peek (CEO 要求 fit 手機尺寸,
     唔再扣 gap / 唔再露下張卡邊緣).
*/
@media (max-width: 768px) {
    .featured-v3-carousel {
        padding: 0;
    }
    .featured-v3-viewport {
        overflow-x: auto;
        overflow-y: hidden;
        scroll-snap-type: x mandatory;
        -webkit-overflow-scrolling: touch;
        scrollbar-width: none; /* Firefox */
        /* 2026-09-15 §R-N+4xxx+40: 對位 .curated-v3-grid rail 初始 snap 位置
           (curated 有 scroll-padding → 首卡 scrollLeft 7.2px; latest 冇 → 20px,
           首卡左緣 4px vs 17px。加上同一 scroll-padding 後兩 rail 首卡對齊) */
        scroll-padding: var(--sarahome-v3-space-4);
    }
    .featured-v3-viewport::-webkit-scrollbar {
        display: none; /* Chrome/Safari hide scrollbar */
    }
    /* mobile track: flex row + 每 card 1 snap point */
    .featured-v3-grid {
        display: flex;
        flex-wrap: nowrap;
        grid-template-columns: none; /* override base grid 真值 */
        gap: var(--sarahome-v3-space-3); /* 對位 .curated-v3-grid rail gap */
    }
    /* §R-N+4xxx+40 (2026-09-15): card 100% 寬 → 72vw + 28vw peek 下一張卡
       (對位 .curated-v3-grid rail 同一展示方式; 舊 §R-N+10xx+7a no-peek 偏好
       被 CEO 2026-09-15「兩 section 展示方式一致」verdict 取代) */
    .featured-v3-grid > .featured-v3-card {
        flex: 0 0 72vw;
        min-width: 0;
        scroll-snap-align: start;
        scroll-snap-stop: always;
    }
    /* §R-N+4xxx+40: 左右 fade mask + margin 出血 (對位 .curated-v3-grid 同一視覺) */
    .featured-v3-viewport {
        margin: 0 -1.25rem;
        padding: 0.25rem 1.25rem 0.75rem;
        gap: var(--sarahome-v3-space-3);
        -webkit-mask-image: linear-gradient(to right, transparent 0, black 32px, black calc(100% - 32px), transparent 100%);
        mask-image: linear-gradient(to right, transparent 0, black 32px, black calc(100% - 32px), transparent 100%);
    }
}
@media (min-width: 769px) and (max-width: 1024px) {
    /* §R-N+4xxx+40 (2026-09-15): 3 欄 → 2 欄 (對位 .curated-v3-grid tablet 同一展示方式) */
    .featured-v3-grid {
        grid-template-columns: repeat(2, 1fr);
    }
}

/* === Categories V3 === */
.categories-v3 {
    /* §R-N+362 (2026-08-05): D2 section boundary 收緊
       對位 §R-N+62 KISS: padding-top 收緊 1 token, 唔改 magic number.
       對位 D2: featured 收緊 padding-bottom, categories 對位收緊 padding-top,
       兩個 section 視覺 boundary 縮短, 對位 §R-N+137 Airbnb section rhythm. */
    padding: var(--sarahome-v3-space-8) 0 var(--sarahome-v3-space-12);
    background: var(--sarahome-v3-surface-section-alt);
}
.categories-v3-title {
    font-size: 1.75rem;
    font-weight: 700;
    color: var(--sarahome-v3-color-fg);
    text-align: center;
    margin-bottom: var(--sarahome-v3-space-6);
}
.categories-v3-grid {
    /* §R-N+396 (2026-08-07): D8 統一 6-col grid (取消 compact 雙層 hierarchy)
       對位 §R-N+62 KISS + §R-N+137 Airbnb 6-col category grid:
       主 grid + compact grid 合併為單一 6-col, 6 個平等卡, 唔再有
       「主類/其他類」雙層 hierarchy. Tablet 3-col, mobile 2-col. */
    display: grid;
    grid-template-columns: repeat(6, 1fr);
    gap: var(--sarahome-v3-space-4);
}
/* §R-N+395 (2026-08-07): D7 categories card density 收緊 + balance baseline
   對位 §R-N+137 Airbnb section rhythm: 64px icon container + space-4 padding
   → 56px icon container + space-3 padding, card height 由 ~180px 收緊到 ~152px,
   主卡同 compact 卡 baseline 對齊 (icon bottom-edge 對位 title baseline).
   同時 align card content 上下垂直 (flex column) 對位 §R-N+140 card 一致性. */
.categories-v3-card {
    background: var(--sarahome-v3-surface-card);
    border: 1px solid var(--sarahome-v3-border);
    border-radius: var(--sarahome-v3-radius-lg);
    padding: var(--sarahome-v3-space-4);
    text-align: center;
    text-decoration: none;
    color: inherit;
    transition: box-shadow var(--sarahome-v3-duration-base) var(--sarahome-v3-easing), transform var(--sarahome-v3-duration-base) var(--sarahome-v3-easing);
    display: flex;
    flex-direction: column;
    align-items: center;
}
.categories-v3-card:hover {
    box-shadow: var(--sarahome-v3-shadow-hover);
    transform: translateY(-2px);
}
.categories-v3-card-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 56px;
    height: 56px;
    border-radius: var(--sarahome-v3-radius-md);
    background: var(--sarahome-v3-surface-section-alt);
    color: var(--sarahome-v3-color-accent);
    margin-bottom: var(--sarahome-v3-space-3);
}
/* §R-N+395 (2026-08-07): 住宅買盤 vs 租盤 icon 顏色區分
   對位 §R-N+137 Airbnb: buy = warm CTA tint, rent = cool accent tint
   同時 count 字體 tabular-nums 對位 chip readability. */
.categories-v3-card-icon--buy {
    color: var(--sarahome-v3-color-cta);
    background: rgba(255, 107, 53, 0.10);
}
.categories-v3-card-icon--rent {
    color: var(--sarahome-v3-color-accent);
    background: rgba(45, 125, 210, 0.10);
}
/* §R-N+396 (2026-08-07): D8 tablet 3-col 對位 §R-N+137 Airbnb category grid,
   6 卡 tablet 兩行, 對位 featured-v3 同層 tablet 規則. */
@media (min-width: 769px) and (max-width: 1024px) {
    .categories-v3-grid {
        grid-template-columns: repeat(3, 1fr);
    }
}
.categories-v3-card-title {
    font-size: 1.0625rem;
    font-weight: 600;
    color: var(--sarahome-v3-color-fg);
    margin-bottom: var(--sarahome-v3-space-1);
    line-height: 1.3;
}
.categories-v3-card-count {
    font-size: 0.8125rem;
    color: var(--sarahome-v3-color-text-secondary);
    font-feature-settings: 'tnum' 1;
}

/* === Plan D 首頁 V3 Mobile === */
@media (max-width: 768px) {
    .hero-v3 {
        padding: 1.25rem 0;
    }
    /* §R-N+347.1 (2026-08-04) mobile-first density fix-up
       Disk verify 根因: 28px .hero-v3-title vs body 12-16px 對比過大
       1 audit, 對位 §R-N+62 KISS (1 根因 = 1 ship) */
    .hero-v3-title {
        font-size: 1.375rem;     /* 22px, 對位 H1 < 24px mobile density 根因 */
        line-height: 1.3;
        margin-bottom: var(--sarahome-v3-space-2);
    }
    .hero-v3-subtitle {
        font-size: 0.9375rem;
        margin-bottom: 1rem;
    }
    .hero-v3-search-row {
        flex-direction: row;
        flex-wrap: wrap;
        gap: 0.375rem;
        padding: var(--sarahome-v3-space-2);
    }
    /* §R-N+4xx+49 (2026-08-12) — mobile hero form 2-col density
       根因 (live DOM audit 390x844): 3 個 field 全 1-col stack (44px × 3 + buttons)
       hero form 212px, hero section 486px. 地區 + 類型 2-col 一排 (各 ~50%),
       keyword wide 全寬下一排 + actions 全寬. form 212 → ~168px, hero 486 → ~440px.
       對位 §R-N+62 KISS 1 commit 1 根因 + §R-N+290 style consistency
       (search 頁 §R-N+4xx+43 mobile 2-col compact pattern) + §P-MD-05 44px 保留. */
    .hero-v3-search-field {
        flex: 1 1 calc(50% - 0.1875rem);
        min-width: 0;
    }
    .hero-v3-search-field-wide {
        flex: 1 1 100%;
    }
    .hero-v3-search-actions {
        flex: 1 1 100%;
    }
    /* Search input/select height 48→44px (Apple HIG 44pt min) */
    .hero-v3-search-input,
    select.hero-v3-search-input,
    .hero-v3-submit {
        height: 44px;
        min-height: 44px;
        max-height: 44px;
        line-height: 42px;
    }
    .hero-v3-search-actions {
        justify-content: stretch;
        gap: var(--sarahome-v3-space-2);
    }
    .hero-v3-submit {
        flex: 1;
        padding: 0 var(--sarahome-v3-space-4);
    }
    .featured-v3 {
        padding: var(--sarahome-v3-space-6) 0;
    }
    .featured-v3-header {
        margin-bottom: 1rem;
    }
    .featured-v3-title {
        font-size: 1.375rem;
        line-height: 1.35;
    }
    .featured-v3-view-all {
        display: inline-flex;
        align-items: center;
        min-height: 44px;
    }
    /* §R-N+4xxx+40 (2026-09-15): .featured-v3-nav 44px rule 已刪 (箭嘴 template 已移除);
       grid 1fr/rows rule 已刪 — mobile rail 模式 (flex) 下 grid-template-* 無效,
       card 寬由 .featured-v3-grid > .featured-v3-card (72vw) 控制。 */
    .categories-v3 {
        padding: var(--sarahome-v3-space-6) 0;
    }
    .categories-v3-title {
        font-size: 1.375rem;
        line-height: 1.35;
        margin-bottom: 1rem;
    }
    .categories-v3-grid {
        grid-template-columns: repeat(2, 1fr);
        gap: var(--sarahome-v3-space-3);
    }
    .categories-v3-card {
        min-height: 124px;
        padding: var(--sarahome-v3-space-3) var(--sarahome-v3-space-2);
    }
    .categories-v3-card-icon {
        width: 44px;
        height: 44px;
        margin-bottom: var(--sarahome-v3-space-2);
    }
    .categories-v3-card-title {
        font-size: 0.9375rem;
    }
    .categories-v3-card-count {
        font-size: var(--sarahome-v3-font-xs);
    }
    /* §R-N+396 (2026-08-07): D8 mobile 2-col 對位 §R-N+342 mobile grid spec,
       統一 6 個平等卡 mobile 對位主 grid (砍掉 compact grid mobile override). */
}

/* ============================================================
   Plan D (V3) — §R-N+205 公開頁 component-level token
   search / detail / agent / mortgage / contact 統一 token
   ============================================================ */

/* === Breadcrumb === */
.breadcrumb {
    color: var(--sarahome-v3-color-text-secondary);
    font-size: 0.875rem;
    margin-bottom: var(--sarahome-v3-space-4);
}
.breadcrumb a {
    color: var(--sarahome-v3-color-accent);
    text-decoration: none;
}
.breadcrumb a:hover {
    text-decoration: underline;
}
.breadcrumb-separator {
    margin: 0 var(--sarahome-v3-space-2);
    color: var(--sarahome-v3-color-text-secondary);
}

/* === Page title === */
/* §R-N+4xx (2026-08-12): page-title-v2-header / eyebrow 統一定義 — my_listings +
   subscription 等 L2 頁面 header 結構 (對位 §R-N+290 style consistency) */
.page-title-v2-header {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-start;
    justify-content: space-between;
    gap: var(--sarahome-v3-space-4, 1rem);
    margin-bottom: var(--sarahome-v3-space-4, 1rem);
}

/* §R-N+30xx (2026-08-27): page-header-actions 全站統一定義 —
   對位 .agent-listings-actions (my_listings) pattern */
.page-header-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 0.625rem; }
.page-header-actions a { min-height: 46px; }

/* §R-N+30xx (2026-08-27): stat-icon svg sizing — 統一後台 stat-card icons
   (admin .stat-icon 2rem + partner/agent .stat-icon-text 2.5rem 方塊) */
.stat-card .stat-icon svg,
.stat-icon-text svg { display: block; }

.page-title-v2-eyebrow {
    margin: 0 0 0.25rem;
    font-size: var(--sarahome-v3-font-xs, 0.75rem);
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--sarahome-v3-color-accent, #FF8C42);
}

.page-title-v2 {
    font-size: 2rem;
    font-weight: 700;
    color: var(--sarahome-v3-color-fg);
    margin-bottom: var(--sarahome-v3-space-2);
}
.page-subtitle {
    font-size: 1rem;
    color: var(--sarahome-v3-color-text-secondary);
    margin-bottom: var(--sarahome-v3-space-6);
}

/* === Search filter panel === */
.search-filter-panel {
    background: var(--sarahome-v3-surface-card);
    border: 1px solid var(--sarahome-v3-border);
    border-radius: var(--sarahome-v3-radius-lg);
    padding: var(--sarahome-v3-space-4);
}
.search-filter-header h2 {
    font-size: 1.25rem;
    font-weight: 600;
    color: var(--sarahome-v3-color-fg);
    margin-bottom: var(--sarahome-v3-space-1);
}
.search-filter-header p {
    font-size: 0.875rem;
    color: var(--sarahome-v3-color-text-secondary);
}

/* === Listing card base (no flex-direction; delegated to search-results / agent-listing-card) === */
.listing-card-v2 {
    display: flex;
    background: var(--sarahome-v3-surface-card);
    border: 1px solid var(--sarahome-v3-border);
    border-radius: var(--sarahome-v3-radius-lg);
    overflow: hidden;
    transition: box-shadow var(--sarahome-v3-duration-base) var(--sarahome-v3-easing), transform var(--sarahome-v3-duration-base) var(--sarahome-v3-easing);
}
.listing-card-v2:hover {
    box-shadow: var(--sarahome-v3-shadow-hover);
    transform: translateY(-2px);
}
.listing-card-thumb {
    display: block;
    overflow: hidden;
    /* §R-N+418 (2026-08-07) — Plan V+ tags/detail.html chain fix:
       鎖死 thumb aspect-ratio 16/9, 防止 vertical portrait chain (對位 §R-N+414 Plan H )
       + img chain display:block + object-fit:cover 守住chain
       + price-primary chain white-space:nowrap 防止 long 數字 overflow
       對位 §R-N+62 KISS + §R-N+79 selective narrative (唔改 listing-card-v2 chain core, 只加 aspect lock )
       §R-N+4xxx+10 (2026-09-04) — 加 position:relative 令 .badge-corner 鎖喺 thumb 範圍入面
       (之前 badge-corner 嘅 absolute 定位 fallback 落去 .listing-card-v2 整個 card,
       改 right 後會 overlap .listing-card-info 嘅 title text。
       修正: thumb 改 relative → badge 鎖喺 thumb 右上, 唔再撞 title) */
    position: relative;
    aspect-ratio: 16 / 9;
}
.listing-card-thumb img,
.listing-card-thumb > img,
.listing-card-thumb .listing-thumb {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

.listing-card-info {
    flex: 1 1 auto;
    min-width: 0;
    padding: var(--sarahome-v3-space-3) var(--sarahome-v3-space-4);
    display: flex;
    flex-direction: column;
    gap: var(--sarahome-v3-space-1);
}

/* Footer row: ref left | price right (space-between) */
.listing-card-info .listing-card-footer {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--sarahome-v3-space-2);
    margin-top: auto;
    padding-top: 0.5rem;
    border-top: 1px solid var(--color-bg-soft, #F3F4F6);
}
.listing-card-info .listing-ref {
    font-size: 0.75rem;
    color: #9CA3AF;
    font-family: var(--sarahome-v3-font-en);
}

/* Price — vertical stack inside footer */
.listing-card-price {
    text-align: right;
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 0.125rem;
    /* §R-N+418 — min-width: 0 + max-width: 100% 防止 HK$ 數字 overflow 
       (對位 §R-N+79 selective narrative, 唔改 layout 只防止 overflow) */
    min-width: 0;
    max-width: 100%;
}
.listing-card-price .price-primary {
    font-size: var(--sarahome-v3-font-md);
    font-weight: 700;
    color: var(--sarahome-v3-color-cta, #E63946);
    font-family: var(--sarahome-v3-font-en);
    line-height: 1.2;
    /* §R-N+418 — nowrap 守住 8 位數字 HK$ (例 20,353,900) overflow  */
    white-space: nowrap;
}
.listing-card-price .price-secondary {
    font-size: var(--sarahome-v3-font-xs);
    color: #9CA3AF;
    white-space: nowrap;
}
.listing-card-price .price-suffix {
    font-size: 0.875rem;
    color: #6B7280;
    font-weight: 500;
    white-space: nowrap;
}

/* §R-N+418 — listing-card-title chain overflow  (對位 search chain .listing-title)
   tags chain template 用 `.listing-card-title` class, search 用 `.listing-title`,
   但 CSS chain rule 唔同. Plan V+ chain加統一chain overflow . */
.listing-card-title {
    font-size: 0.9375rem;
    font-weight: 600;
    color: var(--sarahome-v3-color-fg);
    margin: 0 0 0.25rem 0;
    line-height: 1.3;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    text-overflow: ellipsis;
    min-height: 2.6em;
}
.listing-card-meta {
    font-size: 0.8125rem;
    color: var(--sarahome-v3-color-text-secondary);
    margin: 0 0 0.25rem 0;
    display: flex;
    flex-wrap: wrap;
    gap: 0.375rem;
}
.listing-card-meta span {
    display: inline-flex;
    align-items: center;
}

/* Agent listing card: column layout in grid */
.agent-listing-card {
    flex-direction: column;
}
.agent-listing-card .listing-card-thumb {
    flex: 0 0 auto;
}
.agent-listing-card .listing-card-thumb .listing-thumb {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}

/* === Form group === */
.form-group {
    margin-bottom: var(--sarahome-v3-space-4);
}
.form-group label {
    display: block;
    font-size: var(--sarahome-v3-font-sm);
    font-weight: 600;
    color: var(--sarahome-v3-color-fg);
    margin-bottom: var(--sarahome-v3-space-1);
}
.form-group input,
.form-group textarea,
.form-group select {
    width: 100%;
    padding: var(--sarahome-v3-space-3) var(--sarahome-v3-space-4);
    border: 1px solid var(--sarahome-v3-border);
    border-radius: var(--sarahome-v3-radius-md);
    font-size: var(--sarahome-v3-font-base);
    color: var(--sarahome-v3-color-fg);
    background: var(--sarahome-v3-surface-input);
    transition: border-color var(--sarahome-v3-duration-base) var(--sarahome-v3-easing);
}
.form-group input:focus,
.form-group textarea:focus,
.form-group select:focus {
    outline: none;
    border-color: var(--sarahome-v3-color-accent);
}

/* === Button primary === */
.btn-primary {
    background: var(--sarahome-v3-color-cta);
    color: #fff;
    padding: var(--sarahome-v3-space-3) var(--sarahome-v3-space-6);
    border: none;
    border-radius: var(--sarahome-v3-radius-md);
    font-size: var(--sarahome-v3-font-base);
    font-weight: 600;
    cursor: pointer;
    transition: background var(--sarahome-v3-duration-base) var(--sarahome-v3-easing);
}
.btn-primary:hover {
    background: #e55a2b;
}

/* === Agent profile === */
.agent-profile-hero {
    background: linear-gradient(135deg, var(--sarahome-v3-hero-gradient-from), var(--sarahome-v3-hero-gradient-to));
    padding: var(--sarahome-v3-space-8) 0;
    border-radius: var(--sarahome-v3-radius-lg);
    margin-bottom: var(--sarahome-v3-space-6);
}
.agent-profile-stats {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: var(--sarahome-v3-space-4);
    margin-bottom: var(--sarahome-v3-space-6);
}
.agent-profile-stat {
    background: var(--sarahome-v3-surface-card);
    border: 1px solid var(--sarahome-v3-border);
    border-radius: var(--sarahome-v3-radius-md);
    padding: var(--sarahome-v3-space-4);
    text-align: center;
}
.agent-profile-stat-value {
    font-size: 1.5rem;
    font-weight: 700;
    color: var(--sarahome-v3-color-accent);
}
.agent-profile-stat-label {
    font-size: 0.875rem;
    color: var(--sarahome-v3-color-text-secondary);
}

/* === Mortgage calculator === */
.mortgage-calculator-form {
    background: var(--sarahome-v3-surface-card);
    border: 1px solid var(--sarahome-v3-border);
    border-radius: var(--sarahome-v3-radius-lg);
    padding: var(--sarahome-v3-space-6);
    margin-bottom: var(--sarahome-v3-space-6);
}
.mortgage-calculator-result {
    background: var(--sarahome-v3-surface-section-alt);
    border: 1px solid var(--sarahome-v3-border);
    border-radius: var(--sarahome-v3-radius-lg);
    padding: var(--sarahome-v3-space-6);
    text-align: center;
}
.mortgage-calculator-result-value {
    font-size: 2rem;
    font-weight: 700;
    color: var(--sarahome-v3-color-cta);
    margin-bottom: var(--sarahome-v3-space-2);
}
.mortgage-calculator-result-label {
    font-size: 1rem;
    color: var(--sarahome-v3-color-text-secondary);
}

/* === Contact form context (P1-7: 顯示 listing context) === */
.contact-listing-context {
    background: var(--sarahome-v3-surface-card);
    border: 1px solid var(--sarahome-v3-border);
    border-radius: var(--sarahome-v3-radius-lg);
    padding: var(--sarahome-v3-space-4) var(--sarahome-v3-space-6);
    margin-bottom: var(--sarahome-v3-space-6);
}
.contact-context-title {
    font-size: 0.85rem;
    color: var(--sarahome-v3-color-text-secondary);
    margin-bottom: var(--sarahome-v3-space-1);
}
.contact-context-listing {
    font-size: 1.1rem;
    font-weight: 600;
    color: var(--sarahome-v3-color-cta);
    margin-bottom: var(--sarahome-v3-space-1);
}
.contact-context-agent {
    font-size: 0.9rem;
    color: var(--sarahome-v3-color-text-secondary);
}
/* === Contact form === */
.contact-form {
    background: var(--sarahome-v3-surface-card);
    border: 1px solid var(--sarahome-v3-border);
    border-radius: var(--sarahome-v3-radius-lg);
    padding: var(--sarahome-v3-space-6);
    margin-bottom: var(--sarahome-v3-space-6);
}
.contact-success {
    background: var(--sarahome-v3-status-success-bg);
    border: 1px solid var(--sarahome-v3-color-success);
    border-radius: var(--sarahome-v3-radius-lg);
    padding: var(--sarahome-v3-space-6);
    text-align: center;
    color: var(--sarahome-v3-status-success-text);
}
.contact-error {
    background: var(--sarahome-v3-status-error-bg);
    border: 1px solid var(--sarahome-v3-color-error);
    border-radius: var(--sarahome-v3-radius-lg);
    padding: var(--sarahome-v3-space-6);
    text-align: center;
    color: var(--sarahome-v3-status-error-text);
}

/* ============================================================
   Plan D (V3) — §R-N+206 Mobile-first IA token
   Bottom nav + header + form touch target + scrollWidth
   ============================================================ */

/* === Mobile bottom nav === */
.mobile-bottom-nav {
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    background: var(--sarahome-v3-surface-card);
    border-top: 1px solid var(--sarahome-v3-border);
    display: flex;
    justify-content: space-around;
    align-items: center;
    padding: 0.125rem 0;
    z-index: var(--sarahome-v3-z-drawer);
    box-shadow: 0 -2px 8px rgba(0,0,0,0.05);
}
.mobile-bottom-nav-item {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: var(--sarahome-v3-space-2);
    color: var(--sarahome-v3-color-text-secondary);
    text-decoration: none;
    transition: color var(--sarahome-v3-duration-base) var(--sarahome-v3-easing);
    min-width: 64px;
    min-height: 48px;
}
.mobile-bottom-nav-item.active {
    color: var(--sarahome-v3-color-accent);
}
.mobile-bottom-nav-item svg {
    margin-bottom: var(--sarahome-v3-space-1);
}
.mobile-bottom-nav-item span {
    font-size: 0.75rem;
    font-weight: 500;
}

/* === Mobile header actions === */
.mobile-header-actions {
    display: none;
}
@media (max-width: 768px) {
    .mobile-header-actions {
        display: flex;
        gap: var(--sarahome-v3-space-4);
        align-items: center;
    }
    .mobile-header-action {
        color: var(--sarahome-v3-color-fg);
        padding: var(--sarahome-v3-space-2);
        min-width: var(--sarahome-v3-touch-target);
        min-height: var(--sarahome-v3-touch-target);
        display: flex;
        align-items: center;
        justify-content: center;
    }
}

/* === Form touch target (mobile ≥44px) ===
   §R-N+437 (2026-08-11) — P1.1 closure: .mobile-bottom-nav-item chain
   selective extract (style.css → mobile.css), 對位 §R-N+348 selective .
   .mobile-bottom-nav-item { min-height: 48px } 屬 mobile touch-target 根因 (§R-N+206),
   對位 §P-MD-05 Apple HIG 44px, selective extract 必須 keep. */
@media (max-width: 768px) {
    .form-group input,
    .form-group textarea,
    .form-group select,
    .btn-primary,
    .hero-v3-search-input,
    .hero-v3-submit {
        min-height: 44px;
        font-size: var(--sarahome-v3-font-base);
    }
    /* .mobile-bottom-nav-item { min-height: 48px } 抽走 → mobile.css §R-N+437 */
}

/* === ScrollWidth guard (prevent horizontal scroll) === */
html, body {
    overflow-x: hidden;
    max-width: 100%;
}
.container {
    max-width: 1280px;
    margin: 0 auto;
    padding: 0 var(--sarahome-v3-space-4);
}
@media (max-width: 768px) {
    .container {
        padding: 0 var(--sarahome-v3-space-3);
    }
}

/* ============================================================
   Plan D (V3) — §R-N+207 L2 + L3 後臺 component-level token
   agent dashboard / my_listings / new_listing / partner 統一 token
   ============================================================ */

/* === Agent dashboard === */
.agent-dashboard-hero {
    background: linear-gradient(135deg, var(--sarahome-v3-hero-gradient-from), var(--sarahome-v3-hero-gradient-to));
    padding: var(--sarahome-v3-space-8) 0;
    border-radius: var(--sarahome-v3-radius-lg);
    margin-bottom: var(--sarahome-v3-space-6);
}
.agent-dashboard-stats {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: var(--sarahome-v3-space-4);
    margin-bottom: var(--sarahome-v3-space-6);
}
.agent-dashboard-stat {
    background: var(--sarahome-v3-surface-card);
    border: 1px solid var(--sarahome-v3-border);
    border-radius: var(--sarahome-v3-radius-md);
    padding: var(--sarahome-v3-space-4);
    text-align: center;
}
.agent-dashboard-stat-value {
    font-size: var(--sarahome-v3-font-xl);
    font-weight: 700;
    color: var(--sarahome-v3-color-accent);
}
.agent-dashboard-stat-label {
    font-size: var(--sarahome-v3-font-sm);
    color: var(--sarahome-v3-color-text-secondary);
}

/* === New listing form === */
.new-listing-form {
    background: var(--sarahome-v3-surface-card);
    border: 1px solid var(--sarahome-v3-border);
    border-radius: var(--sarahome-v3-radius-lg);
    padding: var(--sarahome-v3-space-6);
}
.new-listing-form-section {
    margin-bottom: var(--sarahome-v3-space-6);
    padding-bottom: var(--sarahome-v3-space-6);
    border-bottom: 1px solid var(--sarahome-v3-border);
}
.new-listing-form-section:last-child {
    border-bottom: none;
    margin-bottom: 0;
    padding-bottom: 0;
}
.new-listing-form-section-title {
    font-size: 1.25rem;
    font-weight: 600;
    color: var(--sarahome-v3-color-fg);
    margin-bottom: var(--sarahome-v3-space-4);
}
.new-listing-form-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: var(--sarahome-v3-space-4);
}
.new-listing-form-actions {
    display: flex;
    justify-content: flex-end;
    gap: var(--sarahome-v3-space-3);
    margin-top: var(--sarahome-v3-space-6);
}

/* === A11y: Focus visible (keyboard navigation) === */
*:focus-visible {
    outline: 2px solid var(--sarahome-v3-color-accent);
    outline-offset: 2px;
}
a:focus-visible,
button:focus-visible,
input:focus-visible,
textarea:focus-visible,
select:focus-visible {
    outline: 2px solid var(--sarahome-v3-color-accent);
    outline-offset: 2px;
}

/* === A11y: Skip to content link === */
.skip-to-content {
    position: absolute;
    top: -40px;
    left: 0;
    background: var(--sarahome-v3-color-accent);
    color: #fff;
    padding: var(--sarahome-v3-space-2) var(--sarahome-v3-space-4);
    text-decoration: none;
    z-index: var(--sarahome-v3-z-toast);
}
.skip-to-content:focus {
    top: 0;
}

/* === A11y: Visually hidden (screen reader only) === */
.visually-hidden {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

/* === A11y: Reduced motion === */
@media (prefers-reduced-motion: reduce) {
    *,
    *::before,
    *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
        scroll-behavior: auto !important;
    }
}

/* === Utility classes (§R-N+283 Phase C — inline style sweep) === */
.text-muted { color: var(--sarahome-v3-color-text-secondary, #6B7280); }
.text-error { color: var(--sarahome-v3-color-error, #DC2626); }
.bg-success { background: var(--sarahome-v3-color-success, #10B981); }
.form-label-hint {
    color: var(--sarahome-v3-color-text-secondary, #6B7280);
    margin: 0.25rem 0 0;
    font-size: 0.9rem;
}
.form-input-compact {
    padding: 0.4rem 0.6rem;
    font-size: 0.9rem;
}
.mt-4 { margin-top: 1rem; }
.mt-6 { margin-top: 1.5rem; }
.mt-8 { margin-top: 2rem; }
.mb-5 { margin-bottom: 1.25rem; }
.ml-2 { margin-left: 0.5rem; }
.w-200 { width: 200px; }
/* V29-FINAL-FIX-1785403690 */

/* ===================================================================
   §R-N+20260731-v2: Homepage Search Cost Reduction
   - Quick Tags (1-click hot districts)
   - Inline Mortgage Calculator
   =================================================================== */

.mortgage-inline-subtitle {
    font-size: 0.9375rem;
    color: var(--sarahome-v3-color-text-secondary);
    margin: 0;
}

/* P2-3 (2026-08-04): 「0 賣/0 租」tooltip — L2 剛加入 grace 期提示 (hover + focus 可見) */
.tooltip-hint {
    position: relative;
    cursor: help;
    outline-offset: 2px;
}
.tooltip-hint .tooltip-text {
    visibility: hidden;
    opacity: 0;
    position: absolute;
    top: calc(100% + 6px);
    left: 50%;
    transform: translateX(-50%);
    z-index: 60;
    min-width: 12rem;
    max-width: 18rem;
    padding: var(--sarahome-v3-space-2) var(--sarahome-v3-space-3);
    background: var(--sarahome-v3-color-fg, #1F2937);
    color: #FFFFFF;
    border-radius: 6px;
    font-size: 0.75rem;
    font-weight: 400;
    line-height: 1.5;
    text-align: center;
    white-space: normal;
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.18);
    transition: opacity 0.15s ease;
    pointer-events: none;
}
.tooltip-hint:hover .tooltip-text,
.tooltip-hint:focus .tooltip-text {
    visibility: visible;
    opacity: 1;
}

/* ============================================================
   P2-4 Accessibility AA overrides (2026-08-04)
   對位 WCAG 2.1 AA: 文字/按鈕對比 ≥4.5:1 (大文字 ≥3:1)
   原 brand 色保留做裝飾/背景, 文字用 --*-aa 深色版
   ============================================================ */
/* Header: brand em + login/register buttons */
.logo-text em {
    color: var(--sarahome-v3-color-accent-aa);
}
.btn-login {
    color: var(--sarahome-v3-color-accent-aa);
}
.btn-register {
    background: var(--sarahome-v3-color-accent-aa);
}
/* Primary/secondary buttons (white text on orange must be ≥4.5:1) */
.btn-primary {
    background: var(--sarahome-v3-color-cta-aa);
}
.btn-secondary {
    color: var(--sarahome-v3-color-accent-aa);
}
/* Hero search submit */
.hero-v3-submit-buy {
    background: var(--sarahome-v3-color-cta-aa);
}
.hero-v3-submit-rent {
    background: var(--sarahome-v3-color-accent-aa);
}
/* Featured v3 */
.featured-v3-view-all {
    color: var(--sarahome-v3-color-accent-aa);
}
.featured-v3-card-price {
    color: var(--sarahome-v3-color-accent-aa);
}
.featured-v3-card-price .price-suffix,
.featured-v3-card-price-per-sqft {
    color: var(--sarahome-v3-color-text-secondary-aa);
}
/* Mortgage inline subtitle */
.mortgage-inline-subtitle {
    color: var(--sarahome-v3-color-text-secondary-aa);
}
/* Footer disclaimer links: keep warm color on dark footer (6.4:1) + underline (link-in-text-block non-color cue) */
.disclaimer a {
    color: var(--sarahome-v3-color-warm);
    text-decoration: underline;
}
/* Search page: breadcrumb / type tabs / quick tabs / hot keywords */
.breadcrumb a[itemprop="item"] span[itemprop="name"],
.search-type-option.active,
.search-hot-keywords-col h3 {
    color: var(--sarahome-v3-color-accent-aa);
}
.search-quick-tab.active {
    background: var(--sarahome-v3-color-accent-aa);
}
.search-submit-btn {
    background: var(--sarahome-v3-color-accent-aa);
}
.search-submit-label {
    color: #FFFFFF;
}
label[for="sort-select"] {
    color: var(--sarahome-v3-color-text-secondary-aa);
}
/* Listing new badge (green bg white text ≥4.5:1) */
.listing-new-badge {
    background: #047857;
}
/* Listing detail hero CTAs */
.listing-hero-cta-btn-primary {
    background: var(--sarahome-v3-color-cta-aa);
    border-color: var(--sarahome-v3-color-cta-aa);
}
.listing-hero-cta-btn-whatsapp {
    background: #0F766E;
    border-color: #0F766E;
}
.listing-hero-cta-btn-tel {
    background: var(--sarahome-v3-color-accent-aa);
    border-color: var(--sarahome-v3-color-accent-aa);
}
.listing-hero-cta-btn-mail {
    background: var(--sarahome-v3-color-accent-aa);
    border-color: var(--sarahome-v3-color-accent-aa);
}
/* Report listing toggle (#9CA3AF 2.53 → AA 6.9:1) */
.report-listing-toggle {
    color: var(--sarahome-v3-color-text-secondary-aa);
}
.listing-mortgage-cta-link > span {
    color: var(--sarahome-v3-color-accent-aa);
}
small > a[href$="contact"] {
    color: var(--sarahome-v3-color-accent-aa);
}
/* §R-N+341 (2026-08-04) — 一致性: updated 灰色同 published, 唔再係 accent-aa 橙 */
.listing-date-updated {
    color: var(--sarahome-v3-color-text-secondary, #6B7280);
}
/* Search toolbar breadcrumb links */
.search-toolbar-breadcrumb a[itemprop="item"] span[itemprop="name"] {
    color: var(--sarahome-v3-color-accent-aa);
}
/* User menu links when logged in (accent on #F3F4F6 2.1 → AA), keep CTA/logout/super-admin as-is */
.user-menu a:not(.btn-register):not(.btn-logout):not(.super-admin-link) {
    color: var(--sarahome-v3-color-accent-aa);
}
.user-menu .btn-register {
    color: #ffffff !important;
}
/* Listing price primary (cta #FF6B35 on white 2.83 → AA) */
.listing-price-block-v2 .price-primary,
.search-results .listing-card-price .price-primary {
    color: var(--sarahome-v3-color-cta-aa);
}
/* Search type option inactive (text-secondary on #F3F4F6 4.39 → AA) */
.search-type-option:not(.active) {
    color: var(--sarahome-v3-color-text-secondary-aa);
}
/* User email in header (4.39 → AA) */
.user-email {
    color: var(--sarahome-v3-color-text-secondary-aa);
}
/* Listing detail agent stats */
.agent-stat,
.agent-bio-humanized {
    color: var(--sarahome-v3-color-text-secondary-aa);
}
/* Error page code */
.error-code {
    color: var(--sarahome-v3-color-accent-aa);
    opacity: 1;
}
/* Auth links (register / forgot-password) — underline = non-color cue (link-in-text-block) */
.auth-form + p a,
a[href$="forgot-password"],
.auth-links a,
.login-footer a {
    color: var(--sarahome-v3-color-accent-aa);
    text-decoration: underline;
}

/* === P2-4 round5 — L2 my-listings AA overrides (shared classes) === */
/* Logout button (#6B7280 on #EFEFEF 4.1 → AA) */
.user-menu .btn-logout {
    color: var(--sarahome-v3-color-text-secondary-aa);
}
/* Breadcrumb root link (#FF8C42 2.83 → AA) */
.breadcrumb a {
    color: var(--sarahome-v3-color-accent-aa);
}
/* Badge buy/rent (white on #2D7DD2/#E76F51 ~3.4 → AA) */
.badge-buy {
    background: #1D4ED8;
}
.badge-rent {
    background: var(--sarahome-v3-color-accent-aa);
}
/* Edit action lavender button text (#FF8C42 2.83 → AA) */
.btn-secondary-lavender {
    color: var(--sarahome-v3-color-accent-aa);
    border-color: var(--sarahome-v3-color-accent-aa);
}
.btn-secondary-lavender:hover {
    color: var(--sarahome-v3-color-accent-aa);
}
/* Agent listing card price (#FF6B35 2.83 → AA) */
.agent-listing-card .listing-card-price .price-primary {
    color: var(--sarahome-v3-color-cta-aa);
}
/* Agent listing card ref (#9CA3AF 2.53 → AA) */
.agent-listing-card .listing-ref {
    color: var(--sarahome-v3-color-text-secondary-aa);
}
/* Agent listing view count (#6B7280 on tint 4.4 → AA) */
.agent-listings-grid .listing-card-info .listing-card-view-count {
    color: var(--sarahome-v3-color-text-secondary-aa);
}


/* v0.56.1 (2026-08-08, CEO feedback 8/8): 白字 contrast 並沒有實現 — final cascade fix.
   根因: .listing-actions / .error-actions / .offline-actions / PlanD V3 重複嘅 .btn-primary
   都係 specificity 0,2,0 或 0,1,0 寫 background: cta (#FF6B35, 3.36:1, 跌穿 WCAG AA 4.5:1).
   P2-4 override (line ~10374) 已將 generic .btn-primary 改 cta-aa (#C2410C, 5.19:1),
   但所有 scoped rule 因 specificity 較高 或 喺 override 之後寫 → 後寫後贏 cascade 落敗.
   解法: 喺檔案最尾強制統一 cta-aa, 所有 selector 用 :where() 包裝減 specificity 至 0,0,0,
   確保只同 generic .btn-primary 同 cascade 級別, 後寫後贏無懸念. */
:where(.btn-primary, .btn-primary:hover, .btn-primary:focus-visible,
       .btn-primary:active, .btn-primary:focus),
:where(.listing-actions, .error-actions, .offline-actions) .btn-primary,
:where(.listing-actions, .error-actions, .offline-actions) .btn-primary:hover,
:where(.listing-actions, .error-actions, .offline-actions) .btn-primary:focus-visible,
:where(.listing-actions, .error-actions, .offline-actions) .btn-primary:active {
    background: var(--sarahome-v3-color-cta-aa, #C2410C) !important;
    color: #ffffff !important;
}

/* v0.56.1: btn-secondary 同樣統一 accent-aa (對位 WCAG AA 4.5:1, 防 scoped 跌穿). */
:where(.btn-secondary, .btn-secondary:hover, .btn-secondary:focus-visible),
:where(.listing-actions, .error-actions, .offline-actions) .btn-secondary,
:where(.listing-actions, .error-actions, .offline-actions) .btn-secondary:hover,
:where(.listing-actions, .error-actions, .offline-actions) .btn-secondary:focus-visible {
    color: var(--sarahome-v3-color-accent-aa, #C2410C) !important;
    border-color: var(--sarahome-v3-color-accent-aa, #C2410C) !important;
}

/* =============================================================
   2026-08-16: inline-style 清零 (對位 §R-N+290 style consistency + CSP 收緊)
   抽原本散喺 base.html / contact.html / register.html / search filter / view_trend
   嘅 inline `style="..."` 入 CSS class.
   ============================================================= */
.logout-form-inline { display: inline; }

.invite-notice {
    background: #E8F4F8;
    border: 1px solid #B3D9E6;
    border-radius: var(--radius-md, 8px);
    padding: var(--space-md, 1rem);
    margin-bottom: var(--space-lg, 1.5rem);
}
.invite-notice-text {
    margin: 0;
    color: #1E5A9E;
}

.contact-form-narrow { max-width: var(--width-form, 600px); }

.contact-honeypot {
    position: absolute;
    left: -10000px;
    width: 1px;
    height: 1px;
    overflow: hidden;
}

.btn-apply-filter {
    margin-top: var(--space-md, 1rem);
    width: 100%;
}

/* L2 listing form preview btn */
.btn-preview-listing {
    text-decoration: none;
}


/* ============================================================
   §R-N+23xx+4 Phase 1.5 (2026-08-20) — touch target audit fix (CSS-only)
   iOS HIG ≥44pt / Material ≥48dp。Audit script: scripts/audit_touch_targets.py
   (bs4 + simple-selector CSS scan, 對位 §R-N+138 disk-truth)。
   全部用 --sarahome-v3-touch-target token (對位 §R-N+290 style consistency)。

   Exempt (明文豁免, 唔 fix):
   - .preset-chip 36px compact — CEO 2026-08-13 verdict 簡約實用設計
   - inline text links (.tos-link / .kw-link / .listing-payment-link /
     .cookie-consent-more / .mortgage-inline-link) — WCAG 2.5.8 inline
     exception, 44px 會破壞文字流
   ============================================================ */
.btn-login,
.btn-register,
.btn-login-mobile,
.btn-register-mobile,
.cookie-consent-btn {
    min-height: var(--sarahome-v3-touch-target, 44px);
}

.mega-left-option,
.mega-right-option,
.preset-sort-option {
    min-height: var(--sarahome-v3-touch-target, 44px);
}

.search-filter-clear {
    display: inline-flex;
    align-items: center;
    min-height: var(--sarahome-v3-touch-target, 44px);
}

.mega-dropdown-close {
    min-width: var(--sarahome-v3-touch-target, 44px);
    min-height: var(--sarahome-v3-touch-target, 44px);
}

.hero-v3-search-mobile-input {
    min-height: var(--sarahome-v3-touch-target, 44px);
}

