/* Billing & Co CRM — styles.css — extracted verbatim from index.html (Round 19.5 modularisation) */
:root{--dark:#202020;--gold:#B08D57;--light:#fffef6;--warm:#EDE8E0;--stone:#6B6460;--muted:#9C9590;--div:#E0D9D0;--red:#C0392B;--green:#1A7840;--neutral-bg:#F2F3F4;--neutral-fg:#6B6460;--info-bg:#EBF5FB;--info-fg:#1A5276;--warn-bg:#FEF9E7;--warn-fg:#9A7D0A;--success-bg:#EAFAF1;--success-fg:#1A7840;--danger-bg:#FDECEA;--wm:'Playfair Display',Georgia,serif;--serif:'Cormorant Garamond',Georgia,serif;--sans:'Montserrat','Helvetica Neue',sans-serif;
/* Round U2 (UI Refresh handoff, mockups 3A/3B) — new tokens, additive only */
--gold-hover:#C9A96E;--outline-border:#C9BFB2;--body-strong:#3A3632;--label-dim:#8A837D;--row-div:#EFEAE2;--textarea-border:#D8D0C4;--sidebar-active-bg:rgba(176,141,87,.14);}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{-webkit-tap-highlight-color:transparent}
body{font-family:var(--sans);font-weight:300;font-size:13px;background:var(--light);color:var(--dark);-webkit-font-smoothing:antialiased;overscroll-behavior:none}
.nav,.tabs,.main,.fab-wrap{display:none}
body.authed .nav{display:flex}
body.authed .tabs{display:flex;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}
.tabs::-webkit-scrollbar{display:none}
body.authed .main{display:block}
body.authed .fab-wrap{display:block}
#login-screen{position:fixed;inset:0;z-index:1000;background:var(--dark);display:flex;align-items:center;justify-content:center;padding:20px}
body.authed #login-screen{display:none}
.login-card{width:100%;max-width:330px;background:#262626;border:1px solid rgba(176,141,87,.25);padding:34px 26px}
.login-wm{font-family:var(--wm);font-weight:700;font-size:18px;letter-spacing:.14em;color:var(--light);text-align:center;text-transform:uppercase}
.login-sub{font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:var(--gold);text-align:center;margin:4px 0 24px}
.login-card .fl{color:var(--muted);display:block;font-size:10px;font-weight:500;letter-spacing:.12em;text-transform:uppercase;margin-bottom:5px}
.login-card .fg{margin-bottom:13px}
.login-card .fi{width:100%;background:rgba(255,254,246,.06);border:1px solid rgba(176,141,87,.25);color:var(--light);font-family:var(--sans);font-size:13px;font-weight:300;padding:9px 11px;outline:none}
.login-card .fi:focus{border-color:var(--gold)}
.login-card .fi::placeholder{color:#6b6460}
.login-err{color:#E57368;font-size:11px;margin-top:10px;line-height:1.5}
.login-btn{width:100%;justify-content:center;margin-top:8px}
.nav{position:fixed;top:0;left:0;right:0;z-index:200;background:var(--dark);height:calc(50px + env(safe-area-inset-top));display:flex;align-items:center;justify-content:space-between;padding:env(safe-area-inset-top) 16px 0;border-bottom:1px solid rgba(176,141,87,.3)}
.nav-brand{display:flex;flex-direction:column;gap:1px}
.nav-wm{font-family:var(--wm);font-weight:700;font-size:13px;letter-spacing:.14em;color:var(--light);text-transform:uppercase;line-height:1}
.nav-sub{font-size:10px;font-weight:400;letter-spacing:.22em;text-transform:uppercase;color:var(--gold)}
.nav-right{display:flex;align-items:center;gap:12px}
.conn{font-size:10px;letter-spacing:.06em}
.search-btn{background:none;border:none;color:var(--muted);font-size:18px;cursor:pointer;padding:4px;line-height:1}
.search-btn:hover{color:var(--gold)}
.search-overlay{display:none;position:fixed;inset:0;z-index:400;background:rgba(32,32,32,.88);flex-direction:column}
.search-overlay.open{display:flex}
.search-box{background:var(--dark);padding:14px 16px;display:flex;gap:10px;align-items:center;border-bottom:1px solid rgba(176,141,87,.2)}
.search-inp{flex:1;background:rgba(255,254,246,.08);border:1px solid rgba(176,141,87,.3);color:var(--light);font-family:var(--sans);font-size:14px;font-weight:300;padding:9px 13px;outline:none}
.search-inp::placeholder{color:var(--muted)}
.search-inp:focus{border-color:var(--gold)}
.search-close{background:none;border:none;color:var(--muted);font-size:20px;cursor:pointer;padding:4px}
.search-results{overflow-y:auto;-webkit-overflow-scrolling:touch;padding:14px;max-height:calc(100vh - 78px)}
.sr-section{font-size:10px;font-weight:500;letter-spacing:.22em;text-transform:uppercase;color:var(--gold);margin:14px 0 7px}
.sr-item{background:rgba(255,254,246,.06);border:1px solid rgba(176,141,87,.15);padding:11px 13px;margin-bottom:5px;cursor:pointer;transition:border-color .15s}
.sr-item:hover{border-color:var(--gold)}
.sr-name{font-size:13px;color:var(--light);font-weight:400;margin-bottom:2px}
.sr-meta{font-size:10px;color:var(--muted)}
.sr-empty{color:var(--muted);text-align:center;padding:28px;font-style:italic;font-size:12px}
.tabs{position:fixed;top:calc(50px + env(safe-area-inset-top));left:0;right:0;z-index:199;background:var(--dark);display:flex;overflow-x:auto;border-bottom:1px solid rgba(176,141,87,.12);-webkit-overflow-scrolling:touch;scrollbar-width:none}
.tabs::-webkit-scrollbar{display:none}
.tab-btn{flex:0 0 auto;padding:0 14px;height:38px;font-family:var(--sans);font-size:10px;font-weight:400;letter-spacing:.17em;text-transform:uppercase;color:var(--muted);background:none;border:none;border-bottom:2px solid transparent;cursor:pointer;transition:color .15s,border-color .15s;white-space:nowrap}
.tab-btn.active{color:var(--gold);border-bottom-color:var(--gold)}
.tab-btn:hover:not(.active){color:#ccc}
.main{margin-top:calc(88px + env(safe-area-inset-top));padding:15px 13px calc(110px + env(safe-area-inset-bottom));max-width:1080px;margin-left:auto;margin-right:auto}
.tab-panel{display:none}
.tab-panel.active{display:block}
.fab-wrap{position:fixed;bottom:calc(20px + env(safe-area-inset-bottom));right:15px;z-index:300}
.fab-options{position:absolute;bottom:64px;right:0;display:flex;flex-direction:column;align-items:flex-end;gap:7px;opacity:0;pointer-events:none;transition:opacity .18s,transform .18s;transform:translateY(8px);z-index:301}
.fab-wrap.open .fab-options{opacity:1;pointer-events:auto;transform:translateY(0)}
.fab-opt{display:flex;align-items:center;gap:9px;cursor:pointer}
.fab-opt-lbl{font-family:var(--sans);font-size:10.5px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;background:var(--dark);color:var(--light);padding:5px 11px;white-space:nowrap;box-shadow:0 2px 8px rgba(0,0,0,.4)}
.fab-opt-ico{width:38px;height:38px;border-radius:50%;background:var(--dark);border:1px solid var(--gold);color:var(--gold);display:flex;align-items:center;justify-content:center;font-size:15px;box-shadow:0 2px 8px rgba(0,0,0,.3);flex-shrink:0}
.fab-main{position:relative;z-index:302;width:52px;height:52px;border-radius:50%;background:var(--gold);color:var(--dark);border:none;font-size:26px;cursor:pointer;box-shadow:0 4px 18px rgba(0,0,0,.28);display:flex;align-items:center;justify-content:center;transition:transform .18s,background .15s;line-height:1;-webkit-tap-highlight-color:transparent;touch-action:manipulation}
.fab-main:active{transform:scale(.93)}
.fab-wrap.open .fab-main{background:#C9A96E;transform:rotate(45deg)}
.fab-backdrop{display:none;position:fixed;inset:0;z-index:298}
.fab-wrap.open .fab-backdrop{display:block}
.banner{padding:10px 13px;margin-bottom:11px;font-size:12px;display:flex;align-items:center;gap:8px}
.banner-red{background:var(--red);color:#fff}
.kpi-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:7px;margin-bottom:15px}
@media(min-width:540px){.kpi-grid{grid-template-columns:repeat(4,1fr)}}
.kpi{background:var(--dark);padding:12px 14px;position:relative;overflow:hidden}
.kpi::after{content:'B';position:absolute;bottom:-10px;right:-4px;font-family:var(--serif);font-size:58px;font-weight:300;color:#fff;opacity:.04;line-height:1;pointer-events:none}
.kpi-lbl{font-size:10px;font-weight:500;letter-spacing:.2em;text-transform:uppercase;color:var(--gold);margin-bottom:5px}
.kpi-val{font-family:var(--serif);font-size:28px;font-weight:300;color:var(--light);line-height:1}
.kpi-sub{font-size:10px;color:var(--muted);margin-top:2px}
.sh{display:flex;align-items:center;justify-content:space-between;margin:17px 0 9px;padding-bottom:6px;border-bottom:1px solid var(--div)}
.sh-title{font-size:10px;font-weight:500;letter-spacing:.25em;text-transform:uppercase;color:var(--gold)}
.pg-title-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:11px}
.pg-title{font-family:var(--serif);font-size:21px;font-weight:300;font-style:italic;color:var(--dark)}
.card{background:#fff;border:1px solid var(--div);padding:11px 13px;margin-bottom:6px;cursor:pointer;transition:border-color .15s;position:relative}
.card:hover{border-color:var(--gold)}
.bulk-email-cb{position:absolute;top:11px;right:13px;width:16px;height:16px;cursor:pointer}
.card-top{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:4px;gap:7px}
.card-addr{font-family:var(--serif);font-size:15px;font-weight:300;font-style:italic;color:var(--dark);line-height:1.2}
.card-name{font-size:14px;font-weight:400;color:var(--dark)}
.card-badges{display:flex;gap:4px;flex-wrap:wrap;flex-shrink:0}
.card-meta{font-size:11px;color:var(--stone);display:flex;flex-wrap:wrap;gap:4px 9px;margin-top:2px}
.badge{display:inline-block;font-size:10px;font-weight:500;letter-spacing:.07em;text-transform:uppercase;padding:2px 7px;white-space:nowrap}
.b-prospect{background:var(--neutral-bg);color:var(--neutral-fg)}
.b-appraisal-booked{background:var(--info-bg);color:var(--info-fg)}
.b-appraisal-done{background:var(--success-bg);color:var(--success-fg)}
.b-listed{background:var(--success-bg);color:var(--success-fg)}
.b-under-offer{background:var(--warn-bg);color:var(--warn-fg)}
.b-unconditional{background:var(--warn-bg);color:var(--warn-fg)}
.b-sold{background:var(--dark);color:var(--gold)}
.b-settled{background:var(--dark);color:var(--green)}
.b-withdrawn{background:var(--neutral-bg);color:var(--neutral-fg)}
.b-off-market{background:#2C2C2C;color:#aaa}
.b-active{background:var(--success-bg);color:var(--success-fg)}
.b-inactive{background:var(--neutral-bg);color:var(--neutral-fg)}
.b-pending{background:var(--warn-bg);color:var(--warn-fg)}
.b-accepted{background:var(--success-bg);color:var(--success-fg)}
.b-rejected{background:var(--danger-bg);color:var(--red)}
.b-match{background:var(--gold);color:var(--dark)}
.b-buyer{background:var(--info-bg);color:var(--info-fg)}
.b-vendor{background:var(--dark);color:var(--gold)}
.b-other{background:var(--neutral-bg);color:var(--neutral-fg)}
.fu{display:flex;align-items:center;gap:10px;padding:9px 12px;border-bottom:1px solid var(--div);background:var(--light);cursor:pointer;transition:background .1s}
.fu:hover{background:var(--warm)}
.fu:first-child{border-top:1px solid var(--div)}
.fu-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}
.fu-dot.od{background:var(--red)}
.fu-dot.td{background:var(--green)}
.fu-body{flex:1;min-width:0}
.fu-name{font-weight:400;font-size:13px;color:var(--dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fu-detail{font-size:10px;color:var(--stone)}
.fu-date{font-size:10px;font-weight:500;flex-shrink:0}
.act{display:flex;gap:9px;padding:8px 0;border-bottom:1px solid var(--div)}
.act-dot{width:6px;height:6px;border-radius:50%;background:var(--gold);margin-top:4px;flex-shrink:0}
.act-txt{font-size:11.5px;color:var(--stone)}
.act-txt strong{font-weight:400;color:var(--dark)}
.act-time{font-size:10.5px;color:var(--stone);margin-top:1px}
.match-alert{background:rgba(176,141,87,.09);border-left:3px solid var(--gold);padding:10px 13px;margin-bottom:7px}
.ma-title{font-size:10px;font-weight:500;letter-spacing:.13em;text-transform:uppercase;color:var(--gold);margin-bottom:3px}
.ma-body{font-size:11px;color:var(--stone);line-height:1.6}
.filter-row{display:flex;gap:6px;margin-bottom:11px;flex-wrap:wrap}
.fsel{padding:6px 9px;font-family:var(--sans);font-size:10.5px;font-weight:400;letter-spacing:.06em;color:var(--dark);background:#fff;border:1px solid var(--div);outline:none;cursor:pointer;-webkit-appearance:none}
.fsel:focus{border-color:var(--gold)}
.finp{padding:6px 9px;font-family:var(--sans);font-size:11px;font-weight:300;color:var(--dark);background:#fff;border:1px solid var(--div);outline:none;flex:1;min-width:110px}
.finp:focus{border-color:var(--gold)}
.btn{display:inline-flex;align-items:center;gap:5px;padding:7px 13px;font-family:var(--sans);font-size:10px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;border:none;cursor:pointer;transition:background .15s;line-height:1;white-space:nowrap}

.btn-gold{background:var(--gold);color:var(--dark)}
.btn-gold:hover{background:#C9A96E}
.btn-dark{background:var(--dark);color:var(--light)}
.btn-dark:hover{background:#333}
.btn-out{background:transparent;color:var(--dark);border:1px solid var(--div)}
.btn-out:hover{border-color:var(--gold);color:var(--gold)}
.btn-red{background:var(--red);color:#fff}
.btn-sm{padding:7px 12px;font-size:10px}
.btn-xs{padding:6px 10px;font-size:10px}
.tbl-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
table.dt{width:100%;border-collapse:collapse;font-size:12px}
table.dt th{background:var(--dark);color:var(--gold);font-size:10px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;padding:8px 10px;text-align:left;white-space:nowrap}
table.dt td{padding:8px 10px;border-bottom:1px solid var(--div);color:var(--stone);vertical-align:middle}
table.dt tr:nth-child(even) td{background:#fafaf7}
table.dt tr:hover td{background:var(--warm);cursor:pointer}
table.dt td.addr{font-family:var(--serif);font-style:italic;font-size:13px;color:var(--dark)}
table.dt td.dk{color:var(--dark);font-weight:400}
table.dt td.gold{color:var(--gold);font-weight:400}
.comm-bar{background:var(--dark);padding:14px 16px;display:grid;grid-template-columns:repeat(4,1fr);gap:11px;margin-bottom:15px}
.cb-lbl{font-size:10px;font-weight:500;letter-spacing:.2em;text-transform:uppercase;color:var(--gold);margin-bottom:4px}
.cb-val{font-family:var(--serif);font-size:21px;font-weight:300;color:var(--light)}
.overlay{display:none;position:fixed;inset:0;z-index:400;background:rgba(32,32,32,.72);align-items:flex-end;justify-content:center;padding-top:env(safe-area-inset-top)}
@media(min-width:560px){.overlay{align-items:center}}
.overlay.open{display:flex}
.modal{background:var(--light);width:100%;max-width:560px;max-height:calc(92vh - env(safe-area-inset-top));overflow-y:auto;-webkit-overflow-scrolling:touch}
.modal-wide{max-width:660px}
.mhdr{background:var(--dark);padding:12px 16px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:1}
.mhdr-title{font-family:var(--serif);font-size:18px;font-weight:300;color:var(--light)}
.mhdr-x{background:none;border:none;color:var(--muted);font-size:18px;cursor:pointer;padding:4px 6px;line-height:1}
.mhdr-x:hover{color:var(--light)}
.mbody{padding:15px}
.acc-section{border-bottom:1px solid var(--div)}
.acc-hdr{display:flex;align-items:center;justify-content:space-between;padding:11px 0;cursor:pointer;user-select:none}
.acc-hdr-title{font-size:10px;font-weight:500;letter-spacing:.2em;text-transform:uppercase;color:var(--gold)}
.acc-arrow{font-size:10px;color:var(--stone);transition:transform .18s}
.acc-section.open .acc-arrow{transform:rotate(180deg)}
.acc-body{display:none;padding-bottom:13px}
.acc-section.open .acc-body{display:block}
.fg{margin-bottom:10px}
.fl{display:block;font-size:10px;font-weight:500;letter-spacing:.2em;text-transform:uppercase;color:var(--gold);margin-bottom:4px}
.fi,.fs,.fta{width:100%;padding:8px 10px;font-family:var(--sans);font-size:13px;font-weight:300;color:var(--dark);background:#fff;border:1px solid var(--div);outline:none;transition:border-color .15s;-webkit-appearance:none;border-radius:0}
.fi:focus,.fs:focus,.fta:focus{border-color:var(--gold)}
.fta{resize:vertical;min-height:60px}
.f2{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.f3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px}
.form-actions{display:flex;gap:7px;justify-content:flex-end;margin-top:14px;padding-top:12px;border-top:1px solid var(--div)}
.fa-left{margin-right:auto}
.fi-warn{border-color:var(--red)!important}
.dup-warn{font-size:10px;color:var(--red);margin-top:3px}
.chips{display:flex;flex-wrap:wrap;gap:5px;margin-top:4px}
.chip{padding:7px 12px;font-size:10px;font-weight:400;letter-spacing:.07em;border:1px solid var(--div);cursor:pointer;background:#fff;color:var(--stone);transition:all .12s;user-select:none}
.chip.on{background:var(--dark);color:var(--gold);border-color:var(--dark)}
body.locked .chip{opacity:.5;cursor:default;pointer-events:none}
.comm-disp{padding:8px 10px;background:var(--warm);border:1px solid var(--div);font-family:var(--serif);font-size:19px;color:var(--gold)}
.int-item{padding:8px 0;border-bottom:1px solid var(--div)}
.int-top{display:flex;justify-content:space-between;flex-wrap:wrap;gap:3px}
.int-type{font-size:10px;font-weight:500;letter-spacing:.13em;text-transform:uppercase;color:var(--gold)}
.int-dt{font-size:10.5px;color:var(--stone)}
.int-notes{font-size:11.5px;color:var(--stone);margin-top:2px;line-height:1.55}

/* FC-8a — SMS thread (contact view Messages tab) + unread indicator */
.sms-unread-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--red);margin-left:5px;vertical-align:middle}
.sms-thread{display:flex;flex-direction:column;gap:8px;max-height:360px;overflow-y:auto;padding:6px 2px;margin-bottom:12px}
.sms-bubble{max-width:78%;padding:8px 12px;border-radius:14px;font-size:12px;line-height:1.5}
.sms-bubble-ts{font-size:10px;color:var(--stone);margin-top:3px}
.sms-bubble.in{align-self:flex-start;background:var(--warm);color:var(--dark);border-bottom-left-radius:3px}
.sms-bubble.in .sms-bubble-ts{color:var(--stone)}
.sms-bubble.out{align-self:flex-end;background:var(--dark);color:#fff;border-bottom-right-radius:3px}
.sms-bubble.out .sms-bubble-ts{color:rgba(255,255,255,.6)}
.sms-thread-compose{display:flex;gap:8px;align-items:flex-end}
.sms-thread-compose textarea{flex:1}
.interest-item{display:flex;align-items:center;justify-content:space-between;padding:7px 0;border-bottom:1px solid var(--div);font-size:12px}
.interest-item .iname{font-weight:400;color:var(--dark)}
.interest-item .imeta{font-size:10px;color:var(--stone)}
.offer-item{background:#fff;border:1px solid var(--div);padding:10px 12px;margin-bottom:5px}
.offer-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:3px}
.offer-price{font-family:var(--serif);font-size:17px;font-weight:300;color:var(--dark)}
.offer-meta{font-size:10.5px;color:var(--stone)}
.setting-item{display:flex;align-items:center;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--div)}
.setting-val{font-size:12px;color:var(--dark);font-weight:400;display:flex;align-items:center;gap:7px}
.setting-inactive{opacity:.4;text-decoration:line-through}
.setting-actions{display:flex;gap:4px}
.inline-search{position:relative}
.inline-dropdown{position:absolute;top:100%;left:0;right:0;z-index:50;background:#fff;border:1px solid var(--gold);border-top:none;max-height:155px;overflow-y:auto;box-shadow:0 4px 12px rgba(0,0,0,.15)}
.inline-dd-item{padding:8px 10px;font-size:12px;cursor:pointer;border-bottom:1px solid var(--div)}
.inline-dd-item:hover{background:var(--warm)}
.sub-label{font-size:10px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--dark);margin:12px 0 6px;padding-top:12px;border-top:1px solid var(--div)}
.toast{position:fixed;bottom:82px;left:50%;transform:translateX(-50%);background:var(--dark);color:var(--light);padding:8px 16px;font-size:11.5px;z-index:600;border-left:3px solid var(--gold);opacity:0;transition:opacity .25s;pointer-events:none;white-space:nowrap}
.toast.show{opacity:1}
.toast.err{border-left-color:var(--red)}
.empty{text-align:center;padding:30px 14px}
.empty-ico{font-size:28px;opacity:.3;margin-bottom:8px}
.empty-txt{font-family:var(--serif);font-size:15px;font-style:italic;color:var(--stone)}
.loading{padding:26px;text-align:center;color:var(--stone);font-style:italic;font-size:12px}
@media(max-width:400px){.comm-bar{grid-template-columns:1fr 1fr}.f2,.f3{grid-template-columns:1fr}}

/* ══ PHASE 1 ADDITIONS ══ */
.b-notstarted{background:var(--neutral-bg);color:var(--neutral-fg)}
.b-amlpending{background:var(--warn-bg);color:var(--warn-fg)}
.b-verified{background:var(--success-bg);color:var(--success-fg)}

/* repeatable rows: vendors / relationships / documents / sessions */
.row-item{background:#fff;border:1px solid var(--div);padding:9px 11px;margin-bottom:6px}
.row-top{display:flex;align-items:flex-start;justify-content:space-between;gap:8px}
.row-main{flex:1;min-width:0}
.row-name{font-size:13px;font-weight:400;color:var(--dark)}
.btn-call{background:var(--green);color:#fff;border:none;padding:4px 9px;font-size:11px;cursor:pointer;font-family:var(--sans);font-weight:400;letter-spacing:.04em;border-radius:2px;transition:background .15s;flex-shrink:0}
.btn-call:hover{background:#145f30}
.btn-call:disabled{background:var(--muted);cursor:default}
.call-status-bar{position:fixed;bottom:0;left:0;right:0;z-index:500;background:var(--green);color:#fff;font-family:var(--sans);font-size:12px;font-weight:400;letter-spacing:.04em;padding:10px 18px;display:flex;align-items:center;justify-content:space-between;transform:translateY(100%);transition:transform .3s}
.call-status-bar.visible{transform:translateY(0)}
.call-status-bar.ringing{background:var(--gold)}
.call-status-bar.incoming{background:var(--gold)}
.call-status-bar.error{background:var(--red)}
.row-sub{font-size:10.5px;color:var(--stone);margin-top:1px}
.row-meta{font-size:10px;color:var(--stone);margin-top:2px}
.row-actions{display:flex;gap:5px;flex-shrink:0;align-items:center}
.row-primary{font-size:10px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:var(--gold);border:1px solid var(--gold);padding:5px 9px;cursor:pointer;background:none}
.row-primary.on{background:var(--gold);color:var(--dark)}
.add-block{background:var(--warm);border:1px solid var(--div);padding:11px 12px;margin-top:8px}
.add-block-toggle{font-size:10px;font-weight:500;letter-spacing:.12em;text-transform:uppercase;color:var(--gold);cursor:pointer;padding:6px 0;user-select:none}
.mini-w{width:64px;flex-shrink:0}
.ownship-inp{width:56px;padding:5px 6px;font-size:10.5px;border:1px solid var(--div);font-family:var(--sans)}

/* marketing channel cost rows */
.mc-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:6px 0;border-bottom:1px solid var(--div)}
.mc-row:last-child{border-bottom:none}
.mc-lbl{font-size:11.5px;color:var(--dark)}
.mc-cost{display:flex;align-items:center;gap:4px}
.mc-cost span{font-size:11px;color:var(--stone)}
.mc-cost input{width:78px;padding:5px 7px;font-size:11px;border:1px solid var(--div);font-family:var(--sans)}
.mc-total{display:flex;justify-content:space-between;padding:9px 0 0;margin-top:4px;border-top:1px solid var(--dark);font-size:12px;color:var(--dark)}
.mc-total strong{font-family:var(--serif);font-size:16px;font-weight:300;color:var(--gold)}

/* open homes */
.ofi-session{background:#fff;border:1px solid var(--div);border-left:2px solid var(--gold);padding:10px 12px;margin-bottom:8px}
.ofi-hdr{display:flex;align-items:center;justify-content:space-between;gap:8px}
.ofi-date{font-family:var(--serif);font-size:15px;font-style:italic;color:var(--dark)}
.ofi-time{font-size:10.5px;color:var(--stone);margin-top:1px}
.ofi-att{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:6px;padding:6px 0;border-top:1px solid var(--div);font-size:11.5px}
.ofi-att-name{color:var(--dark)}
.ofi-att-meta{font-size:10.5px;color:var(--stone);margin-top:1px}
.ofi-att-note{display:block;width:100%;min-height:30px;margin-top:5px;font-size:10.5px;font-family:var(--sans);font-weight:300;color:var(--dark);background:var(--warm);border:1px solid var(--div);padding:5px 7px;resize:vertical}
.ofi-att-note:focus{border-color:var(--gold);outline:none}
.ofi-flags{display:flex;gap:4px;flex-wrap:wrap;flex-shrink:0}
.ofi-flag{font-size:10px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;padding:5px 9px;background:var(--warm);color:var(--stone);border:1px solid var(--div);cursor:pointer;white-space:nowrap}
.ofi-flag.done{background:var(--dark);color:var(--gold);border-color:var(--dark)}

/* documents */
.doc-item{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 10px;border:1px solid var(--div);margin-bottom:5px;background:#fff}
.doc-cat{font-size:10px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:var(--gold);background:var(--warm);padding:2px 7px;display:inline-block;margin-bottom:2px}
.doc-name{font-size:12px;color:var(--dark)}
.doc-date{font-size:10px;color:var(--stone)}

/* settings: edit mode toggle */
.lock-box{background:var(--dark);padding:14px 16px;display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:18px}
.lock-txt{font-size:11.5px;color:var(--muted)}
.lock-txt strong{display:block;font-family:var(--serif);font-size:16px;font-weight:300;font-style:italic;color:var(--light);margin-bottom:2px}
.lock-sw{flex-shrink:0;width:46px;height:26px;background:rgba(255,255,255,.15);border:1px solid var(--gold);border-radius:14px;position:relative;cursor:pointer;transition:background .15s}
.lock-sw.on{background:var(--gold)}
.lock-sw-dot{position:absolute;top:2px;left:2px;width:20px;height:20px;border-radius:50%;background:var(--light);transition:left .15s}
.lock-sw.on .lock-sw-dot{left:22px}
body.locked .editctl{display:none!important}
.lock-banner{display:none;background:#9A7D0A;color:#fff;padding:8px 13px;font-size:11.5px;margin-bottom:11px;align-items:center;gap:7px}
body.locked .lock-banner{display:flex}

/* calendar */
.cal-day{margin-bottom:18px}
.cal-day-hdr{font-family:var(--serif);font-size:16px;font-style:italic;color:var(--dark);padding-bottom:6px;margin-bottom:7px;border-bottom:1px solid var(--div)}
.cal-day-hdr.is-today{color:var(--gold)}
.cal-evt{display:flex;align-items:center;gap:10px;padding:8px 10px;border-left:2px solid var(--gold);background:#fff;border:1px solid var(--div);border-left-width:2px;margin-bottom:5px;cursor:pointer}
.cal-evt-ico{font-size:14px;flex-shrink:0}
.cal-evt-name{font-size:12.5px;color:var(--dark);font-weight:400}
.cal-evt-meta{font-size:10px;color:var(--stone)}

/* google drive buttons */
.gdrive-btn{margin-top:5px}
body.no-gdrive .gdrive-btn{display:none!important}
.fld-with-drive{display:flex;gap:6px;align-items:flex-start}
.fld-with-drive .fi{flex:1}
.fld-with-drive .gdrive-btn{margin-top:0;flex-shrink:0;align-self:stretch;display:flex;align-items:center}

/* vendor pack */
.vp-actions{display:flex;gap:7px;flex-wrap:wrap;margin-top:10px}

/* Round 26 — A4 QR sign print (Brand Pack B) */
@media print{
  body.printing-qrsign > *{display:none!important}
  body.printing-qrsign #qrsign-print{display:block!important}
  @page{size:A4;margin:0}
}
#qrsign-print{display:none}
/* PL-1 (1 Aug 2026): #F1EEE3 below turned out to be correct all along — it
   is the real canonical warm-white value (BRAND.warm in core/brand.js and
   both _shared/brand.ts copies). BT-1's inventory had this backwards: the
   #F0EEE3 in the six /templates/*.html masters was the actual typo, now
   fixed there too — see docs/HISTORY.md's PL-1 entry. This CRM's own
   --warm CSS variable (#EDE8E0) is a separate, deliberately different,
   established value — unchanged. */
.qrsign-page{width:210mm;height:297mm;box-sizing:border-box;padding:30mm 20mm;background:#F1EEE3;color:var(--dark);display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;font-family:'Montserrat','Helvetica Neue',sans-serif;font-weight:300}
.qrsign-logo{width:110mm;height:auto;display:block;margin-bottom:34px}
.qrsign-addr{font-family:'Cormorant Garamond',Georgia,serif;font-weight:300;font-size:32px;margin-bottom:36px}
.qrsign-qr{background:#fff;padding:16px;margin-bottom:30px}
.qrsign-qr svg{width:80mm;height:80mm;display:block}
.qrsign-caption{font-size:15px;letter-spacing:.06em;color:var(--dark)}

/* ══ PHASE 3 ADDITIONS ══ */
/* voice dictation mic button */
.mic-btn{background:none;border:1px solid var(--div);color:var(--stone);font-size:13px;padding:8px 11px;min-width:34px;min-height:34px;cursor:pointer;flex-shrink:0;transition:all .15s;line-height:1}
.mic-btn:hover{border-color:var(--gold);color:var(--gold)}
.mic-btn.recording{border-color:var(--red);color:var(--red);animation:micpulse 1s infinite}
@keyframes micpulse{0%,100%{opacity:1}50%{opacity:.45}}
/* voice AI panel */
.voice-ai-fab{position:fixed;bottom:80px;right:18px;width:46px;height:46px;border-radius:50%;background:var(--dark);border:2px solid var(--gold);color:var(--gold);font-size:17px;cursor:pointer;display:none;align-items:center;justify-content:center;z-index:900;box-shadow:0 2px 14px rgba(0,0,0,.4);transition:all .2s;padding:0}
.voice-ai-fab:hover{background:var(--gold);color:var(--dark)}
.voice-ai-fab.listening{background:#c0392b;border-color:#c0392b;color:#fff;animation:micpulse 1s infinite}
.voice-ai-fab.processing{background:var(--gold);border-color:var(--gold);color:var(--dark);animation:micpulse .5s infinite}
.voice-ai-panel{position:fixed;bottom:134px;right:18px;width:272px;background:var(--dark);border:1px solid var(--div);padding:13px 14px;z-index:900;display:none;box-shadow:0 4px 20px rgba(0,0,0,.5)}
.voice-ai-panel.open{display:block}
.vai-status{font-size:10.5px;color:var(--stone);margin-top:5px;line-height:1.45}
.vai-transcript{font-size:11px;color:var(--stone);min-height:36px;line-height:1.5;margin-top:8px;padding:7px 8px;background:rgba(255,255,255,.04);border:1px solid var(--div);display:none}
.vai-fields{margin-top:8px;font-size:10.5px}
.vai-field-row{display:flex;justify-content:space-between;gap:6px;padding:3px 0;border-bottom:1px solid rgba(255,255,255,.06);color:var(--light);line-height:1.4}
.vai-fkey{color:var(--gold);font-weight:600;flex-shrink:0}
.vai-fval{color:var(--light);text-align:right;word-break:break-word}
@keyframes fieldhighlight{0%{background:rgba(176,141,87,.4)}100%{background:transparent}}
/* Authority to Sell / Section 32 */
.ats-badge{display:inline-block;padding:2px 7px;font-size:10px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;border-radius:2px;margin-left:6px}
.ats-active{background:var(--success-bg);color:var(--success-fg);border:1px solid var(--success-fg)}
.ats-expiring{background:var(--warn-bg);color:var(--warn-fg);border:1px solid var(--warn-fg)}
.ats-expired{background:var(--danger-bg);color:var(--red);border:1px solid var(--red)}
.ats-expiry-alert{background:var(--warn-bg);border:1px solid var(--warn-fg);padding:10px 13px;margin-bottom:10px;font-size:11.5px;color:var(--warn-fg);line-height:1.5}
.s32-status-pill{display:inline-block;padding:2px 8px;font-size:10px;font-weight:600;letter-spacing:.05em;border-radius:2px;text-transform:uppercase}
.s32-ready{background:var(--success-bg);color:var(--success-fg);border:1px solid var(--success-fg)}
.s32-pending{background:rgba(176,141,87,.12);color:var(--gold);border:1px solid rgba(176,141,87,.3)}
.s32-none{background:var(--warm);color:var(--stone);border:1px solid var(--div)}
/* OFI buyer feedback */
.ofi-feedback{display:flex;align-items:center;gap:6px;margin-top:5px;flex-wrap:wrap}
.fb-chip{padding:6px 10px;font-size:10px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;border-radius:2px;cursor:pointer;border:1px solid var(--div);color:var(--stone);background:none;transition:all .15s}
.fb-chip.hot.sel{background:var(--red);border-color:var(--red);color:#fff}
.fb-chip.warm.sel{background:var(--warn-fg);border-color:var(--warn-fg);color:#fff}
.fb-chip.cool.sel{background:var(--info-fg);border-color:var(--info-fg);color:#fff}
.fb-chip.fol.sel{background:var(--gold);border-color:var(--gold);color:var(--dark)}
.fb-price-inp{flex:1;min-width:100px;font-size:11px;padding:3px 6px;background:var(--dark);border:1px solid var(--div);color:var(--light);font-family:var(--sans)}
.fb-price-inp:focus{outline:none;border-color:var(--gold)}
/* Analytics tab */
.an-bar-wrap{margin-bottom:6px}
.an-bar-label{font-size:10.5px;color:var(--stone);margin-bottom:3px;display:flex;justify-content:space-between}
.an-bar-track{height:18px;background:rgba(255,255,255,.06);border-radius:2px;overflow:hidden}
.an-bar-fill{height:100%;background:var(--gold);border-radius:2px;transition:width .4s;min-width:2px}
.an-bar-fill.gold{background:var(--gold)}
.an-bar-fill.blue{background:#2980b9}
.an-bar-fill.green{background:#27ae60}
.an-bar-fill.red{background:#c0392b}
.an-kpi-sm{background:var(--warm);padding:12px 14px;border:1px solid var(--div)}
.an-kpi-sm .kpi-lbl{font-size:10.5px;color:var(--stone);letter-spacing:.1em;text-transform:uppercase;margin-bottom:4px}
.an-kpi-sm .kpi-val{font-family:var(--serif);font-size:22px;color:var(--gold)}
.an-kpi-sm .kpi-sub{font-size:10px;color:var(--stone);margin-top:2px}
.an-section{background:var(--warm);border:1px solid var(--div);padding:14px;margin-bottom:2px}
.an-ofi-row{display:flex;justify-content:space-between;padding:5px 0;border-bottom:1px solid var(--div);font-size:11.5px}
.an-ofi-row:last-child{border-bottom:none}
.an-heat{display:inline-block;padding:2px 7px;font-size:10px;font-weight:700;border-radius:2px;margin-left:4px}
.an-heat.hot{background:var(--danger-bg);color:var(--red)}
.an-heat.warm{background:var(--warn-bg);color:var(--warn-fg)}
.an-heat.cool{background:var(--info-bg);color:var(--info-fg)}
.field-flash{animation:fieldhighlight 1.8s ease-out}
.notes-wrap{display:flex;gap:6px;align-items:flex-start}
.notes-wrap .fta{flex:1}

/* SMS compose panel */
.sms-panel{background:var(--warm);border:1px solid var(--div);padding:10px 11px;margin-top:6px}
.sms-panel-hdr{font-size:10px;font-weight:500;letter-spacing:.15em;text-transform:uppercase;color:var(--gold);margin-bottom:6px}
.sms-char{font-size:10.5px;color:var(--stone);margin-top:3px;text-align:right}

/* offer chart */
.offer-chart-wrap{background:var(--warm);border:1px solid var(--div);padding:14px;margin:10px 0}
.offer-chart-title{font-size:10px;font-weight:500;letter-spacing:.2em;text-transform:uppercase;color:var(--gold);margin-bottom:11px}
.offer-bar-row{margin-bottom:8px}
.offer-bar-lbl{font-size:10.5px;color:var(--stone);margin-bottom:3px;display:flex;justify-content:space-between}
.offer-bar-track{background:#e8e3dc;height:18px;position:relative;overflow:visible}
.offer-bar-fill{height:100%;display:flex;align-items:center;padding:0 6px;font-size:10px;font-weight:500;white-space:nowrap;position:relative}
.offer-bar-gold{background:var(--gold);color:var(--dark)}
.offer-bar-dark{background:var(--dark);color:var(--gold)}
.offer-bar-dot{width:10px;height:10px;border-radius:50%;position:absolute;top:50%;transform:translateY(-50%)}


/* ══ SESSION D ADDITIONS ══ */
/* Anywhere Agent status badges */
.aa-badge{display:inline-block;font-size:10px;font-weight:500;letter-spacing:.08em;text-transform:uppercase;padding:3px 9px;margin-top:5px}
.aa-not-sent{background:var(--warm);color:var(--stone);border:1px solid var(--div)}
.aa-sent{background:var(--info-bg);color:var(--info-fg)}
.aa-viewed{background:var(--warn-bg);color:var(--warn-fg)}
.aa-signed{background:var(--success-bg);color:var(--success-fg)}
.aa-executed{background:var(--dark);color:var(--gold)}
.aa-info-pop{background:var(--dark);color:var(--gold-pale,#DFC99A);font-size:11px;line-height:1.7;padding:13px 15px;margin-top:9px;border-left:3px solid var(--gold);display:none}
.aa-info-pop.open{display:block}
/* AML form and invoice modal — doc preview wrapper */
.doc-preview-wrap{background:#fff;border:1px solid var(--div);padding:18px 20px;font-family:'Montserrat',sans-serif;font-size:12px;line-height:1.7;margin-bottom:12px;max-height:420px;overflow-y:auto}
.doc-preview-wrap h1{font-family:'Playfair Display',Georgia,serif;font-size:22px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--dark);margin-bottom:2px}
.doc-preview-wrap .doc-sub{font-size:10px;letter-spacing:.28em;text-transform:uppercase;color:var(--gold);margin-bottom:16px}
.doc-preview-wrap h2{font-family:'Cormorant Garamond',Georgia,serif;font-size:16px;font-weight:300;color:var(--dark);margin:14px 0 6px;border-bottom:1px solid var(--div);padding-bottom:4px}
.doc-preview-wrap .field-row{display:flex;gap:10px;margin-bottom:5px;align-items:baseline;flex-wrap:wrap}
.doc-preview-wrap .field-lbl{font-size:10px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);min-width:130px;flex-shrink:0}
.doc-preview-wrap .field-val{flex:1;color:var(--dark)}
.doc-preview-wrap .placeholder{color:#C0392B;font-style:italic}
.doc-preview-wrap .risk-low{color:#1A7840;font-weight:500}
.doc-preview-wrap .risk-med{color:#9A7D0A;font-weight:500}
.doc-preview-wrap .risk-high{color:#C0392B;font-weight:500}
.doc-preview-wrap .declaration{background:var(--light);border:1px solid var(--div);padding:10px 12px;margin:10px 0;font-size:11px;color:var(--stone)}
.doc-preview-wrap input[type=text],.doc-preview-wrap input[type=date],.doc-preview-wrap select,.doc-preview-wrap textarea{width:100%;padding:5px 8px;border:1px solid var(--div);font-family:'Montserrat',sans-serif;font-size:12px;font-weight:300;color:var(--dark);background:var(--light);outline:none;margin-top:2px}
.doc-preview-wrap input:focus,.doc-preview-wrap select:focus,.doc-preview-wrap textarea:focus{border-color:var(--gold)}
.doc-preview-wrap .cb-row{display:flex;align-items:flex-start;gap:9px;margin-bottom:5px;font-size:12px}
.doc-preview-wrap .cb-row input[type=checkbox]{width:auto;margin-top:2px;flex-shrink:0}
/* Invoice specific */
.inv-line{display:flex;justify-content:space-between;padding:7px 0;border-bottom:1px solid var(--div);font-size:12.5px}
.inv-total{display:flex;justify-content:space-between;padding:9px 0;font-family:'Cormorant Garamond',Georgia,serif;font-size:20px;font-weight:300;color:var(--gold)}

.pptx-ofi-row{display:flex;align-items:center;gap:6px;margin-bottom:6px}
.pptx-ofi-row label{font-size:10px;color:var(--stone);width:30px;flex-shrink:0}
.pptx-ofi-row input{flex:1}
.pptx-preview-note{font-size:10.5px;color:var(--stone);line-height:1.6;background:var(--warm);border:1px solid var(--div);padding:9px 11px;margin-bottom:11px}

/* ══ TRUST ACCOUNTING MODULE ══ */
.trust-disabled-banner{background:var(--dark);padding:20px 18px;margin-bottom:18px;display:flex;align-items:flex-start;gap:14px}
.trust-disabled-banner .tdb-ico{font-size:22px;flex-shrink:0;margin-top:2px}
.trust-disabled-banner .tdb-txt{font-size:11.5px;color:var(--muted);line-height:1.7}
.trust-disabled-banner .tdb-txt strong{display:block;font-family:var(--serif);font-size:15px;font-weight:300;font-style:italic;color:var(--light);margin-bottom:3px}
.trust-kpi-bar{display:grid;grid-template-columns:repeat(2,1fr);gap:7px;margin-bottom:14px}
@media(min-width:540px){.trust-kpi-bar{grid-template-columns:repeat(4,1fr)}}
.trust-acct-card{background:var(--dark);padding:14px 16px;margin-bottom:14px;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px}
.trust-acct-name{font-family:var(--serif);font-size:18px;font-weight:300;font-style:italic;color:var(--light)}
.trust-acct-meta{font-size:10px;color:var(--muted);line-height:1.7}
.trust-acct-bal{text-align:right}
.trust-acct-bal-lbl{font-size:10px;font-weight:500;letter-spacing:.18em;text-transform:uppercase;color:var(--gold)}
.trust-acct-bal-val{font-family:var(--serif);font-size:26px;font-weight:300;color:var(--light);line-height:1}
.trust-ledger{border-top:1px solid var(--div);margin-top:4px}
.trust-ledger-hdr{display:grid;grid-template-columns:90px 1fr 80px 90px 38px;gap:8px;align-items:center;font-size:10px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--gold);background:var(--dark);padding:8px 10px}
.trust-ledger-row{display:grid;grid-template-columns:90px 1fr 80px 90px 38px;gap:8px;align-items:center;padding:9px 10px;border-bottom:1px solid var(--div);font-size:11.5px;background:#fff}
.trust-ledger-row:nth-child(even){background:#fafaf7}
.trust-ledger-row:hover{background:var(--warm)}
@media(max-width:500px){.trust-ledger-hdr,.trust-ledger-row{grid-template-columns:70px 1fr 70px 70px 30px;font-size:10px}}
.tl-date{font-size:10px;color:var(--stone)}
.tl-desc{color:var(--dark);font-weight:400;font-size:12px}
.tl-desc-sub{font-size:10.5px;color:var(--stone);margin-top:1px}
.tl-amt-rcpt{font-family:var(--serif);font-size:14px;font-weight:300;color:var(--green);text-align:right}
.tl-amt-disb{font-family:var(--serif);font-size:14px;font-weight:300;color:var(--red);text-align:right}
.tl-amt-none{color:var(--stone);text-align:right;font-size:11px}
.tl-bal{font-family:var(--serif);font-size:13px;font-weight:300;color:var(--stone);text-align:right}
.recon-card{background:var(--warm);border:1px solid var(--div);border-left:3px solid var(--gold);padding:14px 16px;margin-bottom:8px}
.recon-hdr{display:flex;align-items:center;justify-content:space-between;margin-bottom:9px;flex-wrap:wrap;gap:6px}
.recon-month{font-family:var(--serif);font-size:15px;font-style:italic;color:var(--dark)}
.recon-status-match{font-size:10px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:var(--green);border:1px solid var(--green);padding:2px 8px}
.recon-status-diff{font-size:10px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:var(--red);border:1px solid var(--red);padding:2px 8px}
.recon-status-pending{font-size:10px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:var(--stone);border:1px solid var(--div);padding:2px 8px}
.recon-row{display:flex;justify-content:space-between;align-items:baseline;font-size:11.5px;padding:5px 0;border-bottom:1px solid var(--div)}
.recon-row:last-child{border-bottom:none}
.recon-lbl{color:var(--stone)}
.recon-val{font-family:var(--serif);font-size:14px;font-weight:300;color:var(--dark)}
.recon-variance-ok{color:var(--green);font-weight:500}
.recon-variance-bad{color:var(--red);font-weight:500}
/* Deposit tracker */
.dep-item{background:#fff;border:1px solid var(--div);border-left:3px solid var(--gold);padding:10px 12px;margin-bottom:6px}
.dep-top{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;flex-wrap:wrap}
.dep-amt{font-family:var(--serif);font-size:17px;font-weight:300;color:var(--dark)}
.dep-meta{font-size:10px;color:var(--stone);margin-top:2px;line-height:1.6}
.b-dep-pending{background:var(--warm);color:var(--stone);border:1px solid var(--div)}
.b-dep-received{background:var(--success-bg);color:var(--success-fg)}
.b-dep-released{background:var(--dark);color:var(--gold)}
.b-dep-forfeited{background:var(--danger-bg);color:var(--red)}
.b-dep-refunded{background:var(--info-bg);color:var(--info-fg)}
.trust-setup-note{background:rgba(176,141,87,.08);border-left:3px solid var(--gold);padding:11px 13px;font-size:11.5px;color:var(--stone);line-height:1.7;margin-bottom:14px}
/* FC-7: per-contract trust ledger */
.trust-contract-card{background:#fff;border:1px solid var(--div);border-left:3px solid var(--gold);padding:11px 14px;margin-bottom:6px;display:flex;align-items:center;justify-content:space-between;gap:10px;cursor:pointer;flex-wrap:wrap}
.trust-contract-card:hover{background:var(--warm)}
.trust-contract-card.active{border-left-color:var(--dark);background:var(--warm)}
.tcc-addr{font-size:12.5px;color:var(--dark);font-weight:400}
.tcc-vendor{font-size:10.5px;color:var(--stone);margin-top:2px}
.tcc-bal{font-family:var(--serif);font-size:17px;font-weight:300;color:var(--dark);text-align:right}
.b-tcc-open{background:var(--success-bg);color:var(--success-fg);border:1px solid var(--success-fg)}
.b-tcc-closed{background:var(--dark);color:var(--muted);border:1px solid var(--dark)}
.trust-contract-hdr{background:var(--dark);color:var(--light);padding:16px 18px}
.tcp-row{display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap;gap:8px;margin-bottom:6px}
.tcp-lbl{font-size:10px;font-weight:500;letter-spacing:.16em;text-transform:uppercase;color:var(--gold)}
.tcp-val{font-size:12.5px;color:var(--light)}
.tcp-val a{color:var(--light);text-decoration:underline;text-decoration-color:var(--gold)}
.tcp-bal-val{font-family:var(--serif);font-size:26px;font-weight:300;color:var(--light)}
.tcp-warn{background:rgba(192,57,43,.16);border-left:3px solid var(--red);padding:8px 12px;margin-top:8px;font-size:11px;color:#FADBD8}
.tcp-other{font-size:10.5px;color:var(--muted);margin-top:8px;line-height:1.8}
.tcp-other a{color:var(--gold)}
.trust-txn-hdr{display:grid;grid-template-columns:82px 74px 76px 1fr 90px 108px;gap:8px;align-items:center;font-size:10px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--gold);background:var(--dark);padding:8px 10px}
.trust-txn-row{display:grid;grid-template-columns:82px 74px 76px 1fr 90px 108px;gap:8px;align-items:center;padding:9px 10px;border-bottom:1px solid var(--div);font-size:11px;background:#fff}
.trust-txn-row:nth-child(even){background:#fafaf7}
.trust-txn-row.reversed{opacity:.55}
@media(max-width:640px){.trust-txn-hdr,.trust-txn-row{grid-template-columns:64px 60px 60px 1fr 70px 80px;font-size:10.5px}}
.ttn-no{font-family:var(--serif);font-size:11px;color:var(--stone)}
.ttn-type{font-size:10px}
.b-ttype-Receive{color:var(--green)}
.b-ttype-Spend{color:var(--red)}
.b-ttype-Transfer{color:var(--info-fg)}
.b-ttype-Adjustment{color:var(--gold)}
.b-ttype-Reversal{color:var(--stone);font-style:italic}
.ttn-desc-sub{font-size:10.5px;color:var(--stone);margin-top:1px}
.ttn-acts{display:flex;gap:4px;flex-wrap:wrap}
.modal-property{max-width:940px}
.ov-today-acts{background:var(--warm);border-radius:4px;padding:10px 14px;margin-bottom:14px}
.ota-hdr{font-size:10px;font-weight:600;letter-spacing:.15em;text-transform:uppercase;color:var(--gold);margin-bottom:8px}
.ota-item{display:flex;align-items:center;justify-content:space-between;padding:6px 0;border-bottom:1px solid var(--div)}
.ota-item:last-child{border-bottom:none}
.ota-name{font-size:12px;font-weight:500;color:var(--dark)}
.ota-detail{font-size:10.5px;color:var(--stone)}
.btn-ota{font-size:10px;padding:3px 8px;border-radius:20px;border:1px solid var(--gold);background:none;color:var(--gold);cursor:pointer;font-family:var(--sans);white-space:nowrap;margin-left:6px}
.btn-ota:active,.btn-ota:hover{background:var(--gold);color:var(--light)}

/* ══ ROUND 15 — TASKS ══ */
.task-row{display:flex;align-items:center;gap:9px;padding:9px 11px;border-bottom:1px solid var(--div);background:#fff;cursor:pointer;transition:background .1s;border-left:3px solid transparent}
.task-row:first-child{border-top:1px solid var(--div)}
.task-row:hover{background:var(--warm)}
.task-row.od{border-left-color:var(--red)}
.task-row.td{border-left-color:#e67e22}
.task-row.done{opacity:.5}
.task-row-body{flex:1;min-width:0}
.task-title{font-size:12.5px;font-weight:400;color:var(--dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.task-meta{font-size:10px;color:var(--stone);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.task-date{font-size:10px;font-weight:500;flex-shrink:0;text-align:right;min-width:54px}
.task-done-btn{background:none;border:1px solid var(--div);color:var(--stone);font-size:10px;padding:6px 10px;cursor:pointer;flex-shrink:0;white-space:nowrap;font-family:var(--sans);letter-spacing:.04em}
.task-done-btn:hover{border-color:var(--green);color:var(--green)}
.tab-badge{display:inline-block;background:var(--red);color:#fff;border-radius:8px;font-size:10px;font-weight:700;padding:1px 5px;margin-left:4px;line-height:1.4;vertical-align:middle;min-width:16px;text-align:center}
.notif-sw{width:38px;height:22px;background:rgba(0,0,0,.15);border:1px solid var(--div);border-radius:12px;position:relative;cursor:pointer;transition:background .15s;flex-shrink:0}
.notif-sw.on{background:var(--gold);border-color:var(--gold)}
.notif-sw-dot{position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;transition:left .15s}
.notif-sw.on .notif-sw-dot{left:18px}

/* ══ AI ADMIN AMBIENT AGENT ══ */
.ai-admin-fab{position:fixed;bottom:calc(84px + env(safe-area-inset-bottom));right:15px;width:56px;height:56px;border-radius:50%;background:var(--gold);color:#fff;border:none;font-size:22px;cursor:pointer;box-shadow:0 4px 20px rgba(176,141,87,.45);display:none;align-items:center;justify-content:center;z-index:310;transition:transform .18s,box-shadow .18s;-webkit-tap-highlight-color:transparent;touch-action:manipulation;padding:0;line-height:1}
.ai-admin-fab:active{transform:scale(.92)}
body.authed .ai-admin-fab{display:flex}
.ai-admin-sheet{position:fixed;left:0;right:0;bottom:0;z-index:510;background:var(--dark);max-height:60vh;transform:translateY(100%);transition:transform .28s cubic-bezier(.22,.68,0,1.2);border-top:1px solid rgba(176,141,87,.3);padding-bottom:env(safe-area-inset-bottom);display:flex;flex-direction:column}
.ai-admin-sheet.open{transform:translateY(0)}
.ai-admin-sheet-hdr{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid rgba(176,141,87,.2);flex-shrink:0}
.ai-admin-sheet-title{font-family:var(--serif);font-size:18px;font-weight:300;color:var(--gold);font-style:italic;letter-spacing:.04em}
.ai-admin-sheet-body{overflow-y:auto;-webkit-overflow-scrolling:touch;padding:14px 16px;flex:1}
.ai-admin-mic-wrap{display:flex;flex-direction:column;align-items:center;gap:8px;margin-bottom:14px}
.ai-admin-mic-btn{width:64px;height:64px;border-radius:50%;background:var(--gold);color:#fff;border:none;font-size:26px;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 3px 14px rgba(176,141,87,.4);transition:all .15s;-webkit-tap-highlight-color:transparent;touch-action:none;user-select:none}
.ai-admin-mic-btn.recording{background:#c0392b;box-shadow:0 3px 14px rgba(192,57,43,.5);animation:micpulse 1s infinite}
.ai-admin-mic-hint{font-size:10px;font-weight:500;letter-spacing:.15em;text-transform:uppercase;color:var(--muted)}
.ai-admin-transcript{min-height:32px;background:rgba(255,254,246,.06);border:1px solid rgba(176,141,87,.2);color:var(--light);font-size:12px;font-weight:300;padding:8px 11px;margin-bottom:10px;line-height:1.5;font-style:italic;display:none}
.ai-admin-transcript.has-text{display:block}
.ai-admin-text-row{display:flex;gap:7px;margin-bottom:10px}
.ai-admin-text-inp{flex:1;background:rgba(255,254,246,.06);border:1px solid rgba(176,141,87,.2);color:var(--light);font-family:var(--sans);font-size:13px;font-weight:300;padding:8px 11px;outline:none;transition:border-color .15s}
.ai-admin-text-inp:focus{border-color:var(--gold)}
.ai-admin-text-inp::placeholder{color:var(--muted)}
.ai-admin-send-btn{background:var(--gold);color:var(--dark);border:none;padding:0 14px;font-family:var(--sans);font-size:10px;font-weight:500;letter-spacing:.12em;text-transform:uppercase;cursor:pointer;flex-shrink:0}
.ai-admin-loading{display:none;align-items:center;gap:8px;font-size:11px;color:var(--muted);padding:6px 0;font-style:italic}
.ai-admin-loading.show{display:flex}
.ai-admin-loading-dot{width:6px;height:6px;border-radius:50%;background:var(--gold);animation:aidot .9s infinite}
.ai-admin-loading-dot:nth-child(2){animation-delay:.2s}
.ai-admin-loading-dot:nth-child(3){animation-delay:.4s}
@keyframes aidot{0%,80%,100%{opacity:.25}40%{opacity:1}}
.ai-action-card{background:rgba(255,254,246,.05);border:1px solid rgba(176,141,87,.25);padding:12px 14px;margin-bottom:10px;display:none}
.ai-action-card.show{display:block}
.ai-action-card-title{font-size:10px;font-weight:500;letter-spacing:.18em;text-transform:uppercase;color:var(--gold);margin-bottom:6px}
.ai-understood{font-size:12px;color:var(--light);font-style:italic;margin-bottom:9px;line-height:1.5}
.ai-action-list{list-style:none;margin-bottom:9px}
.ai-action-list li{font-size:11.5px;color:rgba(255,254,246,.8);padding:3px 0;display:flex;align-items:flex-start;gap:6px;line-height:1.4}
.ai-action-list li::before{content:'→';color:var(--gold);flex-shrink:0;margin-top:1px}
.ai-ambiguity-chips{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:9px}
.ai-amb-chip{background:rgba(154,125,10,.2);border:1px solid rgba(154,125,10,.5);color:#e6c94a;font-size:10px;font-weight:500;letter-spacing:.06em;padding:3px 8px}
.ai-action-btns{display:flex;gap:7px;justify-content:flex-end;margin-top:4px}
.ai-doit-btn{background:var(--gold);color:var(--dark);border:none;padding:7px 16px;font-family:var(--sans);font-size:10px;font-weight:500;letter-spacing:.13em;text-transform:uppercase;cursor:pointer;transition:background .15s}
.ai-doit-btn:hover{background:#C9A96E}
.ai-cancel-btn{background:transparent;color:rgba(255,254,246,.6);border:1px solid rgba(255,254,246,.2);padding:7px 14px;font-family:var(--sans);font-size:10px;font-weight:500;letter-spacing:.13em;text-transform:uppercase;cursor:pointer}
.ai-admin-backdrop{display:none;position:fixed;inset:0;z-index:509;background:rgba(0,0,0,.4)}
.ai-admin-backdrop.show{display:block}

/* ══ ROUND 17 ADDITIONS ══ */
/* OFI Follow-Up Alerts */
.ofi-fu-widget{background:rgba(155,110,20,.07);border:1px solid rgba(155,110,20,.3);border-left:3px solid var(--gold);padding:11px 13px;margin-bottom:14px}
.ofi-fu-title{font-size:10px;font-weight:500;letter-spacing:.2em;text-transform:uppercase;color:#9A7D0A;margin-bottom:8px;display:flex;align-items:center;justify-content:space-between}
.ofi-fu-row{display:flex;align-items:center;gap:10px;padding:7px 0;border-bottom:1px solid rgba(176,141,87,.2)}
.ofi-fu-row:last-child{border-bottom:none}
.ofi-fu-body{flex:1;min-width:0}
.ofi-fu-name{font-size:12.5px;font-weight:400;color:var(--dark)}
.ofi-fu-meta{font-size:10px;color:var(--stone);margin-top:1px}
.ofi-fu-actions{display:flex;gap:5px;flex-shrink:0}
/* Buyer criteria toggle */
.bc-toggle-row{display:flex;align-items:center;justify-content:space-between;padding:10px 0 9px;border-bottom:1px solid var(--div);margin-bottom:2px}
.bc-toggle-lbl{font-size:11.5px;font-weight:400;color:var(--dark)}
.bc-toggle-sub{font-size:10.5px;color:var(--stone);margin-top:1px}
/* Buyer type chips inside criteria */
.bc-type-chip{padding:4px 11px;font-size:10px;font-weight:400;letter-spacing:.07em;border:1px solid var(--div);cursor:pointer;background:#fff;color:var(--stone);transition:all .12s;user-select:none;white-space:nowrap}
.bc-type-chip.on{background:var(--dark);color:var(--gold);border-color:var(--dark)}
/* Property buyers tab merged list */
.prop-buyer-row{display:flex;align-items:center;gap:9px;padding:8px 10px;border-bottom:1px solid var(--div);background:#fff}
.prop-buyer-row:first-child{border-top:1px solid var(--div)}
.prop-buyer-body{flex:1;min-width:0}
.prop-buyer-name{font-size:12.5px;font-weight:400;color:var(--dark)}
.prop-buyer-meta{font-size:10px;color:var(--stone);margin-top:1px}
.prop-buyer-src{font-size:10px;font-weight:500;letter-spacing:.07em;text-transform:uppercase;padding:2px 6px;flex-shrink:0}
.prop-buyer-src.ofi{background:#EBF5FB;color:#1A5276}
.prop-buyer-src.match{background:rgba(176,141,87,.15);color:#9A7D0A}
.prop-buyer-src.offer{background:#EAFAF1;color:#1A7840}
.prop-buyer-heat{font-size:10px;font-weight:600;letter-spacing:.07em;text-transform:uppercase;padding:2px 7px;border-radius:2px;cursor:pointer;border:none;font-family:var(--sans)}
.prop-buyer-heat.hot{background:rgba(192,57,43,.15);color:#c0392b}
.prop-buyer-heat.warm{background:rgba(230,126,34,.12);color:#e67e22}
.prop-buyer-heat.cold{background:#EBF5FB;color:#1A5276}
.prop-buyer-heat.none{background:var(--warm);color:var(--stone)}
/* Buyer match confirmation modal */
.buyer-match-row{display:flex;align-items:center;gap:9px;padding:7px 0;border-bottom:1px solid var(--div);font-size:12px}
.buyer-match-row:last-child{border-bottom:none}
.buyer-match-name{flex:1;font-weight:400;color:var(--dark)}
.buyer-match-email{font-size:10.5px;color:var(--stone)}

/* ══ ROUND 18 ADDITIONS ══ */
/* AI Prospecting widget */
.prospect-hdr{display:flex;align-items:center;justify-content:space-between;cursor:pointer;user-select:none}
.prospect-refresh-btn{padding:3px 9px;font-size:10px}
.prospect-list{display:none}
.prospect-list.open{display:block}
.prospect-row{border:1px solid var(--div);margin-bottom:7px;background:#fff}
.prospect-row-top{display:flex;align-items:center;gap:9px;padding:9px 11px;cursor:pointer}
.prospect-rank{font-family:var(--serif);font-size:15px;font-style:italic;color:var(--gold);width:20px;flex-shrink:0;text-align:center}
.prospect-body{flex:1;min-width:0}
.prospect-name{font-size:12.5px;font-weight:400;color:var(--dark)}
.prospect-meta{font-size:10px;color:var(--stone);margin-top:1px}
.prospect-score{font-size:10px;font-weight:600;letter-spacing:.06em;background:var(--warm);color:#9A7D0A;padding:3px 8px;flex-shrink:0}
.prospect-arrow{font-size:10px;color:var(--stone);transition:transform .15s;flex-shrink:0}
.prospect-row.open .prospect-arrow{transform:rotate(180deg)}
.prospect-detail{display:none;padding:0 11px 11px}
.prospect-row.open .prospect-detail{display:block}
.prospect-reasons{font-size:10.5px;color:var(--stone);margin-bottom:7px}
.prospect-tip{font-size:11.5px;color:var(--dark);font-style:italic;background:var(--warm);padding:8px 10px;margin-bottom:8px;line-height:1.5}
.prospect-actions{display:flex;gap:6px;flex-wrap:wrap}
/* NL smart filter bar */
.nlf-row{display:flex;gap:7px;margin-bottom:8px}
.nlf-inp{flex:1;background:#fff;border:1px solid var(--div);color:var(--dark);font-family:var(--sans);font-size:12px;font-weight:300;padding:9px 12px;outline:none;transition:border-color .15s}
.nlf-inp:focus{border-color:var(--gold)}
.nlf-inp::placeholder{color:var(--stone)}
.nlf-go-btn{background:var(--gold);color:#fff;border:none;padding:0 16px;font-family:var(--sans);font-size:10px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;cursor:pointer;flex-shrink:0}
.nlf-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}
.nlf-chip{display:inline-flex;align-items:center;gap:6px;background:var(--dark);color:var(--gold);font-size:10.5px;font-weight:400;letter-spacing:.04em;padding:4px 6px 4px 10px}
.nlf-chip-x{cursor:pointer;opacity:.7;font-size:11px;line-height:1}
.nlf-chip-x:hover{opacity:1}
.nlf-clear{font-size:10px;color:var(--stone);text-decoration:underline;cursor:pointer;background:none;border:none;padding:4px 0;font-family:var(--sans)}
/* AI ad copy buttons */
.ai-copy-btn{background:var(--dark);color:var(--gold);border:none;padding:3px 9px;font-family:var(--sans);font-size:10px;font-weight:500;letter-spacing:.08em;text-transform:uppercase;cursor:pointer;flex-shrink:0}
.ai-copy-btn:disabled{opacity:.5;cursor:default}

/* ══════════════════════════════════════════════════════════════════════
   PROPERTY/CONTACT DETAIL REDESIGN — v2 shared component layer
   Brand Pack v4.0 tokens (Claude Design handoff, "CRM Screens deep audit").
   Scoped to #m-property / #m-contact this round via the modal-*-v2
   wrapper classes below — these v2-* classes are written to be reusable
   by other screens in a future round, but are NOT applied anywhere else
   yet. Reuses the app's existing --dark/--gold/--light/--div/--stone/
   --muted/--warm/--red/--green tokens (already Brand Pack v4.0 values)
   rather than redefining :root, so nothing outside these two modals is
   affected by this addition.
   ══════════════════════════════════════════════════════════════════════ */
.modal-property-v2{max-width:1180px}
.modal-contact-v2{max-width:840px}
.v2-body{padding:18px 20px 15px}
@media(max-width:680px){.v2-body{padding:14px}}

/* hero header */
.v2-hero{display:flex;justify-content:space-between;align-items:flex-end;flex-wrap:wrap;gap:16px;margin-bottom:18px}
.v2-hero-eyebrow{font-size:10px;font-weight:600;letter-spacing:.2em;text-transform:uppercase;color:var(--gold);margin-bottom:7px}
.v2-hero-title{font-family:var(--serif);font-weight:600;font-size:26px;line-height:1.15;margin-bottom:8px;color:var(--dark);word-break:break-word}
.v2-hero-meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:12px;color:var(--stone)}
.v2-hero-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
/* FB-1 task 2 — subtle debounced-autosave "Saved" indicator, next to the
   Save button in the Edit Property/Edit Contact hero actions row. */
.autosave-indicator{font-size:10.5px;color:var(--gold);align-self:center;opacity:0;transition:opacity .25s ease;pointer-events:none}
.autosave-indicator.show{opacity:1}

/* kpi strip */
.v2-kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--div);border:1px solid var(--dark);margin-bottom:18px}
.v2-kpi{background:var(--dark);padding:13px 15px;min-width:0}
.v2-kpi-lbl{font-size:10px;font-weight:600;letter-spacing:.15em;text-transform:uppercase;color:var(--gold);margin-bottom:6px}
.v2-kpi-val{font-family:var(--serif);font-size:19px;font-weight:600;color:var(--light);line-height:1.25;word-break:break-word}
@media(max-width:640px){.v2-kpis{grid-template-columns:1fr 1fr}}

/* score/match detail strip (kept always-visible, independent of tab —
   preserves #c-score-badge/#c-score-reason/#c-score-touch/#c-score-breakdown
   test coverage that predates this redesign) */
.v2-score-strip{border:1px solid var(--div);background:#fff;padding:13px 16px;margin-bottom:18px;cursor:pointer}
.v2-score-strip-hdr{display:flex;align-items:center;gap:10px;flex-wrap:wrap}

/* tab bar */
.v2-tabbar{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:18px}
.v2-tab-btn{font-family:var(--sans);font-size:10.5px;font-weight:500;letter-spacing:.07em;text-transform:uppercase;padding:8px 15px;border-radius:40px;cursor:pointer;white-space:nowrap;background:transparent;color:var(--stone);border:1px solid var(--div);transition:background .15s,color .15s,border-color .15s}
.v2-tab-btn:hover:not(.active){border-color:var(--gold);color:var(--gold)}
.v2-tab-btn.active{background:var(--dark);color:var(--light);border-color:var(--dark)}
.v2-tab-panel{display:none}
.v2-tab-panel.active{display:block}

/* layout: two-col card grid, optional sticky sidebar */
.v2-dash{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:20px;align-items:start}
@media(max-width:960px){.v2-dash{grid-template-columns:1fr}}
.v2-cols{display:grid;grid-template-columns:1fr 1fr;gap:18px;align-items:start;min-width:0}
@media(max-width:720px){.v2-cols{grid-template-columns:1fr}}
.v2-stack{display:flex;flex-direction:column;gap:18px;min-width:0}
.v2-sb{position:sticky;top:0}
@media(max-width:960px){.v2-sb{position:static}}

/* cards */
.v2-card{background:#fff;border:1px solid var(--div);padding:20px 22px}
@media(max-width:480px){.v2-card{padding:16px}}
.v2-card-eyebrow{font-size:10px;font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:var(--gold);margin-bottom:5px}
.v2-card-title{font-family:var(--serif);font-weight:600;font-size:17px;margin:0 0 14px;color:var(--dark)}
.v2-card .fi,.v2-card .fs,.v2-card .fta{background:var(--light)}

/* FC-4 — Automation Library card grid */
.auto-card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}
.auto-card{border:1px solid var(--div);border-radius:6px;padding:14px;display:flex;flex-direction:column;gap:10px;background:var(--light)}
.auto-card-hdr{display:flex;align-items:flex-start;justify-content:space-between;gap:8px}
.auto-card-title{font-size:12px;font-weight:600;color:var(--dark);line-height:1.35}
.auto-card-desc{font-size:10.5px;color:var(--stone);line-height:1.5}
.auto-card-gear{background:none;border:1px solid var(--div);border-radius:50%;width:24px;height:24px;flex-shrink:0;cursor:pointer;font-size:12px;line-height:1;color:var(--stone);transition:border-color .15s,color .15s}
.auto-card-gear:hover{border-color:var(--gold);color:var(--gold)}
.auto-card-row{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:10.5px;color:var(--dark)}
.auto-card-row.disabled{opacity:.45;pointer-events:none}
.auto-card-badge{font-size:10px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;padding:2px 7px;border-radius:20px}
.auto-card-badge.on{background:rgba(176,141,87,.15);color:var(--gold)}
.auto-card-badge.off{background:var(--div);color:var(--stone)}

/* pill buttons (Brand Pack v4.0 — gold accent never filled, dark filled for primary, radius 40px) */
.v2-pill{font-family:var(--sans);font-size:10.5px;font-weight:500;letter-spacing:.07em;text-transform:uppercase;padding:9px 16px;border-radius:40px;cursor:pointer;border:1px solid transparent;line-height:1.2;white-space:nowrap;background:transparent;transition:background .15s,color .15s,border-color .15s}
.v2-pill-dark{background:var(--dark);color:var(--light);border-color:var(--dark)}
.v2-pill-dark:hover{background:#333}
.v2-pill-gold{color:var(--gold);border-color:var(--gold);background:transparent}
.v2-pill-gold:hover{background:var(--dark);color:var(--light);border-color:var(--dark)}
.v2-pill-red{color:var(--red);border-color:var(--red);background:transparent}
.v2-pill-red:hover{background:var(--red);color:#fff}
.v2-pill-sm{padding:7px 12px;font-size:10px}
.v2-pill:disabled{opacity:.4;cursor:default;pointer-events:none}
.v2-qa-grid{display:grid;grid-template-columns:1fr 1fr;gap:7px}

/* pill-shaped status/match/dnc badges — pair with the existing .b-* colour
   classes from badgeProp()/badgeRole() (background/colour only, no
   padding/radius), so the same JS helpers work unchanged here */
.v2-badge{font-size:10px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;padding:4px 11px;border-radius:40px;white-space:nowrap;display:inline-block}
.b-past-client{background:#F5EEF8;color:#7D3C98}

/* sidebar: horizontal stage-arrow (chevron) bar — display-only, FC-2 */
.v2-chevron-bar{display:flex;overflow-x:auto;margin:2px 0 4px}
.v2-chevron{flex:1 0 auto;min-width:64px;position:relative;padding:7px 10px 7px 16px;margin-right:-9px;font-size:10.5px;font-weight:500;letter-spacing:.02em;text-align:center;white-space:nowrap;background:var(--div);color:var(--muted);clip-path:polygon(0 0,calc(100% - 9px) 0,100% 50%,calc(100% - 9px) 100%,0 100%,9px 50%)}
.v2-chevron:first-child{padding-left:11px;clip-path:polygon(0 0,calc(100% - 9px) 0,100% 50%,calc(100% - 9px) 100%,0 100%)}
.v2-chevron:last-child{margin-right:0;clip-path:polygon(0 0,100% 0,100% 100%,0 100%,9px 50%)}
.v2-chevron.done{background:var(--gold);color:var(--light);opacity:.55}
.v2-chevron.cur{background:var(--dark);color:var(--gold);font-weight:700;opacity:1;z-index:1}
.v2-keydate-row{display:flex;align-items:baseline;justify-content:space-between;gap:10px;padding:6px 0;border-bottom:1px solid var(--div);font-size:11px}
.v2-keydate-row:last-child{border-bottom:none}
.v2-keydate-val{font-family:var(--serif);font-size:13px;font-weight:600;color:var(--dark);white-space:nowrap}

/* legacy bridge banner (Property/Contact detail redesign, step 1 —
   remaining tabs keep their pre-redesign layout until the Overview
   pattern above is signed off) */
/* the vendor/relationship "row-item" pattern was designed for a wide
   two-column layout — inside the 300px v2-sb sidebar its edit controls
   (entity type select, share input, primary/remove buttons) need to stack
   instead of cramming into one row */
.v2-sb .row-top{flex-direction:column;align-items:stretch}
.v2-sb .row-actions{flex-wrap:wrap;margin-top:8px}
.v2-sb .row-actions select.fs{width:auto;flex:1 1 100px}
.v2-sb .ownship-inp{flex:0 0 56px}

/* ══ OVERVIEW TAB REDESIGN — this round's addition on top of the v2 layer
   above. #tab-overview isn't inside a modal, so it uses .v2-kpis/.v2-cols/
   .v2-card directly against .main's own padding rather than .v2-body. ══ */
.v2-card + .v2-card{margin-top:18px}
.v2-card-hdr-row{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:14px}
.v2-card-hdr-row .v2-card-title{margin-bottom:0}
.v2-attn-empty{color:var(--stone);font-size:12px;padding:6px 0}
.v2-subhead{font-size:10px;font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:var(--stone);margin:14px 0 7px}

/* Batch 1 (Overview + Calendar Redesign) — generic pill-radius utility,
   layered onto existing .btn/.btn-gold/.btn-out/.editctl classes rather
   than replacing them, so every existing Playwright selector targeting
   those classes (e.g. '#tab-calendar .btn-gold.editctl') keeps matching. */
.btn-pill{border-radius:40px}

/* Batch 1 — Overview's 3-column reflow: main area (Needs Attention/This
   Week + Tasks Due/Prospecting side-by-side sub-columns) plus a sticky
   sidebar for Recent Activity/Email Engagement. New class names, additive
   only — .v2-cols/.v2-stack/.v2-kpis keep their original definitions
   unchanged for the other callers (property/contact modals, approvals). */
.v2-layout{display:flex;flex-wrap:wrap;gap:20px;align-items:flex-start;min-width:0}
.v2-layout-main{flex:2.4 1 600px;min-width:0;display:flex;flex-wrap:wrap;gap:18px}
.v2-layout-main>.v2-stack{flex:1 1 300px}
.v2-layout-sidebar{flex:1 1 300px;min-width:260px;position:sticky;top:20px;display:flex;flex-direction:column;gap:18px}
@media(max-width:960px){.v2-layout-sidebar{position:static}}

/* ══ FC-3 — CALENDAR (Batch 1: pill nav/view/filter controls, KPI strip +
   sticky Upcoming sidebar reusing .v2-kpis/.v2-card/.v2-hero from above) ══ */
.cal-toolbar{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.cal-nav{display:flex;align-items:center;gap:6px}
.cal-nav-label{font-family:var(--serif);font-size:16px;font-style:italic;color:var(--dark);margin-left:4px;white-space:nowrap}
.cal-views{display:flex;gap:8px}
.cal-view-btn{background:transparent;border:1px solid var(--div);border-radius:40px;padding:7px 14px;font-family:var(--sans);font-size:10.5px;font-weight:500;letter-spacing:.06em;text-transform:uppercase;color:var(--stone);cursor:pointer}
.cal-view-btn.active{background:var(--dark);color:var(--light);border-color:var(--dark)}
.cal-filters{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}
.cal-chip{display:flex;align-items:center;gap:5px;padding:5px 11px;border-radius:40px;font-size:10px;color:var(--stone);background:#fff;border:1px solid var(--div);cursor:pointer;white-space:nowrap}
.cal-chip.active{border-color:var(--gold);color:var(--dark);background:var(--warm)}
.cal-layout{display:flex;flex-wrap:wrap;gap:20px;align-items:flex-start;min-width:0}
.cal-layout-main{flex:3 1 620px;min-width:0}
.cal-layout-sidebar{flex:1 1 280px;min-width:250px;position:sticky;top:20px}
@media(max-width:960px){.cal-layout-sidebar{position:static}}
.cal-upcoming-row{display:flex;align-items:flex-start;gap:9px;padding:9px 0;border-bottom:1px solid var(--div);cursor:pointer}
.cal-upcoming-row:last-child{border-bottom:none}
.cal-upcoming-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;margin-top:4px}
.cal-upcoming-title{font-size:12px;color:var(--dark);line-height:1.4}
.cal-upcoming-when{font-size:10px;color:var(--stone);margin-top:2px}
.cal-upcoming-empty{color:var(--stone);font-size:12px;padding:6px 0}
.cal-dot{width:7px;height:7px;border-radius:50%;display:inline-block;flex-shrink:0}
.cal-dot-event{background:var(--dark)}
.cal-dot-task{background:#2980b9}
.cal-dot-ofi{background:var(--gold)}
.cal-dot-contract{background:var(--green)}
.cal-dot-authority{background:var(--red)}
.cal-grid-month{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;background:var(--div);border:1px solid var(--div)}
.cal-dow{background:var(--dark);color:var(--gold);font-size:10px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;text-align:center;padding:6px 2px}
.cal-cell{background:#fff;min-height:78px;padding:4px 5px;cursor:default;display:flex;flex-direction:column;gap:2px}
.cal-cell.other-month{background:var(--warm);opacity:.55}
.cal-cell-daynum{font-size:11px;color:var(--stone);text-align:right}
.cal-cell.is-today .cal-cell-daynum{color:var(--dark);background:var(--gold);border-radius:50%;width:18px;height:18px;display:flex;align-items:center;justify-content:center;margin-left:auto;font-weight:600}
.cal-pill{display:flex;align-items:center;gap:4px;font-size:10px;color:var(--dark);background:var(--warm);border-left:2px solid var(--gold);padding:1.5px 4px;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cal-pill-more{font-size:10px;color:var(--gold);cursor:pointer;padding:1.5px 4px}
.cal-week-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:1px;background:var(--div);border:1px solid var(--div)}
.cal-week-cell{background:#fff;min-height:220px;padding:5px 6px;display:flex;flex-direction:column;gap:3px}
.cal-day-agenda{background:#fff;border:1px solid var(--div)}
.cal-day-hour{display:flex;border-top:1px solid var(--div);min-height:34px}
.cal-day-hour:first-child{border-top:none}
.cal-day-hour-lbl{width:56px;flex-shrink:0;font-size:10.5px;color:var(--stone);padding:4px 6px;border-right:1px solid var(--div)}
.cal-day-hour-body{flex:1;padding:3px 6px;display:flex;flex-direction:column;gap:3px}
.cal-warn-badge{font-size:10px;font-weight:600;letter-spacing:.04em;color:#fff;background:var(--red);padding:1px 5px;border-radius:2px;margin-left:5px}
.ofi-session-note{display:block;width:100%;min-height:26px;margin-top:4px;font-size:10.5px;font-family:var(--sans);font-weight:300;color:var(--dark);background:var(--warm);border:1px solid var(--div);padding:5px 7px;resize:vertical}
.ofi-session-note:focus{border-color:var(--gold);outline:none}
.ofi-att-name-link{cursor:pointer;text-decoration:underline;text-decoration-color:var(--div)}
.ofi-att-name-link:hover{color:var(--gold)}
.task-tmpl-row{display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--div)}
.task-tmpl-row:last-child{border-bottom:none}
.task-tmpl-name{flex:1;min-width:0;font-size:12px;color:var(--dark)}
.task-tmpl-name.inactive{color:var(--muted);text-decoration:line-through}
.task-tmpl-offset{width:70px;flex-shrink:0}
.task-tmpl-offset input{width:100%;padding:5px 7px;font-size:11px;border:1px solid var(--div);text-align:center}
.v2-subhead:first-child{margin-top:0}

/* ══ UI/UX Redesign Batch 2 — Settings + Trust + Approvals ══ */
.v2-lockgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:10px;margin-bottom:24px}
.v2-lockgrid .lock-box{margin-bottom:0}
.v2-card-flush{background:#fff;border:1px solid var(--div);margin-bottom:20px}
.v2-card-flush .filter-row,.v2-card-flush .form-actions-row{padding:0 22px}
.v2-approvals-layout{display:flex;flex-wrap:wrap;gap:20px;align-items:flex-start;min-width:0}
.v2-approvals-col-a{flex:1.5 1 380px;min-width:300px;display:flex;flex-direction:column;gap:18px}
.v2-approvals-col-b{flex:1.5 1 320px;min-width:280px;display:flex;flex-direction:column;gap:18px}
.v2-approvals-col-c{flex:1 1 280px;min-width:250px;display:flex;flex-direction:column;gap:18px}
@media(max-width:960px){.v2-approvals-col-a,.v2-approvals-col-b,.v2-approvals-col-c{flex-basis:100%}}
#ap-filter-status.fsel{border-radius:40px;padding:7px 14px}

/* ══════════════════════════════════════════════════════════════════════
   ROUND U2 — Property/Contact drill-in pages (design-handoff mockups
   3A/3B). #m-property / #m-contact convert from centered .overlay modals
   to full-page .detail-page panels. The existing .v2-hero/.v2-kpis/
   .v2-tabbar/.v2-tab-panel/.v2-card layer above (and every id inside it)
   is kept completely unchanged — many Playwright specs depend on it —
   this block is purely additive: the outer page wrapper, a breadcrumb,
   scoped hero-typography overrides, and a new "quicklook" summary
   section that sits above the pre-existing tab content so Offers/
   Campaign Activity/Vendor/Key Dates/Documents are visible without a
   tab click. Overrides are id-scoped (#m-property/#m-contact) so other
   .v2-hero/.v2-kpis callers (Trust, Approvals, Overview) are untouched.
   ══════════════════════════════════════════════════════════════════════ */
/* position:fixed + a full opaque background (not the shared .overlay's
   backdrop-over-a-centered-card pattern) rather than sitting in .main's
   normal document flow: several existing call sites (vendor-reports.js's
   generateVendorCampaignReport — closes #m-vpack, switchTab('approvals'),
   but deliberately leaves #m-property open behind it, per
   tests/fc9-lifecycle-stub-sim.spec.js's own Stage 6) switch to a
   different tab while #m-property/#m-contact is still .open. A `:has()`
   rule that force-hides sibling .tab-panels whenever either is open was
   tried first and broke that flow outright (display:none is not
   "visually behind", it's gone — Approvals' own content became
   unreachable). Fixed positioning re-creates the old .overlay's "visually
   covers whatever tab is behind it" behaviour (kept, not broken) while
   still reading as a full page, not a centered card — z-index 350 sits
   above .nav/.tabs (200/199) and the FAB (300) but below real modals
   opened from within it (.overlay's 400, e.g. Vendor Pack) and the toast/
   voice-AI FAB (600/900), so those keep stacking correctly on top. */
.detail-page{display:none;position:fixed;inset:0;z-index:350;background:var(--light);overflow-y:auto;padding:22px 26px 40px}
.detail-page.open{display:block}
@media(max-width:680px){.detail-page{padding:16px 14px 30px}}
/* the shared .mhdr bar (dark strip + ✕) is kept — tests click .mhdr-x to
   close #m-contact — but un-stickied here since it no longer sits inside
   a scrollable modal body, just above the new breadcrumb, so it doesn't
   fight its own fixed-position container for the top of the scroll area */
.detail-page .mhdr{position:static;margin:-22px -26px 18px;padding:14px 26px}
@media(max-width:680px){.detail-page .mhdr{margin:-16px -14px 18px;padding:12px 14px}}

.dp-breadcrumb{font-size:11.5px;color:var(--label-dim);margin-bottom:14px}
.dp-breadcrumb a{color:var(--gold);cursor:pointer;text-decoration:none}
.dp-breadcrumb a:hover{text-decoration:underline}

#m-property .v2-hero-title,#m-contact .v2-hero-title{font-weight:300;font-style:italic;font-size:30px}
#m-contact .v2-hero-title{font-size:26px}
#m-property .v2-hero-eyebrow,#m-contact .v2-hero-eyebrow{display:none}
#m-property .v2-hero-meta,#m-contact .v2-hero-meta{font-size:12.5px;color:var(--stone)}

#m-property .v2-kpis{grid-template-columns:repeat(5,1fr)}
@media(max-width:640px){#m-property .v2-kpis{grid-template-columns:1fr 1fr}}
#m-property .v2-kpi-lbl{letter-spacing:.18em}
#m-property .v2-kpi-val{font-weight:300;font-size:23px}

.dp-quicklook{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:22px;align-items:start;margin-bottom:26px}
@media(max-width:960px){.dp-quicklook{grid-template-columns:1fr}}
.dp-section{margin-bottom:22px}
.dp-section:last-child{margin-bottom:0}
.dp-section-title{font-size:10.5px;font-weight:600;letter-spacing:.2em;text-transform:uppercase;color:var(--gold);border-bottom:1px solid var(--div);padding-bottom:6px;margin-bottom:10px}
.dp-rail{display:flex;flex-direction:column;gap:16px}
.dp-row{background:#fff;border:1px solid var(--div);padding:11px 14px;transition:border-color .15s}
.dp-row+.dp-row{margin-top:5px}
.dp-row.clickable{cursor:pointer}
.dp-row.clickable:hover{border-color:var(--gold)}

.dp-offer-row{display:grid;grid-template-columns:1fr auto auto auto;gap:12px;align-items:center}
.dp-offer-name{font-size:13.5px;font-weight:500;color:var(--dark)}
.dp-offer-sub{font-size:11.5px;color:var(--stone);margin-top:2px}
.dp-offer-amt{font-size:14px;font-weight:500;color:var(--dark);text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}

.dp-activity-top{display:flex;justify-content:space-between;gap:10px}
.dp-activity-title{font-size:12.5px;font-weight:500;color:var(--dark)}
.dp-activity-date{font-size:11px;color:var(--label-dim);white-space:nowrap;flex-shrink:0}
.dp-activity-body{font-size:11.5px;color:var(--stone);margin-top:3px;line-height:1.5}

.dp-avatar{width:34px;height:34px;border-radius:50%;background:var(--warm);color:var(--stone);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;flex-shrink:0}
.dp-vendor-row{display:flex;align-items:center;gap:11px}
.dp-vendor-row .dp-vendor-name{font-size:13px;font-weight:500;color:var(--dark)}
.dp-vendor-row .dp-vendor-phone{font-size:11.5px;color:var(--stone)}

.dp-doc-row{display:flex;align-items:center;gap:8px;padding:8px 0;border-bottom:1px solid var(--row-div);font-size:12px;color:var(--dark);text-decoration:none}
.dp-doc-row:last-child{border-bottom:none}
.dp-doc-row:hover{color:var(--gold)}

.dp-cavatar{width:48px;height:48px;border-radius:50%;background:var(--gold);color:var(--dark);display:flex;align-items:center;justify-content:center;font-size:16px;font-weight:600;flex-shrink:0}

.dp-btn-sm{font-family:var(--sans);font-size:11px;font-weight:500;padding:6px 10px;cursor:pointer;border:1px solid var(--outline-border);background:none;color:var(--body-strong);white-space:nowrap;transition:border-color .15s,color .15s}
.dp-btn-sm:hover{border-color:var(--gold);color:var(--gold)}

.dp-empty{font-size:11px;color:var(--stone)}

/* ══════════════════════════════════════════════════════════════════════
   ROUND U3 — Desktop sidebar shell (1A) + mobile bottom nav (2A) + WVR
   generator stepper (1B). Sidebar/bottom nav are alternative chrome for the
   same switchTab(tab) system as the pre-existing .nav/.tabs strip (see
   nav.js's switchTab). The 720-1079px band keeps the original .nav/.tabs
   strip completely unchanged — the design handoff's own documented interim
   allowance, and also where this repo's Playwright suite's default viewport
   now sits (see playwright.config.js), so none of ~40 pre-existing spec
   files that click `.tab-btn[data-tab=...]` are affected by any of this.
   ══════════════════════════════════════════════════════════════════════ */
.sidebar{display:none;flex-direction:column;background:var(--dark)}
.bottom-nav{display:none;background:var(--dark);border-top:1px solid rgba(176,141,87,.3);position:fixed;left:0;right:0;bottom:0;z-index:200}

.sidebar-brand{padding:20px;border-bottom:1px solid rgba(176,141,87,.25)}
.sidebar-brand-wm{font-family:var(--wm);font-weight:700;font-size:15px;letter-spacing:.14em;text-transform:uppercase;color:var(--light)}
.sidebar-brand-sub,.sidebar-brand-sub2{font-size:10px;letter-spacing:.22em;text-transform:uppercase;color:var(--gold);margin-top:2px}
.sidebar-nav{flex:1;overflow-y:auto;padding:8px 0}
.sidebar-group-lbl{font-size:10px;font-weight:600;letter-spacing:.22em;text-transform:uppercase;color:var(--gold);padding:14px 12px 5px}
.sidebar-item{display:flex;align-items:center;gap:10px;width:100%;padding:9px 12px;font-family:var(--sans);font-size:13px;font-weight:400;color:#EDE8E0;background:none;border:none;border-left:2px solid transparent;cursor:pointer;text-align:left;transition:color .15s,background .15s,border-color .15s}
.sidebar-item i{width:15px;height:15px;flex-shrink:0}
.sidebar-item:hover:not(.active){color:var(--gold)}
.sidebar-item.active{background:var(--sidebar-active-bg);border-left-color:var(--gold);color:var(--gold);font-weight:500}
.sidebar-badge{margin-left:auto;background:var(--gold);color:var(--dark);font-size:10px;font-weight:600;border-radius:9px;padding:1px 7px;line-height:1.5}
.sidebar-footer{display:flex;align-items:center;gap:9px;padding:14px 16px;border-top:1px solid rgba(176,141,87,.25)}
.sidebar-user-chip{width:30px;height:30px;border-radius:50%;background:var(--gold);color:var(--dark);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;flex-shrink:0}
.sidebar-user-body{min-width:0}
.sidebar-user-name{font-size:12px;font-weight:500;color:var(--light);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sidebar-user-role{font-size:10.5px;color:var(--muted)}

/* Desktop (>=1080px) list-row layout replacing .card for the Properties tab */
.prop-lrow-hdr{display:grid;grid-template-columns:1.5fr 120px 140px 90px 120px 22px;column-gap:14px;font-size:10.5px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--label-dim);padding:0 16px 8px}
.prop-lrow{display:grid;grid-template-columns:1.5fr 120px 140px 90px 120px 22px;column-gap:14px;align-items:center;background:#fff;border:1px solid var(--div);padding:13px 16px;margin-bottom:5px;cursor:pointer;transition:border-color .15s}
.prop-lrow:hover{border-color:var(--gold)}
.prop-lrow-addr-main{font-family:var(--serif);font-style:italic;font-size:17px;color:var(--dark)}
.prop-lrow-addr-sub{font-size:12px;color:var(--stone);margin-top:2px}
.prop-lrow-vendor{font-size:13px;color:var(--body-strong)}
.prop-lrow-num{text-align:right;font-variant-numeric:tabular-nums;font-size:14px;font-weight:500;color:var(--dark)}
.prop-lrow-chev{color:var(--label-dim);display:flex;align-items:center;justify-content:center}
.prop-lrow-chev i{width:15px;height:15px}

@media(min-width:1080px){
  body.authed{display:grid;grid-template-columns:222px 1fr;min-height:100vh}
  body.authed .nav,body.authed .tabs{display:none}
  body.authed .sidebar{display:flex}
  body.authed .main{margin:0;max-width:none;padding:26px 30px 34px}
  .btn-pill{border-radius:0}
}

/* Mobile (<720px) bottom nav + More sheet, replacing .nav/.tabs' .tabs half */
.bn-item{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;flex:1;min-height:48px;background:none;border:none;cursor:pointer;color:#9C9590;font-family:var(--sans)}
.bn-item i{width:22px;height:22px}
.bn-item span{font-size:10px;letter-spacing:.08em;text-transform:uppercase}
.bn-item.active{color:var(--gold)}
.more-sheet-scrim{display:none;position:fixed;inset:0;z-index:401;background:rgba(32,32,32,.55);align-items:flex-end}
.more-sheet-scrim.open{display:flex}
.more-sheet{width:100%;background:var(--light);max-height:80vh;overflow-y:auto;padding-bottom:env(safe-area-inset-bottom)}
.more-sheet-hdr{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;border-bottom:1px solid var(--div)}
.more-sheet-title{font-family:var(--serif);font-size:18px;font-weight:300;color:var(--dark)}
.more-sheet-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:14px 16px}
.more-tile{display:flex;align-items:center;gap:8px;padding:11px 12px;background:#fff;border:1px solid var(--div);cursor:pointer;font-family:var(--sans);font-size:12.5px;color:var(--dark);transition:border-color .15s}
.more-tile:hover{border-color:var(--gold)}
.more-tile i{width:15px;height:15px;color:var(--gold);flex-shrink:0}

@media(max-width:719px){
  body.authed .tabs{display:none}
  body.authed .bottom-nav{display:flex}
  .bottom-nav{padding:10px 4px calc(6px + env(safe-area-inset-bottom))}
  .main{margin-top:calc(50px + env(safe-area-inset-top));padding-bottom:calc(150px + env(safe-area-inset-bottom))}
  .fab-wrap{bottom:calc(76px + env(safe-area-inset-bottom))}
  .ai-admin-fab{bottom:calc(140px + env(safe-area-inset-bottom))}
  .voice-ai-fab{bottom:calc(136px + env(safe-area-inset-bottom))}
  .voice-ai-panel{bottom:calc(190px + env(safe-area-inset-bottom))}
  .toast{bottom:calc(138px + env(safe-area-inset-bottom))}
  /* NOT a bare `.call-status-bar{bottom:...}` override: this bar hides
     itself via `bottom:0` + `transform:translateY(100%)` (reliably pushes
     a fixed-bottom element off-screen regardless of its own height, no
     `pointer-events:none` since it's interactive when shown). Raising the
     `bottom` anchor for BOTH states would raise the hidden position too —
     translateY(100%) from a raised anchor can land back inside the
     viewport instead of below it, so the "hidden" bar would still
     intercept clicks meant for the bottom nav underneath it. Scoping the
     raised position to `.visible` only leaves the hidden state's `bottom:0`
     (and therefore its off-screen math) completely untouched. */
  .call-status-bar.visible{bottom:calc(56px + env(safe-area-inset-bottom))}
}

/* WVR generator stepper (1B) — m-wvr-gen only */
.wvr-stepper{max-width:620px;display:flex;flex-direction:column;max-height:92vh;overflow:hidden}
.wvr-rail{display:grid;grid-template-columns:repeat(5,1fr);padding:16px 18px 0;flex-shrink:0}
.wvr-rail-col{display:flex;flex-direction:column;align-items:center;gap:6px;cursor:pointer;padding-bottom:10px}
.wvr-rail-disc{width:22px;height:22px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:600;background:var(--warm);color:var(--label-dim)}
.wvr-rail-col.done .wvr-rail-disc{background:var(--gold);color:var(--dark);font-size:0}
.wvr-rail-col.done .wvr-rail-disc::after{content:'✓';font-size:11px}
.wvr-rail-col.current .wvr-rail-disc{background:var(--dark);color:var(--gold);outline:2px solid var(--gold);outline-offset:2px}
.wvr-rail-lbl{font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--label-dim)}
.wvr-rail-col.current .wvr-rail-lbl{font-weight:600;color:var(--dark)}
.wvr-step-body{overflow-y:auto;flex:1;padding:18px 18px 8px}
.wvr-empty-hint{font-size:11px;font-style:italic;color:var(--muted);margin-top:3px}
/* Round 3B — Director's-read character counter (advisory) + bullet hint */
.wvr-read-count{font-size:11px;color:var(--muted);margin-top:3px}
.wvr-read-count-amber{color:#9A5B00;font-weight:500}
.wvr-read-hint{font-size:11px;color:var(--muted);margin:-4px 0 12px}
.wvr-footer{display:flex;align-items:center;justify-content:space-between;border-top:1px solid var(--div);padding:13px 18px;flex-shrink:0;gap:10px}
.wvr-footer-right{display:flex;align-items:center;gap:10px}
.wvr-footer-status{font-size:11px;color:var(--label-dim);white-space:nowrap}

/* ══════════════════════════════════════════════════════════════════════
   ROUND P1 — UI POLISH (overnight UI review, 15 Aug 2026)

   STANDING CRM-WIDE CARD-GRID PRINCIPLE (also recorded in CLAUDE.md):
   any collection of cards or panel items renders as a responsive
   auto-fill grid — repeat(auto-fill, minmax(<per-surface min>, 1fr)) — so
   the column count adapts to the viewport (2x2 / 3x3 / 4x3) instead of
   running as a single-column linear scroll. Below 720px every such grid
   collapses to one column, leaving mobile behaviour exactly as it was.
   .auto-card-grid (Automations, the approved horizontal-card style this
   generalises) keeps its own original definition above, unchanged.

   COMPANION RULE: a card keeps a fixed max width and scrolls its own
   overflow content internally — a panel must never drag the page wider,
   and there must be no page-level horizontal scroll anywhere.
   ══════════════════════════════════════════════════════════════════════ */
.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--card-min,260px),1fr));gap:12px;align-items:stretch;min-width:0}
/* Companion rule, enforced structurally: every grid child may shrink below
   its own min-content width (min-width:0 — without it a grid track is
   minmax(auto,1fr) and one long unbreakable string widens the whole page)
   and scrolls anything that still overflows inside itself. */
.card-grid>*{min-width:0;max-width:100%;overflow-x:auto}
/* .card carries margin-bottom:6px for the stacked layout; inside a grid the
   gap already provides that spacing. */
.card-grid>.card{margin-bottom:0}
@media(max-width:719px){.card-grid{grid-template-columns:1fr}}

/* Group header inside a card-grid surface — spans the full grid width so
   logical grouping survives the multi-column reflow. */
.card-grid-group{grid-column:1/-1;display:flex;align-items:center;gap:8px;font-size:10.5px;font-weight:600;letter-spacing:.18em;text-transform:uppercase;color:var(--gold);border-bottom:1px solid var(--div);padding-bottom:6px;margin:6px 0 0}
.card-grid-group:first-child{margin-top:0}

/* ── PHASE 2 — live count badges on panel/group headers ──
   Same visual pattern as the Approvals sidebar pill (.sidebar-badge). Set
   by setHdrCount()/hdrCountHtml() in core/utils.js from the count of what
   was just rendered, so it always tracks the currently rendered/filtered
   content and updates on every re-render. */
.hdr-count{display:inline-flex;align-items:center;justify-content:center;min-width:20px;background:var(--gold);color:var(--dark);font-family:var(--sans);font-size:10px;font-weight:600;border-radius:9px;padding:1px 7px;line-height:1.5;vertical-align:middle;margin-left:8px;flex-shrink:0}
.hdr-count.zero{background:var(--div);color:var(--stone)}
.dp-section-title .hdr-count,.card-grid-group .hdr-count,.act-group-hdr .hdr-count{margin-left:auto}

/* ── PHASE 3a — dashboard's three lower panels (This Week, Today's
   Prospecting List, Email Engagement) get one fixed height with internal
   scroll instead of each stretching to its own content. Desktop/tablet
   only — below 720px they keep their natural height, mobile unchanged. */
@media(min-width:720px){
  .ov-panel-fixed{display:flex;flex-direction:column;height:var(--ov-panel-h,430px)}
  .ov-panel-body{flex:1;min-height:0;overflow-y:auto}
}

/* ── PHASE 3b — dismiss/acknowledge control on Needs Your Attention items.
   Dismissals persist through attnDismiss()/isAttnDismissed() in
   core/utils.js (localStorage), generalising the pre-existing
   dismissOFIAlert() pattern in buyer-mode.js. */
.attn-item{position:relative}
.attn-dismiss{position:absolute;top:6px;right:6px;width:22px;height:22px;line-height:1;display:flex;align-items:center;justify-content:center;background:none;border:1px solid var(--div);border-radius:50%;color:var(--stone);font-size:12px;cursor:pointer;transition:border-color .15s,color .15s;padding:0}
.attn-dismiss:hover{border-color:var(--gold);color:var(--gold)}
.ofi-fu-row .attn-dismiss{position:static;flex-shrink:0}

/* ── PHASE 3c — Recent Activity grouped by date (Today / Yesterday /
   This week / Earlier), each group header carrying its own count badge. */
.act-group-hdr{display:flex;align-items:center;font-size:10px;font-weight:600;letter-spacing:.18em;text-transform:uppercase;color:var(--label-dim);border-bottom:1px solid var(--div);padding-bottom:5px;margin:14px 0 8px}
.act-group-hdr:first-child{margin-top:0}

/* ── PHASE 4 — extra desktop columns on the Properties and Contacts lists.
   Every added column is drawn from data the existing list loader already
   fetches (properties/contacts are both select('*')) — no new queries.
   Progressive disclosure: the widest columns drop out first as the viewport
   narrows, and the list-row layout is only used at >=1080px at all
   (isDesktopShellWidth()), so mobile keeps the .card layout untouched. */
.prop-lrow-hdr,.prop-lrow{grid-template-columns:1.5fr 120px 110px 140px 90px 120px 22px}
.prop-lrow-hdr>*,.prop-lrow>*{min-width:0}
.prop-lrow-txt{font-size:13px;color:var(--body-strong);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media(max-width:1279px){
  .prop-lrow-hdr,.prop-lrow{grid-template-columns:1.5fr 120px 140px 90px 120px 22px}
  .prop-lrow-hdr>.pl-col-type,.prop-lrow>.pl-col-type{display:none}
}
.cont-lrow-hdr{display:grid;grid-template-columns:1.6fr 150px 130px 1.1fr 110px 110px 22px;column-gap:14px;font-size:10.5px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--label-dim);padding:0 16px 8px}
.cont-lrow{display:grid;grid-template-columns:1.6fr 150px 130px 1.1fr 110px 110px 22px;column-gap:14px;align-items:center;background:#fff;border:1px solid var(--div);padding:13px 16px;margin-bottom:5px;cursor:pointer;transition:border-color .15s}
.cont-lrow:hover{border-color:var(--gold)}
.cont-lrow-hdr>*,.cont-lrow>*{min-width:0}
.cont-lrow-name{font-family:var(--serif);font-style:italic;font-size:17px;color:var(--dark)}
.cont-lrow-sub{font-size:12px;color:var(--stone);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cont-lrow-txt{font-size:13px;color:var(--body-strong);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cont-lrow-chev{color:var(--label-dim);display:flex;align-items:center;justify-content:center}
.cont-lrow-chev i{width:15px;height:15px}
@media(max-width:1279px){
  .cont-lrow-hdr,.cont-lrow{grid-template-columns:1.6fr 150px 130px 110px 22px}
  .cont-lrow-hdr>.ct-col-email,.cont-lrow>.ct-col-email,
  .cont-lrow-hdr>.ct-col-status,.cont-lrow>.ct-col-status{display:none}
}

/* ── PHASE 5 — Calendar: the Upcoming sidebar was being painted over by the
   month/week grid. Root cause was not the sidebar at all: repeat(7,1fr) is
   repeat(7,minmax(auto,1fr)), so each track's min-content width came from
   its cells' own content — and .cal-pill is white-space:nowrap, so one long
   event title inflated the whole grid past .cal-layout-main's width. The
   grid then overflowed its flex item and painted across the sticky sidebar
   beside it, while also pushing a page-level horizontal scrollbar.
   minmax(0,1fr) + min-width:0 on the cells lets the tracks actually shrink,
   so the pills ellipsis inside their own cell instead. */
.cal-grid-month,.cal-week-grid{grid-template-columns:repeat(7,minmax(0,1fr))}
.cal-cell,.cal-week-cell{min-width:0}
.cal-cell>*,.cal-week-cell>*{min-width:0;max-width:100%}
.cal-day-hour-body{min-width:0}
.cal-day-hour-body>*{min-width:0;max-width:100%}
.cal-pill{min-width:0}
#cal-grid{min-width:0;max-width:100%}
.cal-layout-sidebar{min-width:0}
.cal-upcoming-row>div{min-width:0}
.cal-upcoming-title,.cal-upcoming-when{overflow-wrap:anywhere}

/* ── PHASE 6 — contact detail page: the quicklook's Timeline column sat
   alone in a full-width track next to a three-section rail, so it left a
   tall band of empty space whenever the rail was the taller column. The
   Timeline now stretches to the rail's height and scrolls internally, and
   the Vendor Record / Notes cards drop their oversized internal padding
   runs so the Overview tab's left column reads evenly against the right. */
/* The imbalance runs BOTH ways and only one direction is fixable: with a
   full 15-interaction timeline the left column ran to ~900px against a
   ~500px rail, leaving a tall void beside the rail; with an empty one the
   void is on the left instead. Capping the rail at a height close to the
   Details/Properties/Next-Step rail beside it and scrolling inside removes
   the first (the common case in real use) without stretching an empty
   Timeline into a taller empty box, which would not have removed anything.
   Columns stay top-aligned, as they were. */
@media(min-width:961px){
  .dp-timeline-col #ct-timeline-rail{max-height:340px;overflow-y:auto;padding-right:6px}
}
.dp-quicklook{margin-bottom:20px}
#m-contact #c-ownership-section,#m-contact .v2-card.ct-compact{padding:15px 18px}
#m-contact .v2-card.ct-compact .v2-card-title{margin-bottom:9px}
#m-contact #c-notes{min-height:132px}

/* Round P1 (phase 3b) — room for the absolutely-positioned dismiss control
   on the two block-style attention items. */
.match-alert.attn-item,.ats-expiry-alert.attn-item{padding-right:34px}

/* Round P1 (phase 1) — Settings card pages. A run of .setting-item rows
   inside a .card-grid becomes a grid of self-contained cards instead of a
   single-column list of underlined rows: the shared bottom border becomes
   the card outline, and each row gets real padding. Applied to the AI
   Assistant, Autopilot and Voice Calling pages, matching the horizontal-card
   style already approved for Automations (.auto-card-grid). */
/* Stacked, not the default side-by-side row: at a ~250px card width a
   flex-shrink:0 control (every select/toggle here) squeezes the flex:1
   label column to a few pixels and the label text wraps one character per
   line — the exact failure class docs/LESSONS.md records from FC-4. Cards
   that WANT the label and control on one line (Autopilot) already carry
   their own inline flex row inside the item, which this leaves alone. */
.card-grid>.setting-item{border:1px solid var(--div);background:var(--light);padding:12px 14px;flex-direction:column;align-items:flex-start;gap:9px;margin:0}
.card-grid>.setting-item>*{max-width:100%}
.card-grid>.setting-item>div:first-child{width:100%}
.card-grid>.setting-item select.fs,.card-grid>.setting-item input.fi{width:100%!important;max-width:100%}
.card-grid>.fg{border:1px solid var(--div);background:var(--light);padding:12px 14px;margin:0}

/* Round P1 (phase 1) — the Approvals queue keeps its pre-existing per-feature
   .sh group headers; inside a .card-grid they must span every column. */
.card-grid>.sh{grid-column:1/-1;display:flex;align-items:center}

.card-grid>.row-item{margin-bottom:0}

/* Task 1 (Round 1D-A) — Drive "Reconnect Google Drive" bar (integrations.js driveShowReconnect) */
.gd-reconnect{position:fixed;left:50%;bottom:20px;transform:translateX(-50%);z-index:10000;display:flex;align-items:center;gap:10px;flex-wrap:wrap;max-width:calc(100vw - 32px);padding:10px 14px;background:var(--dark);color:#fff;font-size:12px;box-shadow:0 4px 20px rgba(0,0,0,.35)}

/* Round REA-A — "REA listing details" section (#rea-details) of the property form. Tokens only (no hard-coded brand colours); single column
   below 720px; 44px touch targets; min-width:0 so a long label can never widen the page. The stage-based redesign relocates #rea-details intact. */
#rea-details{min-width:0}
#rea-details .rea-group{margin-top:12px;min-width:0}
#rea-details .rea-group-title{font-size:10px;font-weight:500;letter-spacing:.12em;text-transform:uppercase;color:var(--stone);margin-bottom:6px}
#rea-details .rea-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:2px 12px;min-width:0}
#rea-details .rea-check{display:flex;align-items:center;gap:10px;min-height:44px;padding:0 4px;cursor:pointer;min-width:0;font-size:13px}
#rea-details .rea-check input{width:20px;height:20px;flex:0 0 auto;accent-color:var(--gold)}
#rea-details .rea-check span{overflow-wrap:anywhere;min-width:0}
#rea-details .rea-counts{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:10px;margin-top:12px;min-width:0}
#rea-details .fi,#rea-details .fs{min-height:44px;max-width:100%;min-width:0}
#rea-details .rea-count{float:right;font-weight:400;letter-spacing:0;text-transform:none;color:var(--muted)}
#rea-details .rea-over{color:var(--red)}
#rea-details-msg{margin-top:8px;font-size:11px;color:var(--red);line-height:1.5;overflow-wrap:anywhere}
@media(max-width:719px){#rea-details .rea-grid,#rea-details .rea-counts{grid-template-columns:1fr}}

/* ══ Round RD-1 — property screen redesign, part 1 (layout only) ══════════
   Stage bar + stage view + At a glance + Property file + search for #m-property.
   Existing .v2-card / .fg / .f2 / .f3 rows are MOVED into .rd-group cards, not
   restyled. Brand colours come only from the :root tokens above. Mobile
   (<720px) is the primary target: one column, 44px touch targets, no
   page-level horizontal scroll (min-width:0 on every grid/flex child). */
#m-property{min-width:0}
#m-property .rd-hero{align-items:flex-start}
#m-property .rd-hero>*{min-width:0}
.rd-hero-actions{align-items:center}
.rd-icon-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-width:44px;min-height:44px;padding:0 12px;border:1px solid var(--dark);border-radius:40px;background:transparent;color:var(--dark);cursor:pointer;font-family:var(--sans);font-size:10.5px;font-weight:500;letter-spacing:.07em;text-transform:uppercase}
.rd-icon-btn[aria-expanded="true"]{background:var(--dark);color:var(--light)}
.rd-icon-lbl{display:none}
@media(min-width:720px){.rd-icon-lbl{display:inline}}
#m-property .v2-hero-actions .v2-pill{min-height:44px;display:inline-flex;align-items:center}

/* stage bar — one row, scrolls sideways inside itself */
.rd-strip{display:flex;align-items:center;gap:8px;margin:0 0 16px;padding:0 4px;background:var(--warm);border-top:1px solid var(--div);border-bottom:1px solid var(--div);min-width:0;max-width:100%}
.rd-stagebar{display:flex;flex:1 1 auto;flex-wrap:nowrap;gap:6px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;padding:10px 0;margin:0;min-width:0;max-width:100%;scrollbar-width:thin}
/* PROP-1 — the stage actions live in the strip, outside the scrolling nav (so they stay visible on a phone and the overflow menu is not clipped). */
.rd-strip-act{flex:0 0 auto;display:flex;align-items:center;gap:6px;position:relative;padding:6px 0}
.rd-strip-act[hidden]{display:none}
.rd-move-btn{min-height:44px;padding:0 16px;border-radius:40px;border:none;background:var(--dark);color:var(--light);font-family:var(--sans);font-size:12px;font-weight:600;letter-spacing:.04em;white-space:nowrap;cursor:pointer}
.rd-move-final,.rd-move-hint{font-size:12px;color:var(--stone);max-width:220px;line-height:1.3}
.rd-more-btn{flex:0 0 auto;min-width:44px;min-height:44px;padding:0 10px;border-radius:40px;border:1px solid var(--outline-border);background:transparent;color:var(--dark);font-family:var(--sans);font-size:16px;line-height:1;cursor:pointer}
.rd-more-menu{position:absolute;right:0;top:100%;z-index:40;min-width:180px;background:var(--light);border:1px solid var(--div);box-shadow:0 6px 18px rgba(0,0,0,.12);padding:4px}
.rd-more-menu[hidden]{display:none}
.rd-more-item{display:block;width:100%;min-height:44px;padding:0 14px;border:none;background:transparent;text-align:left;color:var(--dark);font-family:var(--sans);font-size:13px;cursor:pointer}
.rd-more-item:hover{background:var(--warm)}
@media(max-width:719px){.rd-move-final,.rd-move-hint{max-width:120px;font-size:11px}.rd-move-btn{padding:0 12px;font-size:11px}}
.rd-chip{flex:0 0 auto;display:inline-flex;align-items:center;gap:5px;min-height:44px;padding:0 14px;border-radius:40px;border:1px solid var(--outline-border);background:transparent;color:var(--stone);font-family:var(--sans);font-size:11px;font-weight:600;letter-spacing:.04em;white-space:nowrap;cursor:pointer}
.rd-chip.is-done{background:var(--light);color:var(--dark);border-color:var(--dark)}
.rd-chip.is-done::before{content:"\2713";font-size:11px}
.rd-chip.is-cur{background:var(--dark);color:var(--light);border-color:var(--dark)}
.rd-chip.is-view{box-shadow:0 0 0 2px var(--gold)}
.rd-chip-side{border-style:dashed}
.rd-chip-side.is-cur{background:var(--stone);border-color:var(--stone);border-style:solid}

/* search panel */
.rd-panel{margin:0 0 18px;min-width:0}
.rd-panel[hidden],.rd-stage[hidden],#rd-stage-view[hidden],.rd-glance[hidden],.rd-viewing[hidden],.rd-glance-body[hidden]{display:none}
.rd-find-box{display:flex;align-items:center;gap:10px;min-height:48px;padding:0 14px;border:1px solid var(--outline-border);border-radius:40px;background:var(--light);color:var(--stone)}
.rd-find-box input{flex:1;min-width:0;border:none;outline:none;background:transparent;font:inherit;font-size:14px;color:var(--dark)}
.rd-find-status{font-size:12px;color:var(--stone);margin:10px 2px}
.rd-find-results{display:grid;grid-template-columns:1fr;gap:8px}
.rd-find-hit{display:block;text-align:left;min-height:48px;padding:8px 14px;border:1px solid var(--div);background:var(--light);color:var(--dark);cursor:pointer;font-family:var(--sans);font-size:13px;min-width:0;overflow-wrap:anywhere}
.rd-hit-label{font-weight:600}
.rd-hit-where{color:var(--stone);font-size:12px}
@media(min-width:720px){.rd-find-results{grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}}

/* At a glance */
.rd-glance{background:var(--light);border:1px solid var(--div);margin:0 0 16px;min-width:0}
.rd-glance-toggle{display:flex;align-items:center;justify-content:space-between;width:100%;min-height:44px;padding:0 14px;border:none;background:transparent;cursor:pointer;color:var(--stone);font-family:var(--sans);font-size:12px}
.rd-glance-title{font-size:10.5px;font-weight:600;letter-spacing:.2em;text-transform:uppercase;color:var(--gold)}
.rd-glance-body{padding:0 14px 14px;display:flex;flex-direction:column;gap:12px;min-width:0}
.rd-kpis{margin-bottom:0;grid-template-columns:repeat(5,minmax(0,1fr))}
#m-property .rd-kpis{grid-template-columns:repeat(6,minmax(0,1fr))}
#m-property .rd-kpis .v2-kpi-val{font-size:18px}
@media(max-width:640px){#m-property .rd-kpis{grid-template-columns:repeat(3,minmax(0,1fr))}#m-property .rd-kpis .v2-kpi{padding:9px 10px}#m-property .rd-kpis .v2-kpi-lbl{font-size:9px;letter-spacing:.08em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#m-property .rd-kpis .v2-kpi-val{font-size:16px}}
.rd-vendor{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 12px;background:var(--warm);min-width:0}
.rd-vendor-main{flex:1 1 180px;min-width:0}
.rd-vendor-lbl{font-size:10px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--stone);display:flex;align-items:center;gap:8px}
.rd-vendor-name{font-size:14px;font-weight:600;color:var(--dark);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rd-vendor-contact,.rd-vendor-empty{font-size:12px;color:var(--stone);overflow-wrap:anywhere}
.rd-vendor-more{min-height:28px;min-width:28px;padding:0 8px;border:1px solid var(--dark);border-radius:40px;background:transparent;color:var(--dark);font-size:11px;font-weight:600;cursor:pointer}
.rd-vendor-acts{display:flex;gap:6px;flex-wrap:wrap}
.rd-vendor-act{display:inline-flex;align-items:center;justify-content:center;min-height:44px;min-width:44px;padding:0 14px;border-radius:40px;border:1px solid var(--dark);background:transparent;color:var(--dark);font-family:var(--sans);font-size:11px;font-weight:600;letter-spacing:.04em;text-decoration:none;cursor:pointer}
.rd-act-call{background:var(--dark);color:var(--light)}
.rd-glance-row{display:flex;gap:10px;font-size:13px;min-width:0}
.rd-glance-lbl{flex:0 0 76px;font-size:10px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--stone)}
.rd-glance-block>.rd-glance-lbl{display:block;margin-bottom:6px}
.rd-glance-val{flex:1;min-width:0}
.rd-glance-stats .setting-item{padding:6px 0}
/* PROP-1 — At a glance: the left column (key dates … all vendors) with the Property details card to its right on desktop; stacked on a phone. */
.rd-glance-cols{display:flex;flex-direction:column;gap:12px;min-width:0}
.rd-glance-left{display:flex;flex-direction:column;gap:12px;min-width:0}
.rd-details{min-width:0;max-width:100%;padding:14px;background:var(--warm);border:1px solid var(--div)}
.rd-details .fg{margin-bottom:10px}
.rd-details .f2,.rd-details .f3{min-width:0;align-items:end}
.rd-details .fi,.rd-details .fs{max-width:100%;min-width:0}
.rd-details .rd-group-title{margin-bottom:10px}
.rd-hint{font-size:11px;line-height:1.4;color:var(--stone);margin-top:4px}
.rd-pd-feat[hidden],.rd-details.is-land .rd-pd-feat{display:none}
@media(min-width:900px){.rd-glance-cols{display:grid;grid-template-columns:minmax(0,1fr) minmax(320px,420px);gap:16px;align-items:start}}
/* PROP-4: the glance IS the Overview view (first chip). It is shown fully open on that view only and hidden on every other (rdRender). The PROP-3 collapsed
   layout and its .is-collapsed / .is-side rules are gone; #rd-glance-toggle is a hidden, inert hook. Quick actions sit beside the vendor / next step. */
.rd-glance-toggle[hidden]{display:none}
.rd-ov-top{display:flex;flex-direction:column;gap:12px;min-width:0}
.rd-ov-vn{display:flex;flex-direction:column;gap:12px;min-width:0}
.rd-ov-quick{min-width:0}
@media(min-width:900px){.rd-ov-top{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,2fr);align-items:start;gap:16px}}
.rd-slot{display:contents}
.rd-glance-cols>.rd-slot{display:block}
@media(max-width:719px){.rd-details .fi,.rd-details .fs{min-height:44px}.rd-details .f2{grid-template-columns:1fr}}
/* Key dates: the date sits beside its label, not pushed to the far edge of a wide row. */
.rd-glance-val .v2-keydate-row{justify-content:flex-start;gap:14px}
.rd-glance-val .v2-keydate-row>div:first-child{flex:0 0 auto;min-width:120px}
.rd-quick,.rd-links{display:flex;flex-wrap:wrap;gap:6px}
.rd-quick-btn{min-height:44px;padding:0 14px;border-radius:40px;border:none;background:var(--dark);color:var(--light);font-family:var(--sans);font-size:11px;font-weight:600;letter-spacing:.04em;cursor:pointer}
.rd-link{display:inline-flex;align-items:center;min-height:44px;padding:0 14px;border-radius:40px;border:1px solid var(--stone);background:transparent;color:var(--dark);font-family:var(--sans);font-size:11px;font-weight:600;text-decoration:none;cursor:pointer}
.rd-more>summary{min-height:44px;display:flex;align-items:center;cursor:pointer;font-size:10.5px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--gold)}

/* viewing-another-stage note, earlier-stage lines */
.rd-viewing{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 14px;padding:10px 12px;background:var(--warn-bg);border:1px solid var(--div);color:var(--warn-fg);font-size:13px}
.rd-viewing>span{flex:1 1 200px;min-width:0}
.rd-past{display:flex;flex-direction:column;gap:6px;margin:0 0 14px}
.rd-past:empty{display:none}
.rd-past-line{display:flex;align-items:center;gap:10px;min-height:44px;padding:0 14px;border:1px solid var(--div);background:var(--warm);color:var(--dark);text-align:left;cursor:pointer;font-family:var(--sans);font-size:13px;min-width:0}
.rd-past-name{flex:1;font-weight:600}
.rd-past-chev{color:var(--stone)}

/* stage header + jump links (WRAP, never scroll) */
.rd-stage-hd{margin:0 0 14px;min-width:0}
.rd-kicker{font-size:10px;font-weight:600;letter-spacing:.28em;text-transform:uppercase;color:var(--gold)}
.rd-stage-name{font-family:var(--serif);font-weight:600;font-size:28px;line-height:1.15;color:var(--dark);margin:4px 0}
.rd-stage-status{font-size:12px;color:var(--stone)}
.rd-jumps{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px;min-width:0}
.rd-jumps[hidden]{display:none}
.rd-jump{flex:0 1 auto;min-height:44px;display:inline-flex;align-items:center;padding:0 14px;border-radius:40px;border:none;background:var(--warm);color:var(--dark);font-family:var(--sans);font-size:11px;font-weight:600;cursor:pointer;text-align:left;max-width:100%}

/* groups */
.rd-groups{display:grid;grid-template-columns:minmax(0,1fr);gap:14px;min-width:0}
.rd-group{scroll-margin-top:12px;min-width:0;max-width:100%;overflow-x:auto}
/* PROP-4: the PROP-3 masonry is retired in favour of numbered rows (.rd-row, below). .rd-masonry is an inert class name now: it has no rules. */
/* PROP-3: the REA feature checklist is a native <details>, closed by default; n selected is kept live by rea-listing.js. */
.rea-feat-det{margin:0 0 4px}
.rea-feat-det>summary{line-height:44px;cursor:pointer;font-size:10.5px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--gold)}
.rd-group.v2-card+.rd-group.v2-card{margin-top:0}
.rd-group-title{font-size:10.5px;font-weight:600;letter-spacing:.2em;text-transform:uppercase;color:var(--gold);margin:0 0 12px}
.rd-group .v2-card{border:none;padding:0;background:transparent}
.rd-group .v2-card+.v2-card{margin-top:16px}
.rd-group>.rd-solo-hide,.rd-group.rd-solo>.v2-card>.v2-card-eyebrow,.rd-group.rd-solo>.v2-card>.v2-card-title{display:none}
.rd-group .v2-card.rd-inner{padding:0}
.rd-group-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.rd-group-actions .btn,.rd-group-actions .v2-pill{min-height:44px;display:inline-flex;align-items:center}
.rd-note{font-size:12px;line-height:1.5;color:var(--stone)}
/* Round RD-3 — listing admin cards (thank-you email, signboard tasks, contract dates on the calendar) */
.rd-adm-state{margin-top:10px;font-size:13px;font-weight:500;color:var(--dark)}
.rd-adm-cal{list-style:none;margin:10px 0 0;padding:0}
.rd-adm-cal-row{display:flex;flex-wrap:wrap;justify-content:space-between;gap:4px 12px;padding:8px 0;border-bottom:1px solid var(--div);font-size:13px;min-width:0}
.rd-adm-cal-row:last-child{border-bottom:0}
.rd-adm-cal-lbl{color:var(--dark)}
.rd-adm-cal-val{color:var(--stone)}
/* Round RD-4 — congratulations emails, commission received, this property's tasks. Tokens only; min-width:0 so a long
   address or task title scrolls inside its own card and never widens the page. */
.rd-cg-row{padding:12px 0;border-top:1px solid var(--div);min-width:0}
.rd-cg-row:first-of-type{border-top:0}
.rd-note+.rd-cg-row{margin-top:12px}
.rd-cg-lbl{font-size:10.5px;font-weight:600;letter-spacing:.2em;text-transform:uppercase;color:var(--stone)}
.rd-comm-tick{display:flex;align-items:center;gap:10px;min-height:44px;margin:10px 0 4px;font-size:14px;color:var(--dark);cursor:pointer}
.rd-comm-tick input{width:20px;height:20px;flex:0 0 20px;accent-color:var(--dark)}
.rd-tasks-sub{margin:12px 0 4px;font-size:10.5px;font-weight:600;letter-spacing:.2em;text-transform:uppercase;color:var(--stone)}
.rd-tasks-list{list-style:none;margin:0;padding:0}
.rd-task{display:flex;align-items:center;gap:8px;min-height:44px;padding:2px 0;border-bottom:1px solid var(--row-div);min-width:0}
.rd-task:last-child{border-bottom:0}
.rd-task-tick{flex:0 0 44px;width:44px;height:44px;display:inline-flex;align-items:center;justify-content:center;border:none;background:transparent;padding:0;cursor:pointer}
.rd-task-tick:disabled{cursor:default}
.rd-task.is-done .rd-step-box{background:var(--dark);border-color:var(--dark)}
.rd-task-title{flex:1 1 auto;min-width:0;border:none;background:transparent;padding:0;text-align:left;font-family:var(--sans);font-size:14px;color:var(--dark);cursor:pointer;overflow-wrap:anywhere}
.rd-task.is-done .rd-task-title{color:var(--stone);text-decoration:line-through}
.rd-task-due{flex:0 0 auto;font-size:12px;color:var(--stone);white-space:nowrap}
.rd-task.is-od .rd-task-due{color:var(--red)}
.rd-file .rd-groups{margin-top:0}
.rd-group .f2,.rd-group .f3{min-width:0}
.rd-group .fi,.rd-group .fs,.rd-group .fta{max-width:100%;min-width:0}
@media(max-width:719px){
  .rd-group .fi,.rd-group .fs{min-height:44px}
  .rd-group .btn,.rd-group .btn-xs{min-height:44px}
  .rd-group .f2,.rd-group .f3{grid-template-columns:1fr}
}
@media(min-width:720px){
  /* groups may sit in two columns (card-grid helper sets --card-min); .card-grid already collapses below 720px */
  .rd-groups.card-grid{grid-template-columns:repeat(auto-fill,minmax(var(--card-min,400px),1fr));align-items:start}
}

/* ══ Round PROP-4 — numbered rows, folding cards, one sticky region, Authority readiness ═══════════════════════════════
   Rows are CSS grids; every track is minmax(0,..) so a long string scrolls inside its own card and never widens the page (companion rule).
   Open cards share the row; folded ("Complete") cards stack in a narrow column at its right (>=1024px); one column below 720px. Tokens only. */
.rd-chip-ov{border-style:dashed}
.rd-chip-ov.is-view{background:var(--dark);color:var(--light);border-style:solid}
/* one sticky region: slim bar + section jump bar (never two separately stacked sticky bars) */
.rd-sticky{position:sticky;top:-22px;z-index:30;margin:-16px 0 14px;padding-top:22px;background:var(--light);box-shadow:0 1px 0 var(--div);min-width:0}
@media(max-width:680px){.rd-sticky{top:-16px;padding-top:16px}}   /* the page's own top padding (22px / 16px on a phone) would otherwise show above the stuck bar */
.rd-sticky[hidden]{display:none}
.rd-slim[hidden],.rd-secbar[hidden]{display:none}
.rd-slim{background:var(--dark);color:var(--light);min-width:0}
.rd-slim-in{display:flex;align-items:center;gap:6px 18px;min-height:48px;padding:0 14px;min-width:0}
.rd-slim-in>*{min-width:0}
.rd-slim-kvs{display:flex;gap:16px;flex:0 0 auto}
.rd-slim-kv{display:inline-flex;align-items:baseline;gap:6px;white-space:nowrap}
.rd-slim-k{font-size:10px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.rd-slim b{font-weight:600;font-size:13px}
.rd-slim-vendor{display:flex;align-items:center;gap:6px;flex:0 1 auto;min-width:0}
.rd-slim-vname{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:200px}
.rd-slim-vname.is-none{font-weight:400;color:var(--muted)}
.rd-slim-more{font-size:11px;color:var(--muted)}
.rd-slim .rd-vendor-act{min-height:32px;min-width:0;padding:0 12px;border-color:var(--light);color:var(--light);background:transparent;font-size:11px}
.rd-slim .rd-act-call{background:var(--light);color:var(--dark)}
.rd-slim-next{display:flex;align-items:center;gap:8px;flex:1 1 auto;min-width:0}
.rd-slim-next-k{font-size:10px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);white-space:nowrap}
.rd-slim-next-t{flex:1 1 auto;min-width:0;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rd-slim-next-t.is-done{color:var(--muted)}
.rd-slim-btn,.rd-slim-ov{flex:0 0 auto;min-height:32px;padding:0 14px;border-radius:40px;border:1px solid var(--light);background:transparent;color:var(--light);font-family:var(--sans);font-size:11px;font-weight:600;cursor:pointer;white-space:nowrap}
.rd-slim-done{background:var(--light);color:var(--dark)}
.rd-slim-ov{margin-left:auto}
@media(max-width:719px){
  .rd-slim-in{display:grid;grid-template-columns:auto minmax(0,1fr) auto;grid-template-areas:"vendor vendor ov" "kvs next next";gap:4px 10px;min-height:0;padding:6px 10px}
  .rd-slim-in.is-side{grid-template-areas:"vendor vendor ov"}
  .rd-slim-vendor{grid-area:vendor}.rd-slim-kvs{grid-area:kvs;gap:10px}.rd-slim-next{grid-area:next}.rd-slim-ov{grid-area:ov;margin-left:0}
  .rd-slim-vname{max-width:none;flex:1 1 auto}
  .rd-slim-k,.rd-slim-next-k{display:none}
  .rd-slim .rd-vendor-act,.rd-slim-btn,.rd-slim-ov{min-height:36px}
}
.rd-secbar{display:flex;align-items:center;gap:8px;justify-content:space-between;padding:6px 0;min-width:0;background:var(--light)}
.rd-secjumps{display:flex;flex-wrap:wrap;gap:6px;min-width:0;flex:1 1 auto}
.rd-secjumps[hidden]{display:none}
.rd-secjump{display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:0 12px;border-radius:40px;border:none;background:var(--warm);color:var(--dark);font-family:var(--sans);font-size:11px;font-weight:600;cursor:pointer;max-width:100%}
.rd-secjump-n{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background:var(--dark);color:var(--light);font-size:10px}
.rd-secall{display:flex;gap:6px;flex:0 0 auto}
.rd-secall-btn{min-height:36px;padding:0 12px;border-radius:40px;border:1px solid var(--outline-border);background:transparent;color:var(--dark);font-family:var(--sans);font-size:11px;font-weight:600;cursor:pointer;white-space:nowrap}
@media(max-width:719px){.rd-secjump-t{display:none}.rd-secjump{padding:0 8px}}
/* jumps land BELOW the sticky region (rdWatchSticky keeps --rd-sticky-h current) */
#m-property{scroll-padding-top:calc(var(--rd-sticky-h,0px) + 8px)}   /* focus / scrollIntoView of a field keeps it clear of the sticky region too */
#m-property .rd-row,#m-property .rd-group,#m-property .rd-details,#m-property .rd-steps{scroll-margin-top:calc(var(--rd-sticky-h,0px) + 12px)}

/* rows */
.rd-groups>.rd-row+.rd-row{margin-top:6px}
.rd-row{min-width:0;margin:0 0 18px}
.rd-row-hd{display:flex;align-items:center;gap:10px;width:100%;min-height:44px;padding:0 4px;border:none;border-bottom:1px solid var(--div);background:transparent;color:var(--dark);font-family:var(--sans);text-align:left;cursor:pointer;margin:0 0 12px}
.rd-row-num{display:inline-flex;align-items:center;justify-content:center;flex:0 0 24px;width:24px;height:24px;border-radius:50%;background:var(--dark);color:var(--light);font-size:12px;font-weight:600}
.rd-row-title{font-size:11px;font-weight:600;letter-spacing:.2em;text-transform:uppercase;color:var(--dark)}
.rd-row-prog{font-size:12px;color:var(--stone)}
.rd-row-prog:not(:empty)::before{content:"· "}
.rd-row-chev{margin-left:auto;color:var(--stone);transition:transform .15s}
.rd-row.is-folded .rd-row-chev,.rd-group.is-folded>.rd-card-hd .rd-card-chev,.rd-details.is-folded>.rd-card-hd .rd-card-chev{transform:rotate(-90deg)}
.rd-row.is-folded .rd-row-body{display:none}
.rd-row.is-folded .rd-row-hd{margin-bottom:0}
.rd-row-body{display:grid;grid-template-columns:minmax(0,1fr);gap:14px;min-width:0;align-items:stretch;grid-auto-flow:row dense}
.rd-row-body>.rd-group,.rd-row-body>.rd-details,.rd-slot>.rd-details{min-width:0;max-width:100%;margin:0}
.rd-row-body>.is-folded,.rd-slot>.is-folded{order:1;align-self:start}
@media(min-width:720px){
  .rd-row-body{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(min-width:1024px){
  .rd-row-body{grid-template-columns:repeat(var(--rd-o,1),minmax(0,1fr))}
  .rd-row.has-done>.rd-row-body{grid-template-columns:repeat(var(--rd-o,1),minmax(0,1fr)) minmax(260px,340px)}
  .rd-row.has-done>.rd-row-body>.is-folded{grid-column:calc(var(--rd-o,1) + 1)}
  .rd-row.all-done>.rd-row-body{grid-template-columns:repeat(var(--rd-d,1),minmax(0,1fr))}
  /* decision 6c — Pre-listing row 2: Authority to Sell is double width, Section 32 and the Property Price Statement stack in the third column */
  .rd-row.is-wide>.rd-row-body{grid-template-columns:repeat(3,minmax(0,1fr))}
  .rd-row.is-wide>.rd-row-body>*{grid-column:3;order:0;align-self:stretch}
  .rd-row.is-wide>.rd-row-body>*:first-child{grid-column:1/3;grid-row:1/span var(--rd-span,2)}
}
@media(min-width:720px) and (max-width:1023px){
  .rd-row.is-wide>.rd-row-body>*:first-child{grid-column:1/-1}
}
/* card header = a real button that folds the card to a one-line summary */
.rd-card-hd{display:flex;align-items:center;gap:10px;width:100%;min-height:44px;padding:0;border:none;background:transparent;text-align:left;cursor:pointer;color:var(--gold);font-family:var(--sans);margin:0 0 4px}
.rd-card-title{font-size:10.5px;font-weight:600;letter-spacing:.2em;text-transform:uppercase;color:var(--gold)}
.rd-card-sum{display:none;flex:1 1 auto;min-width:0;font-size:12.5px;color:var(--dark);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rd-card-chev{margin-left:auto;color:var(--stone);transition:transform .15s}
.rd-card-hd+.rd-group-title{display:none}
.rd-group.is-folded>:not(.rd-card-hd),.rd-details.is-folded>:not(.rd-card-hd){display:none!important}
.rd-group.is-folded>.rd-card-hd,.rd-details.is-folded>.rd-card-hd{margin-bottom:0}
.rd-group.is-folded>.rd-card-hd .rd-card-sum,.rd-details.is-folded>.rd-card-hd .rd-card-sum{display:block}
.rd-group.is-folded,.rd-details.is-folded{overflow:hidden}
/* decision 6b: when a row is only folded cards, their summaries share the width; in the Complete column the summary wraps under the title */
.rd-row.has-done>.rd-row-body>.is-folded .rd-card-hd{flex-wrap:wrap}
.rd-row.has-done>.rd-row-body>.is-folded .rd-card-sum{flex-basis:100%;order:3;white-space:normal}
/* inner folds: a native <details> */
.rd-fold{margin:0 0 8px;min-width:0}
.rd-fold>summary{min-height:44px;display:flex;align-items:center;cursor:pointer;font-size:10.5px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--gold)}
.rd-fold[open]>summary{margin-bottom:6px}
.rd-fl-how>summary{min-height:36px}
/* Next steps in two columns on a wide screen */
@media(min-width:1024px){.rd-steps-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:28px}}
/* Open homes: each session is a row; its notes, attendee picker and buttons open on tap (one delegated listener in property-extras.js) */
.rd-ofi-new{display:inline-flex;align-items:center;min-height:44px;border:none;background:transparent;cursor:pointer;font-family:var(--sans);padding:0}
.rd-ofi-form[hidden]{display:none}
#p-ofi-list .ofi-session>.ofi-hdr{cursor:pointer;min-height:44px}
#p-ofi-list .ofi-session>.ofi-hdr::after{content:attr(data-rd-sum) "  ▾";margin-left:auto;font-size:12px;color:var(--stone);white-space:nowrap}
#p-ofi-list .ofi-session:not(.is-open)>*:not(.ofi-hdr){display:none}
#p-ofi-list .ofi-session:not(.is-open)>.ofi-hdr::after{content:attr(data-rd-sum) "  ▸"}
/* Authority readiness list (decision 9) */
.rd-ready{margin:0 0 14px;padding:10px 12px;background:var(--warm);min-width:0}
.rd-ready-hd{font-size:12px;font-weight:600;color:var(--dark);margin:0 0 6px}
.rd-ready-list{list-style:none;margin:0;padding:0}
.rd-ready-row{display:grid;grid-template-columns:minmax(90px,130px) minmax(0,1fr) auto auto;align-items:center;gap:4px 10px;padding:6px 0;border-bottom:1px solid var(--div);font-size:12.5px;min-width:0}
.rd-ready-row:last-child{border-bottom:0}
.rd-ready-k{font-weight:600;color:var(--dark)}
.rd-ready-v{min-width:0;overflow-wrap:anywhere;color:var(--dark)}
.rd-ready-v.is-missing{color:var(--red)}
.rd-ready-unsaved{margin:0 0 6px;padding:5px 8px;font-size:12px;font-weight:600;background:var(--warn-bg);color:var(--warn-fg);min-width:0;overflow-wrap:anywhere}
.rd-ready-sub{display:block;font-size:11px;color:var(--stone)}
.rd-ready-tag{font-size:10px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;padding:3px 8px;border-radius:40px;border:1px solid var(--stone);color:var(--dark);white-space:nowrap}
.rd-ready-tag.t-ready{background:var(--dark);color:var(--light);border-color:var(--dark)}
.rd-ready-tag.t-missing{background:var(--warn-bg);color:var(--warn-fg);border-color:var(--warn-fg)}
.rd-ready-edit,.rd-linkbtn{border:none;background:transparent;padding:0 4px;min-height:32px;color:var(--gold);font-family:var(--sans);font-size:12px;font-weight:600;cursor:pointer;text-decoration:underline}
@media(max-width:719px){.rd-ready-row{grid-template-columns:minmax(0,1fr) auto}.rd-ready-k{grid-column:1}.rd-ready-tag{grid-column:2;grid-row:1}.rd-ready-v{grid-column:1/-1}.rd-ready-edit{grid-column:1/-1;justify-self:start;min-height:44px}}

/* ── Round RD-2 — stage checklists, Move to, warning / fell-over sheets, side path ───────────────────────────────
   Mobile first: one column, 44px targets. Panels never widen the page (min-width:0, own overflow). Tokens only. */
.rd-steps{margin:0 0 14px;min-width:0;max-width:100%;overflow-x:auto}
.rd-steps-hd{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin:0 0 8px}
.rd-steps-hd .rd-group-title{margin:0}
.rd-steps-prog{font-size:12px;color:var(--stone);white-space:nowrap}
.rd-steps-bar{height:6px;background:var(--warm);margin:0 0 6px;overflow:hidden}
.rd-steps-bar>span{display:block;height:100%;background:var(--dark)}
.rd-steps-list{list-style:none;margin:0;padding:0}
.rd-step{display:flex;align-items:center;gap:12px;min-height:44px;padding:4px 0;min-width:0;border-bottom:1px solid var(--row-div)}
.rd-step:last-child{border-bottom:none}
.rd-step-btn{display:flex;align-items:center;gap:12px;width:100%;min-height:44px;padding:4px 0;border:none;background:transparent;text-align:left;cursor:pointer;color:var(--dark);font-family:var(--sans);font-size:14px}
.rd-step-box{flex:0 0 22px;width:22px;height:22px;border:2px solid var(--stone);display:inline-flex;align-items:center;justify-content:center;font-size:13px;line-height:1;color:var(--light);box-sizing:border-box}
.rd-step.is-on .rd-step-box{background:var(--dark);border-color:var(--dark)}
.rd-step-auto .rd-step-box{border-style:dashed}
.rd-step-auto.is-on .rd-step-box{border-style:solid}
.rd-step-main{flex:1;min-width:0;display:flex;align-items:center;flex-wrap:wrap;gap:4px 8px;line-height:1.35}
.rd-step-lbl{font-size:14px;color:var(--dark);overflow-wrap:anywhere}
.rd-key{font-size:10px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--warn-fg);background:var(--warn-bg);padding:3px 8px;border-radius:40px}
.rd-step-from{flex-basis:100%;font-size:11px;color:var(--stone)}
.rd-step-go{flex:0 0 auto;min-height:44px;padding:0 12px;border:1px solid var(--dark);border-radius:40px;background:transparent;color:var(--dark);font-family:var(--sans);font-size:11px;font-weight:600;cursor:pointer}
.rd-nextstep{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:10px 12px;background:var(--warn-bg);border:1px solid var(--div);min-width:0}
.rd-nextstep[hidden]{display:none}
.rd-nextstep-main{flex:1 1 200px;min-width:0}
.rd-nextstep-main .rd-glance-lbl{display:block;color:var(--warn-fg);margin-bottom:2px}
.rd-nextstep-text{font-size:14px;font-weight:600;color:var(--dark);line-height:1.35;overflow-wrap:anywhere}
.rd-next-btn{min-height:44px;padding:0 16px;border-radius:40px;border:none;background:var(--dark);color:var(--light);font-family:var(--sans);font-size:12px;font-weight:600;cursor:pointer}
.rd-next-go{background:transparent;color:var(--dark);border:1px solid var(--dark)}
.rd-past-sum{font-size:12px;color:var(--stone)}
.rd-move-btn:disabled,.rd-pill:disabled,.btn:disabled{opacity:.55;cursor:default}
.rd-err{font-size:13px;color:var(--red);margin:6px 0;overflow-wrap:anywhere}
.rd-err[hidden]{display:none}
/* two-status picker + side-path kind picker */
.rd-sub,.rd-side-kinds{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 0}
.rd-pill{min-height:44px;padding:0 16px;border-radius:40px;border:1px solid var(--stone);background:transparent;color:var(--dark);font-family:var(--sans);font-size:12px;font-weight:600;cursor:pointer}
.rd-pill.is-on{background:var(--dark);color:var(--light);border-color:var(--dark)}
/* side path form + sheets */
.rd-lbl{display:block;font-size:12px;font-weight:600;color:var(--stone);margin:12px 0 6px}
.rd-input{display:block;width:100%;max-width:100%;min-height:44px;box-sizing:border-box;padding:10px 12px;border:1px solid var(--outline-border);border-radius:10px;background:var(--light);color:var(--dark);font-family:var(--sans);font-size:14px}
textarea.rd-input{resize:vertical}
.rd-sheet .mbody{display:flex;flex-direction:column;gap:6px}
.rd-warn-list{margin:4px 0 8px;padding-left:20px;font-size:14px;line-height:1.5;color:var(--dark)}
.rd-sheet-actions{display:flex;flex-direction:column;gap:8px;margin-top:10px}
.rd-sheet-actions .btn{min-height:50px;justify-content:center;border-radius:40px}
/* PROP-1 — Property Price Statement: the property's details are shown read-only (entered on the Property details card). */
.fi.pps-ro{background:var(--warm);color:var(--dark);cursor:default}
.pps-edit{display:block;margin-top:4px}
.pps-edit[hidden]{display:none}
.pps-edit-link{border:none;background:transparent;padding:0;min-height:32px;color:var(--gold);font-family:var(--sans);font-size:11.5px;font-weight:600;text-decoration:underline;cursor:pointer}
.pps-comp-jump{margin-left:8px;border:none;background:transparent;padding:0;color:var(--gold);font-family:var(--sans);font-size:11.5px;font-weight:600;text-decoration:underline;cursor:pointer}
.pps-comp-row.is-jump{outline:2px solid var(--gold)}
/* Round FL-1 - Forms Live "Create Authority" block (Pre-listing > Documents). Phone-first: wraps, never widens the page. */
.fl-authority{margin-top:16px;padding-top:14px;border-top:1px solid var(--div);min-width:0}
.fl-msg{margin-top:10px;font-size:12px;line-height:1.5;overflow-wrap:anywhere;min-width:0}
.fl-msg:empty{display:none}
.fl-msg.fl-ok{color:var(--success-fg)}
.fl-msg.fl-err{color:var(--red)}
.fl-msg.fl-warn{color:var(--warn-fg)}
.fl-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.fl-row .btn,.fl-open{min-height:44px;display:inline-flex;align-items:center;text-decoration:none}
.fl-warn{margin-top:10px;font-size:11px;line-height:1.5;color:var(--stone);overflow-wrap:anywhere}
.fl-warn summary{cursor:pointer;min-height:32px;display:flex;align-items:center}
.fl-warn ul{margin:6px 0 0 18px}
.fl-status{margin-top:10px;min-width:0;overflow-wrap:anywhere}
.fl-status:empty{display:none}
#fl-create-btn[disabled]{opacity:.6;cursor:progress}

/* Round FL-2 - phone layout: the Create Authority / Open in Forms Live buttons are full-width, 48px tap targets at phone width. */
.fl-signed{color:var(--success-fg)}
.fl-todo{margin-top:10px;padding:10px 12px;border:1px solid var(--gold);border-radius:6px;background:var(--warm);color:var(--warn-fg);font-size:12px;line-height:1.5;overflow-wrap:anywhere;min-width:0}
.fl-todo strong{display:block;margin-bottom:4px}
.fl-todo .btn,.fl-todo .fl-open{white-space:normal;max-width:100%;box-sizing:border-box;padding-left:10px;padding-right:10px}
.fl-signed-link{font-weight:600;color:var(--gold)}
@media (max-width:720px){
  .fl-authority .fl-actions{display:block}
  .fl-authority .fl-btn,.fl-authority .fl-row .btn,.fl-authority .fl-open{display:flex;width:100%;min-height:48px;justify-content:center;align-items:center;text-align:center;font-size:14px;box-sizing:border-box}
  .fl-authority .fl-row{flex-direction:column;align-items:stretch;gap:10px}
}
