// Duly — product page (v2)
// Structure: editorial calm of v1, real product of v2, only TWO phone shots.
// Cottage hero, principles, one app peek, sage values band, CTA.

const D = {
  cream: "#F4EFE3",
  paper: "#FBF8EE",
  card: "#FFFFFF",
  rule: "#E5DFCF",
  ruleStrong: "#D8D1BD",
  ink: "#1A1D17",
  ink2: "#3D4138",
  mute: "#8C8B7E",
  sage: "#7A9B6E",
  sageDk: "#5C7A52",
  sageDkr: "#4A6342",
  sageLt: "#C8D5BC",
  sageBg: "#E2EAD9",
  sans: "'Geist', system-ui, -apple-system, sans-serif",
  serif: "'Fraunces', Georgia, serif",
  mono: "'Geist Mono', ui-monospace, monospace"
};

// ─── tiny svg icons ─────────────────────────────────────────
const Icon = ({ name, size = 22, color = D.sageDk, stroke = 1.7 }) => {
  const props = { width: size, height: size, viewBox: "0 0 24 24", fill: "none",
    stroke: color, strokeWidth: stroke, strokeLinecap: "round", strokeLinejoin: "round" };
  switch (name) {
    case "home":return <svg {...props}><path d="M3 11l9-7 9 7v9a1 1 0 0 1-1 1h-5v-6h-6v6H4a1 1 0 0 1-1-1z" /></svg>;
    case "vehicle":return <svg {...props}>
      <path d="M3 14l1.5-5A2 2 0 0 1 6.4 7.5h11.2a2 2 0 0 1 1.9 1.5L21 14" />
      <path d="M3 14h18v4a1 1 0 0 1-1 1h-2a1 1 0 0 1-1-1v-1H7v1a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1z" />
      <circle cx="7.5" cy="16.5" r="1" /><circle cx="16.5" cy="16.5" r="1" /></svg>;
    case "person":return <svg {...props}><circle cx="12" cy="8" r="4" /><path d="M4 21c0-4.4 3.6-8 8-8s8 3.6 8 8" /></svg>;
    case "bell":return <svg {...props}><path d="M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9" /><path d="M10 21a2 2 0 0 0 4 0" /></svg>;
    case "arrow":return <svg {...props}><path d="M5 12h14M13 6l6 6-6 6" /></svg>;
    case "pet":return <svg {...props}>
      <circle cx="11" cy="4" r="2" />
      <circle cx="18" cy="8" r="2" />
      <circle cx="20" cy="16" r="2" />
      <path d="M9 10a5 5 0 0 1 5 5v3.5a3.5 3.5 0 0 1-6.84 1.045Q6.52 17.48 4.46 16.84A3.5 3.5 0 0 1 5.5 10z" /></svg>;
    case "child":return <svg {...props}>
      <path d="M9 12h.01" />
      <path d="M15 12h.01" />
      <path d="M10 16c.5.3 1.5.5 2 .5s1.5-.2 2-.5" />
      <path d="M19 6.3a9 9 0 0 1 1.8 3.9 2 2 0 0 1 0 3.6 9 9 0 0 1-17.6 0 2 2 0 0 1 0-3.6A9 9 0 0 1 12 3c2 0 3.5 1.1 3.5 2.5s-.9 2.5-2 2.5c-.8 0-1.5-.4-1.5-1" /></svg>;
    case "rental":return <svg {...props}>
      <rect width="16" height="20" x="4" y="2" rx="2" />
      <path d="M9 22v-4h6v4" />
      <path d="M8 6h.01" />
      <path d="M16 6h.01" />
      <path d="M12 6h.01" />
      <path d="M12 10h.01" />
      <path d="M12 14h.01" />
      <path d="M16 10h.01" />
      <path d="M16 14h.01" />
      <path d="M8 10h.01" />
      <path d="M8 14h.01" /></svg>;
    case "boat":return <svg {...props}>
      <path d="M22 18H2a4 4 0 0 0 4 4h12a4 4 0 0 0 4-4z" />
      <path d="M21 14 10 2 3 14h18z" />
      <path d="M10 2v16" /></svg>;
    case "digital":return <svg {...props}>
      <rect x="3" y="5" width="18" height="12" rx="1.5" />
      <path d="M8 21h8" />
      <path d="M12 17v4" /></svg>;
    case "financial":return <svg {...props}>
      <path d="M3 8v10a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-8a2 2 0 0 0-2-2H5" />
      <path d="M3 8a2 2 0 0 1 2-2h13" />
      <circle cx="17" cy="14" r="1" /></svg>;
    case "plants":return <svg {...props}>
      <path d="M7 20h10" />
      <path d="M10 20c5.5-2.5.8-6.4 3-10" />
      <path d="M9.5 9.4c1.1.8 1.8 2.2 2.3 3.7-2 .4-3.5.4-4.8-.3-1.2-.6-2.3-1.9-3-4.2 2.8-.5 4.4 0 5.5.8z" />
      <path d="M14.1 6a7 7 0 0 0-1.1 4c1.9-.1 3.3-.6 4.3-1.4 1-1 1.6-2.3 1.7-4.6-2.7.1-4 1-4.9 2z" /></svg>;
    default:return null;
  }
};

// ─── Phone frame ───────────────────────────────────────────
function PhoneFrame({ src, tilt = 0, scale = 1 }) {
  const W = 300 * scale,H = 624 * scale;
  return (
    <div style={{
      width: W, height: H, transform: `rotate(${tilt}deg)`,
      borderRadius: 44, padding: 10,
      background: "linear-gradient(160deg, #2A2D26 0%, #1A1D17 100%)",
      boxShadow: "0 50px 100px -40px rgba(40,50,30,0.45), 0 20px 40px -20px rgba(0,0,0,0.25), inset 0 0 0 1px rgba(255,255,255,0.04)",
      position: "relative"
    }}>
      <div style={{ width: "100%", height: "100%", borderRadius: 36, overflow: "hidden", background: D.cream }}>
        <img src={src} alt="" style={{ width: "100%", height: "100%", objectFit: "cover", objectPosition: "top center", display: "block" }} />
      </div>
      <div style={{ position: "absolute", right: -2, top: 110, width: 3, height: 60, background: "rgba(0,0,0,0.4)", borderRadius: "0 2px 2px 0" }}></div>
    </div>);

}

// ─── Top nav (sticky pill, always visible) ───────────────────
function Nav() {
  const link = { color: D.ink2, textDecoration: "none", fontSize: 13, padding: "8px 14px", borderRadius: 999, whiteSpace: "nowrap" };
  return (
    <header style={{
      position: "sticky", top: 16, zIndex: 50,
      display: "flex", justifyContent: "center",
      padding: "16px 16px 0",
      pointerEvents: "none"
    }}>
      <nav style={{
        display: "flex", alignItems: "center", gap: 4,
        padding: "7px 7px 7px 12px",
        background: "rgba(244,239,227,0.85)",
        border: `1px solid ${D.rule}`,
        borderRadius: 999,
        backdropFilter: "blur(24px) saturate(160%)",
        WebkitBackdropFilter: "blur(24px) saturate(160%)",
        boxShadow: "0 8px 24px -12px rgba(40,50,30,0.18)",
        pointerEvents: "auto"
      }}>
        <a href="/" style={{
          display: "flex", alignItems: "center", gap: 8, textDecoration: "none",
          color: D.ink, paddingRight: 10, borderRight: `1px solid ${D.rule}`
        }}>
          <span style={{ display: "inline-block", width: 6, height: 6, borderRadius: 999, background: D.sageDk }}></span>
          <span style={{ fontWeight: 600, fontSize: 13, letterSpacing: "-0.01em", whiteSpace: "nowrap" }}>Crossing Cloud</span>
        </a>
        {[
        { label: "Categories", href: "#what" },
        { label: "Principles", href: "#principles" },
        { label: "Values", href: "#values" }].
        map((item) =>
        <a key={item.label} href={item.href} style={link}>{item.label}</a>
        )}
      </nav>
    </header>);

}

// ─── Hero — cottage scene with floating list card ─────────
function Hero() {
  return (
    <section style={{
      position: "relative",
      padding: "clamp(40px, 7vw, 100px) clamp(20px, 4vw, 56px) clamp(40px, 6vw, 80px)",
      overflow: "hidden"
    }}>
      <div style={{
        maxWidth: 1280, margin: "0 auto",
        display: "grid", gridTemplateColumns: "1.1fr 1fr",
        gap: "clamp(40px, 6vw, 80px)", alignItems: "center"
      }}>
        {/* LEFT — copy */}
        <div>
          <div style={{
            display: "inline-flex", alignItems: "center", gap: 8,
            fontFamily: D.mono, fontSize: 11, color: D.sageDk, textTransform: "uppercase", letterSpacing: "0.16em",
            marginBottom: 26, padding: "6px 12px",
            border: `1px solid ${D.rule}`, borderRadius: 999, background: D.paper
          }}>
            <span style={{ width: 6, height: 6, borderRadius: 999, background: D.sage }} />
            Releasing 2026
          </div>

          <h1 style={{ ...{
              fontFamily: '"EB Garamond", Garamond, Georgia, serif', fontWeight: 500,
              lineHeight: 0.88, letterSpacing: "-0.03em",
              color: D.sageDk, margin: "0 0 24px", fontSize: "82.38px"
            }, color: "rgb(122, 155, 118)" }}>Duly</h1>

          <p style={{
            fontFamily: '"Cormorant Garamond", Garamond, Georgia, serif', fontStyle: "italic", fontWeight: 500,
            fontSize: "clamp(28px, 3.4vw, 44px)", lineHeight: 1.05, letterSpacing: "-0.02em",
            color: D.ink, margin: "8px 0 22px"
          }}>
            Everything. On time.
          </p>

          <p style={{
            fontFamily: D.sans, fontSize: 17, lineHeight: 1.6, color: D.ink2,
            margin: "0 0 32px", maxWidth: 520
          }}>
            HVAC filters. Oil changes. Smoke detector batteries. Passport renewals.
            All the small things that, ignored long enough, become big things.
          </p>

          <div style={{ display: "flex", gap: 12, flexWrap: "wrap", alignItems: "center" }}>
            <a href="#what" style={{
              background: "transparent", color: D.ink, border: `1px solid ${D.ruleStrong}`,
              padding: "16px 24px", borderRadius: 999,
              textDecoration: "none", fontSize: 15, fontWeight: 500
            }}>What does it track?</a>
          </div>

          <div style={{
            marginTop: 44, paddingTop: 20, borderTop: `1px solid ${D.rule}`,
            display: "grid", gridTemplateColumns: "repeat(3, 1fr)", gap: 18,
            fontFamily: D.mono, fontSize: 11, color: D.mute, textTransform: "uppercase", letterSpacing: "0.14em"
          }}>
            <span>Local-first</span>
            <span>iOS · Android</span>
            <span>No required accounts</span>
          </div>
        </div>

        {/* RIGHT — cottage scene + floating list card */}
        <div style={{
          position: "relative", aspectRatio: "0.86 / 1",
          borderRadius: 24, overflow: "hidden",
          background: D.cream, border: `1px solid ${D.rule}`
        }}>
          <img src="assets/duly-welcome-bg.png" alt="" style={{
            position: "absolute", inset: 0, width: "100%", height: "100%", objectFit: "cover"
          }} />
          <div style={{
            position: "absolute", left: "8%", right: "8%", bottom: "9%",
            background: "rgba(251,248,239,0.96)",
            border: `1px solid ${D.rule}`,
            borderRadius: 16, padding: "20px 22px",
            boxShadow: "0 24px 50px -20px rgba(60,80,55,0.25)",
            backdropFilter: "blur(8px)"
          }}>
            <div style={{
              display: "flex", justifyContent: "space-between", alignItems: "baseline",
              marginBottom: 12, paddingBottom: 12, borderBottom: `1px solid ${D.rule}`
            }}>
              <span style={{ fontFamily: D.serif, fontStyle: "italic", fontSize: 22, color: D.sageDk }}>This week</span>
            </div>
            <ul style={{ listStyle: "none", margin: 0, padding: 0, display: "flex", flexDirection: "column", gap: 10 }}>
              {[
              ["Oil change", true],
              ["Smoke detector battery", true],
              ["HVAC filter replacement", true],
              ["Clean windows", false]].
              map(([txt, done], i) =>
              <li key={i} style={{
                display: "flex", alignItems: "center", gap: 12, fontSize: 14,
                color: done ? D.mute : D.ink,
                textDecoration: done ? "line-through" : "none",
                textDecorationColor: D.sageLt
              }}>
                  <span style={{
                  width: 16, height: 16, borderRadius: 5,
                  border: `1.5px solid ${done ? D.sageDk : D.ruleStrong}`,
                  background: done ? D.sageDk : "transparent",
                  display: "grid", placeItems: "center", color: D.cream, fontSize: 11, lineHeight: 1
                }}>{done ? "✓" : ""}</span>
                  {txt}
                </li>
              )}
            </ul>
          </div>
        </div>
      </div>
    </section>);

}

// ─── Categories: what it tracks ────────────────────────────
function Categories() {
  const cats = [
  { icon: "home", title: "Around the house", items: ["HVAC filters", "Smoke detector batteries", "Dryer vent cleaning", "Water filters", "Gutters"] },
  { icon: "vehicle", title: "On the road", items: ["Oil changes", "Tire rotation", "Registration & inspection", "Wiper blades", "Air filter"] },
  { icon: "person", title: "For yourself", items: ["Passport & ID renewals", "Annual physical", "Eye exam", "Dentist", "Prescriptions"] }];

  const moreCats = [
  { icon: "pet", title: "Pet" },
  { icon: "child", title: "Child" },
  { icon: "rental", title: "Rental Property" },
  { icon: "boat", title: "Boat" },
  { icon: "digital", title: "Digital" },
  { icon: "financial", title: "Financial" },
  { icon: "plants", title: "Plants" }];

  return (
    <section id="what" style={{
      padding: "clamp(60px, 8vw, 120px) clamp(20px, 4vw, 56px)",
      background: D.cream,
      borderTop: `1px solid ${D.rule}`,
      borderBottom: `1px solid ${D.rule}`
    }}>
      <div style={{ maxWidth: 1240, margin: "0 auto" }}>
        <div style={{ display: "grid", gridTemplateColumns: "1fr 1.6fr", gap: 64, alignItems: "start", marginBottom: 56 }}>
          <div style={{ fontFamily: D.mono, fontSize: 11, color: D.sageDk, textTransform: "uppercase", letterSpacing: "0.16em", paddingTop: 12 }}>
            ¶ What it tracks
          </div>
          <h2 style={{
            fontFamily: '"EB Garamond", Garamond, Georgia, serif', fontWeight: 400,
            fontSize: "clamp(34px, 4.4vw, 60px)", lineHeight: 1.05,
            color: D.ink, margin: 0, letterSpacing: "-0.02em", maxWidth: 720
          }}>
            Categories to easily manage your life and keep it running smoothly.
          </h2>
        </div>
        <div style={{ display: "grid", gridTemplateColumns: "repeat(3, 1fr)", gap: 24 }}>
          {cats.map((c) =>
          <article key={c.title} style={{
            background: D.card, border: `1px solid ${D.rule}`,
            borderRadius: 18, padding: "28px 26px"
          }}>
              <div style={{
              width: 44, height: 44, borderRadius: 12, background: D.sageBg,
              display: "grid", placeItems: "center", marginBottom: 18
            }}>
                <Icon name={c.icon} size={22} color={D.sageDkr} />
              </div>
              <h3 style={{
              fontFamily: D.serif, fontStyle: "italic", fontWeight: 500,
              fontSize: 26, margin: "0 0 14px", color: D.ink, letterSpacing: "-0.01em"
            }}>{c.title}</h3>
              <ul style={{ listStyle: "none", margin: 0, padding: 0, display: "flex", flexDirection: "column", gap: 8 }}>
                {c.items.map((t) =>
              <li key={t} style={{
                fontFamily: D.sans, fontSize: 14, color: D.ink2,
                paddingLeft: 14, position: "relative"
              }}>
                    <span style={{
                  position: "absolute", left: 0, top: 8,
                  width: 4, height: 4, borderRadius: 999, background: D.sageDk
                }} />
                    {t}
                  </li>
              )}
              </ul>
            </article>
          )}
        </div>
        <div style={{
          marginTop: 28, textAlign: "center",
          fontFamily: D.mono, fontSize: 15, letterSpacing: "0.16em",
          textTransform: "uppercase", color: D.mute
        }}>+ more categories available</div>

        <div style={{
          marginTop: 18,
          display: "grid", gridTemplateColumns: "repeat(auto-fit, minmax(160px, 1fr))",
          gap: 10
        }}>
          {moreCats.map((c) =>
          <div key={c.title} style={{
            background: D.card, border: `1px solid ${D.rule}`,
            borderRadius: 14, padding: "12px 14px",
            display: "flex", alignItems: "center", gap: 10
          }}>
              <div style={{
              width: 34, height: 34, borderRadius: 9, background: D.sageBg,
              display: "grid", placeItems: "center", flexShrink: 0
            }}>
                <Icon name={c.icon} size={20} color={D.sageDkr} />
              </div>
              <span style={{
              fontFamily: D.sans, fontSize: 16, color: D.ink, fontWeight: 500
            }}>{c.title}</span>
            </div>
          )}
        </div>
      </div>
    </section>);

}

// ─── Principles ────────────────────────────────────────────
function Principles() {
  const items = [
  { n: "01", t: "Know what to track", d: "Duly comes pre-loaded with the things people actually forget — HVAC filters, oil changes, passport renewals. Set up your home, your car, your stuff once. The reminders are already there." },
  { n: "02", t: "Set it and check back", d: "Duly isn't a daily to-do list. Add what you need to track once, and it'll be there waiting when the time comes. No daily check-ins required." },
  { n: "03", t: "Your data, your device", d: "Your tasks live on your phone. Yours to keep, yours to back up, yours to walk away with. No account required to get started." }];

  return (
    <section id="principles" style={{
      padding: "clamp(60px, 8vw, 120px) clamp(20px, 4vw, 56px)",
      background: D.paper
    }}>
      <div style={{ maxWidth: 1240, margin: "0 auto" }}>
        <div style={{ display: "grid", gridTemplateColumns: "1fr 1.6fr", gap: 64, alignItems: "start", marginBottom: 56 }}>
          <div style={{ fontFamily: D.mono, fontSize: 11, color: D.sageDk, textTransform: "uppercase", letterSpacing: "0.16em", paddingTop: 12 }}>
            ¶ Three principles
          </div>
          <h2 style={{
            fontFamily: '"EB Garamond", Garamond, Georgia, serif', fontWeight: 400,
            fontSize: "clamp(34px, 4.4vw, 60px)", lineHeight: 1.05,
            color: D.ink, margin: 0, letterSpacing: "-0.02em", maxWidth: 720
          }}>
            What we left out is more important than what we put in.
          </h2>
        </div>
        <div style={{ display: "grid", gridTemplateColumns: "repeat(3, 1fr)", gap: 32 }}>
          {items.map((p) =>
          <article key={p.n} style={{ borderTop: `1px solid ${D.sageDk}`, paddingTop: 24 }}>
              <div style={{ fontFamily: D.mono, fontSize: 11, color: D.sageDk, letterSpacing: "0.18em", marginBottom: 24 }}>{p.n}</div>
              <h3 style={{ fontFamily: D.serif, fontStyle: "italic", fontWeight: 500, fontSize: 28, lineHeight: 1.1, margin: "0 0 14px", color: D.ink }}>{p.t}</h3>
              <p style={{ fontFamily: D.sans, fontSize: 15, lineHeight: 1.6, color: D.ink2, margin: 0 }}>{p.d}</p>
            </article>
          )}
        </div>
      </div>
    </section>);

}

// ─── Glimpse — single phone peek ───────────────────────────
function Glimpse() {
  return (
    <section style={{
      padding: "clamp(60px, 8vw, 120px) clamp(20px, 4vw, 56px)",
      background: D.cream,
      borderTop: `1px solid ${D.rule}`,
      borderBottom: `1px solid ${D.rule}`
    }}>
      <div style={{ maxWidth: 1240, margin: "0 auto" }}>
        <div style={{ display: "grid", gridTemplateColumns: "1.2fr 1fr", gap: 64, alignItems: "center" }}>
          <div>
            <div style={{ fontFamily: D.mono, fontSize: 11, color: D.sageDk, textTransform: "uppercase", letterSpacing: "0.16em", marginBottom: 18 }}>
              § A glimpse of the app
            </div>
            <h2 style={{
              fontFamily: '"EB Garamond", Garamond, Georgia, serif', fontWeight: 400,
              fontSize: "clamp(34px, 4vw, 52px)", lineHeight: 1.05,
              color: D.ink, margin: "0 0 22px", letterSpacing: "-0.02em"
            }}>
              One screen. Everything that matters.
            </h2>
            <p style={{ fontFamily: D.sans, fontSize: 16, lineHeight: 1.65, color: D.ink2, margin: "0 0 14px", maxWidth: 480 }}>
              Duly opens to what's due now and what's coming up. Recurring tasks
              reappear on their own schedule — set them up once and we'll remind
              you when it's time.
            </p>
            <p style={{ fontFamily: D.sans, fontSize: 16, lineHeight: 1.65, color: D.ink2, margin: 0, maxWidth: 480 }}>
              Miss a deadline? Duly tells you. Ignore it for a week? Duly tells
              you again. The whole point is that you don't have to remember any
              of this yourself.
            </p>
          </div>

          <div style={{ display: "flex", justifyContent: "center" }}>
            <PhoneFrame src="assets/duly-app-list.jpg" />
          </div>
        </div>
      </div>
    </section>);

}

// ─── Quietly — sage values band ────────────────────────────
function Quietly() {
  const things = [
  ["No required accounts", "Open the app and start. No signup needed."],
  ["No metrics", "We don't count streaks, points, or 'productivity scores'."],
  ["No AI features", "No chatbots. No 'smart' summaries. No bloat. If we add AI, it's local and quiet."],
  ["No nags", "One reminder when it's due. One if you forget. We're not here to badger you."],
  ["No tracking", "Zero analytics. Zero telemetry. We don't know you're here."]];

  return (
    <section id="values" style={{ ...{
        padding: "clamp(60px, 8vw, 120px) clamp(20px, 4vw, 56px)",
        background: D.sageDk, color: D.cream
      }, background: "rgb(92, 122, 82)" }}>
      <div style={{ maxWidth: 1240, margin: "0 auto" }}>
        <div style={{ display: "grid", gridTemplateColumns: "1fr 1.6fr", gap: 64, marginBottom: 56 }}>
          <div style={{
            fontFamily: D.mono, fontSize: 11, color: "rgba(244,239,227,0.7)",
            textTransform: "uppercase", letterSpacing: "0.16em", paddingTop: 8
          }}>
            ✕ Things we will not do
          </div>
          <h2 style={{
            fontFamily: '"EB Garamond", Garamond, Georgia, serif', fontWeight: 400,
            fontSize: "clamp(34px, 4vw, 52px)", lineHeight: 1.05,
            margin: 0, letterSpacing: "-0.02em", color: D.cream
          }}>
            Some apps add features to compete. Duly leaves them out, on purpose.
          </h2>
        </div>
        <div style={{ display: "grid", gridTemplateColumns: "repeat(3, 1fr)", gap: 0, borderTop: "1px solid rgba(244,239,227,0.18)" }}>
          {things.slice(0, 3).map(([t, d], i) =>
          <div key={t} style={{
            padding: "28px 28px 32px",
            borderRight: i !== 2 ? "1px solid rgba(244,239,227,0.18)" : "none",
            borderBottom: "1px solid rgba(244,239,227,0.18)"
          }}>
              <h3 style={{
              fontFamily: D.serif, fontStyle: "italic", fontWeight: 500,
              fontSize: 26, margin: "0 0 10px", color: D.cream
            }}>{t}</h3>
              <p style={{
              fontFamily: D.sans, fontSize: 14, lineHeight: 1.55,
              color: "rgba(244,239,227,0.78)", margin: 0
            }}>{d}</p>
            </div>
          )}
        </div>
        <div style={{ display: "flex", justifyContent: "center" }}>
          {things.slice(3).map(([t, d], i, arr) =>
          <div key={t} style={{
            flex: "0 0 33.333%",
            padding: "28px 28px 32px",
            borderRight: i < arr.length - 1 ? "1px solid rgba(244,239,227,0.18)" : "none"
          }}>
              <h3 style={{
              fontFamily: D.serif, fontStyle: "italic", fontWeight: 500,
              fontSize: 26, margin: "0 0 10px", color: D.cream
            }}>{t}</h3>
              <p style={{
              fontFamily: D.sans, fontSize: 14, lineHeight: 1.55,
              color: "rgba(244,239,227,0.78)", margin: 0
            }}>{d}</p>
            </div>
          )}
        </div>
      </div>
    </section>);

}

// ─── GetDuly — closing wordmark + Coming Soon card ─────────
function GetDuly() {
  return (
    <section id="get" style={{
      padding: "clamp(80px, 10vw, 160px) clamp(20px, 4vw, 56px)",
      background: D.cream, position: "relative", overflow: "hidden"
    }}>
      <div style={{ maxWidth: 720, margin: "0 auto", textAlign: "center", position: "relative", zIndex: 2 }}>
        <span style={{ ...{
            fontFamily: D.serif, fontWeight: 600, fontSize: 132, lineHeight: 0.9,
            letterSpacing: "-0.025em", color: D.sageDk, display: "inline-block"
          }, fontFamily: '"EB Garamond", Garamond, Georgia, serif', fontWeight: 500, color: "rgb(122, 155, 118)", fontSize: "120px" }}>Duly<sup style={{ fontSize: "0.2em", fontWeight: 400, verticalAlign: "super", marginLeft: "0.05em" }}>™</sup></span>
        <p style={{
          fontFamily: D.serif, fontStyle: "italic", fontWeight: 400,
          fontSize: 30, lineHeight: 1.2, color: D.ink2,
          margin: "12px 0 32px", letterSpacing: "-0.01em"
        }}>Everything. On time.</p>
        <div style={{
          display: "inline-flex", alignItems: "center", gap: 14,
          background: D.card, border: `1px solid ${D.rule}`,
          borderRadius: 18, padding: "22px 28px", margin: "0 auto 28px",
          boxShadow: "0 18px 40px -24px rgba(60,80,55,0.25)"
        }}>
          <div style={{
            width: 44, height: 44, borderRadius: 12,
            background: D.sageBg, display: "grid", placeItems: "center", flexShrink: 0
          }}>
            <Icon name="bell" size={22} color={D.sageDkr} stroke={1.7} />
          </div>
          <div style={{ textAlign: "left" }}>
            <div style={{
              fontFamily: D.mono, fontSize: 10, letterSpacing: "0.16em", textTransform: "uppercase",
              color: D.sageDk, marginBottom: 4
            }}>IN DEVELOPMENT</div>
            <div style={{ fontFamily: D.sans, fontSize: 16, fontWeight: 600, color: D.ink, letterSpacing: "-0.005em" }}>
              Coming soon to the App Store and Google Play
            </div>
          </div>
        </div>
        <div style={{
          fontFamily: D.mono, fontSize: 11, letterSpacing: "0.14em", textTransform: "uppercase", color: D.mute
        }}>IOS · ANDROID

        </div>

        <div style={{ marginTop: 28, display: "flex", justifyContent: "center", alignItems: "flex-start" }}>
          <img src="assets/duly-icon.png" alt="Duly app icon" style={{
            width: 88, height: 88, borderRadius: 20, display: "block",
            boxShadow: "0 8px 24px -10px rgba(60,80,55,0.25)"
          }} />
          <span style={{
            fontSize: 12, lineHeight: 1, color: D.sageDk, fontWeight: 500,
            marginLeft: 3, marginTop: 3
          }}>™</span>
        </div>
      </div>
    </section>);

}

// ─── Footer ──────────────────────────────────────────────
function Footer() {
  return (
    <footer style={{
      padding: "48px clamp(20px, 4vw, 56px)",
      background: D.cream, borderTop: `1px solid ${D.rule}`,
      color: D.mute, fontSize: 13
    }}>
      <div style={{
        maxWidth: 1240, margin: "0 auto",
        display: "flex", justifyContent: "space-between", alignItems: "center",
        flexWrap: "wrap", gap: 16
      }}>
        <div style={{ display: "flex", alignItems: "center", gap: 12 }}>
          <span style={{ display: "inline-block", width: 8, height: 8, borderRadius: 999, background: D.sageDk }}></span>
          <span style={{ fontFamily: D.mono, fontSize: 11, letterSpacing: "0.14em", textTransform: "uppercase" }}>
            A Crossing Cloud app
          </span>
        </div>
        <div style={{ display: "flex", gap: 24 }}>
          <a href="/" style={{ textDecoration: "none", color: D.ink2 }}>Studio</a>
          <a href="/duly-privacy" style={{ textDecoration: "none", color: D.ink2 }}>Privacy</a>
          <a href="/duly-terms" style={{ textDecoration: "none", color: D.ink2 }}>Terms</a>
        </div>
        <div style={{ fontFamily: D.mono, fontSize: 11, letterSpacing: "0.14em", textTransform: "uppercase" }}>
          © 2026 Crossing Cloud™ LLC
        </div>
      </div>
    </footer>);

}

// ─── Page composition ───────────────────────────────────
function DulyPage() {
  // Hash-anchor links scroll smoothly without dirtying the URL.
  // (a) On load, if URL already has #section, scroll there then clear the hash.
  // (b) Intercept future clicks on <a href="#…"> so they scroll without URL change.
  React.useEffect(() => {
    if (window.location.hash) {
      const id = window.location.hash.slice(1);
      setTimeout(() => {
        if (id) {
          const el = document.getElementById(id);
          if (el) el.scrollIntoView({ behavior: "smooth" });
        }
        history.replaceState(null, "", window.location.pathname + window.location.search);
      }, 100);
    }
    const onClick = (e) => {
      const a = e.target.closest && e.target.closest('a[href^="#"]');
      if (!a) return;
      const href = a.getAttribute("href");
      if (!href) return;
      e.preventDefault();
      if (href === "#") {
        window.scrollTo({ top: 0, behavior: "smooth" });
        return;
      }
      const el = document.getElementById(href.slice(1));
      if (el) el.scrollIntoView({ behavior: "smooth" });
    };
    document.addEventListener("click", onClick);
    return () => document.removeEventListener("click", onClick);
  }, []);

  return (
    <div style={{ background: D.cream, minHeight: "100vh" }}>
      <Nav />
      <Hero />
      <Categories />
      <Principles />
      <Glimpse />
      <Quietly />
      <GetDuly />
      <Footer />
    </div>);

}

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