(function () {
// FireTail portfolio — About + Contact
const {
  Avatar,
  Tag,
  Button,
  Input
} = window.FireTailDesignSystem_df7a18;
const EXP = [{
  y: "Nov 2025 — Mar 2026",
  role: "Senior Game Developer",
  org: "Felicity Games",
  note: "A package-level rewards system driven by remote config, live-ops execution across two titles, and a ~20–30% perf pass on the live game.",
  links: [{
    title: "Classic Solitaire",
    publishedId: "classic-solitaire",
    android: "https://play.google.com/store/apps/details?id=nova.solitaire.patience.card.games.klondike.free",
    ios: "https://apps.apple.com/us/app/klondike-solitaire-card-games/id6502341990"
  }, {
    title: "Nut Sort Puzzle",
    publishedId: "nut-sort-puzzle",
    android: "https://play.google.com/store/apps/details?id=com.FelicityGames.NutSortColorSortingPuzzle",
    ios: "https://apps.apple.com/us/app/nut-sort-color-sorting-match/id6744240837"
  }]
}, {
  y: "Jul 2023 — Oct 2025",
  role: "Senior Game Developer",
  org: "Appsoleut Games",
  note: "Race and traffic-AI systems for a multiplayer racer, plus a platform layer unifying three analytics/attribution SDKs — with a ~50% performance turnaround.",
  links: [{
    title: "Car Driving Multiplayer",
    publishedId: "car-driving-multiplayer",
    android: "https://play.google.com/store/apps/details?id=com.appsoleut.car.driving.multiplayer&pcampaignid=web_share",
    ios: "https://apps.apple.com/us/app/car-driving-multiplayer/id6479641114"
  }, {
    title: "Car Parking Driving School",
    publishedId: "car-parking-simulator",
    android: "https://play.google.com/store/apps/details?id=com.racinggames_city.car.racing_Free&pcampaignid=web_share",
    ios: "https://apps.apple.com/us/app/car-parking-driving-school/id1193550697"
  }]
}, {
  y: "Sep 2022 — Jun 2023",
  role: "Game Programmer",
  org: "Metamersive Technologies",
  note: "Gameplay systems, UI, and editor tooling for faster iteration."
}, {
  y: "Nov 2019 — Sep 2022",
  role: "Game Programmer",
  org: "Indusgeeks Solutions",
  note: "Grew from new hire to owning a narrative mobile RPG end to end — built its dialogue/task-flow framework and Android-native save pipeline, shipped to 600k+ downloads.",
  links: [{
    title: "Go Nisha Go",
    publishedId: "go-nisha-go",
    website: "https://www.howard-delafield.com/gonishago"
  }]
}];
// Non-breaking spaces inside "University of Mumbai" — plain-string card row
// (shared rendering with Engines/Platforms/etc.), so a CSS/JSX line break
// isn't an option here; this keeps the university name from splitting itself
// across two lines (previously wrapping mid-phrase as "...University" /
// "of Mumbai") by making the browser treat it as one unbreakable unit that
// either fits or wraps as a whole onto the next line.
const EDU = {
  deg: "Bachelor of Computer Science, University of Mumbai",
  org: "University of Mumbai",
  y: ""
};
const CERTS = [{
  label: "Unity Certified Professional Programmer",
  href: "https://www.credly.com/badges/9dbe219c-cd97-42d0-9ca4-81fd71f07f2f/public_url",
  icon: "/assets/Badges/UnityCertifiedProfessionalProgrammer.png"
}, {
  label: "Unreal Engine 5 Developer",
  href: "https://www.udemy.com/certificate/UC-7f9f1d16-942d-47e5-b646-799a5ac23741/"
}];

// Case studies whose Published Work entry names this company, published only —
// backs the "case study" link row per company in the experience timeline.
function caseStudiesForCompany(org) {
  const published = window.FT_PUBLISHED_WORK || [];
  const studies = window.FT_CASE_STUDIES || [];
  const ids = new Set();
  published.filter(p => p.company === org && p.caseStudyId).forEach(p => ids.add(p.caseStudyId));
  return Array.from(ids).map(id => studies.find(s => s.id === id)).filter(s => s && s.status === "published");
}
function TechChip({
  slug,
  label
}) {
  return /*#__PURE__*/React.createElement("span", {
    style: {
      display: "inline-flex",
      alignItems: "center",
      gap: 8,
      padding: "6px 12px 6px 10px",
      border: "1px solid var(--border-strong)",
      borderRadius: "var(--radius-pill)",
      background: "var(--surface-card)"
    }
  }, /*#__PURE__*/React.createElement(BrandIcon, {
    slug: slug,
    label: label,
    size: 15,
    color: "b3c0d8"
  }), /*#__PURE__*/React.createElement("span", {
    style: {
      fontFamily: "var(--font-mono)",
      fontSize: 13,
      letterSpacing: "0.06em",
      textTransform: "uppercase",
      color: "var(--text-body)"
    }
  }, label));
}
function About() {
  const skills = ["Photon Fusion", "Live Ops", "Performance Optimization", "Addressables", "AI Systems", "CI/CD", "DOTS / ECS", "AI-Assisted Development"];
  const [narrow, setNarrow] = React.useState(() => window.innerWidth < 768);
  React.useEffect(() => {
    const mq = window.matchMedia("(max-width: 767px)");
    const fn = e => setNarrow(e.matches);
    mq.addEventListener("change", fn);
    return () => mq.removeEventListener("change", fn);
  }, []);
  const card = /*#__PURE__*/React.createElement("aside", {
    "data-reveal": true,
    style: {
      background: "var(--surface-card)",
      border: "1px solid var(--border)",
      borderRadius: "var(--radius-lg)",
      padding: "clamp(20px,3vw,28px)",
      ...(narrow ? {
        order: -1
      } : {
        position: "sticky",
        top: 92
      })
    }
  }, /*#__PURE__*/React.createElement("div", {
    style: {
      display: "flex",
      alignItems: "center",
      gap: 14,
      marginBottom: 20
    }
  }, /*#__PURE__*/React.createElement(Avatar, {
    name: "Smit Waghela",
    ring: true,
    size: 56
  }), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
    style: {
      fontFamily: "var(--font-display)",
      fontWeight: 600,
      fontSize: 22,
      color: "var(--text-strong)"
    }
  }, "Senior Unity Gameplay Engineer"), /*#__PURE__*/React.createElement("div", {
    style: {
      fontFamily: "var(--font-mono)",
      fontSize: 13,
      letterSpacing: "0.1em",
      textTransform: "uppercase",
      color: "var(--accent)"
    }
  }, "Open to work"))), [["Education", EDU.deg], ["Certifications", CERTS], ["Engines", "Unity · C# · Unreal · C++"], ["Platforms", "Mobile · PC · WebGL"], ["Languages", "English · Hindi"], ["Based", "Remote · GMT+5:30"]].map(([k, v]) => {
    const badge = k === "Certifications" ? CERTS.find(c => c.icon) : null;
    return /*#__PURE__*/React.createElement("div", {
      key: k,
      style: {
        display: "flex",
        justifyContent: "space-between",
        gap: 16,
        padding: "11px 0",
        borderTop: "1px solid var(--border-faint)"
      }
    }, /*#__PURE__*/React.createElement("span", {
      style: {
        display: "flex",
        flexDirection: "column",
        gap: 8,
        flexShrink: 0
      }
    }, /*#__PURE__*/React.createElement("span", {
      style: {
        fontFamily: "var(--font-mono)",
        fontSize: 13,
        letterSpacing: "0.1em",
        textTransform: "uppercase",
        color: "var(--text-faint)"
      }
    }, k), badge && /*#__PURE__*/React.createElement("a", {
      href: badge.href,
      target: "_blank",
      rel: "noreferrer"
    }, /*#__PURE__*/React.createElement("img", {
      src: badge.icon,
      alt: "",
      loading: "lazy",
      style: {
        width: 28,
        height: 28,
        objectFit: "contain"
      }
    }))), /*#__PURE__*/React.createElement("span", {
      style: {
        fontFamily: "var(--font-sans)",
        fontSize: 16,
        color: "var(--text-body)",
        textAlign: "right"
      }
    }, Array.isArray(v) ? /*#__PURE__*/React.createElement("span", {
      style: {
        display: "flex",
        flexDirection: "column",
        gap: 4,
        alignItems: "flex-end"
      }
    }, v.map(c => /*#__PURE__*/React.createElement("a", {
      key: c.href,
      href: c.href,
      target: "_blank",
      rel: "noreferrer",
      style: {
        color: "inherit",
        textDecoration: "underline",
        textDecorationColor: "var(--border-strong)",
        textUnderlineOffset: 2
      }
    }, c.label))) : v));
  }), /*#__PURE__*/React.createElement("div", {
    id: "ft-anchor-card",
    style: {
      height: 0,
      marginTop: 0,
      overflow: "hidden",
      display: "flex",
      justifyContent: "flex-end",
      alignItems: "center",
      transition: "height .4s var(--ease-out), margin-top .4s var(--ease-out)"
    }
  }));
  return /*#__PURE__*/React.createElement("section", {
    id: "about",
    style: {
      padding: "clamp(40px,6vw,80px) clamp(20px,5vw,48px)",
      borderTop: "1px solid var(--border)"
    }
  }, /*#__PURE__*/React.createElement("div", {
    style: {
      maxWidth: "var(--container)",
      margin: "0 auto",
      display: "grid",
      gridTemplateColumns: narrow ? "1fr" : "minmax(0,1.3fr) minmax(0,1fr)",
      gap: narrow ? 32 : "clamp(32px,5vw,72px)",
      alignItems: "start"
    }
  }, /*#__PURE__*/React.createElement("div", {
    "data-reveal": true
  }, /*#__PURE__*/React.createElement("span", {
    style: {
      fontFamily: "var(--font-mono)",
      fontSize: 14,
      letterSpacing: "0.16em",
      textTransform: "uppercase",
      color: "var(--accent)"
    }
  }, "04 / About"), /*#__PURE__*/React.createElement("h2", {
    style: {
      margin: "12px 0 24px",
      fontFamily: "var(--font-display)",
      fontWeight: 500,
      fontSize: "clamp(28px,4vw,55px)",
      letterSpacing: "-0.02em",
      color: "var(--text-strong)",
      lineHeight: 1.1,
      maxWidth: 640,
      textWrap: "balance"
    }
  }, "I'm Smit, a ", /*#__PURE__*/React.createElement("em", {
    style: {
      color: "var(--accent)",
      fontStyle: "italic"
    }
  }, "senior Unity gameplay engineer"), "."), /*#__PURE__*/React.createElement("div", {
    style: {
      display: "flex",
      flexDirection: "column",
      gap: 18,
      maxWidth: 600
    }
  }, /*#__PURE__*/React.createElement("p", {
    style: pp
  }, "Six years in, and the part I love most is still the stuff nobody sees \u2014 the system quietly holding a game together. I've built that system for live-service mobile puzzles, a multiplayer racer, and a narrative RPG, usually as the person a team hands the hard, ambiguous problem to. Genre, platform, engine \u2014 I'll figure out how to make it work, and make it fast."), /*#__PURE__*/React.createElement("p", {
    style: pp
  }, "Off the clock, I build for the fun of finding out. Three game jam builds have shipped to itch.io, one of them (CosmoLoop) finished on a full night's push before the deadline. The deepest build right now is ShootIt \u2014 a solo cover-shooter with 21 systems across 239 scripts, increasingly built prompting-first: an AI coding assistant for the first pass, my own architecture for the rest. A few other things exist purely because I wanted to know how they work: a DOTS/ECS particle sandbox, a terrain generator that grows its own world, and an ", /*#__PURE__*/React.createElement("a", {
    href: "https://github.com/dluffy121/OpenGLRenderer",
    target: "_blank",
    rel: "noreferrer",
    style: {
      color: "var(--accent)"
    }
  }, "OpenGL renderer"), " built from first principles. Not everything ships. Everything teaches me something I steal for the day job.")), /*#__PURE__*/React.createElement("div", {
    style: {
      marginTop: 28,
      display: "flex",
      gap: 8,
      flexWrap: "wrap"
    }
  }, TECH.map(t => /*#__PURE__*/React.createElement(TechChip, {
    key: t.label,
    slug: t.slug,
    label: t.label
  })), skills.map(s => /*#__PURE__*/React.createElement(Tag, {
    key: s,
    tone: "neutral"
  }, s))), /*#__PURE__*/React.createElement("div", {
    style: {
      marginTop: "clamp(36px,5vw,52px)"
    }
  }, /*#__PURE__*/React.createElement("span", {
    style: {
      fontFamily: "var(--font-mono)",
      fontSize: 13,
      letterSpacing: "0.14em",
      textTransform: "uppercase",
      color: "var(--text-faint)"
    }
  }, "The road so far"), /*#__PURE__*/React.createElement("ol", {
    style: {
      listStyle: "none",
      margin: "18px 0 0",
      padding: 0
    }
  }, EXP.map((e, i) => {
    const csList = caseStudiesForCompany(e.org);
    return /*#__PURE__*/React.createElement("li", {
      key: i,
      id: "exp-" + slugify(e.org),
      style: {
        position: "relative",
        paddingLeft: 26,
        paddingBottom: i === EXP.length - 1 ? 0 : 24,
        scrollMarginTop: 96
      }
    }, /*#__PURE__*/React.createElement("span", {
      style: {
        position: "absolute",
        left: 3,
        top: 5,
        width: 9,
        height: 9,
        borderRadius: "50%",
        background: i === 0 ? "var(--accent)" : "var(--ink-400)",
        boxShadow: i === 0 ? "var(--glow-ember)" : "none"
      }
    }), i !== EXP.length - 1 && /*#__PURE__*/React.createElement("span", {
      style: {
        position: "absolute",
        left: 7,
        top: 16,
        bottom: 2,
        width: 1,
        background: "var(--border-strong)"
      }
    }), /*#__PURE__*/React.createElement("div", {
      style: {
        fontFamily: "var(--font-mono)",
        fontSize: 13,
        letterSpacing: "0.08em",
        color: "var(--text-faint)"
      }
    }, e.y), /*#__PURE__*/React.createElement("div", {
      style: {
        fontFamily: "var(--font-sans)",
        fontSize: 19,
        fontWeight: 600,
        color: "var(--text-strong)",
        marginTop: 3
      }
    }, e.role, " ", /*#__PURE__*/React.createElement("span", {
      style: {
        color: "var(--accent)",
        fontWeight: 500
      }
    }, "\xB7 ", e.org)), /*#__PURE__*/React.createElement("div", {
      style: {
        fontFamily: "var(--font-sans)",
        fontSize: 16,
        color: "var(--text-muted)",
        marginTop: 2
      }
    }, e.note), e.links && /*#__PURE__*/React.createElement("div", {
      style: {
        display: "flex",
        flexWrap: "wrap",
        gap: "6px 14px",
        marginTop: 8
      }
    }, e.links.map(l => /*#__PURE__*/React.createElement("span", {
      key: l.title,
      style: {
        fontFamily: "var(--font-mono)",
        fontSize: 13,
        letterSpacing: "0.04em",
        color: "var(--text-faint)"
      }
    }, /*#__PURE__*/React.createElement("a", {
      href: "#published-" + l.publishedId,
      style: {
        color: "var(--text-faint)",
        textDecoration: "none"
      }
    }, l.title), l.android && l.ios && /*#__PURE__*/React.createElement(React.Fragment, null, " — ", /*#__PURE__*/React.createElement("a", {
      href: l.android,
      target: "_blank",
      rel: "noreferrer",
      style: {
        color: "var(--accent)",
        textDecoration: "none"
      }
    }, "Android"), " · ", /*#__PURE__*/React.createElement("a", {
      href: l.ios,
      target: "_blank",
      rel: "noreferrer",
      style: {
        color: "var(--accent)",
        textDecoration: "none"
      }
    }, "iOS")), l.website && /*#__PURE__*/React.createElement(React.Fragment, null, " — ", /*#__PURE__*/React.createElement("a", {
      href: l.website,
      target: "_blank",
      rel: "noreferrer",
      style: {
        color: "var(--accent)",
        textDecoration: "none"
      }
    }, "Website"))))), csList.length > 0 && /*#__PURE__*/React.createElement("div", {
      style: {
        display: "flex",
        flexWrap: "wrap",
        gap: "6px 14px",
        marginTop: 6
      }
    }, csList.map(cs => /*#__PURE__*/React.createElement("a", {
      key: cs.id,
      href: "#case-study-" + cs.id,
      style: {
        fontFamily: "var(--font-mono)",
        fontSize: 13,
        letterSpacing: "0.04em",
        color: "var(--accent)",
        textDecoration: "none"
      }
    }, "Case study: ", cs.title, " \u2192"))));
  })))), card));
}

// A prior version of this form had a "Send it" button that just flipped to a
// fake "Message sent" state — nothing was actually delivered, since a static
// site has nowhere to send it to. Removed for exactly that reason. This
// version stays honest about what a static site can actually do: it builds a
// mailto: link from what's typed here and hands off to the visitor's own
// mail client, which sends from their own address — nothing is transmitted
// from this page itself.
function Contact() {
  const [name, setName] = React.useState("");
  const [email, setEmail] = React.useState("");
  const [pitch, setPitch] = React.useState("");
  const onSubmit = e => {
    e.preventDefault();
    const subject = `Portfolio contact — ${name}`;
    const body = `Name: ${name}\nEmail: ${email}\n\n${pitch}`;
    window.location.href = `mailto:smit.d.v.49@gmail.com?subject=${encodeURIComponent(subject)}&body=${encodeURIComponent(body)}`;
  };
  return /*#__PURE__*/React.createElement("section", {
    id: "contact",
    style: {
      padding: "clamp(48px,7vw,110px) clamp(20px,5vw,48px)",
      position: "relative"
    }
  }, /*#__PURE__*/React.createElement("div", {
    "data-reveal": true,
    style: {
      position: "relative",
      maxWidth: 880,
      margin: "0 auto",
      textAlign: "center"
    }
  }, /*#__PURE__*/React.createElement("span", {
    style: {
      fontFamily: "var(--font-mono)",
      fontSize: 14,
      letterSpacing: "0.16em",
      textTransform: "uppercase",
      color: "var(--accent)"
    }
  }, "05 / Contact"), /*#__PURE__*/React.createElement("h2", {
    style: {
      margin: "14px auto 18px",
      fontFamily: "var(--font-display)",
      fontWeight: 500,
      fontSize: "clamp(32px,5.5vw,77px)",
      letterSpacing: "-0.02em",
      color: "var(--text-strong)",
      lineHeight: 1.04,
      maxWidth: 640,
      textWrap: "balance"
    }
  }, "Let's talk"), /*#__PURE__*/React.createElement("p", {
    style: {
      ...pp,
      color: "var(--text-muted)",
      margin: "0 auto 36px",
      maxWidth: 480
    }
  }, "Gameplay, tools, prototypes, or a full vertical slice \u2014 reach out and tell me about it."), /*#__PURE__*/React.createElement("form", {
    onSubmit: onSubmit,
    style: {
      maxWidth: 520,
      margin: "0 auto",
      display: "flex",
      flexDirection: "column",
      gap: 16,
      textAlign: "left"
    }
  }, /*#__PURE__*/React.createElement("div", {
    style: {
      display: "grid",
      gridTemplateColumns: "1fr 1fr",
      gap: 16
    }
  }, /*#__PURE__*/React.createElement(Input, {
    label: "Name",
    placeholder: "You / studio",
    required: true,
    value: name,
    onChange: e => setName(e.target.value)
  }), /*#__PURE__*/React.createElement(Input, {
    label: "Email",
    type: "email",
    placeholder: "you@studio.com",
    required: true,
    value: email,
    onChange: e => setEmail(e.target.value)
  })), /*#__PURE__*/React.createElement(Input, {
    label: "The pitch",
    as: "textarea",
    placeholder: "Genre, platform, scope, timeline\u2026",
    required: true,
    value: pitch,
    onChange: e => setPitch(e.target.value)
  }), /*#__PURE__*/React.createElement(Button, {
    size: "lg",
    type: "submit",
    iconRight: /*#__PURE__*/React.createElement("span", {
      style: {
        fontFamily: "var(--font-mono)"
      }
    }, "\u2192")
  }, "Open in mail app"), /*#__PURE__*/React.createElement("p", {
    style: {
      margin: 0,
      fontFamily: "var(--font-sans)",
      fontSize: 15,
      color: "var(--text-faint)",
      textAlign: "center"
    }
  }, "Opens a pre-filled draft in your own email app \u2014 nothing is sent from this page."))));
}
const pp = {
  margin: 0,
  fontFamily: "var(--font-sans)",
  fontSize: 19,
  lineHeight: 1.66,
  color: "var(--text-body)"
};
Object.assign(window, {
  About,
  Contact
});
})();
