// Shared content, both directions consume the same copy.

const CONTENT = {
  name: 'Justina Lydia',
  tagline: 'Cuddle therapy for nervous systems that forgot how to rest.',
  shortBio: 'Certified by Cuddlist. Trauma-informed. Fully clothed, fully platonic, fully consensual.',

  about: [
    'I hold a quiet, unhurried space for people who are carrying a lot: the high-strung, the grieving, the touch-starved, the folks whose bodies have been on high alert for too long.',
    'My practice is rooted in consent, nervous-system safety, and the simple, human act of being held without expectation.',
    'Certified through Cuddlist and trained in trauma-informed care, I bring a steady presence so that you can arrive, soften, and remember what rest feels like.',
  ],

  arc: [
    { n: '01', t: 'Shared agreement', d: 'A session usually starts with a conversation. We discuss comfort levels, boundaries, and what kind of touch feels safe to explore. These agreements build trust before any physical contact begins.' },
    { n: '02', t: 'Arriving', d: 'A short, guided grounding meditation to leave the day at the door and return to your body and breath.' },
    { n: '03', t: 'Client-led', d: 'You decide what would support you: stillness and a held hand, sitting back-to-back breathing together, a long quiet hug, spooning, lap-rested, heart-to-heart, hair or back strokes, an arm around your shoulders. We adjust freely.' },
    { n: '04', t: 'Slow close', d: 'Ten minutes of unhurried wind-down, a warm beverage, and a check-in before you re-enter the world.' },
  ],

  offerings: [
    { name: 'In-studio session', len: '60 minutes', price: '$150', note: 'A private, softly-lit space with blankets, pillows, and tea.' },
    { name: 'Extended in-studio', len: '90 minutes', price: '$220', note: 'More room to settle in and let the nervous system actually land.' },
    { name: 'Out-call', len: '2 hour minimum', price: 'from $300', note: 'I come to you. Travel scheduled ahead; screening required.' },
  ],

  trust: [
    { h: 'Cuddlist certified', d: 'Trained and certified through Cuddlist, the recognized practitioner training for platonic touch work.' },
    { h: 'Trauma-informed', d: 'Ongoing study in consent practice and nervous-system regulation.' },
    { h: 'Screening first', d: 'Every new client completes a short intake and a free 15-minute consult before booking.' },
  ],

  faqs: [
    {
      q: 'Is this really fully platonic?',
      a: 'Yes. Both of us stay fully clothed for the entire session. There is no nudity, no sexual touch, and no romantic element, ever. This is professional therapeutic touch. If either of us feels a boundary needs adjusting, we pause and talk about it.',
    },
    {
      q: 'Do I need to tell my partner?',
      a: 'If you\'re partnered, yes, your partner needs to know you\'re coming and be supportive of it. I won\'t knowingly be part of something kept secret from a partner; secrets tend to surface eventually, and I don\'t want to contribute to that kind of hurt. If the conversation feels hard, that\'s something we can talk through on the consult call.',
    },
    {
      q: 'What happens during a session?',
      a: 'We start with a shared agreement reviewing boundaries, then a short grounding meditation to arrive. The middle of the session is client-led, you choose what would support you. That might be stillness with a held hand, sitting back-to-back breathing together, a long hug, spooning, resting your head in my lap, heart-to-heart holding, gentle hair or back strokes, or just an arm around your shoulders. We can shift between positions freely, or stay in one the whole time. We close with ten minutes of quiet wind-down, a warm beverage, and a check-in.',
    },
    {
      q: 'Substances?',
      a: 'No substances before or during a session, no alcohol, no cannabis, nothing. Clear consent requires a clear head, both ways.',
    },
    {
      q: 'What if I want to stop or change something?',
      a: 'You can stop, shift, or adjust at any point, for any reason, with no explanation needed.',
    },
    {
      q: 'Who is this for?',
      a: 'Anxious professionals, folks recovering from grief or loss, touch-starved adults, neurodivergent clients, and anyone whose nervous system needs an unhurried hour. You don\'t have to have a "reason" to come.',
    },
  ],

  testimonials: [
    { q: 'Justina has a deeply compassionate way with her clients: sensitive, careful, and heart-centered. She is so well-grounded in her own body that my nervous system calmed down faster and easier than I expected. I\'m genuinely thankful for the session, and I recommend it without hesitation.', by: 'Frederike' },
    { q: 'I was a little nervous for my first cuddle session, but Justina has such a warm presence that I felt comfortable right away. I felt soothed and relaxed in her arms. While we cuddled, she held space for me to talk about my life, listening closely and offering really insightful reflections. I felt deeply seen and cared for. It was like a perfect, zero-pressure platonic date, inside a therapeutic container where the focus and control always stayed with me.', by: 'Leila' },
    { q: 'Justina\'s way of being brought me back to my senses.', by: 'A. S.' },
  ],

  contact: {
    email: 'hello@justinalydia.com',
    location: 'Private studio · San Francisco, CA',
    hours: 'By appointment · Tue to Sat',
  },
  bookingUrl: 'https://cal.com/justina-lydia/cuddle-therapy-intro-call',
};

// Striped placeholder for imagery that hasn't been shot yet.
function Placeholder({ label = 'image', ratio = '3 / 4', tone = 'warm', style = {}, round = 0 }) {
  const palettes = {
    warm: { a: 'oklch(92% 0.02 70)', b: 'oklch(88% 0.025 65)', ink: 'oklch(40% 0.02 60)' },
    cream: { a: 'oklch(94% 0.025 75)', b: 'oklch(89% 0.035 65)', ink: 'oklch(32% 0.03 50)' },
    dusk: { a: 'oklch(86% 0.02 40)', b: 'oklch(82% 0.03 35)', ink: 'oklch(35% 0.04 30)' },
    sage: { a: 'oklch(90% 0.02 130)', b: 'oklch(86% 0.025 125)', ink: 'oklch(38% 0.03 130)' },
  };
  const p = palettes[tone] || palettes.warm;
  return (
    <div style={{
      aspectRatio: ratio,
      background: `repeating-linear-gradient(135deg, ${p.a} 0 14px, ${p.b} 14px 28px)`,
      display: 'flex', alignItems: 'flex-end', justifyContent: 'flex-start',
      padding: 14, color: p.ink,
      fontFamily: 'JetBrains Mono, ui-monospace, monospace',
      fontSize: 10.5, letterSpacing: '0.08em', textTransform: 'uppercase',
      borderRadius: round,
      ...style,
    }}>
      <span style={{
        background: 'rgba(255,255,255,0.55)',
        padding: '4px 8px', borderRadius: 3,
        backdropFilter: 'blur(2px)',
      }}>{label}</span>
    </div>
  );
}

// Tiny helper: hook into localStorage state
function usePersistedState(key, initial) {
  const [v, setV] = React.useState(() => {
    try {
      const s = localStorage.getItem(key);
      return s == null ? initial : JSON.parse(s);
    } catch { return initial; }
  });
  React.useEffect(() => { try { localStorage.setItem(key, JSON.stringify(v)); } catch {} }, [key, v]);
  return [v, setV];
}

// Photo paths: edited, warm editorial treatment applied
const PHOTOS = {
  portrait: 'photos/justina-portrait.jpg',
  yellow: 'photos/justina-yellow.jpg',
  hands: 'photos/session-hands.jpg',
  close: 'photos/session-close.jpg',
};

// Real-photo swap for Placeholder: same API, falls back if no src
function Photo({ src, ratio = '3 / 4', round = 0, style = {}, position = 'center', label }) {
  return (
    <div style={{
      aspectRatio: ratio,
      background: 'oklch(90% 0.02 70)',
      borderRadius: round,
      overflow: 'hidden',
      position: 'relative',
      ...style,
    }}>
      <img src={src} alt={label || ''} style={{
        width: '100%', height: '100%', objectFit: 'cover', objectPosition: position, display: 'block',
      }}/>
    </div>
  );
}

Object.assign(window, { CONTENT, PHOTOS, Photo, Placeholder, usePersistedState });
