// site.jsx — Monique Leite, Psicóloga
// Single-page warm/editorial site, PT-BR.

const { useState, useEffect, useRef, useMemo } = React;

// ─── Palette options ────────────────────────────────────────────────────────
// [accent, soft, bg, ink]
const PALETTES = [
["#B8896C", "#E8D5C4", "#FAF7F2", "#3A2E26"], // terracotta cream (default)
["#8A9A7B", "#D9DBC9", "#F5F0E8", "#2E332A"], // sage stone
["#C9876A", "#F0DDD1", "#FBF5EF", "#3D2820"], // peach clay
["#6B7B8C", "#D9DEE5", "#F4F1EB", "#2A3038"], // soft slate
["#A88E6E", "#E5DBC9", "#F8F4ED", "#332B22"], // mocha sand
["#D4849A", "#F5DCE2", "#FDF6F4", "#3A2530"], // dusty rose
["#9C8AC4", "#E2D9F0", "#F8F4FB", "#2D2540"], // soft lavender
["#7BA8B8", "#D4E6EC", "#F2F8F9", "#1F3540"], // dusty teal
["#C9A85C", "#F0E2BC", "#FBF7EC", "#3A2F1A"], // honey mustard
["#A8B85C", "#DDE4B8", "#F6F8EA", "#2A3315"] // pistachio
];

const DARK_PALETTES = [
["#D9A88A", "#3A2E26", "#1C1612", "#F0E6DB"],
["#A8B89A", "#2E332A", "#161916", "#E6E8DD"],
["#E0A88A", "#3D2820", "#1A130E", "#F2E6DA"],
["#9CABBE", "#2A3038", "#13171C", "#E2E6EC"],
["#C9A988", "#332B22", "#1A1611", "#EDE5D8"],
["#E8A4B8", "#3A2530", "#1A1015", "#F4DDE5"],
["#B8A6D8", "#2D2540", "#15101F", "#E5DDF0"],
["#9CC4D4", "#1F3540", "#0E1A20", "#DAEAEF"],
["#E0C078", "#3A2F1A", "#1A1408", "#F0E2BC"],
["#C4D078", "#2A3315", "#13180A", "#E0E8C0"]];


const _sysDark = typeof window !== 'undefined' && window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;

const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
  "palette": _sysDark ? DARK_PALETTES[0] : PALETTES[0],
  "fonts": "fraunces-inter",
  "dark": _sysDark,
  "density": "compact"
} /*EDITMODE-END*/;

// ─── Font pairings ──────────────────────────────────────────────────────────
const FONT_PAIRS = {
  "fraunces-inter": { display: "'Fraunces', Georgia, serif", body: "'Inter', -apple-system, sans-serif", label: "Fraunces · Inter" },
  "dmserif-dmsans": { display: "'DM Serif Display', Georgia, serif", body: "'DM Sans', -apple-system, sans-serif", label: "DM Serif · DM Sans" },
  "playfair-mont": { display: "'Playfair Display', Georgia, serif", body: "'Manrope', -apple-system, sans-serif", label: "Playfair · Manrope" },
  "instrument-figtree": { display: "'Instrument Serif', Georgia, serif", body: "'Figtree', -apple-system, sans-serif", label: "Instrument · Figtree" }
};

// ─── Contact constants ──────────────────────────────────────────────────────
const WHATSAPP_NUMBER = "351932874692";
const WHATSAPP_DISPLAY = "+351 932 874 692";
const EMAIL = "moniiqueleite@gmail.com";
const INSTAGRAM = "moniqueleitepsi";
const WA_DEFAULT_MSG = "Olá Monique, gostaria de agendar uma sessão.";
const waLink = (msg = WA_DEFAULT_MSG) => `https://wa.me/${WHATSAPP_NUMBER}?text=${encodeURIComponent(msg)}`;

// ─── Icons (inline SVG, simple geometry only) ───────────────────────────────
const Icon = {
  whatsapp: (p = {}) =>
  <svg viewBox="0 0 24 24" width="18" height="18" fill="currentColor" {...p}>
      <path d="M17.5 14.4c-.3-.1-1.7-.8-2-.9-.3-.1-.5-.1-.7.1-.2.3-.8.9-1 1.1-.2.2-.4.2-.7.1-.3-.1-1.2-.4-2.3-1.4-.9-.8-1.4-1.7-1.6-2-.2-.3 0-.5.1-.6.1-.1.3-.4.4-.5.1-.2.2-.3.3-.5.1-.2 0-.4 0-.5 0-.1-.7-1.7-.9-2.3-.2-.6-.5-.5-.7-.5h-.6c-.2 0-.5.1-.8.4-.3.3-1 1-1 2.5s1.1 2.9 1.2 3.1c.1.2 2.1 3.2 5.1 4.5.7.3 1.3.5 1.7.6.7.2 1.4.2 1.9.1.6-.1 1.7-.7 1.9-1.4.2-.7.2-1.3.2-1.4-.1-.1-.3-.2-.6-.4zM12 2C6.5 2 2 6.5 2 12c0 1.8.5 3.5 1.4 5L2 22l5.2-1.4c1.4.8 3.1 1.2 4.8 1.2 5.5 0 10-4.5 10-10S17.5 2 12 2zm0 18.2c-1.6 0-3.1-.4-4.4-1.2l-.3-.2-3.2.8.9-3.1-.2-.3C3.9 14.9 3.5 13.5 3.5 12 3.5 7.3 7.3 3.5 12 3.5s8.5 3.8 8.5 8.5-3.8 8.2-8.5 8.2z" />
    </svg>,

  instagram: (p = {}) =>
  <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" strokeWidth="1.6" {...p}>
      <rect x="3" y="3" width="18" height="18" rx="5" />
      <circle cx="12" cy="12" r="4" />
      <circle cx="17.5" cy="6.5" r="1" fill="currentColor" stroke="none" />
    </svg>,

  mail: (p = {}) =>
  <svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" strokeWidth="1.6" {...p}>
      <rect x="3" y="5" width="18" height="14" rx="2" />
      <path d="M3 7l9 6 9-6" />
    </svg>,

  arrow: (p = {}) =>
  <svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" strokeWidth="1.8" {...p}>
      <path d="M5 12h14M13 6l6 6-6 6" />
    </svg>,

  plus: (p = {}) =>
  <svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" strokeWidth="1.8" {...p}>
      <path d="M12 5v14M5 12h14" />
    </svg>,

  minus: (p = {}) =>
  <svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" strokeWidth="1.8" {...p}>
      <path d="M5 12h14" />
    </svg>,

  check: (p = {}) =>
  <svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" strokeWidth="2" {...p}>
      <path d="M5 12l4 4 10-10" />
    </svg>,

  sun: (p = {}) =>
  <svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" {...p}>
      <circle cx="12" cy="12" r="4" />
      <path d="M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41" />
    </svg>,

  moon: (p = {}) =>
  <svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round" {...p}>
      <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" />
    </svg>

};

// ─── Read More (mobile expand/collapse) ─────────────────────────────────────
function ReadMore({ full, preview, label = "Ler mais", labelClose = "Ler menos" }) {
  const [mobile] = useState(() => typeof window !== 'undefined' && window.innerWidth <= 880);
  const [open, setOpen] = useState(false);
  if (!mobile) return full;
  return (
    <>
      {open ? full : (preview != null ? preview : null)}
      <button className="read-more-btn" onClick={() => setOpen(o => !o)}>
        {open ? labelClose : label}
      </button>
    </>
  );
}

// ─── Photo placeholder (subtle stripes + monospace label) ───────────────────
function PhotoSlot({ label, ratio = "3/4", style = {}, accent }) {
  return (
    <div className="photo-slot" style={{ aspectRatio: ratio, ...style }}>
      <div className="photo-slot-stripes" />
      <span className="photo-slot-label" style={{ color: accent }}>{label}</span>
    </div>);

}

// ─── Logo mark (mirrors the AboutAnimation aesthetic) ───────────────────────
function LogoMark({ palette, size = 80 }) {
  const id = useMemo(() => 'lm' + Math.random().toString(36).slice(2,6), []);
  const accent = palette[0], soft = palette[1], ink = palette[3];

  const dots = [];
  for (let i = 0; i < 24; i++) {
    const a = (i / 24) * Math.PI * 2;
    dots.push({ x: +(65 + Math.cos(a) * 56).toFixed(1), y: +(65 + Math.sin(a) * 56).toFixed(1), big: i % 6 === 0 });
  }

  return (
    <svg viewBox="0 0 130 130" width={size} height={size} aria-hidden="true" style={{display:'block',flexShrink:0}}>
      <defs>
        <radialGradient id={`${id}-p`} cx="50%" cy="20%" r="80%">
          <stop offset="0%"   stopColor={accent} stopOpacity="0.55"/>
          <stop offset="60%"  stopColor={accent} stopOpacity="0.18"/>
          <stop offset="100%" stopColor={accent} stopOpacity="0"/>
        </radialGradient>
        <radialGradient id={`${id}-c`} cx="50%" cy="50%" r="50%">
          <stop offset="0%"   stopColor={accent} stopOpacity="0.95"/>
          <stop offset="100%" stopColor={accent} stopOpacity="0.4"/>
        </radialGradient>
        <radialGradient id={`${id}-b`} cx="50%" cy="50%" r="50%">
          <stop offset="0%"   stopColor={soft} stopOpacity="0.7"/>
          <stop offset="60%"  stopColor={soft} stopOpacity="0.25"/>
          <stop offset="100%" stopColor={soft} stopOpacity="0"/>
        </radialGradient>
      </defs>

      <circle cx="65" cy="65" r="63" fill={`url(#${id}-b)`}/>

      {[0,60,120,180,240,300].map(deg =>
        <ellipse key={deg} cx="65" cy="30" rx="11" ry="34"
          fill={`url(#${id}-p)`} transform={`rotate(${deg} 65 65)`}/>
      )}

      {dots.map((d,i) =>
        <circle key={i} cx={d.x} cy={d.y} r={d.big ? 3.0 : 1.1}
          fill={d.big ? accent : ink} opacity={d.big ? 0.85 : 0.32}/>
      )}

      <circle cx="65" cy="65" r="28" fill="none" stroke={ink} strokeWidth="0.7" opacity="0.22" strokeDasharray="1 5"/>
      <circle cx="65" cy="65" r="19" fill={soft} opacity="0.55"/>
      <circle cx="65" cy="65" r="19" fill="none" stroke={accent} strokeWidth="0.9" opacity="0.7"/>
      <circle cx="65" cy="65" r="11" fill={`url(#${id}-c)`}/>
      <circle cx="65" cy="65" r="3"   fill={ink}/>
      <circle cx="65" cy="65" r="1.2" fill={soft} opacity="0.8"/>

      <circle cx="109.4" cy="76.9"  r="3.5" fill={accent}/>
      <circle cx="20.6"  cy="53.1"  r="2.0" fill={ink} opacity="0.6"/>
      <circle cx="80.7"  cy="21.8"  r="2.5" fill={ink} opacity="0.55"/>
      <circle cx="49.3"  cy="108.2" r="1.5" fill={accent} opacity="0.8"/>
      <circle cx="86.8"  cy="96.1"  r="1.5" fill={accent}/>
      <circle cx="43.2"  cy="33.9"  r="1.2" fill={ink} opacity="0.5"/>
      <circle cx="97.9"  cy="46.0"  r="1.0" fill={accent} opacity="0.7"/>
      <circle cx="32.1"  cy="84.0"  r="0.9" fill={ink} opacity="0.4"/>
    </svg>);
}

// ─── Sections ───────────────────────────────────────────────────────────────
function Nav({ palette, dark, onToggleDark }) {
  const [open, setOpen] = useState(false);
  const links = [
  ["Sobre", "#sobre"],
  ["Atuação", "#atuacao"],
  ["Empresas", "#empresas"],
  ["Como funciona", "#como-funciona"],
  ["Formação", "#formacao"],
  ["Contato", "#contato"]];

  return (
    <header className="nav">
      <a href="#top" className="nav-brand">
        <span className="nav-mark nav-mark-portrait" aria-hidden="true"></span>
        <span className="nav-name">Monique Leite</span>
        <span className="nav-role">psicóloga</span>
      </a>
      <nav className="nav-links">
        {links.map(([l, h]) => <a key={h} href={h}>{l}</a>)}
      </nav>
      <button className="nav-theme-toggle" onClick={() => onToggleDark(!dark)} aria-label={dark ? "Modo claro" : "Modo escuro"}>
        {dark ? <Icon.sun /> : <Icon.moon />}
      </button>
      <a href={waLink()} target="_blank" rel="noreferrer" className="btn btn-primary nav-cta">
        <Icon.whatsapp /> Agendar
      </a>
      <button className="nav-burger" onClick={() => setOpen(!open)} aria-label="Menu">
        <span /><span /><span />
      </button>
      {open &&
      <div className="nav-mobile" onClick={() => setOpen(false)}>
          {links.map(([l, h]) => <a key={h} href={h}>{l}</a>)}
          <a href={waLink()} target="_blank" rel="noreferrer" className="btn btn-primary"><Icon.whatsapp /> Agendar pelo WhatsApp</a>
        </div>
      }
    </header>);

}

function Hero({ palette }) {
  return (
    <section className="hero" id="top">
      <div className="hero-text">
        <div className="eyebrow">
          <span className="eyebrow-dot" style={{ background: palette[0] }} />
          Psicóloga · Atendimento online
        </div>
        <h1 className="hero-title">
          Um espaço seguro<br />
          para <em>se reencontrar.</em>
        </h1>
        <p className="hero-lede">
          <ReadMore
            preview="Psicóloga com 8 anos de prática clínica em TCC, Neuropsicologia e Análise do Comportamento. Atendo adultos online, apoio parental e consultoria para empresas."
            full={<>Sou a Monique Leite, psicóloga registrada no Brasil com 8 anos de prática clínica — dos primeiros atendimentos como Acompanhante Terapêutica à atuação atual em <em>TCC</em>, <em>Neuropsicologia</em> e <em>Análise do Comportamento</em>. Atendo adultos em terapia online, ofereço apoio parental especializado e atuo como consultora e avaliadora externa para empresas e instituições.</>}
          />
        </p>
        <div className="hero-cta">
          <a href={waLink()} target="_blank" rel="noreferrer" className="btn btn-primary">
            <Icon.whatsapp /> Conversar pelo WhatsApp
          </a>
          <a href="#atuacao" className="btn btn-ghost">
            Conhecer áreas <Icon.arrow />
          </a>
        </div>
        <ReadMore
          label="Ver mais informações"
          labelClose="Ver menos"
          full={<div className="hero-meta">
            <div><strong>Experiência</strong> 8 anos de prática</div>
            <div className="hero-meta-sep" />
            <div><strong>CRP</strong> 06/182206<span className="hero-meta-note"></span></div>
            <div className="hero-meta-sep" />
            <div><strong>Atendimento</strong> Brasil & exterior</div>
            <div className="hero-meta-sep" />
            <div><strong>Idiomas</strong> PT · EN</div>
          </div>}
        />
      </div>
      <div className="hero-photo">
        <div className="photo-slot photo-slot-filled photo-slot-round">
          <img src="assets/portrait_square.png" alt="Retrato de Monique Leite" />
        </div>
        <div className="hero-photo-tag" style={{ background: palette[1], color: palette[3] }}>
          <span className="hero-photo-tag-line" style={{ background: palette[0] }} />
          <span>Atendimento <br /><strong>100% online</strong></span>
        </div>
      </div>
    </section>);

}

function TrustStrip({ palette }) {
  const items = [
  { k: "Sigilo profissional", v: "Conformidade com o Código de Ética do CFP" },
  { k: "Prática baseada em evidência", v: "TCC, Neuropsicologia e Análise do Comportamento" },
  { k: "Atendimento online", v: "Plataformas seguras (Meet · Zoom)" },
  { k: "Pessoas físicas & jurídicas", v: "Clínica, parental e corporativo" }];

  return (
    <div className="trust">
      {items.map((it, i) =>
      <div key={i} className="trust-item">
          <div className="trust-k" style={{ color: palette[0] }}>{it.k}</div>
          <div className="trust-v">{it.v}</div>
        </div>
      )}
    </div>);

}

function AboutAnimation({ palette }) {
  const ringRef = useRef(null);
  const petalRef = useRef(null);
  const innerRef = useRef(null);
  const orbit1Ref = useRef(null);
  const orbit2Ref = useRef(null);
  const orbit3Ref = useRef(null);
  const breatheRef = useRef(null);
  const arcRef = useRef(null);

  useEffect(() => {
    const reduce = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
    let raf;
    let lastT = performance.now();
    let lastScroll = window.scrollY;
    let boost = 0;
    const a = { ring: 0, petal: 0, inner: 0, o1: 0, o2: 0, o3: 0, br: 0, arc: 0 };

    const onScroll = () => {
      const now = performance.now();
      const dy = Math.abs(window.scrollY - lastScroll);
      const dt = Math.max(now - lastT, 1);
      const v = dy / dt;
      boost = Math.min(boost + v * 1.4, 12);
      lastScroll = window.scrollY;
    };
    window.addEventListener("scroll", onScroll, { passive: true });

    const tick = (t) => {
      const dt = Math.min(t - lastT, 64);
      lastT = t;
      boost *= Math.pow(0.92, dt / 16);
      const m = reduce ? 0 : 1 + boost;

      a.ring += 0.0040 * dt * m;
      a.petal -= 0.0024 * dt * m;
      a.inner += 0.0070 * dt * m;
      a.o1 += 0.0085 * dt * m;
      a.o2 -= 0.0050 * dt * m;
      a.o3 += 0.0120 * dt * m;
      a.br += 0.0014 * dt * m;
      a.arc -= 0.0034 * dt * m;

      const set = (r, tr) => r.current && r.current.setAttribute("transform", tr);
      set(ringRef, `rotate(${a.ring} 300 300)`);
      set(petalRef, `rotate(${a.petal} 300 300)`);
      set(innerRef, `rotate(${a.inner} 300 300)`);
      set(orbit1Ref, `rotate(${a.o1} 300 300)`);
      set(orbit2Ref, `rotate(${a.o2} 300 300)`);
      set(orbit3Ref, `rotate(${a.o3} 300 300)`);
      set(arcRef, `rotate(${a.arc} 300 300)`);
      if (breatheRef.current) {
        const s = 1 + Math.sin(a.br) * 0.035;
        breatheRef.current.setAttribute("transform", `translate(300 300) scale(${s}) translate(-300 -300)`);
      }
      raf = requestAnimationFrame(tick);
    };
    raf = requestAnimationFrame(tick);

    return () => {
      cancelAnimationFrame(raf);
      window.removeEventListener("scroll", onScroll);
    };
  }, []);

  const accent = palette[0];
  const soft = palette[1];
  const ink = palette[3];

  const dots = [];
  const N = 64;
  for (let i = 0; i < N; i++) {
    const ang = i / N * Math.PI * 2;
    const r = 268;
    dots.push({ x: 300 + Math.cos(ang) * r, y: 300 + Math.sin(ang) * r, big: i % 8 === 0 });
  }

  const petals = [0, 60, 120, 180, 240, 300];

  return (
    <div className="about-anim" aria-hidden="true">
      <div className="about-anim-bg" />
      <svg viewBox="0 0 600 600">
        <defs>
          <radialGradient id="petalGrad" cx="50%" cy="20%" r="80%">
            <stop offset="0%" stopColor={accent} stopOpacity="0.55" />
            <stop offset="60%" stopColor={accent} stopOpacity="0.18" />
            <stop offset="100%" stopColor={accent} stopOpacity="0" />
          </radialGradient>
          <radialGradient id="coreGrad" cx="50%" cy="50%" r="50%">
            <stop offset="0%" stopColor={accent} stopOpacity="0.95" />
            <stop offset="100%" stopColor={accent} stopOpacity="0.4" />
          </radialGradient>
        </defs>

        <g ref={breatheRef}>
          <g ref={ringRef}>
            {dots.map((d, i) =>
              <circle key={i} cx={d.x} cy={d.y} r={d.big ? 3.6 : 1.4}
                fill={d.big ? accent : ink} opacity={d.big ? 0.85 : 0.32} />
            )}
          </g>

          <g ref={arcRef} fill="none" stroke={accent} strokeWidth="1.2" opacity="0.4">
            <ellipse cx="300" cy="300" rx="240" ry="210" strokeDasharray="2 18" />
            <ellipse cx="300" cy="300" rx="218" ry="232" strokeDasharray="2 22" opacity="0.7" />
          </g>

          <g ref={petalRef}>
            {petals.map((deg) =>
              <ellipse key={deg} cx="300" cy="148" rx="58" ry="170"
                fill="url(#petalGrad)" transform={`rotate(${deg} 300 300)`} />
            )}
            {petals.map((deg) =>
              <ellipse key={`o-${deg}`} cx="300" cy="148" rx="58" ry="170"
                fill="none" stroke={ink} strokeWidth="0.6" opacity="0.18"
                transform={`rotate(${deg} 300 300)`} />
            )}
          </g>

          <g ref={innerRef}>
            <circle cx="300" cy="300" r="140" fill="none" stroke={ink} strokeWidth="0.8" opacity="0.25" strokeDasharray="1 6" />
            <circle cx="300" cy="300" r="98" fill={soft} opacity="0.55" />
            <circle cx="300" cy="300" r="98" fill="none" stroke={accent} strokeWidth="1" opacity="0.7" />
            <circle cx="300" cy="300" r="58" fill="url(#coreGrad)" />
            <circle cx="300" cy="300" r="14" fill={ink} />
            <circle cx="300" cy="300" r="5" fill={soft} />
          </g>

          <g ref={orbit1Ref}>
            <circle cx="540" cy="300" r="9" fill={accent} />
            <circle cx="60" cy="300" r="5" fill={ink} opacity="0.6" />
          </g>
          <g ref={orbit2Ref}>
            <circle cx="300" cy="60" r="7" fill={ink} opacity="0.55" />
            <circle cx="300" cy="540" r="4" fill={accent} opacity="0.8" />
          </g>
          <g ref={orbit3Ref}>
            <circle cx="470" cy="130" r="3.5" fill={accent} />
            <circle cx="130" cy="470" r="3" fill={ink} opacity="0.5" />
            <circle cx="470" cy="470" r="2.5" fill={accent} opacity="0.7" />
            <circle cx="130" cy="130" r="2" fill={ink} opacity="0.4" />
          </g>
        </g>
      </svg>
    </div>);
}

function About({ palette }) {
  const [isMobile] = useState(() => typeof window !== 'undefined' && window.innerWidth <= 880);
  return (
    <section className="about" id="sobre">
      <div className="about-grid">
        {!isMobile && (
          <div className="about-photo">
            <AboutAnimation palette={palette} />
          </div>
        )}
        <div className="about-text">
          <div className="section-eyebrow">Sobre</div>
          <h2 className="section-title">Terapia que cabe no seu tempo, no seu ritmo, na sua história.</h2>
          <ReadMore
            label="Ler mais sobre mim"
            labelClose="Ler menos"
            full={<>
              <p>
                Sou psicóloga registrada no Brasil e atendo majoritariamente online, o que
                me permite acompanhar pessoas em diferentes cidades, fusos e momentos de vida.
                Minha prática integra a <em>Terapia Cognitivo-Comportamental (TCC)</em>, a
                <em>Neuropsicologia</em> e a <em>Análise do Comportamento</em>, sempre adaptada
                ao contexto e à singularidade de cada pessoa.
              </p>
              <p>
                São 8 anos de prática clínica continuada, iniciada como Acompanhante
                Terapêutica (AT) e amadurecida através das pós-graduações em ABA e
                Neuropsicologia — uma trajetória que une rigor técnico e escuta clínica.
                Acredito que terapia é, antes de tudo, um espaço de cuidado: um lugar onde
                você pode se ouvir, ser ouvido, e construir, no próprio tempo, uma relação
                mais gentil consigo mesmo e com quem está ao seu redor.
              </p>
              <ul className="about-bullets">
                <li><span className="bullet-dot" style={{ background: palette[0] }} /> Terapia Cognitivo-Comportamental (TCC) e Neuropsicologia</li>
                <li><span className="bullet-dot" style={{ background: palette[0] }} /> Apoio parental — TDAH, TEA e neurodivergências</li>
                <li><span className="bullet-dot" style={{ background: palette[0] }} /> Análise do Comportamento (ABA) aplicada à clínica</li>
              </ul>
            </>}
          />
        </div>
      </div>
    </section>);

}

const SERVICES = [
{
  title: "Terapia individual — adultos",
  blurb: "Acompanhamento clínico contínuo para ansiedade, autoestima, relações, momentos de transição e autoconhecimento.",
  bullets: ["Sessões semanais ou quinzenais", "Plano terapêutico personalizado", "50 minutos · online"],
  tag: "Clínica"
},
{
  title: "Apoio parental — TDAH e neurodivergências",
  blurb: "Suporte estruturado a pais e responsáveis de crianças com TDAH, TEA e dificuldades de aprendizagem, com base em evidências.",
  bullets: ["Orientação ABA aplicada à rotina", "Estratégias práticas para casa e escola", "Encontros com um ou ambos os cuidadores"],
  tag: "Especialidade"
},
{
  title: "Supervisão em ABA — para profissionais",
  blurb: "Supervisão clínica em Análise do Comportamento dirigida exclusivamente a psicólogos, ATs e demais profissionais que atuam com ABA e queiram aprofundar a prática.",
  bullets: ["Supervisão de casos clínicos", "Discussão de planos de intervenção", "Encontros individuais ou em grupo"],
  tag: "Profissionais"
}];


const BUSINESS_SERVICES = [
{
  title: "Psicóloga corporativa",
  blurb: "Atendimento clínico a colaboradores como benefício corporativo, com sigilo profissional preservado e relatórios agregados.",
  bullets: ["Sessões individuais online", "Pacotes mensais por equipe", "Relatórios agregados e anônimos"],
  tag: "B2B"
},
{
  title: "Consultoria & avaliação externa",
  blurb: "Avaliações comportamentais, pareceres técnicos e consultoria a instituições de educação, saúde e RH.",
  bullets: ["Avaliação comportamental ", "Pareceres e laudos técnicos", "Treinamento de equipes"],
  tag: "Consultoria"
},
{
  title: "Palestras & workshops",
  blurb: "Conteúdo formativo sobre saúde mental, neurodivergências e ABA aplicada a contextos profissionais e educacionais.",
  bullets: ["Saúde mental no trabalho", "TDAH e TEA na vida adulta", "Comunicação não‑violenta e comportamento"],
  tag: "Formação"
}];


function Business({ palette }) {
  return (
    <section className="business" id="empresas" style={{ background: palette[1] + "40" }}>
      <div className="section-head">
        <div className="section-eyebrow">Para empresas & instituições</div>
        <h2 className="section-title">Saúde mental como ativo organizacional.</h2>
        <p className="section-lede">
          Atuo também como psicóloga corporativa, consultora e avaliadora externa para
          empresas, escolas e instituições de saúde — trazendo a Análise do Comportamento
          para contextos onde rigor técnico e cuidado humano precisam coexistir.
        </p>
      </div>
      <div className="services-grid">
        {BUSINESS_SERVICES.map((s, i) =>
        <article key={i} className="service-card service-card-b">
            <div className="service-num" style={{ color: palette[0] }}>B{i + 1}</div>
            <div className="service-tag" style={{ borderColor: palette[1] }}>{s.tag}</div>
            <h3>{s.title}</h3>
            <p>{s.blurb}</p>
            <ul>
              {s.bullets.map((b, j) =>
            <li key={j}><span className="check" style={{ color: palette[0] }}><Icon.check /></span>{b}</li>
            )}
            </ul>
            <a href={waLink(`Olá Monique, gostaria de conversar sobre ${s.title.toLowerCase()} para minha empresa/instituição.`)} target="_blank" rel="noreferrer" className="service-link">
              Solicitar proposta <Icon.arrow />
            </a>
          </article>
        )}
      </div>
      <div className="business-foot">
        <div className="business-foot-text">
          <strong>Trabalha com RH, escola ou clínica?</strong>
          <span>Posso preparar uma proposta sob medida para o contexto da sua equipe.</span>
        </div>
        <a href={`mailto:${EMAIL}?subject=Proposta%20corporativa%20%E2%80%94%20Monique%20Leite`} className="btn btn-primary">
          <Icon.mail /> Solicitar proposta por e‑mail
        </a>
      </div>
    </section>);

}

const SERVICES_ORIGINAL = SERVICES;

function Services({ palette }) {
  return (
    <section className="services" id="atuacao">
      <div className="section-head">
        <div className="section-eyebrow">ÁREAS DE ATUAÇÃO · </div>
        <h2 className="section-title">No que posso te acompanhar.</h2>
      </div>
      <div className="services-grid">
        {SERVICES.map((s, i) =>
        <article key={i} className="service-card">
            <div className="service-num" style={{ color: palette[0] }}>0{i + 1}</div>
            <div className="service-tag" style={{ borderColor: palette[1] }}>{s.tag}</div>
            <h3>{s.title}</h3>
            <p>{s.blurb}</p>
            <ul>
              {s.bullets.map((b, j) =>
            <li key={j}><span className="check" style={{ color: palette[0] }}><Icon.check /></span>{b}</li>
            )}
            </ul>
            <a href={waLink(`Olá Monique, tenho interesse em ${s.title.toLowerCase()}.`)} target="_blank" rel="noreferrer" className="service-link">
              Conversar sobre isso <Icon.arrow />
            </a>
          </article>
        )}
      </div>
    </section>);

}

const STEPS = [
{ n: "01", title: "Primeiro contato", body: "Você me envia uma mensagem pelo WhatsApp ou Instagram contando, em poucas linhas, o que está buscando." },
{ n: "02", title: "Conversa inicial gratuita", body: "Marcamos uma chamada curta de 15 minutos para nos conhecermos e alinharmos expectativas — sem compromisso." },
{ n: "03", title: "Primeira sessão", body: "Combinamos horário fixo, plataforma (Google Meet ou Zoom) e iniciamos o processo no seu ritmo." },
{ n: "04", title: "Acompanhamento contínuo", body: "Construímos juntos um plano terapêutico que respeita sua história, seus objetivos e seu tempo." }];


function HowItWorks({ palette }) {
  return (
    <section className="how" id="como-funciona" style={{ background: palette[1] + "55" }}>
      <div className="section-head">
        <div className="section-eyebrow">Como funciona</div>
        <h2 className="section-title">Do primeiro oi à sua primeira sessão.</h2>
      </div>
      <div className="how-grid">
        {STEPS.map((s) =>
        <div key={s.n} className="how-step">
            <div className="how-num" style={{ color: palette[0] }}>{s.n}</div>
            <h4>{s.title}</h4>
            <p>{s.body}</p>
          </div>
        )}
      </div>
    </section>);

}

function Credentials({ palette }) {
  const items = [
  { y: "Graduação", t: "Psicologia", sub: "Universidade de Guarulhos" },
  { y: "Pós-graduação", t: "Análise do Comportamento (ABA)", sub: "CBI OF MIAMI " },
  { y: "Pós-graduação", t: "Neuropsicologia", sub: "Instituto Israelita Albert Einstein" },
  { y: "Registro", t: "CRP — Conselho Regional de Psicologia de São Paulo", sub: "\n" }];

  return (
    <section className="creds" id="formacao">
      <div className="section-head">
        <div className="section-eyebrow">Formação & registro</div>
        <h2 className="section-title">Base sólida, prática contínua.</h2>
        <p className="section-lede">
          Acredito em formação que se mantém viva. Além da graduação e pós, sigo em
          estudo constante de literatura clínica e supervisão.
        </p>
      </div>
      <ol className="creds-list">
        {items.map((it, i) =>
        <li key={i}>
            <div className="creds-year">{it.y}</div>
            <div className="creds-body">
              <div className="creds-title">{it.t}</div>
              <div className="creds-sub">{it.sub}</div>
            </div>
            <div className="creds-line" style={{ background: palette[1] }} />
          </li>
        )}
      </ol>
    </section>);

}

// Instagram posts. Replace `shortcode` with the part of the URL after /p/ or /reel/.
//   e.g. https://www.instagram.com/p/Cxyz1234abc/  →  shortcode: "Cxyz1234abc"
// While shortcode is null, we render a placeholder. As soon as you fill it in,
// the real Instagram embed appears automatically.
const POSTS = [
{ shortcode: "DVuFpd-DKM_", caption: "Como nomear o que sentimos — e por que isso importa.", tag: "Reflexão" },
{ shortcode: "DYAXoqFjHPB", caption: "TDAH na vida adulta: 5 mitos que precisam parar.", tag: "TDAH" },
{ shortcode: "DSIE97YDPyn", type: "reel", caption: "Rotina e previsibilidade para crianças neurodivergentes.", tag: "Apoio parental" },
{ shortcode: "DR5QdSfjB4_", caption: "Quando procurar terapia? Não precisa esperar a crise.", tag: "Terapia" },
{ shortcode: "DHHGQmWRQX3", caption: "ABA não é treino — é entender o porquê do comportamento.", tag: "ABA" },
{ shortcode: "DU6qpZpjPux", caption: "Pequenos passos contam. (Sempre contam.)", tag: "Reflexão" }];


function Instagram({ palette }) {
  return (
    <section className="ig" id="instagram">
      <div className="section-head ig-head">
        <div>
          <div className="section-eyebrow">No Instagram</div>
          <h2 className="section-title">@{INSTAGRAM}</h2>
          <p className="section-lede">Reflexões, dicas práticas e o dia a dia do consultório online.</p>
        </div>
        <a href={`https://instagram.com/${INSTAGRAM}`} target="_blank" rel="noreferrer" className="btn btn-ghost ig-follow">
          <Icon.instagram /> Seguir no Instagram
        </a>
      </div>
      <div className="ig-grid">
        {POSTS.map((p, i) =>
        p.shortcode ?
        <div key={i} className="ig-card ig-card-embed">
              <iframe
            src={`https://www.instagram.com/${p.type || 'p'}/${p.shortcode}/embed`}
            title={p.caption}
            loading="lazy"
            scrolling="no"
            allowtransparency="true"
            allow="encrypted-media"
            frameBorder="0" />

            </div> :

        <a key={i} href={`https://instagram.com/${INSTAGRAM}`} target="_blank" rel="noreferrer" className="ig-card">
              <PhotoSlot label={`post · ${p.tag.toLowerCase()}`} ratio="1/1" accent={palette[0]} />
              <div className="ig-overlay">
                <div className="ig-tag" style={{ background: palette[0] }}>{p.tag}</div>
                <p>{p.caption}</p>
                <div className="ig-cta"><Icon.instagram /> Ver no Instagram</div>
              </div>
            </a>

        )}
      </div>
    </section>);

}

const FAQS = [
{ q: "Você atende presencialmente?", a: "No momento, atendo majoritariamente online. Isso me permite acompanhar pessoas em diferentes cidades e fusos com a mesma qualidade, segurança e sigilo de um atendimento presencial." },
{ q: "Como são as sessões online?", a: "Acontecem por Google Meet ou Zoom, com 50 minutos de duração, em ambiente reservado e protegido por sigilo profissional. Você só precisa de conexão estável e um espaço onde possa falar à vontade." },
{ q: "Atende crianças?", a: "Minha pós-graduação em ABA me qualifica para o atendimento infantil, mas atualmente concentro a clínica em adultos e no apoio aos pais e cuidadores de crianças com TDAH, TEA e outras neurodivergências. Em ABA, ofereço exclusivamente supervisão a outros profissionais da área." },
{ q: "Quanto custa uma sessão?", a: "O valor é combinado no primeiro contato, considerando frequência e modalidade. Posso enviar todos os detalhes pelo WhatsApp." },
{ q: "Existe primeira conversa gratuita?", a: "Sim. Ofereço uma conversa inicial de 15 minutos, sem compromisso, para nos conhecermos e entendermos se faz sentido seguirmos juntos." },
{ q: "Atende fora do Brasil?", a: "Sim. Atendo brasileiros em qualquer lugar do mundo, com horários adaptados ao fuso de cada pessoa." }];


function FAQ() {
  const [open, setOpen] = useState(0);
  return (
    <section className="faq">
      <div className="section-head">
        <div className="section-eyebrow">Perguntas frequentes</div>
        <h2 className="section-title">Antes da primeira mensagem.</h2>
      </div>
      <div className="faq-list">
        {FAQS.map((f, i) => {
          const isOpen = open === i;
          return (
            <div key={i} className={`faq-item ${isOpen ? "open" : ""}`}>
              <button className="faq-q" onClick={() => setOpen(isOpen ? -1 : i)}>
                <span>{f.q}</span>
                <span className="faq-icon">{isOpen ? <Icon.minus /> : <Icon.plus />}</span>
              </button>
              <div className="faq-a"><p>{f.a}</p></div>
            </div>);

        })}
      </div>
    </section>);

}

function Contact({ palette }) {
  return (
    <section className="contact" id="contato" style={{ background: palette[3], color: palette[2] }}>
      <div className="contact-grid">
        <div>
          <div className="section-eyebrow contact-eyebrow">Vamos conversar</div>
          <h2 className="contact-title">
            O primeiro passo<br />
            costuma ser <em>o mais difícil.</em>
          </h2>
          <p className="contact-lede">
            Se você chegou até aqui, talvez esse passo já esteja sendo dado.
            Me envie uma mensagem — sem pressa, sem fórmula, no jeito que for confortável pra você.
          </p>
        </div>
        <div className="contact-channels">
          <a href={waLink()} target="_blank" rel="noreferrer" className="contact-card contact-wa" style={{ background: palette[0] }}>
            <div className="contact-card-icon"><Icon.whatsapp /></div>
            <div>
              <div className="contact-card-label">WhatsApp</div>
              <div className="contact-card-value">{WHATSAPP_DISPLAY}</div>
            </div>
            <Icon.arrow />
          </a>
          <a href={`https://instagram.com/${INSTAGRAM}`} target="_blank" rel="noreferrer" className="contact-card">
            <div className="contact-card-icon"><Icon.instagram /></div>
            <div>
              <div className="contact-card-label">Instagram</div>
              <div className="contact-card-value">@{INSTAGRAM}</div>
            </div>
            <Icon.arrow />
          </a>
          <a href={`mailto:${EMAIL}`} className="contact-card">
            <div className="contact-card-icon"><Icon.mail /></div>
            <div>
              <div className="contact-card-label">E-mail</div>
              <div className="contact-card-value">{EMAIL}</div>
            </div>
            <Icon.arrow />
          </a>
        </div>
      </div>
    </section>);

}

function Footer({ palette }) {
  return (
    <footer className="footer">
      <div className="footer-row">
        <div className="footer-brand">
          <span className="nav-mark nav-mark-portrait" aria-hidden="true"></span>
          <div>
            <div className="footer-name">Monique Leite</div>
            <div className="footer-role">Psicóloga · CRP 06/182206</div>
          </div>
        </div>
        <div className="footer-links">
          <a href={`https://instagram.com/${INSTAGRAM}`} target="_blank" rel="noreferrer">Instagram</a>
          <a href={waLink()} target="_blank" rel="noreferrer">WhatsApp</a>
          <a href={`mailto:${EMAIL}`}>E-mail</a>
        </div>
      </div>
      <div className="footer-fine">
        <span>© {new Date().getFullYear()} Monique Leite — Todos os direitos reservados.</span>
        <span>Atendimento 100% online · Brasil & exterior</span>
      </div>
    </footer>);

}

function FloatingWA() {
  return (
    <a href={waLink()} target="_blank" rel="noreferrer" className="float-wa" aria-label="Abrir WhatsApp">
      <Icon.whatsapp />
      <span className="float-wa-pulse" />
    </a>);

}

// ─── App ────────────────────────────────────────────────────────────────────
function App() {
  const [t, setTweak] = useTweaks(TWEAK_DEFAULTS);
  const palette = t.palette;
  const fonts = FONT_PAIRS[t.fonts] || FONT_PAIRS["fraunces-inter"];

  // Resolve current palette index from value (so toggling dark mode swaps to matching dark variant)
  const paletteIdx = useMemo(() => {
    const list = t.dark ? DARK_PALETTES : PALETTES;
    const otherList = t.dark ? PALETTES : DARK_PALETTES;
    const inCurrent = list.findIndex((p) => JSON.stringify(p) === JSON.stringify(palette));
    if (inCurrent !== -1) return inCurrent;
    const inOther = otherList.findIndex((p) => JSON.stringify(p) === JSON.stringify(palette));
    return inOther !== -1 ? inOther : 0;
  }, [t.dark, palette]);

  // When user toggles dark, swap palette into matching variant
  const toggleDark = (v) => {
    const list = v ? DARK_PALETTES : PALETTES;
    setTweak({ dark: v, palette: list[paletteIdx] });
  };

  const setPaletteByIndex = (newPalette) => {
    setTweak("palette", newPalette);
  };

  const cssVars = {
    "--accent": palette[0],
    "--soft": palette[1],
    "--bg": palette[2],
    "--ink": palette[3],
    "--ink-70": palette[3] + "B3",
    "--ink-50": palette[3] + "80",
    "--ink-15": palette[3] + "26",
    "--ink-08": palette[3] + "14",
    "--font-display": fonts.display,
    "--font-body": fonts.body,
    "--gap-section": t.density === "compact" ? "64px" : "96px",
    "--pad-x": t.density === "compact" ? "24px" : "40px"
  };

  // Follow system preference changes automatically (unless user has manually toggled)
  const userOverrodeRef = useRef(false);
  useEffect(() => {
    if (!window.matchMedia) return;
    const mq = window.matchMedia('(prefers-color-scheme: dark)');
    const handler = (e) => {
      if (userOverrodeRef.current) return;
      const list = e.matches ? DARK_PALETTES : PALETTES;
      setTweak({ dark: e.matches, palette: list[paletteIdx] });
    };
    mq.addEventListener('change', handler);
    return () => mq.removeEventListener('change', handler);
  }, [paletteIdx]);

  const handleToggleDark = (v) => {
    userOverrodeRef.current = true;
    toggleDark(v);
  };

  return (
    <div className="site" style={cssVars}>
      <Nav palette={palette} dark={t.dark} onToggleDark={handleToggleDark} />
      <main>
        <Hero palette={palette} />
        <TrustStrip palette={palette} />
        <About palette={palette} />
        <Services palette={palette} />
        <Business palette={palette} />
        <HowItWorks palette={palette} />
        <Credentials palette={palette} />
        <Instagram palette={palette} />
        <FAQ />
        <Contact palette={palette} />
      </main>
      <Footer palette={palette} />
      <FloatingWA />

      <TweaksPanel>
        <TweakSection label="Paleta" />
        <TweakColor
          label="Cores"
          value={palette}
          options={t.dark ? DARK_PALETTES : PALETTES}
          onChange={setPaletteByIndex} />
        
        <TweakSection label="Tipografia" />
        <TweakSelect
          label="Pareamento"
          value={t.fonts}
          options={Object.keys(FONT_PAIRS).map((k) => ({ value: k, label: FONT_PAIRS[k].label }))}
          onChange={(v) => setTweak("fonts", v)} />
        

        <TweakSection label="Layout" />
        <TweakRadio
          label="Densidade"
          value={t.density}
          options={["compact", "comfy"]}
          onChange={(v) => setTweak("density", v)} />
        
      </TweaksPanel>
    </div>);

}

ReactDOM.createRoot(document.getElementById("root")).render(<App />);