/* shared.jsx — primitives + placeholders for 10HOUSE */
const { useState, useEffect, useRef, useCallback, useMemo } = React;

/* Current edition — duas coleções ao ano (Hemisfério Sul)
 * Outono/Inverno: 21 de março → 22 de setembro
 * Primavera/Verão: 23 de setembro → 20 de março
 */
function currentEdition() {
  const now = new Date();
  const y = now.getFullYear();
  const m = now.getMonth() + 1; // 1-12
  const d = now.getDate();
  let season;
  if ((m === 3 && d >= 21) || m === 4 || m === 5 || m === 6 || m === 7 || m === 8 || (m === 9 && d <= 22)) {
    season = "Outono / Inverno";
  } else {
    season = "Primavera / Verão";
  }
  const roman = (n) => {
    const map = [["M",1000],["CM",900],["D",500],["CD",400],["C",100],["XC",90],["L",50],["XL",40],["X",10],["IX",9],["V",5],["IV",4],["I",1]];
    let s = ""; for (const [r, v] of map) while (n >= v) { s += r; n -= v; } return s;
  };
  return { season, year: y, yearRoman: roman(y), label: `Edição ${season} · ${roman(y)}` };
}
function Folio({ n, label }) {
  return (
    <div className="folio">
      <span className="num">{n}</span>
      <span className="tick"></span>
      <span>{label}</span>
    </div>
  );
}

/* Big roman numeral plate (background) */
function Plate({ n, solid = false, style = {} }) {
  return <div className={`plate ${solid ? "solid" : ""}`} style={style}>{n}</div>;
}

/* Marginalia */
function MarginNote({ label, children }) {
  return (
    <aside className="margin-note">
      {label}
      <em>{children}</em>
    </aside>
  );
}

/* IntersectionObserver-based reveal */
function Reveal({ children, delay = 0, as: As = "div", className = "", style = {}, ...rest }) {
  const ref = useRef(null);
  const [seen, setSeen] = useState(false);
  useEffect(() => {
    if (!ref.current) return;
    const io = new IntersectionObserver(
      (entries) => entries.forEach((e) => {
        if (e.isIntersecting) { setSeen(true); io.disconnect(); }
      }),
      { threshold: 0.12, rootMargin: "0px 0px -60px 0px" }
    );
    io.observe(ref.current);
    return () => io.disconnect();
  }, []);
  return (
    <As
      ref={ref}
      className={`reveal ${seen ? "in" : ""} ${className}`}
      style={{ "--rd": delay + "ms", ...style }}
      {...rest}
    >
      {children}
    </As>
  );
}

/* Placeholder image — striped, monospace label. If `src` provided, use real image. */
function Ph({ tag = "imagem arquitetônica", num, tone = "default", src, pos = "center", style = {}, className = "", children, alt = "" }) {
  if (src) {
    return (
      <div className={`ph real ${className}`} style={{ ...style, backgroundImage: `url(${src})`, backgroundSize: 'cover', backgroundPosition: pos }}>
        {num && <div className="ph-num">{num}</div>}
        {tag && <div className="ph-tag">{tag}</div>}
        {children}
      </div>
    );
  }
  return (
    <div className={`ph ${tone !== "default" ? tone : ""} ${className}`} style={style}>
      {num && <div className="ph-num">{num}</div>}
      <div className="ph-tag">{tag}</div>
      {children}
    </div>
  );
}

/* Eyebrow with bullet */
function Eyebrow({ children, className = "" }) {
  return (
    <div className={`eyebrow ${className}`}>
      <span className="dot"></span>{children}
    </div>
  );
}

/* Ornamental gold rule (─── ◇ ───) */
function OrnRule({ short = false, style = {} }) {
  return (
    <div className={`orn ${short ? "short" : ""}`} style={style}>
      <span className="diamond"></span>
    </div>
  );
}

/* Numbered chapter label */
function NumLabel({ n, children }) {
  return (
    <div className="num-label">
      <span className="n">{n}</span>
      <span>{children}</span>
    </div>
  );
}

/* Property card */
function PropertyCard({ p, onOpen }) {
  return (
    <div className="prop" onClick={() => onOpen && onOpen(p)}>
      <div className="img-wrap">
        <Ph tag={p.tag || "atmosfera"} num={p.ref} tone={p.tone} src={p.src} pos={p.pos} />
        <div className="overlay">
          <span>{p.city}</span>
          <span>{p.status || "Disponível"}</span>
        </div>
      </div>
      <div className="info">
        <div className="ref">{p.ref} · {p.neighborhood}</div>
        <div className="title">{p.title}{p.subtitle ? <span style={{ display: 'block', fontStyle: 'italic', fontSize: '0.7em', color: 'var(--gold)', marginTop: 2 }}>{p.subtitle}</span> : null}</div>
        <div className="meta">
          <span>{p.area}</span>
          <span>·</span>
          <span>{p.suites}</span>
          {p.parking && <><span>·</span><span>{p.parking}</span></>}
        </div>
        <div className="price">{p.price}</div>
      </div>
    </div>
  );
}

/* Section header with eyebrow + display title + lede */
function SectionHead({ eyebrow, title, lede, align = "left", dark = false }) {
  return (
    <div style={{ textAlign: align, display: "flex", flexDirection: "column", gap: 24, alignItems: align === "center" ? "center" : "flex-start" }}>
      {eyebrow && <Eyebrow>{eyebrow}</Eyebrow>}
      <h2 className="h2" style={{ margin: 0, maxWidth: 18 + "ch" }} dangerouslySetInnerHTML={{ __html: title }}></h2>
      {lede && <p className="lede" style={{ margin: 0 }}>{lede}</p>}
    </div>
  );
}

/* Right-side sheet (used for contact / property detail) */
function Sheet({ open, onClose, children }) {
  useEffect(() => {
    if (!open) return;
    const prev = document.body.style.overflow;
    document.body.style.overflow = "hidden";
    return () => { document.body.style.overflow = prev; };
  }, [open]);
  if (!open) return null;
  return (
    <>
      <div className="sheet-backdrop" onClick={onClose}></div>
      <div className="sheet">
        <button className="close" onClick={onClose} aria-label="Fechar"></button>
        {children}
      </div>
    </>
  );
}

/* Marquee — slow, premium */
function Marquee({ items = [], speed = 90 }) {
  const seq = [...items, ...items];
  return (
    <div style={{ overflow: "hidden", borderTop: "1px solid var(--rule)", borderBottom: "1px solid var(--rule)", background: "linear-gradient(180deg, transparent, rgba(28,61,46,0.04) 50%, transparent)" }}>
      <div
        className="values-marquee"
        style={{
          display: "flex",
          gap: 80,
          padding: "20px 0",
          whiteSpace: "nowrap",
          "--mq-dur": speed + "s",
          animation: `marquee ${speed}s linear infinite`,
        }}
      >
        {seq.map((s, i) => (
          <span key={i} style={{
            fontFamily: "var(--serif)",
            fontStyle: "italic",
            fontSize: 22,
            color: "var(--forest-soft)",
            letterSpacing: "0.005em",
            display: "inline-flex", alignItems: "center", gap: 80,
          }}>
            {s}
            <span style={{ width: 6, height: 6, background: "var(--gold)", borderRadius: "50%" }}></span>
          </span>
        ))}
      </div>
      <style>{`@keyframes marquee { from { transform: translateX(0); } to { transform: translateX(-50%); } }`}</style>
    </div>
  );
}

/* Property dataset
 * ─────────────────────────────────────────────────────────────
 * Schema padrão para adicionar novos imóveis à 10HOUSE.
 * Campos obrigatórios:
 *   ref         — código interno (ex: "10H · 0204")
 *   title       — título editorial do imóvel
 *   neighborhood — bairro
 *   city        — cidade
 *   area        — área privativa (ex: "162 a 202 m²")
 *   price       — preço ou "Sob consulta"
 *   tag         — descritor curto (ex: "edifício de assinatura")
 *   status      — "Em curadoria" | "Disponível" | custom (em Investir: pode incluir "Pré-lançamento")
 *   category    — "morar" | "investir" | "litoral"
 *   blurb       — 1 parágrafo editorial
 *
 * Campos opcionais (recomendados):
 *   subtitle    — sublinha do título
 *   suites      — ex: "3 suítes"
 *   parking     — ex: "até 4 vagas"
 *   src         — caminho da foto principal (capa do card)
 *   gallery     — array de { src, caption } com 4–6 fotos
 *   metrics     — array de { k, v } para ficha técnica detalhada
 *   tone        — fallback de cor caso não haja foto ("stone" | "warm" | "moss" | "sea" | "sand" | "cool" | "night" | "forest")
 *
 * Estoque editorial alvo: ≤ 6 imóveis ativos por categoria.
 * ───────────────────────────────────────────────────────────── */
const PROPERTIES = [
  {
    ref: "10H · 0312",
    title: "GIOIA · by Embraed",
    subtitle: "uma torre, trinta e sete moradores",
    neighborhood: "Ecoville",
    city: "Curitiba",
    area: "365 a 723 m²",
    suites: "4 a 5 suítes",
    parking: "4 a 5 vagas",
    price: "Sob consulta",
    tag: "torre de assinatura · 1 apto por andar",
    status: "Em curadoria",
    category: "morar",
    src: "assets/gioia/02-fachada-noturna.jpg",
    pos: "center center",
    gallery: [
      { src: "assets/gioia/02-fachada-noturna.jpg", caption: "Fachada noturna · torre única no eixo Ecoville · iluminação cenográfica" },
      { src: "assets/gioia/01-fachada-diurna.jpg", caption: "Fachada diurna · varandas corridas em toda a torre" },
      { src: "assets/gioia/04-fotomontagem.jpg", caption: "Implantação · Rua Dep. Heitor Alencar Furtado · entorno arborizado" },
      { src: "assets/gioia/03-coroamento.jpg", caption: "Coroamento · pavimento Sky · vidro estrutural e mirante envidraçado" },
      { src: "assets/gioia/05-embasamento.jpg", caption: "Embasamento · pórtico de entrada · pedra natural e ripado de madeira" },
      { src: "assets/gioia/06-cobertura.jpg", caption: "Cobertura · terraço privativo · piscina infinity · fire pit · pôr do sol" },
      { src: "assets/gioia/07-living-tipoA.jpg", caption: "Living Tipo A · 378 m² · pé-direito ampliado · lareira ecológica" },
      { src: "assets/gioia/08-suite-master.jpg", caption: "Suíte master · pé-direito de fachada · vista para o eixo Ecoville" },
      { src: "assets/gioia/09-sala-banho.jpg", caption: "Sala de banho · mármore Calacatta · banheira oval frente-vidro" },
      { src: "assets/gioia/10-piscina-externa.jpg", caption: "Piscina externa · pavimento de lazer · paisagismo tropical" },
      { src: "assets/gioia/11-piscina-interna.jpg", caption: "Piscina coberta · raia de natação · skylight zenital" },
      { src: "assets/gioia/12-hidro.jpg", caption: "Hidro e SPA · ofurô integrado · ripado de madeira" },
      { src: "assets/gioia/13-academia.jpg", caption: "Academia · equipamentos Technogym · piso em madeira maciça" },
      { src: "assets/gioia/14-salao-festas.jpg", caption: "Salão de festas · pé-direito duplo · espaço gourmet integrado" },
      { src: "assets/gioia/15-play-lounge.jpg", caption: "Play lounge · terraço externo · vista para o jardim privativo" },
      { src: "assets/gioia/16-fire-place.jpg", caption: "Lounge fireplace · jardim tropical · cenário noturno" },
    ],
    blurb: "Torre única no eixo Ecoville — apenas 37 apartamentos, um por andar. Tipologia padrão de 378 m² com 4 suítes e 4 vagas, três variações intermediárias e cobertura duplex de 723 m² com 5 suítes e 5 vagas. Mais de 1.000 m² de área de lazer distribuídos em dois pavimentos.",
    pitch: {
      kicker: "Trinta e sete moradores",
      headline: "Um por andar. E você é um deles.",
      lede: "GIOIA é uma escolha pelo essencial: uma torre única, andares sem vizinhos de corredor e mais de mil metros quadrados de lazer dedicados a apenas 37 famílias. A escala que define quem se encontra no elevador.",
    },
    team: [
      { role: "Construtora", name: "Embraed" },
      { role: "Endereço", name: "R. Dep. Heitor Alencar Furtado, 2944" },
      { role: "Bairro", name: "Ecoville · Curitiba" },
    ],
    stack: [
      { range: "SKY", label: "Cobertura duplex", note: "Suite penthouse · 723,43 m² · 5 suítes · 5 vagas · terraço panorâmico" },
      { range: "ANDARES", label: "1 apartamento por andar", note: "32 tipos A · 378,32 m² · 4 suítes · 4 vagas" },
      { range: "TIPO B", label: "Tipologias intermediárias", note: "3 unidades · 365,90 m² · 1 unidade · 377,35 m²" },
      { range: "LAZER", label: "2 pavimentos de lazer", note: "+1.000 m² · piscinas adulto, infantil e coberta · academia · SPA · sauna · salão de festas · lounge · gourmet · yoga" },
      { range: "TÉRREO", label: "Hall social", note: "Pórtico de entrada · paisagismo · acesso de moradores e serviço independentes" },
    ],
    location: {
      address: "R. Dep. Heitor Alencar Furtado, 2944 · Ecoville · Curitiba",
      lede: "Endereço consolidado do Ecoville, em quadra arborizada, com proximidade do parque, gastronomia e o eixo Mossunguê.",
      points: [
        { label: "Parque Tanguá", v: "1,8 km" },
        { label: "Shopping Park Barigui", v: "3,5 km" },
        { label: "Eixo Heitor Alencar Furtado", v: "frente direta" },
        { label: "Universidade Positivo", v: "2,2 km" },
      ],
    },
    floorPlans: [
      { area: "378 m²", layout: "Tipo A · 4 suítes · 4 vagas · 1 apto por andar", note: "32 unidades · pavimentos padrão" },
      { area: "365 m²", layout: "Tipo B · 4 suítes · 4 vagas", note: "3 unidades · andares intermediários" },
      { area: "377 m²", layout: "Tipo B diferenciado · 4 suítes · 4 vagas", note: "1 unidade exclusiva" },
      { area: "723 m²", layout: "Cobertura duplex · 5 suítes · 5 vagas · terraço com piscina infinity", note: "Pavimento Sky · unidade única" },
    ],
    differentials: [
      {
        title: "Áreas comuns",
        items: [
          "Academia",
          "Brinquedoteca",
          "Piscina adulto, infantil e coberta",
          "Playground · solário · jardim",
          "Salão de festas · terraço festas · gourmet",
          "SPA · sauna seca · sauna úmida · sala de massagem",
          "Estar piscina · lounge lareira · fire place",
          "Sala de yoga",
          "Hall social · pórtico de entrada",
        ],
      },
      {
        title: "Da unidade",
        items: [
          "1 apartamento por andar (tipos A e B)",
          "Cobertura duplex com 5 suítes e área privativa de 723,43 m²",
          "4 vagas para unidade padrão · 5 vagas para a cobertura",
          "Pé-direito ampliado nos ambientes sociais",
          "Suítes com vista plena pela fachada",
          "Sala de banho da master com banheira frente-vidro em mármore Calacatta",
        ],
      },
    ],
    metrics: [
      { k: "Construtora", v: "Embraed" },
      { k: "Total de unidades", v: "37 · sendo 1 por andar" },
      { k: "Endereço", v: "R. Dep. Heitor Alencar Furtado, 2944 · Ecoville" },
      { k: "Tipo A", v: "32 unidades · 378,32 m² · 4 suítes · 4 vagas" },
      { k: "Tipo B", v: "3 unidades · 365,90 m² · 4 suítes · 4 vagas" },
      { k: "Tipo B diferenciado", v: "1 unidade · 377,35 m² · 4 suítes · 4 vagas" },
      { k: "Cobertura duplex", v: "1 unidade · 723,43 m² priv. · 5 suítes · 5 vagas" },
      { k: "Área total", v: "1.064,35 m²" },
      { k: "Lazer", v: "+1.000 m² em 2 pavimentos · academia · piscinas · SPA · salão" },
      { k: "Distribuição", v: "1 apartamento por andar" },
    ],
  },
  {
    ref: "10H · 0207",
    title: "Bowl Sublieme",
    subtitle: "edifício boutique no Batel",
    neighborhood: "Batel",
    city: "Curitiba",
    area: "243 a 502 m²",
    suites: "3 a 5 suítes",
    parking: "3 a 5 vagas",
    price: "R$ 5,8M a R$ 20,6M",
    tag: "edifício boutique · 16 unidades",
    status: "Em curadoria · 12 disponíveis",
    category: "morar",
    tone: "warm",
    src: "assets/bowl/01-fachada.png",
    pos: "center center",
    gallery: [
      { src: "assets/bowl/01-fachada.png", caption: "Fachada · Batel · 6 pavimentos · varandas com paisagismo integrado" },
      { src: "assets/bowl/02-fachada-detalhe.png", caption: "Detalhe da fachada · jardineiras corridas em todos os andares" },
      { src: "assets/bowl/03-living-vista.png", caption: "Living integrado · varanda nivelada · vista para o Batel" },
      { src: "assets/bowl/04-living-jantar.png", caption: "Estar e jantar · pé-direito ampliado · revestimentos em pedra natural" },
      { src: "assets/bowl/05-areas-comuns.png", caption: "Áreas comuns · brinquedoteca · academia · SPA · sala de reunião" },
    ],
    blurb: "Edifício boutique no Batel — apenas 16 unidades em seis pavimentos. Garden de 502 m² com piscina privativa, apartamentos de 243 e 315 m², e três coberturas de até 392 m² privativos (522 m² totais). Entrega prevista para agosto de 2028.",
    pitch: {
      kicker: "Boutique no Batel",
      headline: "Dezesseis unidades. Um endereço.",
      lede: "Bowl Sublieme é um edifício pequeno, escolhido a dedo — Garden no térreo, dois apartamentos por pavimento e três coberturas com vista para o eixo Batel. A escala que permite manter o ritmo de uma casa em meio à melhor centralidade de Curitiba.",
    },
    metrics: [
      { k: "Total de unidades", v: "16 · 4 vendidas · 12 disponíveis" },
      { k: "Entrega", v: "Agosto · 2028" },
      { k: "Endereço", v: "Batel · Curitiba" },
      { k: "Garden 101", v: "502 m² priv. · 849 m² total · 5 suítes · 5 vagas" },
      { k: "Tipologia Esquerdo", v: "243,84 m² · 3 suítes · 3 vagas · finais 01" },
      { k: "Tipologia Direita", v: "243 m² · 3 suítes · 3 vagas · finais 02" },
      { k: "Tipologia Bosque", v: "315 m² · 4 suítes · 4 vagas · finais 03" },
      { k: "Cobertura 601", v: "355 m² · 4 suítes · 4 vagas" },
      { k: "Cobertura 602", v: "353 m² priv. · 420 m² total · 4 suítes" },
      { k: "Cobertura 603", v: "392 m² priv. · 522 m² total · 4 suítes" },
    ],
    floorPlans: [
      { area: "243 m²", layout: "3 suítes · 3 vagas · finais 01 e 02", note: "Pavimentos 2 ao 5 · R$ 5,8M a R$ 7,1M" },
      { area: "315 m²", layout: "4 suítes · 4 vagas · final 03 — Bosque", note: "Pavimentos 2 ao 5 · R$ 8,15M a R$ 9,12M" },
      { area: "502 m²", layout: "Garden · 5 suítes · 5 vagas · 849 m² total", note: "Unidade 101 · R$ 20,6M" },
      { area: "355 — 392 m²", layout: "Coberturas · 4 suítes · até 522 m² total", note: "Pavimento 6 · R$ 10,84M a R$ 13,95M" },
    ],
  },
  {
    ref: "10H · 0118",
    title: "OÁS · GT Building",
    subtitle: "o ponto mais alto de Curitiba",
    neighborhood: "Champagnat · Bigorrilho",
    city: "Curitiba",
    area: "160 a 280 m²",
    suites: "3 suítes",
    parking: "elevador privativo",
    price: "Sob consulta",
    tag: "edifício de assinatura · 179m",
    status: "Em curadoria",
    category: "morar",
    src: "assets/oas/01-torre-dia.png",
    pos: "75% center",
    gallery: [
      { src: "assets/oas/01-torre-dia.png", caption: "Fachada diurna · 179 m · marco da paisagem urbana" },
      { src: "assets/oas/03-torre-noite.png", caption: "Vista noturna · eixo Champagnat · iluminação cenográfica" },
      { src: "assets/oas/02-fachada-entrada.png", caption: "Acesso de pedestres · pórtico de entrada · jardim vertical" },
      { src: "assets/oas/08-terraco-barigui.png", caption: "Terraço privativo · vista para o Parque Barigui" },
      { src: "assets/oas/05-living-cozinha.png", caption: "Living integrado · varanda nivelada · vista panorâmica" },
      { src: "assets/oas/10-living-vista-curitiba.png", caption: "Sala de estar · vista real para o skyline de Curitiba" },
      { src: "assets/oas/09-duplex-rooftop.png", caption: "Duplex rooftop · 49º e 50º andar · escada helicoidal" },
      { src: "assets/oas/04-paisagismo.png", caption: "Paisagismo · 5º pavimento · Rodrigo Oliveira" },
      { src: "assets/oas/06-academia.png", caption: "Academia panorâmica · 25º pavimento Wellness" },
      { src: "assets/oas/07-spa-ofuro.png", caption: "SPA · ofurô e sala de massagem · 25º pavimento" },
    ],
    blurb: "Edifício de assinatura no Champagnat, a 500 metros do Parque Barigui. 179 m de altura, 50 andares e três tipologias — 160, 230 e 280 m² —, todas com elevador privativo por biometria. Projeto de Marcos Bertoldi (interiores), Gustavo Pinto (arquitetura), Rodrigo Oliveira (paisagismo) e Regina Bruni (luminotécnico). Em processo de certificação GBC Brasil Condomínio e operação carbono zero.",
    pitch: {
      kicker: "Um marco na história",
      headline: "50 andares inesquecíveis.",
      lede: "Você está no ponto mais alto da cidade. E com vista para tudo. O OÁS combina 179 m de altura, projeto autoral e localização estratégica no Champagnat — a poucos passos do Parque Barigui e dos endereços mais desejados de Curitiba.",
    },
    team: [
      { role: "Interiores", name: "Marcos Bertoldi" },
      { role: "Arquitetura", name: "Gustavo Pinto" },
      { role: "Paisagismo", name: "Rodrigo Oliveira" },
      { role: "Luminotécnico", name: "Regina Bruni" },
      { role: "Sustentabilidade", name: "Forte Desenvolvimento" },
      { role: "Parking Design", name: "Garagem Plan" },
    ],
    stack: [
      { range: "48 · 49 · 50", label: "Rooftop panorâmico", note: "Champagne bar · lounge · mirante · piscina coberta · sauna · sky deck" },
      { range: "26 — 47", label: "1 apartamento por andar", note: "280 m² · 3 suítes · varanda gourmet" },
      { range: "25", label: "Pavimento Wellness", note: "Academia panorâmica · SPA · ofurô · sala de massagem · varanda de yoga" },
      { range: "06 — 24", label: "2 apartamentos por andar", note: "160 m² ou 230 m² · 3 suítes" },
      { range: "05", label: "Pavimento Recreativo", note: "Lounge · salão de festas · espaço gourmet · brinquedoteca · playground · fireplace · quadra · pet place · espelho d'água" },
      { range: "TÉRREO", label: "Implantação", note: "Acesso moradores e visitantes · acesso corporativo · área corporativa · garagem" },
    ],
    location: {
      address: "Padre Anchieta, 2727 · Champagnat · Curitiba",
      lede: "Champagnat — bairro reconhecido pelas centenas de opções gastronômicas, ruas arborizadas e proximidade do parque mais famoso da cidade.",
      points: [
        { label: "Parque Barigui", v: "0,5 km" },
        { label: "Shopping Pátio Batel", v: "2,0 km" },
        { label: "Av. Padre Agostinho", v: "ligação direta" },
        { label: "R. Jerônimo Durski", v: "via secundária" },
      ],
    },
    floorPlans: [
      { area: "160 m²", layout: "3 suítes · sala de estar · sala de jantar · varanda · banheiro suíte master", note: "6º ao 24º · 2 apartamentos por andar" },
      { area: "230 m²", layout: "3 suítes · sala ampliada · sala de jantar · varanda · banheiro suíte master", note: "6º ao 24º · 2 apartamentos por andar" },
      { area: "280 m²", layout: "3 suítes · sala de estar · sala de jantar · varanda · banheiro master", note: "26º ao 47º · 1 apartamento por andar" },
    ],
    differentials: [
      {
        title: "Comuns ao empreendimento",
        items: [
          "Áreas comuns entregues mobiliadas e decoradas",
          "Internet nas áreas comuns",
          "Gerador de emergência para controles, elevadores e equipamentos técnicos",
          "Sistema de aquecimento (trocador de calor) para as piscinas comuns",
          "Iluminação em LED na fachada",
          "Ar-condicionado VRF nas áreas comuns",
        ],
      },
      {
        title: "Dos apartamentos",
        items: [
          "Elevador privativo em todas as unidades com acionamento por biometria",
          "Nivelamento de piso entre varanda e living",
          "Manta para atenuação acústica das lajes e prumadas",
          "Infraestrutura para ar-condicionado hi-wall ou cassete de 1 via",
          "Rede cabeada nos quartos e salas · ponto para TV a cabo",
          "Paredes em alvenaria",
          "Portas com lâmina retrátil inferior para vedação acústica",
          "Fechadura eletrônica de serviço com controle remoto por app",
          "Peitoril em vidro nas sacadas",
          "Cuba esculpida nos banheiros das suítes",
          "Esquadrias com vidros termoacústicos (laminados ou insulados)",
          "Aquecimento de piso nos banheiros das suítes",
          "Sensores de gás e monóxido de carbono na cozinha e área de serviço",
        ],
      },
      {
        title: "Inteligente · automação",
        items: [
          "Abertura e fechamento de cortinas e persianas",
          "Dimerização de iluminação em todos os apartamentos",
          "Acionamento de cenários inteligentes",
          "Monitoramento de temperatura e luminosidade",
          "Preparado para integração com sistemas de áudio e vídeo",
          "Assessoria gratuita de programadores de automação no primeiro ano",
        ],
      },
    ],
    sustainability: {
      intro: "Um dos primeiros empreendimentos do Brasil considerado carbono zero. Em processo de certificação GBC Brasil Condomínio e selo PBE Edifica (Procel). Todo o CO₂ gerado durante a obra será compensado por projetos de preservação de florestas nativas e recuperação de áreas degradadas.",
      items: [
        "Placas solares no terraço do 5º pavimento para áreas comuns",
        "Selo GBC Brasil Condomínio em processo de certificação",
        "Reuso de água cinza nas bacias sanitárias das áreas comuns",
        "Sistema de irrigação eficiente com sensor de umidade",
        "Plantio composto por espécies nativas regionais",
        "Fachada ventilada · elevador com sistema regenerativo",
        "Ar-condicionado VRV/VRF de alta eficiência",
        "Metais com redutor de vazão (até 60% de economia de água)",
        "Infraestrutura para carregadores elétricos em todas as vagas",
        "Captação e reuso de água pluvial",
        "Vidros duplos nos quartos · horta no edifício",
      ],
    },
    metrics: [
      { k: "Altura", v: "179 m · 50 pavimentos" },
      { k: "Endereço", v: "Padre Anchieta, 2727 · Champagnat" },
      { k: "Tipologias", v: "160 m² · 230 m² · 280 m²" },
      { k: "Distribuição", v: "1 ou 2 apartamentos por andar (6º–47º)" },
      { k: "Coberturas", v: "Duplex 49º e 50º · champagne bar e mirante" },
      { k: "Wellness", v: "25º pavimento · academia · SPA · ofurô · yoga" },
      { k: "Recreativo", v: "5º pavimento · piscinas · lounge · fireplace · pet place" },
      { k: "Interiores", v: "Marcos Bertoldi" },
      { k: "Arquitetura", v: "Gustavo Pinto" },
      { k: "Paisagismo", v: "Rodrigo Oliveira" },
      { k: "Luminotécnico", v: "Regina Bruni" },
      { k: "Sustentabilidade", v: "GBC Brasil · PBE Edifica · carbono zero" },
      { k: "Automação", v: "Cortinas, persianas, cenas e dimerização integradas" },
      { k: "Localização", v: "Parque Barigui 0,5 km · Pátio Batel 2 km" },
    ],
  },
  {
    ref: "10H · 0204",
    title: "Piemonte Poty",
    subtitle: "homenagem a Poty Lazzarotto",
    neighborhood: "Água Verde",
    city: "Curitiba",
    area: "162 a 202 m²",
    suites: "3 suítes",
    parking: "até 4 vagas",
    price: "Sob consulta",
    tag: "edifício de assinatura",
    status: "Em curadoria",
    category: "morar",
    src: "assets/piemonte/exterior.jpg",
    pos: "center bottom",
    gallery: [
      { src: "assets/piemonte/sala-estar-vista.jpg", caption: "Sala de Estar · Torre B · vista real do 18º andar" },
      { src: "assets/piemonte/estar-intimo.jpg", caption: "Estar Íntimo · elevadores privativos em todas as unidades" },
      { src: "assets/piemonte/suite-master.jpg", caption: "Suíte Master · Apartamento Tipo · Torre A" },
      { src: "assets/piemonte/suite-b.jpg", caption: "Suíte · Apartamento Tipo · Torre B" },
      { src: "assets/piemonte/lobby.jpg", caption: "Hall Torre A · Galeria Paty" },
    ],
    blurb: "Edifício de assinatura na Rua Carneiro Lobo. Apartamentos de 162 a 202 m², elevador privativo em cada unidade, terraços de até 33 m² e curadoria de arte em homenagem aos cem anos de Poty Lazzarotto.",
  },
  {
    ref: "10H · 0301",
    title: "Gadens Day · Core Palácio",
    subtitle: "studios e compactos · Centro",
    neighborhood: "Centro",
    city: "Curitiba",
    area: "24 a 42 m²",
    suites: "studios · 1 e 2 dorms",
    price: "A partir de R$ 261.060",
    tone: "forest",
    tag: "pré-lançamento · operação Airbnb",
    status: "Em construção · Ago/2028",
    category: "investir",
    src: "assets/core/fachada.jpg",
    gallery: [
      { src: "assets/core/fachada.jpg", caption: "Fachada · vista pedestre · projeto autoral" },
      { src: "assets/core/varanda-gourmet.jpg", caption: "Terraço com varanda gourmet · pavimento de lazer" },
      { src: "assets/core/terraco-fireplace.jpg", caption: "Fireplace · pérgola e brasa · ambiente noturno" },
      { src: "assets/core/lobby.jpg", caption: "Hall de entrada · piso térreo" },
      { src: "assets/core/fireplace.jpg", caption: "Lounge fireplace · rooftop" },
      { src: "assets/core/academia.jpg", caption: "Academia · pavimento de lazer" },
      { src: "assets/core/yoga-deck.jpg", caption: "Yoga deck · jardim tropical" },
    ],
    blurb: "Lançamento Gadens no eixo central de Curitiba, a poucas quadras dos palácios históricos da cidade. Unidades compactas pensadas para operação de renda curta — studios de 24 m² e compactos de 26 a 42 m², com condição reservada de pré-lançamento (30/70 com 10% de entrada) e potencial de valorização entre tabela e avaliação já no ato.",
    metrics: [
      { k: "Tipologia", v: "Studio · 1 e 2 dorms" },
      { k: "Área privativa", v: "24 — 42 m²" },
      { k: "Entrega", v: "Agosto · 2028" },
      { k: "Pagamento", v: "30/70 · 10% entrada" },
      { k: "Δ avaliação", v: "+8% sobre tabela promocional" },
      { k: "Operação alvo", v: "Renda curta · Airbnb" },
    ],
  },
];

window.S = window.S || {};

/* Central WhatsApp helpers — single source of truth */
const WA_NUMBER = "5541997111147";
const WA_DEFAULT = "Olá, 10HOUSE. Gostaria de um atendimento privado com a curadoria.";
function waLink(msg) {
  return `https://wa.me/${WA_NUMBER}?text=${encodeURIComponent(msg || WA_DEFAULT)}`;
}
function openWa(msg) {
  window.open(waLink(msg), "_blank", "noopener,noreferrer");
}

Object.assign(window.S, { Reveal, Ph, Eyebrow, OrnRule, NumLabel, PropertyCard, SectionHead, Sheet, Marquee, PROPERTIES, Folio, Plate, MarginNote, currentEdition, waLink, openWa, WA_NUMBER, WA_DEFAULT });
