/* Estatora — shared styles (website, portal, admin). Colours come from the theme variables set by Theme::head(). */
:root{--radius:14px;--radius-sm:10px;--radius-lg:20px;--ease:cubic-bezier(.2,.7,.2,1)}
html{scroll-behavior:smooth}
body{font-family:var(--font-body);color:var(--ink);background:var(--canvas);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
h1,h2,h3,h4,.display-font{font-family:var(--font-display);color:var(--ink);letter-spacing:-.01em}
[data-font=classic] h1,[data-font=classic] h2,[data-font=classic] .display-font{font-weight:600}
h5,h6{font-family:var(--font-body);font-weight:700}
a{color:var(--bs-link-color);text-decoration-thickness:1px;text-underline-offset:3px}
::selection{background:rgba(var(--accent-rgb),.25)}
.text-ink{color:var(--ink)!important}.text-ink-2{color:var(--ink-2)!important}.text-ink-3,.text-muted{color:var(--ink-3)!important}
.bg-surface{background:var(--surface)!important}.bg-surface-2{background:var(--surface-2)!important}.bg-canvas{background:var(--canvas)!important}
.bg-brand{background:var(--brand)!important;color:var(--on-brand)}.bg-brand-soft{background:var(--brand-soft)!important}
.bg-accent-soft{background:var(--accent-soft)!important}
.text-brand{color:var(--brand-ink)!important}.text-accent{color:var(--accent-ink)!important}
.border-line{border-color:var(--line)!important}
.fw-semibold{font-weight:600!important}
.small-caps{font-size:.72rem;letter-spacing:.09em;text-transform:uppercase;font-weight:700;color:var(--ink-3)}
.hp-field{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.min-w-0{min-width:0}

/* Buttons */
.btn{border-radius:var(--radius-sm);font-weight:600;padding:.6rem 1.1rem;transition:background-color .15s,border-color .15s,color .15s,box-shadow .15s,transform .15s}
.btn-sm{padding:.38rem .75rem;border-radius:8px}
.btn-lg{padding:.8rem 1.4rem;border-radius:12px}
.btn-primary{--bs-btn-bg:var(--brand);--bs-btn-border-color:var(--brand);--bs-btn-hover-bg:var(--brand-dark);--bs-btn-hover-border-color:var(--brand-dark);--bs-btn-active-bg:var(--brand-dark);--bs-btn-active-border-color:var(--brand-dark);--bs-btn-color:#fff;--bs-btn-hover-color:#fff;--bs-btn-disabled-bg:var(--brand);--bs-btn-disabled-border-color:var(--brand)}
.btn-accent{--bs-btn-bg:var(--accent-btn);--bs-btn-border-color:var(--accent-btn);--bs-btn-hover-bg:var(--accent-btn-hover);--bs-btn-hover-border-color:var(--accent-btn-hover);--bs-btn-active-bg:var(--accent-btn-hover);--bs-btn-color:#fff;--bs-btn-hover-color:#fff;--bs-btn-active-color:#fff;--bs-btn-disabled-bg:var(--accent-btn);--bs-btn-disabled-color:#fff}
.btn-outline-primary{--bs-btn-color:var(--brand-ink);--bs-btn-border-color:var(--brand-ink);--bs-btn-hover-bg:var(--brand);--bs-btn-hover-border-color:var(--brand);--bs-btn-hover-color:#fff;--bs-btn-active-bg:var(--brand);--bs-btn-active-border-color:var(--brand)}
.btn-soft{background:var(--surface-2);border:1px solid var(--line);color:var(--ink)}
.btn-soft:hover{background:var(--brand-soft);border-color:var(--line);color:var(--ink)}
.btn-ghost{background:transparent;border:1px solid transparent;color:var(--ink-2)}
.btn-ghost:hover{background:var(--surface-2);color:var(--ink)}
.btn-icon{width:40px;height:40px;padding:0;display:inline-flex;align-items:center;justify-content:center;border-radius:12px}
.btn-icon.btn-sm{width:32px;height:32px;border-radius:9px}
.btn:focus-visible,.form-control:focus,.form-select:focus{box-shadow:0 0 0 .22rem rgba(var(--accent-rgb),.28)!important;border-color:var(--accent)!important}

/* Forms */
.form-control,.form-select{border-radius:var(--radius-sm);border-color:var(--line);background-color:var(--surface);color:var(--ink);padding:.6rem .85rem}
.form-control::placeholder{color:var(--ink-3);opacity:.85}
.form-label{font-weight:600;font-size:.88rem;color:var(--ink-2);margin-bottom:.35rem}
.form-text{color:var(--ink-3)}
.form-check-input:checked{background-color:var(--brand);border-color:var(--brand)}
[data-bs-theme=dark] .form-check-input:checked{background-color:var(--accent-btn);border-color:var(--accent-btn)}
.input-group-text{background:var(--surface-2);border-color:var(--line);color:var(--ink-2)}
.form-control-lg,.form-select-lg{border-radius:12px}

/* Cards & surfaces */
.card{--bs-card-bg:var(--surface);--bs-card-border-color:var(--line);border-radius:var(--radius);color:var(--ink)}
.card-header{background:transparent;border-bottom-color:var(--line)}
.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:1.25rem}
.shadow-soft{box-shadow:var(--shadow)!important}
.rounded-xl{border-radius:var(--radius-lg)!important}
.divider{height:1px;background:var(--line);border:0;margin:1.25rem 0}
.dropdown-menu{--bs-dropdown-bg:var(--surface);--bs-dropdown-border-color:var(--line);--bs-dropdown-link-color:var(--ink);--bs-dropdown-link-hover-bg:var(--surface-2);--bs-dropdown-link-active-bg:var(--brand);border-radius:12px;box-shadow:var(--shadow);padding:.4rem}
.dropdown-item{border-radius:8px;padding:.5rem .75rem}
.modal-content{background:var(--surface);border-color:var(--line);border-radius:var(--radius-lg)}
.offcanvas{background:var(--surface);color:var(--ink)}
.table{--bs-table-bg:transparent;--bs-table-color:var(--ink);--bs-table-border-color:var(--line);--bs-table-hover-bg:var(--surface-2);--bs-table-striped-bg:var(--surface-2)}
.table thead th{font-size:.74rem;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-3);font-weight:700;border-bottom-width:1px;white-space:nowrap}
.nav-pills .nav-link{border-radius:10px;color:var(--ink-2);font-weight:600}
.nav-pills .nav-link.active{background:var(--brand);color:#fff}
.nav-tabs{--bs-nav-tabs-border-color:var(--line);--bs-nav-tabs-link-active-bg:var(--surface);--bs-nav-tabs-link-active-border-color:var(--line) var(--line) var(--surface)}
.nav-tabs .nav-link{color:var(--ink-2);font-weight:600}
.nav-tabs .nav-link.active{color:var(--ink)}
.pagination{--bs-pagination-bg:var(--surface);--bs-pagination-border-color:var(--line);--bs-pagination-color:var(--ink);--bs-pagination-hover-bg:var(--surface-2);--bs-pagination-active-bg:var(--brand);--bs-pagination-active-border-color:var(--brand);--bs-pagination-disabled-bg:var(--surface);--bs-pagination-disabled-color:var(--ink-3);--bs-pagination-hover-color:var(--ink);--bs-pagination-border-radius:10px;gap:.25rem}
.pagination .page-link{border-radius:9px!important;min-width:36px;text-align:center}
.list-group{--bs-list-group-bg:var(--surface);--bs-list-group-border-color:var(--line);--bs-list-group-color:var(--ink);--bs-list-group-action-hover-bg:var(--surface-2)}
.alert{border-radius:12px}
.badge{font-weight:600;letter-spacing:.01em}
.status-badge{font-size:.72rem;padding:.38em .7em}
.text-bg-info{color:#063b4a!important}
[data-bs-theme=dark] .text-bg-warning{color:#1a1300!important}
.progress{background:var(--surface-2);border-radius:20px}
.progress-bar{background:var(--accent-btn)}

/* Avatars */
.avatar{border-radius:50%;object-fit:cover;flex:0 0 auto}
.avatar-initials{width:var(--av);height:var(--av);display:inline-flex;align-items:center;justify-content:center;font-weight:700;font-size:calc(var(--av) * .38);color:#fff;
  background:linear-gradient(135deg,hsl(var(--hue) 45% 42%),hsl(calc(var(--hue) + 40) 50% 34%));border-radius:50%;flex:0 0 auto;letter-spacing:.02em}

/* Logos */
.logo-text{display:inline-flex;align-items:center;gap:.55rem;font-family:var(--font-display);font-weight:700;font-size:1.32rem;color:var(--ink);letter-spacing:-.01em;line-height:1}
.logo-mark{width:36px;height:36px;border-radius:11px;display:inline-flex;align-items:center;justify-content:center;background:var(--brand);color:#fff;font-size:1.05rem;box-shadow:inset 0 -3px 0 var(--accent)}
.site-logo{height:40px;width:auto;max-width:200px}
.logo-for-dark{display:none}
[data-bs-theme=dark] .logo-for-light{display:none}
[data-bs-theme=dark] .logo-for-dark{display:inline-block}

/* Appearance switcher */
.appearance-menu{width:300px;padding:1rem}
.appearance-menu .mode-btns{display:grid;grid-template-columns:repeat(3,1fr);gap:.4rem}
.appearance-menu .mode-btns button{border:1px solid var(--line);background:var(--surface-2);color:var(--ink-2);border-radius:10px;padding:.5rem .25rem;font-size:.8rem;font-weight:600;display:flex;flex-direction:column;align-items:center;gap:.2rem}
.appearance-menu .mode-btns button.active{border-color:var(--accent);color:var(--ink);background:var(--accent-soft)}
.swatches{display:grid;grid-template-columns:repeat(6,1fr);gap:.45rem}
.swatch{width:100%;aspect-ratio:1;border-radius:50%;border:2px solid var(--surface);box-shadow:0 0 0 1px var(--line);cursor:pointer;padding:0;background:linear-gradient(135deg,var(--c1) 0 55%,var(--c2) 55% 100%);transition:transform .15s}
.swatch:hover{transform:scale(1.08)}
.swatch.active{box-shadow:0 0 0 2px var(--accent)}

/* Toasts */
.toast-stack{position:fixed;z-index:2000;bottom:1.25rem;left:50%;transform:translateX(-50%);display:flex;flex-direction:column;gap:.5rem;align-items:center;pointer-events:none;width:min(92vw,420px)}
.toast-msg{pointer-events:auto;background:var(--ink);color:var(--surface);padding:.7rem 1rem;border-radius:12px;box-shadow:var(--shadow);font-size:.92rem;display:flex;gap:.6rem;align-items:center;animation:toastIn .25s var(--ease)}
[data-bs-theme=dark] .toast-msg{background:#f1f4f6;color:#111}
@keyframes toastIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* Empty states */
.empty{text-align:center;padding:3rem 1rem;color:var(--ink-3)}
.empty .empty-icon{width:64px;height:64px;border-radius:20px;background:var(--brand-soft);color:var(--brand-ink);display:inline-flex;align-items:center;justify-content:center;font-size:1.6rem;margin-bottom:1rem}
.empty h3,.empty h5{color:var(--ink)}

/* Property card (shared by site, portal and admin previews) */
.p-card{position:relative;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;height:100%;display:flex;flex-direction:column;transition:transform .25s var(--ease),box-shadow .25s var(--ease)}
.p-card:hover{transform:translateY(-3px);box-shadow:var(--shadow)}
.p-media{position:relative;aspect-ratio:4/3;background:var(--surface-2);overflow:hidden}
.p-media .p-slides{display:flex;height:100%;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none}
.p-media .p-slides::-webkit-scrollbar{display:none}
.p-media img{width:100%;height:100%;object-fit:cover;flex:0 0 100%;scroll-snap-align:start;transition:transform .5s var(--ease)}
.p-card:hover .p-media img{transform:scale(1.03)}
.p-dots{position:absolute;bottom:.6rem;left:0;right:0;display:flex;justify-content:center;gap:4px;pointer-events:none}
.p-dots span{width:6px;height:6px;border-radius:50%;background:rgba(255,255,255,.55)}
.p-dots span.on{background:#fff}
.p-badges{position:absolute;top:.75rem;left:.75rem;display:flex;gap:.35rem;flex-wrap:wrap;z-index:2}
.p-badge{font-size:.7rem;font-weight:700;padding:.32rem .6rem;border-radius:8px;background:rgba(17,20,24,.72);color:#fff;backdrop-filter:blur(6px);letter-spacing:.02em;text-transform:uppercase}
.p-badge.accent{background:var(--accent-btn)}
.p-badge.ok{background:#15803d}
.p-badge.muted{background:rgba(255,255,255,.92);color:#111}
.p-actions{position:absolute;top:.6rem;right:.6rem;display:flex;gap:.35rem;z-index:2}
.p-actions button{width:36px;height:36px;border-radius:50%;border:0;background:rgba(255,255,255,.94);color:#1f2933;display:inline-flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,0,0,.15);transition:transform .15s}
.p-actions button:hover{transform:scale(1.08)}
.p-actions button.on{color:#e11d48}
.p-actions button.compare.on{color:#fff;background:var(--brand)}
.p-body{padding:1rem 1.1rem 1.1rem;display:flex;flex-direction:column;gap:.35rem;flex:1}
.p-price{font-weight:800;font-size:1.18rem;color:var(--accent-ink);font-family:var(--font-body);letter-spacing:-.01em}
.p-title{font-family:var(--font-body);font-weight:700;font-size:1rem;color:var(--ink);margin:0;line-height:1.35;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.p-title a{color:inherit;text-decoration:none}
.p-title a::after{content:"";position:absolute;inset:0;z-index:1}
.p-loc{color:var(--ink-3);font-size:.87rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.p-facts{display:flex;flex-wrap:wrap;gap:.35rem .9rem;margin-top:auto;padding-top:.7rem;border-top:1px dashed var(--line);font-size:.84rem;color:var(--ink-2)}
.p-facts span{display:inline-flex;align-items:center;gap:.35rem}
.p-facts i{color:var(--ink-3)}
.p-card.p-list{flex-direction:row}
.p-card.p-list .p-media{width:40%;aspect-ratio:auto;min-height:220px;flex:0 0 40%}
@media (max-width:575.98px){.p-card.p-list{flex-direction:column}.p-card.p-list .p-media{width:100%;flex:auto;aspect-ratio:4/3;min-height:0}}
.p-closed .p-media img{filter:saturate(.6)}
.p-closed .p-media::after{content:attr(data-closed);position:absolute;inset:auto 0 0 0;background:rgba(17,20,24,.75);color:#fff;text-align:center;font-weight:800;letter-spacing:.12em;text-transform:uppercase;font-size:.8rem;padding:.45rem}

/* Skeleton */
.skeleton{background:linear-gradient(90deg,var(--surface-2) 25%,var(--line) 50%,var(--surface-2) 75%);background-size:200% 100%;animation:sk 1.2s infinite;border-radius:8px}
@keyframes sk{to{background-position:-200% 0}}

/* Stat tiles */
.stat{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:1.1rem 1.2rem;height:100%}
.stat .stat-label{font-size:.8rem;color:var(--ink-3);font-weight:600}
.stat .stat-value{font-size:1.6rem;font-weight:800;color:var(--ink);letter-spacing:-.02em;line-height:1.2;font-family:var(--font-body)}
.stat .stat-icon{width:42px;height:42px;border-radius:12px;display:inline-flex;align-items:center;justify-content:center;background:var(--brand-soft);color:var(--brand-ink);font-size:1.15rem}
.stat .stat-icon.accent{background:var(--accent-soft);color:var(--accent-ink)}
.delta-up{color:#15803d}.delta-down{color:#b91c1c}
[data-bs-theme=dark] .delta-up{color:#4ade80}[data-bs-theme=dark] .delta-down{color:#f87171}

/* Lightbox */
.lb{position:fixed;inset:0;z-index:3000;background:rgba(8,10,12,.94);display:none;flex-direction:column}
.lb.open{display:flex}
.lb-top{display:flex;justify-content:space-between;align-items:center;padding:.8rem 1rem;color:#fff}
.lb-stage{flex:1;display:flex;align-items:center;justify-content:center;position:relative;min-height:0}
.lb-stage img{max-width:94vw;max-height:78vh;object-fit:contain;border-radius:8px}
.lb-nav{position:absolute;top:50%;transform:translateY(-50%);width:48px;height:48px;border-radius:50%;border:0;background:rgba(255,255,255,.14);color:#fff;font-size:1.4rem}
.lb-nav:hover{background:rgba(255,255,255,.26)}
.lb-prev{left:1rem}.lb-next{right:1rem}
.lb-thumbs{display:flex;gap:.4rem;overflow-x:auto;padding:.6rem 1rem 1rem;justify-content:center}
.lb-thumbs img{width:72px;height:52px;object-fit:cover;border-radius:6px;opacity:.5;cursor:pointer;flex:0 0 auto}
.lb-thumbs img.on{opacity:1;outline:2px solid #fff}

/* Leaflet tweaks */
.leaflet-container{font-family:var(--font-body);background:var(--surface-2);border-radius:var(--radius)}
.price-pin{background:var(--surface);color:var(--ink);font-weight:800;font-size:.78rem;padding:.3rem .55rem;border-radius:20px;box-shadow:0 2px 8px rgba(0,0,0,.25);white-space:nowrap;border:2px solid var(--surface);transform:translate(-50%,-50%);display:inline-block}
.price-pin.on,.price-pin:hover{background:var(--brand);color:#fff}
.leaflet-popup-content-wrapper{border-radius:14px;background:var(--surface);color:var(--ink)}
.leaflet-popup-tip{background:var(--surface)}
.map-pop{width:220px}
.map-pop img{width:100%;height:120px;object-fit:cover;border-radius:10px;margin-bottom:.5rem}
[data-bs-theme=dark] .leaflet-tile-pane{filter:brightness(.72) contrast(1.1) saturate(.8)}

@media print{.no-print{display:none!important}body{background:#fff}}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}
.view-toggle{display:inline-flex;align-self:center;border:1px solid var(--line);border-radius:10px;overflow:hidden;background:var(--surface)}
.view-toggle a{padding:.42rem .7rem;color:var(--ink-3);text-decoration:none}
.view-toggle a.active{background:var(--brand);color:#fff}
.portal-nav{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:.5rem}
.portal-nav a{display:flex;align-items:center;gap:.65rem;padding:.6rem .8rem;border-radius:10px;color:var(--ink-2);text-decoration:none;font-weight:600}
.portal-nav a:hover{background:var(--surface-2);color:var(--ink)}
.portal-nav a.active{background:var(--brand);color:#fff}
@media (max-width:991.98px){.portal-nav{display:flex;gap:.25rem;overflow-x:auto;scrollbar-width:none;padding:.35rem;-webkit-overflow-scrolling:touch}.portal-nav::-webkit-scrollbar{display:none}.portal-nav a{flex:0 0 auto;white-space:nowrap;padding:.5rem .75rem;font-size:.9rem}}
.msg{max-width:82%;display:flex;flex-direction:column}
.msg .bubble{padding:.6rem .85rem;border-radius:16px;font-size:.92rem;line-height:1.45;white-space:pre-wrap;word-wrap:break-word;overflow-wrap:anywhere}
.msg .meta{font-size:.7rem;color:var(--ink-3);margin-top:.2rem;padding:0 .3rem}
.msg.me{align-self:flex-end;align-items:flex-end}
.msg.me .bubble{background:var(--brand);color:#fff;border-bottom-right-radius:5px}
.msg.them{align-self:flex-start}
.msg.them .bubble{background:var(--surface);border:1px solid var(--line);color:var(--ink);border-bottom-left-radius:5px}
.msg.sys{align-self:center;max-width:92%;text-align:center}
.msg.sys .bubble{background:var(--accent-soft);color:var(--ink-2);font-size:.82rem;border-radius:12px}

.hdr-count{position:absolute;top:-4px;right:-4px;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:var(--accent-btn);color:#fff;font-size:.68rem;font-weight:800;display:inline-flex;align-items:center;justify-content:center;border:2px solid var(--surface)}
.hdr-count:empty,.hdr-count[data-n="0"]{display:none}
.chip-group{display:flex;flex-wrap:wrap;gap:.35rem}
.chip-group input{position:absolute;opacity:0;pointer-events:none}
.chip-group label{border:1px solid var(--line);background:var(--surface-2);border-radius:999px;padding:.36rem .8rem;font-size:.84rem;font-weight:600;color:var(--ink-2);cursor:pointer;user-select:none;transition:all .15s}
.chip-group input:checked+label{background:var(--brand);border-color:var(--brand);color:#fff}
.chip-group input:focus-visible+label{box-shadow:0 0 0 .2rem rgba(var(--accent-rgb),.35)}
.typing{align-self:flex-start;background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:.55rem .8rem;display:none}
.typing.show{display:inline-flex;gap:3px}
.typing span{width:6px;height:6px;border-radius:50%;background:var(--ink-3);animation:blink 1.2s infinite}
.typing span:nth-child(2){animation-delay:.2s}.typing span:nth-child(3){animation-delay:.4s}
@keyframes blink{0%,80%,100%{opacity:.25}40%{opacity:1}}

.tbl-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.tbl-card .table{margin:0}
.tbl-card .table td,.tbl-card .table th{padding:.75rem 1rem;vertical-align:middle}
.tbl-card .table tbody tr:last-child td{border-bottom:0}
.tbl-card .table thead th{background:var(--surface-2)}
.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.85em}
