PageSourceSearch

https://skillforge.com/assets/index-CXY7xJdM.js

js skillforge.com collected 2026-10-03 22:12:43 UTC 505,071 bytes, 8,027 lines download raw bytes

1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/_404-CJ5XVNv6.js","assets/vendor-Visk9v06.js","assets/preload-DNrUkv91.js","assets/powerpivot-book-CUVPBfij.js","assets/alert-B0IdgUYY.js","assets/copilot-excel-book-DFIX0nXb.js","assets/_id_-BnDw6l9Y.js","assets/student-8iMTkCO3.js","assets/tabs-Cr7Q0jtH.js","assets/ProfileMenu-BH0_dJt6.js","assets/instructor-B8sJKUi6.js","assets/separator-D9zpTTcM.js","assets/instructor-blog-W6A6aBBN.js","assets/BlogImagePicker-IzDWsc-7.js","assets/admin-mwydos7a.js","assets/success-CrklEs3W.js","assets/cancel-C43VT2ZE.js","assets/invoice-confirmation-DnOZWkI0.js","assets/invoice-payment-success-E47MHV7Z.js","assets/staff-login-CdvqelaB.js","assets/reset-password-Chmuuhq4.js","assets/reset-password-confirm-DHEAQV0b.js","assets/test-enrollment-D0tBRKFX.js","assets/test-magic-link-Cw5A0QFT.js","assets/dev-reset-password-C2khYBJ4.js","assets/unsubscribe-BjwoSPno.js","assets/_token_-CIiEJRHv.js","assets/_slug_-CNFgW9eQ.js","assets/done-D8SGsd7a.js"])))=>i.map(i=>d[i]);
2var _a, _b, _c, _d;
3import { _ as __vitePreload } from "./preload-DNrUkv91.js";
4import { r as reactExports, j as jsxRuntimeExports, C as CircleUser, B as Bot, a as ChevronDown, L as LoaderCircle, b as CircleAlert, c as CircleCheck, S as Send, X, d as Link, G as GraduationCap, Y as Youtube, t as twMerge, e as clsx, f as Slot, g as cva, h as createAuthClient, m as magicLinkClient, O as Overlay, P as Portal, i as Content, k as Close, T as Title, D as Description, R as Root, l as Trigger, n as Root$1, o as CollapsibleTrigger$1, p as CollapsibleContent$1, q as Root$2, s as Plus, u as Trash2, v as Root2, I as Item2, w as Indicator, x as Circle, y as Checkbox$1, z as CheckboxIndicator, A as Check, E as useNavigate, F as ShoppingCart, M as Minus, H as CreditCard, J as FileText, K as useLocation, N as Menu, Q as Helmet, U as ScrollRestoration, V as motion, W as Monitor, Z as ArrowRight, _ as Star, $ as Navigate, a0 as Trigger$1, a1 as Icon, a2 as ScrollUpButton, a3 as ChevronUp, a4 as ScrollDownButton, a5 as Portal$1, a6 as Content2, a7 as Viewport, a8 as Label$1, a9 as Item, aa as ItemIndicator, ab as ItemText, ac as Separator, ad as Root2$1, ae as Value, af as useLoaderData, ag as useSearchParams, ah as Search, ai as Calendar, aj as CircleCheckBig, ak as Users, al as Item$1, am as Header$1, an as Trigger2, ao as Content2$1, ap as Root2$2, aq as FileDown, ar as useParams, as as ArrowLeft, at as Clock, au as Tag, av as Video, aw as CirclePlay, ax as Wrench, ay as Award, az as MessageCircle, aA as Target, aB as BookOpen, aC as CircleHelp, aD as MapPin, aE as Headphones, aF as MonitorPlay, aG as Quote, aH as format, aI as ChevronLeft, aJ as ChevronRight, aK as RefreshCw, aL as Phone, aM as Mail, aN as Briefcase, aO as Shield, aP as AnimatePresence, aQ as objectType, aR as stringType, aS as arrayType, aT as Zap, aU as ChartNoAxesColumn, aV as useRouteError, aW as isRouteErrorResponse, aX as Toaster$1, aY as createBrowserRouter, aZ as RouterProvider$1, a_ as Outlet, a$ as QueryClient, b0 as ReactDOM, b1 as React, b2 as HelmetProvider, b3 as QueryClientProvider } from "./vendor-Visk9v06.js";
5const SESSION_KEY = "sf_live_chat_session";
6function getStoredSession() {
7  try {
8    return localStorage.getItem(SESSION_KEY);
9  } catch {
10    return null;
11  }
12}
13function storeSession(id) {
14  try {
15    localStorage.setItem(SESSION_KEY, id);
16  } catch {
17  }
18}
19function clearSession() {
20  try {
21    localStorage.removeItem(SESSION_KEY);
22  } catch {
23  }
24}
25function hasConsent() {
26  try {
27    return localStorage.getItem("c2_analytics_consent") === "true";
28  } catch {
29    return false;
30  }
31}
32function HybridChatWidget() {
33  const [settings, setSettings] = reactExports.useState({
34    enabled: true,
35    offlineOnly: false,
36    botName: "SkillForge Assistant"
37  });
38  const [open, setOpen] = reactExports.useState(false);
39  const [consentReady, setConsentReady] = reactExports.useState(hasConsent());
40  const [aiMessages, setAiMessages] = reactExports.useState([]);
41  const [aiInput, setAiInput] = reactExports.useState("");
42  const [aiLoading, setAiLoading] = reactExports.useState(false);
43  const [showHandoffOption, setShowHandoffOption] = reactExports.useState(false);
44  const [mode, setMode] = reactExports.useState("ai");
45  const [sessionId, setSessionId] = reactExports.useState(null);
46  const [liveMessages, setLiveMessages] = reactExports.useState([]);
47  const [lastMsgId, setLastMsgId] = reactExports.useState(0);
48  const [liveInput, setLiveInput] = reactExports.useState("");
49  const [liveSending, setLiveSending] = reactExports.useState(false);
50  const sessionKey = reactExports.useRef(Math.random().toString(36).slice(2) + Math.random().toString(36).slice(2)).current;
51  const [captureName, setCaptureName] = reactExports.useState("");
52  const [captureEmail, setCaptureEmail] = reactExports.useState("");
53  const [captureMessage, setCaptureMessage] = reactExports.useState("");
54  const [captureSubmitting, setCaptureSubmitting] = reactExports.useState(false);
55  const [captureError, setCaptureError] = reactExports.useState("");
56  const bottomRef = reactExports.useRef(null);
57  const pollRef = reactExports.useRef(null);
58  const inputRef = reactExports.useRef(null);
59  const modeRef = reactExports.useRef(mode);
60  modeRef.current = mode;
61  reactExports.useEffect(() => {
62    if (consentReady) return;
63    const handler = () => setConsentReady(hasConsent());
64    window.addEventListener("storage", handler);
65    const id = setInterval(() => {
66      if (hasConsent()) {
67        setConsentReady(true);
68        clearInterval(id);
69      }
70    }, 1e3);
71    return () => {
72      window.removeEventListener("storage", handler);
73      clearInterval(id);
74    };
75  }, [consentReady]);
76  reactExports.useEffect(() => {
77    fetch("/api/chatbot/settings").then((r) => r.json()).then((d) => setSettings(d)).catch(() => {
78    });
79  }, []);
80  reactExports.useEffect(() => {
81    if (!consentReady) return;
82    const stored = getStoredSession();
83    if (!stored) return;
84    fetch(`/api/live-chat/messages?sessionId=${stored}&after=0`).then((r) => r.json()).then((d) => {
85      var _a2, _b2;
86      if (d.status && d.status !== "ai") {
87        setSessionId(stored);
88        const restored = d.status === "captured" ? "captured" : d.status === "closed" ? "closed" : d.status;
89        setMode(restored);
90        setLiveMessages(d.messages ?? []);
91        setLastMsgId(((_b2 = (_a2 = d.messages) == null ? void 0 : _a2.at(-1)) == null ? void 0 : _b2.id) ?? 0);
92      }
93    }).catch(() => {
94    });
95  }, [consentReady]);
96  reactExports.useEffect(() => {
97    var _a2;
98    (_a2 = bottomRef.current) == null ? void 0 : _a2.scrollIntoView({
99      behavior: "smooth"
100    });
101  }, [aiMessages, liveMessages, aiLoading, mode]);
102  reactExports.useEffect(() => {
103    if (open && mode === "ai" && aiMessages.length === 0 && settings) {
104      setAiMessages([{
105        role: "assistant",
106        content: `Hi! I'm ${settings.botName}. How can I help you today?`
107      }]);
108    }
109  }, [open, mode, aiMessages.length, settings]);
110  reactExports.useEffect(() => {
111    if (open) setTimeout(() => {
112      var _a2;
113      return (_a2 = inputRef.current) == null ? void 0 : _a2.focus();
114    }, 100);
115  }, [open, mode]);
116  const startPolling = reactExports.useCallback((sid, afterId) => {
117    if (pollRef.current) clearInterval(pollRef.current);
118    let after = afterId;
119    pollRef.current = setInterval(async () => {
120      var _a2;
121      try {
122        const r = await fetch(`/api/live-chat/messages?sessionId=${sid}&after=${after}`);
123        const d = await r.json();
124        if (((_a2 = d.messages) == null ? void 0 : _a2.length) > 0) {
125          setLiveMessages((prev) => {
126            const existingIds = new Set(prev.map((m) => m.id));
127            const newMsgs = d.messages.filter((m) => !existingIds.has(m.id));
128            return [...prev, ...newMsgs];
129          });
130          after = d.messages.at(-1).id;
131          setLastMsgId(after);
132        }
133        if (d.status === "active" && modeRef.current !== "active") setMode("active");
134        if (d.status === "closed") {
135          setMode("closed");
136          if (pollRef.current) clearInterval(pollRef.current);
137        }
138      } catch {
139      }
140    }, 2500);
141  }, []);
142  reactExports.useEffect(() => {
143    if ((mode === "waiting" || mode === "active") && sessionId) {
144      startPolling(sessionId, lastMsgId);
145    }
146    return () => {
147      if (pollRef.current) clearInterval(pollRef.current);
148    };
149  }, [mode, sessionId]);
150  function signalsDissatisfaction(text) {
151    const t = text.toLowerCase();
152    return ["that didn't help", "that doesn't help", "not helpful", "not what i", "still don't understand", "still confused", "doesn't answer", "didn't answer", "that's not", "thats not", "wrong answer", "incorrect", "that's wrong", "thats wrong", "not right", "still not sure", "can you explain", "i don't get it", "i dont get it", "more detail", "more information", "talk to", "speak to", "speak with", "talk with", "human", "person", "agent", "someone", "real person", "live chat", "support", "can't find", "cant find", "not working", "doesn't work", "doesnt work", "frustrated", "confused", "lost", "help me", "need help"].some((phrase) => t.includes(phrase));
153  }
154  async function handleAiSend() {
155    const text = aiInput.trim();
156    if (!text || aiLoading) return;
157    setAiInput("");
158    const next = [...aiMessages, {
159      role: "user",
160      content: text
161    }];
162    setAiMessages(next);
163    setAiLoading(true);
164    if (signalsDissatisfaction(text)) setShowHandoffOption(true);
165    try {
166      const res = await fetch("/api/chatbot/chat", {
167        method: "POST",
168        headers: {
169          "Content-Type": "application/json"
170        },
171        body: JSON.stringify({
172          messages: next,
173          sessionKey,
174          pageUrl: window.location.href
175        })
176      });
177      const data2 = await res.json();
178      if (!res.ok) throw new Error(res.status === 503 ? "not currently available" : data2.error ?? "No response");
179      const reply = data2.reply;
180      setAiMessages([...next, {
181        role: "assistant",
182        content: reply
183      }]);
184      const aiUncertain = ["i'm not sure", "i don't know", "i cannot", "i can't", "unable to", "don't have that information", "contact", "reach out", "speak with", "talk to", "support team", "our team"].some((p) => reply.toLowerCase().includes(p));
185      if (aiUncertain) setShowHandoffOption(true);
186    } catch (err) {
187      const msg = err instanceof Error ? err.message : "";
188      const isDisabled = msg.toLowerCase().includes("not currently available") || msg.toLowerCase().includes("503");
189      setAiMessages([...next, {
190        role: "assistant",
191        content: isDisabled ? `The AI assistant isn't active right now. Click "Talk to a person" below to reach our team.` : `Sorry, I'm having trouble responding right now. You can try again or click "Talk to a person" below.`
192      }]);
193      setShowHandoffOption(true);
194    } finally {
195      setAiLoading(false);
196    }
197  }
198  async function handleRequestHuman() {
199    var _a2, _b2;
200    setMode("handoff-choice");
201    let sid = sessionId;
202    if (!sid) {
203      const r = await fetch("/api/live-chat/session", {
204        method: "POST",
205        headers: {
206          "Content-Type": "application/json"
207        },
208        body: JSON.stringify({
209          sessionId: getStoredSession()
210        })
211      });
212      const d = await r.json();
213      sid = d.sessionId;
214      setSessionId(sid);
215      storeSession(sid);
216    }
217    const statusRes = await fetch("/api/live-chat/status");
218    const {
219      online
220    } = await statusRes.json();
221    await fetch("/api/live-chat/handoff", {
222      method: "POST",
223      headers: {
224        "Content-Type": "application/json"
225      },
226      body: JSON.stringify({
227        sessionId: sid,
228        lastAiMessages: aiMessages.slice(-10)
229      })
230    });
231    const msgRes = await fetch(`/api/live-chat/messages?sessionId=${sid}&after=0`);
232    const msgData = await msgRes.json();
233    setLiveMessages(msgData.messages ?? []);
234    setLastMsgId(((_b2 = (_a2 = msgData.messages) == null ? void 0 : _a2.at(-1)) == null ? void 0 : _b2.id) ?? 0);
235    setMode(online ? "waiting" : "capture-form");
236  }
237  async function handleLiveSend() {
238    const text = liveInput.trim();
239    if (!text || liveSending || !sessionId) return;
240    setLiveInput("");
241    setLiveSending(true);
242    try {
243      await fetch("/api/live-chat/messages", {
244        method: "POST",
245        headers: {
246          "Content-Type": "application/json"
247        },
248        body: JSON.stringify({
249          sessionId,
250          content: text
251        })
252      });
253      setLiveMessages((prev) => [...prev, {
254        id: Date.now(),
255        role: "user",
256        content: text,
257        senderName: "You"
258      }]);
259    } catch {
260    } finally {
261      setLiveSending(false);
262    }
263  }
264  async function handleCaptureSubmit(e) {
265    e.preventDefault();
266    if (!captureName.trim() || !captureEmail.trim() || !captureMessage.trim()) {
267      setCaptureError("Please fill in all fields.");
268      return;
269    }
270    setCaptureError("");
271    setCaptureSubmitting(true);
272    try {
273      const res = await fetch("/api/live-chat/capture", {
274        method: "POST",
275        headers: {
276          "Content-Type": "application/json"
277        },
278        body: JSON.stringify({
279          sessionId,
280          name: captureName.trim(),
281          email: captureEmail.trim(),
282          message: captureMessage.trim()
283        })
284      });
285      if (!res.ok) throw new Error("Failed");
286      setMode("captured");
287    } catch {
288      setCaptureError("Something went wrong. Please try again.");
289    } finally {
290      setCaptureSubmitting(false);
291    }
292  }
293  function handleStartOver() {
294    clearSession();
295    setSessionId(null);
296    setMode("ai");
297    setAiMessages([]);
298    setLiveMessages([]);
299    setLastMsgId(0);
300    setShowHandoffOption(false);
301    setCaptureName("");
302    setCaptureEmail("");
303    setCaptureMessage("");
304    if (pollRef.current) clearInterval(pollRef.current);
305  }
306  const botName = settings.botName;
307  return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
308    open && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "fixed bottom-40 right-5 z-50 w-80 sm:w-96 flex flex-col rounded-2xl shadow-2xl overflow-hidden", style: {
309      maxHeight: "540px",
310      background: "hsl(var(--background))"
311    }, children: [
312      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between px-4 py-3 flex-shrink-0", style: {
313        background: "hsl(var(--primary))"
314      }, children: [
315        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
316          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-7 h-7 rounded-full flex items-center justify-center flex-shrink-0", style: {
317            background: "hsl(var(--chat-bubble-strong))"
318          }, children: mode === "active" ? /* @__PURE__ */ jsxRuntimeExports.jsx(CircleUser, { className: "w-4 h-4 text-white" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Bot, { className: "w-4 h-4 text-white" }) }),
319          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
320            /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-white leading-tight", children: mode === "active" ? "Live Support" : botName }),
321            /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-[10px] text-white/70 leading-tight", children: [
322              mode === "ai" && "AI Assistant",
323              mode === "handoff-choice" && "Connecting…",
324              mode === "waiting" && "Waiting for agent…",
325              mode === "active" && "Agent connected",
326              mode === "capture-form" && "Leave a message",
327              mode === "captured" && "Message received",
328              mode === "closed" && "Conversation closed"
329            ] })
330          ] })
331        ] }),
332        /* @__PURE__ */ jsxRuntimeExports.jsx("button", { onClick: () => setOpen(false), className: "text-white/70 hover:text-white transition-colors p-1 rounded", "aria-label": "Close chat", children: /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "w-5 h-5" }) })
333      ] }),
334      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 overflow-y-auto p-3", style: {
335        minHeight: 0,
336        background: "hsl(var(--background))"
337      }, children: [
338        mode === "ai" && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-3", children: [
339          aiMessages.map((m, i) => /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `flex ${m.role === "user" ? "justify-end" : "justify-start"}`, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `max-w-[80%] rounded-2xl px-3 py-2 text-sm leading-relaxed ${m.role === "user" ? "rounded-br-sm" : "rounded-bl-sm"}`, style: m.role === "user" ? {
340            background: "hsl(var(--primary))",
341            color: "white"
342          } : {
343            background: "hsl(var(--muted))",
344            color: "hsl(var(--foreground))"
345          }, children: m.content }) }, i)),
346          aiLoading && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-start", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "rounded-2xl rounded-bl-sm px-3 py-2", style: {
347            background: "hsl(var(--muted))"
348          }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(LoaderCircle, { className: "w-4 h-4 animate-spin text-muted-foreground" }) }) }),
349          showHandoffOption && !aiLoading && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center pt-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx("button", { onClick: handleRequestHuman, className: "text-xs text-primary hover:text-primary/80 underline underline-offset-2 transition-colors", children: "Still need help? Talk to a person" }) }),
350          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: bottomRef })
351        ] }),
352        mode === "handoff-choice" && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center justify-center h-32 gap-3", children: [
353          /* @__PURE__ */ jsxRuntimeExports.jsx(LoaderCircle, { className: "w-6 h-6 animate-spin text-primary" }),
354          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground", children: "Checking availability…" })
355        ] }),
356        (mode === "waiting" || mode === "active") && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-3", children: [
357          liveMessages.map((m, i) => {
358            if (m.role === "system") {
359              return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px] text-muted-foreground italic px-2 text-center", children: m.content }) }, i);
360            }
361            const isUser = m.role === "user";
362            return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `flex ${isUser ? "justify-end" : "justify-start"}`, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-[80%]", children: [
363              !isUser && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-[10px] text-muted-foreground mb-0.5 pl-1", children: m.senderName ?? "Agent" }),
364              /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `rounded-2xl px-3 py-2 text-sm leading-relaxed ${isUser ? "rounded-br-sm" : "rounded-bl-sm"}`, style: isUser ? {
365                background: "hsl(var(--primary))",
366                color: "white"
367              } : {
368                background: "hsl(var(--muted))",
369                color: "hsl(var(--foreground))"
370              }, children: m.content })
371            ] }) }, i);
372          }),
373          mode === "waiting" && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-start", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "rounded-2xl rounded-bl-sm px-3 py-2", style: {
374            background: "hsl(var(--muted))"
375          }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(LoaderCircle, { className: "w-4 h-4 animate-spin text-muted-foreground" }) }) }),
376          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref: bottomRef })
377        ] }),
378        mode === "capture-form" && /* @__PURE__ */ jsxRuntimeExports.jsxs("form", { onSubmit: handleCaptureSubmit, className: "space-y-3", children: [
379          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-foreground leading-relaxed", children: "No agents are available right now. Leave your details and we'll get back to you shortly." }),
380          /* @__PURE__ */ jsxRuntimeExports.jsx("input", { className: "w-full text-sm rounded-lg px-3 py-2 outline-none text-foreground placeholder:text-muted-foreground", style: {
381            background: "hsl(var(--muted))",
382            border: "1px solid hsl(var(--border))"
383          }, placeholder: "Your name", value: captureName, onChange: (e) => setCaptureName(e.target.value), required: true }),
384          /* @__PURE__ */ jsxRuntimeExports.jsx("input", { type: "email", className: "w-full text-sm rounded-lg px-3 py-2 outline-none text-foreground placeholder:text-muted-foreground", style: {
385            background: "hsl(var(--muted))",
386            border: "1px solid hsl(var(--border))"
387          }, placeholder: "Your email", value: captureEmail, onChange: (e) => setCaptureEmail(e.target.value), required: true }),
388          /* @__PURE__ */ jsxRuntimeExports.jsx("textarea", { className: "w-full text-sm rounded-lg px-3 py-2 outline-none text-foreground placeholder:text-muted-foreground resize-none", style: {
389            background: "hsl(var(--muted))",
390            border: "1px solid hsl(var(--border))"
391          }, placeholder: "How can we help you?", rows: 3, value: captureMessage, onChange: (e) => setCaptureMessage(e.target.value), required: true }),
392          captureError && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-xs text-destructive flex items-center gap-1", children: [
393            /* @__PURE__ */ jsxRuntimeExports.jsx(CircleAlert, { className: "w-3 h-3 flex-shrink-0" }),
394            captureError
395          ] }),
396          /* @__PURE__ */ jsxRuntimeExports.jsx("button", { type: "submit", disabled: captureSubmitting, className: "w-full py-2 rounded-lg text-sm font-semibold transition-opacity disabled:opacity-50", style: {
397            background: "hsl(var(--primary))",
398            color: "white"
399          }, children: captureSubmitting ? "Sending…" : "Send Message" })
400        ] }),
401        mode === "captured" && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center justify-center gap-3 py-6 text-center", children: [
402          /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheck, { className: "w-10 h-10 text-primary" }),
403          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-foreground font-semibold", children: "Message received!" }),
404          /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-xs text-muted-foreground leading-relaxed", children: [
405            "We'll get back to you at ",
406            /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: captureEmail }),
407            " as soon as possible."
408          ] }),
409          /* @__PURE__ */ jsxRuntimeExports.jsx("button", { onClick: handleStartOver, className: "mt-2 text-xs text-primary hover:text-primary/80 underline underline-offset-2", children: "Start a new conversation" })
410        ] }),
411        mode === "closed" && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center justify-center gap-3 py-6 text-center", children: [
412          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-foreground font-semibold", children: "Conversation closed" }),
413          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground", children: "This chat session has ended." }),
414          /* @__PURE__ */ jsxRuntimeExports.jsx("button", { onClick: handleStartOver, className: "mt-2 text-xs text-primary hover:text-primary/80 underline underline-offset-2", children: "Start a new conversation" })
415        ] })
416      ] }),
417      (mode === "ai" || mode === "active" || mode === "waiting") && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-3 flex gap-2 flex-shrink-0", style: {
418        background: "hsl(var(--background))",
419        borderTop: "1px solid hsl(var(--border))"
420      }, children: [
421        /* @__PURE__ */ jsxRuntimeExports.jsx("input", { ref: inputRef, className: "flex-1 text-sm rounded-full px-3 py-1.5 outline-none text-foreground placeholder:text-muted-foreground", style: {
422          background: "hsl(var(--muted))",
423          border: "1px solid hsl(var(--border))"
424        }, placeholder: mode === "waiting" ? "Waiting for agent…" : "Type a message…", value: mode === "ai" ? aiInput : liveInput, onChange: (e) => mode === "ai" ? setAiInput(e.target.value) : setLiveInput(e.target.value), onKeyDown: (e) => {
425          if (e.key === "Enter" && !e.shiftKey) {
426            e.preventDefault();
427            if (mode === "ai") handleAiSend();
428            else if (mode === "active") handleLiveSend();
429          }
430        }, disabled: mode === "waiting" || aiLoading || liveSending }),
431        /* @__PURE__ */ jsxRuntimeExports.jsx("button", { onClick: mode === "ai" ? handleAiSend : handleLiveSend, disabled: mode === "waiting" || mode === "ai" && (aiLoading || !aiInput.trim()) || mode === "active" && (liveSending || !liveInput.trim()), className: "w-8 h-8 rounded-full flex items-center justify-center disabled:opacity-40 transition-opacity flex-shrink-0", style: {
432          background: "hsl(var(--primary))"
433        }, "aria-label": "Send message", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Send, { className: "w-3.5 h-3.5 text-white" }) })
434      ] })
435    ] }),
436    /* @__PURE__ */ jsxRuntimeExports.jsxs("button", { onClick: () => setOpen((o) => !o), className: "fixed bottom-5 right-5 z-50 w-14 h-14 rounded-full shadow-lg flex items-center justify-center transition-transform hover:scale-105 active:scale-95", style: {
437      background: "hsl(var(--primary))"
438    }, "aria-label": open ? "Close chat" : "Open chat", children: [
439      open ? /* @__PURE__ */ jsxRuntimeExports.jsx(X, { className: "w-6 h-6 text-white" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Bot, { className: "w-6 h-6 text-white" }),
440      mode === "waiting" && !open && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "absolute top-1 right-1 w-3 h-3 rounded-full border-2 border-white animate-pulse", style: {
441        background: "hsl(var(--chat-online-dot))"
442      } })
443    ] })
444  ] });
445}
446function Footer() {
447  const currentYear = (/* @__PURE__ */ new Date()).getFullYear();
448  const footerLinks = {
449    company: [{
450      name: "About",
451      href: "/about"
452    }, {
453      name: "Courses",
454      href: "/courses"
455    }, {
456      name: "Careers",
457      href: "/careers"
458    }, {
459      name: "Contact",
460      href: "/contact-us"
461    }],
462    support: [{
463      name: "FAQ",
464      href: "/instructor-led-online-class-faqs"
465    }, {
466      name: "Privacy Policy",
467      href: "/privacy-policy"
468    }],
469    portals: [{
470      name: "Student Portal",
471      href: "/student"
472    }]
473  };
474  return /* @__PURE__ */ jsxRuntimeExports.jsx("footer", { className: "bg-muted border-t border-border", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-12", children: [
475    /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-1 md:grid-cols-4 gap-8", children: [
476      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "col-span-1", children: [
477        /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: "/", className: "flex items-center gap-2 mb-4", children: [
478          /* @__PURE__ */ jsxRuntimeExports.jsx(GraduationCap, { className: "h-8 w-8 text-primary" }),
479          /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-xl font-bold text-foreground", children: [
480            "SkillForge",
481            /* @__PURE__ */ jsxRuntimeExports.jsx("sup", { className: "text-[0.6em] font-normal align-super", children: "®" })
482          ] })
483        ] }),
484        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground mb-5", children: "Empowering professionals through expert-led training and development programs." }),
485        /* @__PURE__ */ jsxRuntimeExports.jsxs("a", { href: "https://www.youtube.com/skillforge", target: "_blank", rel: "noopener noreferrer", className: "inline-flex items-center gap-2 text-sm text-muted-foreground hover:text-red-600 transition-colors group", "aria-label": "SkillForge on YouTube", children: [
486          /* @__PURE__ */ jsxRuntimeExports.jsx(Youtube, { className: "w-5 h-5 text-red-500 group-hover:text-red-600 transition-colors" }),
487          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Watch on YouTube" })
488        ] })
489      ] }),
490      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
491        /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "font-semibold text-foreground mb-4", children: "Company" }),
492        /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { className: "space-y-2", children: footerLinks.company.map((link) => /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: link.href, className: "text-sm text-muted-foreground hover:text-primary transition-colors", children: link.name }) }, link.name)) })
493      ] }),
494      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
495        /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "font-semibold text-foreground mb-4", children: "Support" }),
496        /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { className: "space-y-2", children: footerLinks.support.map((link) => /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: link.href, className: "text-sm text-muted-foreground hover:text-primary transition-colors", children: link.name }) }, link.name)) })
497      ] }),
498      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
499        /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "font-semibold text-foreground mb-4", children: "Portals" }),
500        /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { className: "space-y-2", children: footerLinks.portals.map((link) => /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: link.href, className: "text-sm text-muted-foreground hover:text-primary transition-colors", children: link.name }) }, link.name)) })
501      ] })
502    ] }),
503    /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-8 pt-8 border-t border-border", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-center text-sm text-muted-foreground", children: [
504      "© ",
505      currentYear,
506      " SkillForge",
507      /* @__PURE__ */ jsxRuntimeExports.jsx("sup", { className: "text-[0.6em] align-super", children: "®" }),
508      ". All rights reserved."
509    ] }) })
510  ] }) });
511}
512function cn(...inputs) {
513  return twMerge(clsx(inputs));
514}
515function formatSessionDate$1(d, opts = {
516  month: "short",
517  day: "numeric",
518  year: "numeric"
519}, locale = "en-US") {
520  if (!d) return "—";
521  return new Date(d).toLocaleDateString(locale, {
522    timeZone: "UTC",
523    ...opts
524  });
525}
526const buttonVariants = cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", {
527  variants: {
528    variant: {
529      default: "bg-primary text-primary-foreground hover:bg-primary/90",
530      destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
531      outline: "border border-input bg-transparent text-foreground hover:bg-accent hover:text-accent-foreground",
532      secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
533      ghost: "hover:bg-accent hover:text-accent-foreground",
534      link: "text-primary underline-offset-4 hover:underline"
535    },
536    size: {
537      default: "h-10 px-4 py-2",
538      sm: "h-9 rounded-md px-3",
539      lg: "h-11 rounded-md px-8",
540      icon: "h-10 w-10"
541    }
542  },
543  defaultVariants: {
544    variant: "default",
545    size: "default"
546  }
547});
548const Button = reactExports.forwardRef(({
549  className,
550  variant,
551  size,
552  asChild = false,
553  ...props
554}, ref) => {
555  const Comp = asChild ? Slot : "button";
556  return /* @__PURE__ */ jsxRuntimeExports.jsx(Comp, { className: cn(buttonVariants({
557    variant,
558    size,
559    className
560  })), ref, ...props });
561});
562Button.displayName = "Button";
563const _authClient = createAuthClient({
564  baseURL: typeof window !== "undefined" ? window.location.origin : "",
565  plugins: [magicLinkClient()]
566});
567const {
568  signIn,
569  signUp,
570  signOut
571} = _authClient;
572async function sendMagicLink(email) {
573  try {
574    const callbackURL = `${true ? "https://skillforge.com" : window.location.origin}/student`;
575    const result = await _authClient.signIn.magicLink({
576      email,
577      callbackURL
578    });
579    if (false) ;
580    return result;
581  } catch (error) {
582    console.error("Failed to send magic link:", error);
583    throw error;
584  }
585}
586function useSession() {
587  const {
588    data: session,
589    isPending,
590    error
591  } = _authClient.useSession();
592  return {
593    session,
594    user: (session == null ? void 0 : session.user) ?? null,
595    isPending,
596    error,
597    isAuthenticated: !isPending && !!(session == null ? void 0 : session.user)
598  };
599}
600function getUserWithRole(user) {
601  return user;
602}
603const CartContext = reactExports.createContext(void 0);
604function useSyncCartToDB(items) {
605  const timerRef = reactExports.useRef(null);
606  const mountedRef = reactExports.useRef(false);
607  reactExports.useEffect(() => {
608    if (!mountedRef.current) {
609      mountedRef.current = true;
610      return;
611    }
612    if (timerRef.current) clearTimeout(timerRef.current);
613    timerRef.current = setTimeout(() => {
614      const payload = items.map((i) => ({
615        sessionId: i.sessionId,
616        quantity: i.quantity
617      }));
618      fetch("/api/cart/sync", {
619        method: "POST",
620        headers: {
621          "Content-Type": "application/json"
622        },
623        body: JSON.stringify({
624          items: payload
625        })
626      }).catch(() => {
627      });
628    }, 1500);
629    return () => {
630      if (timerRef.current) clearTimeout(timerRef.current);
631    };
632  }, [items]);
633}
634function CartProvider({
635  children
636}) {
637  const [items, setItems] = reactExports.useState(() => {
638    if (typeof window === "undefined") return [];
639    const saved = localStorage.getItem("skillforge-cart");
640    return saved ? JSON.parse(saved) : [];
641  });
642  reactExports.useEffect(() => {
643    localStorage.setItem("skillforge-cart", JSON.stringify(items));
644  }, [items]);
645  useSyncCartToDB(items);
646  const addItem = (item) => {
647    setItems((prev) => {
648      const existing = prev.find((i) => i.sessionId === item.sessionId);
649      if (existing) {
650        return prev.map((i) => i.sessionId === item.sessionId ? {
651          ...i,
652          quantity: Math.min(i.quantity + 1, i.availableSeats)
653        } : i);
654      }
655      return [...prev, {
656        ...item,
657        quantity: 1
658      }];
659    });
660  };
661  const removeItem = (sessionId) => {
662    setItems((prev) => prev.filter((item) => item.sessionId !== sessionId));
663  };
664  const updateQuantity = (sessionId, quantity) => {
665    setItems((prev) => prev.map((item) => item.sessionId === sessionId ? {
666      ...item,
667      quantity: Math.max(1, Math.min(quantity, item.availableSeats))
668    } : item));
669  };
670  const clearCart = () => {
671    setItems([]);
672    localStorage.removeItem("skillforge-cart");
673    fetch("/api/cart/sync", {
674      method: "POST",
675      headers: {
676        "Content-Type": "application/json"
677      },
678      body: JSON.stringify({
679        items: []
680      })
681    }).catch(() => {
682    });
683  };
684  const totalItems = items.reduce((sum, item) => sum + item.quantity, 0);
685  const totalPrice = items.reduce((sum, item) => sum + parseFloat(item.price) * item.quantity, 0);
686  return /* @__PURE__ */ jsxRuntimeExports.jsx(CartContext.Provider, { value: {
687    items,
688    addItem,
689    removeItem,
690    updateQuantity,
691    clearCart,
692    totalItems,
693    totalPrice
694  }, children });
695}
696function useCart() {
697  const context = reactExports.useContext(CartContext);
698  if (!context) {
699    throw new Error("useCart must be used within CartProvider");
700  }
701  return context;
702}
703const Sheet = Root;
704const SheetTrigger = Trigger;
705const SheetPortal = Portal;
706const SheetOverlay = reactExports.forwardRef(({
707  className,
708  ...props
709}, ref) => /* @__PURE__ */ jsxRuntimeExports.jsx(Overlay, { className: cn("fixed inset-0 z-50 bg-black/80  data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0", className), ...props, ref }));
710SheetOverlay.displayName = Overlay.displayName;
711const sheetVariants = cva("fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500", {
712  variants: {
713    side: {
714      top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
715      bottom: "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
716      left: "inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",
717      right: "inset-y-0 right-0 h-full w-3/4  border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm"
718    }
719  },
720  defaultVariants: {
721    side: "right"
722  }
723});
724const SheetContent = reactExports.forwardRef(({
725  side = "right",
726  className,
727  children,
728  ...props
729}, ref) => /* @__PURE__ */ jsxRuntimeExports.jsxs(SheetPortal, { children: [
730  /* @__PURE__ */ jsxRuntimeExports.jsx(SheetOverlay, {}),
731  /* @__PURE__ */ jsxRuntimeExports.jsxs(Content, { ref, className: cn(sheetVariants({
732    side
733  }), className), ...props, children: [
734    children,
735    /* @__PURE__ */ jsxRuntimeExports.jsxs(Close, { className: "absolute right-4 top-4 roun
735ded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary", children: [
736      /* @__PURE__ */ jsxRuntimeExports.jsx(X, { className: "h-4 w-4" }),
737      /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "sr-only", children: "Close" })
738    ] })
739  ] })
740] }));
741SheetContent.displayName = Content.displayName;
742const SheetHeader = ({
743  className,
744  ...props
745}) => /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: cn("flex flex-col space-y-2 text-center sm:text-left", className), ...props });
746SheetHeader.displayName = "SheetHeader";
747const SheetTitle = reactExports.forwardRef(({
748  className,
749  ...props
750}, ref) => /* @__PURE__ */ jsxRuntimeExports.jsx(Title, { ref, className: cn("text-lg font-semibold text-foreground", className), ...props }));
751SheetTitle.displayName = Title.displayName;
752const SheetDescription = reactExports.forwardRef(({
753  className,
754  ...props
755}, ref) => /* @__PURE__ */ jsxRuntimeExports.jsx(Description, { ref, className: cn("text-sm text-muted-foreground", className), ...props }));
756SheetDescription.displayName = Description.displayName;
757const Dialog = Root;
758const DialogTrigger = Trigger;
759const DialogPortal = Portal;
760const DialogOverlay = reactExports.forwardRef(({
761  className,
762  ...props
763}, ref) => /* @__PURE__ */ jsxRuntimeExports.jsx(Overlay, { ref, className: cn("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0", className), ...props }));
764DialogOverlay.displayName = Overlay.displayName;
765const DialogContent = reactExports.forwardRef(({
766  className,
767  children,
768  ...props
769}, ref) => /* @__PURE__ */ jsxRuntimeExports.jsxs(DialogPortal, { children: [
770  /* @__PURE__ */ jsxRuntimeExports.jsx(DialogOverlay, {}),
771  /* @__PURE__ */ jsxRuntimeExports.jsxs(Content, { ref, className: cn("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg", className), ...props, children: [
772    children,
773    /* @__PURE__ */ jsxRuntimeExports.jsxs(Close, { className: "absolute right-4 top-4 roun
773ded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground", children: [
774      /* @__PURE__ */ jsxRuntimeExports.jsx(X, { className: "h-4 w-4" }),
775      /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "sr-only", children: "Close" })
776    ] })
777  ] })
778] }));
779DialogContent.displayName = Content.displayName;
780const DialogHeader = ({
781  className,
782  ...props
783}) => /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: cn("flex flex-col space-y-1.5 text-center sm:text-left", className), ...props });
784DialogHeader.displayName = "DialogHeader";
785const DialogFooter = ({
786  className,
787  ...props
788}) => /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className), ...props });
789DialogFooter.displayName = "DialogFooter";
790const DialogTitle = reactExports.forwardRef(({
791  className,
792  ...props
793}, ref) => /* @__PURE__ */ jsxRuntimeExports.jsx(Title, { ref, className: cn("text-lg font-semibold leading-none tracking-tight", className), ...props }));
794DialogTitle.displayName = Title.displayName;
795const DialogDescription = reactExports.forwardRef(({
796  className,
797  ...props
798}, ref) => /* @__PURE__ */ jsxRuntimeExports.jsx(Description, { ref, className: cn("text-sm text-muted-foreground", className), ...props }));
799DialogDescription.displayName = Description.displayName;
800const Collapsible = Root$1;
801const CollapsibleTrigger = CollapsibleTrigger$1;
802const CollapsibleContent = CollapsibleContent$1;
803const Input = reactExports.forwardRef(({
804  className,
805  type,
806  ...props
807}, ref) => {
808  return /* @__PURE__ */ jsxRuntimeExports.jsx("input", { type, className: cn("flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", className), ref, ...props });
809});
810Input.displayName = "Input";
811const labelVariants = cva("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70");
812const Label = reactExports.forwardRef(({
813  className,
814  ...props
815}, ref) => /* @__PURE__ */ jsxRuntimeExports.jsx(Root$2, { ref, className: cn(labelVariants(), className), ...props }));
816Label.displayName = Root$2.displayName;
817const Card = reactExports.forwardRef(({
818  className,
819  ...props
820}, ref) => /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref, className: cn("rounded-lg border bg-card text-card-foreground shadow-sm", className), ...props }));
821Card.displayName = "Card";
822const CardHeader = reactExports.forwardRef(({
823  className,
824  ...props
825}, ref) => /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref, className: cn("flex flex-col space-y-1.5 p-6", className), ...props }));
826CardHeader.displayName = "CardHeader";
827const CardTitle = reactExports.forwardRef(({
828  className,
829  ...props
830}, ref) => /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref, className: cn("text-2xl font-semibold leading-none tracking-tight", className), ...props }));
831CardTitle.displayName = "CardTitle";
832const CardDescription = reactExports.forwardRef(({
833  className,
834  ...props
835}, ref) => /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref, className: cn("text-sm text-muted-foreground", className), ...props }));
836CardDescription.displayName = "CardDescription";
837const CardContent = reactExports.forwardRef(({
838  className,
839  ...props
840}, ref) => /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref, className: cn("p-6 pt-0", className), ...props }));
841CardContent.displayName = "CardContent";
842const CardFooter = reactExports.forwardRef(({
843  className,
844  ...props
845}, ref) => /* @__PURE__ */ jsxRuntimeExports.jsx("div", { ref, className: cn("flex items-center p-6 pt-0", className), ...props }));
846CardFooter.displayName = "CardFooter";
847function StudentInfoForm({
848  quantity,
849  courseTitle,
850  sessionDate,
851  availableSeats,
852  onSubmit,
853  onCancel,
854  onQuantityChange
855}) {
856  const [students, setStudents] = reactExports.useState(Array.from({
857    length: quantity
858  }, () => ({
859    name: "",
860    email: "",
861    company: ""
862  })));
863  const [errors, setErrors] = reactExports.useState({});
864  const validateForm = () => {
865    const newErrors = {};
866    let isValid = true;
867    students.forEach((student, index) => {
868      const studentErrors = {};
869      if (!student.name.trim()) {
870        studentErrors.name = "Name is required";
871        isValid = false;
872      }
873      if (!student.email.trim()) {
874        studentErrors.email = "Email is required";
875        isValid = false;
876      } else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(student.email)) {
877        studentErrors.email = "Invalid email address";
878        isValid = false;
879      }
880      if (!student.company.trim()) {
881        studentErrors.company = "Company is required";
882        isValid = false;
883      }
884      if (Object.keys(studentErrors).length > 0) {
885        newErrors[index] = studentErrors;
886      }
887    });
888    setErrors(newErrors);
889    return isValid;
890  };
891  const handleSubmit = (e) => {
892    e.preventDefault();
893    if (validateForm()) {
894      onSubmit(students);
895    }
896  };
897  const updateStudent = (index, field, value) => {
898    var _a2;
899    const updated = [...students];
900    updated[index] = {
901      ...updated[index],
902      [field]: value
903    };
904    setStudents(updated);
905    if ((_a2 = errors[index]) == null ? void 0 : _a2[field]) {
906      const newErrors = {
907        ...errors
908      };
909      delete newErrors[index][field];
910      if (Object.keys(newErrors[index]).length === 0) {
911        delete newErrors[index];
912      }
913      setErrors(newErrors);
914    }
915  };
916  const removeStudent = (index) => {
917    if (students.length <= 1) return;
918    const updated = students.filter((_, i) => i !== index);
919    setStudents(updated);
920    onQuantityChange(updated.length);
921    const newErrors = {};
922    Object.keys(errors).forEach((key) => {
923      const idx = parseInt(key);
924      if (idx < index) {
925        newErrors[idx] = errors[idx];
926      } else if (idx > index) {
927        newErrors[idx - 1] = errors[idx];
928      }
929    });
930    setErrors(newErrors);
931  };
932  const addStudent = () => {
933    if (students.length >= availableSeats) return;
934    setStudents([...students, {
935      name: "",
936      email: "",
937      company: ""
938    }]);
939    onQuantityChange(students.length + 1);
940  };
941  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "fixed inset-0 bg-black/60 flex items-center justify-center z-[100] p-4", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Card, { className: "w-full max-w-4xl max-h-[90vh] flex flex-col", children: [
942    /* @__PURE__ */ jsxRuntimeExports.jsx(CardHeader, { className: "border-b pb-4 flex-shrink-0", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start justify-between gap-4", children: [
943      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1", children: [
944        /* @__PURE__ */ jsxRuntimeExports.jsx(CardTitle, { className: "text-xl", children: "Student Information Required" }),
945        /* @__PURE__ */ jsxRuntimeExports.jsxs(CardDescription, { className: "mt-1.5 text-base", children: [
946          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-medium text-foreground", children: courseTitle }),
947          /* @__PURE__ */ jsxRuntimeExports.jsx("br", {}),
948          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-sm", children: new Date(sessionDate).toLocaleDateString("en-US", {
949            weekday: "long",
950            month: "long",
951            day: "numeric",
952            year: "numeric",
953            timeZone: "UTC"
954          }) })
955        ] })
956      ] }),
957      /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { variant: "ghost", size: "icon", onClick: onCancel, className: "flex-shrink-0", children: /* @__PURE__ */ jsxRuntimeExports.jsx(X, { className: "h-5 w-5" }) })
958    ] }) }),
959    /* @__PURE__ */ jsxRuntimeExports.jsx(CardContent, { className: "flex-1 overflow-y-auto p-6", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
960      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-muted/50 rounded-lg p-3 mb-4 flex items-center justify-between", children: [
961        /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-sm font-medium", children: [
962          students.length,
963          " student",
964          students.length > 1 ? "s" : ""
965        ] }),
966        /* @__PURE__ */ jsxRuntimeExports.jsxs(Button, { type: "button", variant: "outline", size: "sm", onClick: addStudent, className: "gap-2", children: [
967          /* @__PURE__ */ jsxRuntimeExports.jsx(Plus, { className: "h-4 w-4" }),
968          "Add Student"
969        ] })
970      ] }),
971      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-3", children: students.map((student, index) => {
972        var _a2, _b2, _c2, _d2, _e, _f;
973        return /* @__PURE__ */ jsxRuntimeExports.jsx(Card, { className: "border-2 hover:border-primary/50 transition-colors", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(CardContent, { className: "p-4", children: [
974          /* @__P
974URE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between mb-3", children: [
975            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
976              /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-8 w-8 rounded-full bg-primary/10 flex items-center justify-center flex-shrink-0", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-sm font-semibold text-primary", children: index + 1 }) }),
977              /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-sm font-medium text-muted-foreground", children: [
978                "Student ",
979                index + 1,
980                " of ",
981                students.length
982              ] })
983            ] }),
984            students.length > 1 && /* @__PURE__ */ jsxRuntimeExports.jsxs(Button, { type: "button", variant: "ghost", size: "sm", onClick: () => removeStudent(index), className: "text-destructive hover:text-destructive hover:bg-destructive/10 gap-1", children: [
985              /* @__PURE__ */ jsxRuntimeExports.jsx(Trash2, { className: "h-4 w-4" }),
986              "Remove"
987            ] })
988          ] }),
989          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-3", children: [
990            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1.5", children: [
991              /* @__PURE__ */ jsxRuntimeExports.jsxs(Label, { htmlFor: `name-${index}`, className: "text-xs font-medium", children: [
992                "Full Name ",
993                /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-destructive", children: "*" })
994              ] }),
995              /* @__PURE__ */ jsxRuntimeExports.jsx(Input, { id: `name-${index}`, value: student.name, onChange: (e) => updateStudent(index, "name", e.target.value), placeholder: "John Doe", className: ((_a2 = errors[index]) == null ? void 0 : _a2.name) ? "border-destructive" : "" }),
996              ((_b2 = errors[index]) == null ? void 0 : _b2.name) && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-destructive", children: errors[index].name })
997            ] }),
998            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1.5", children: [
999              /* @__PURE__ */ jsxRuntimeExports.jsxs(Label, { htmlFor: `email-${index}`, className: "text-xs font-medium", children: [
1000                "Email Address ",
1001                /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-destructive", children: "*" })
1002              ] }),
1003              /* @__PURE__ */ jsxRuntimeExports.jsx(Input, { id: `email-${index}`, type: "text", inputMode: "email", value: student.email, onChange: (e) => updateStudent(index, "email", e.target.value), placeholder: "[email protected]", className: ((_c2 = errors[index]) == null ? void 0 : _c2.email) ? "border-destructive" : "" }),
1004              ((_d2 = errors[index]) == null ? void 0 : _d2.email) && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-destructive", children: errors[index].email })
1005            ] }),
1006            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1.5", children: [
1007              /* @__PURE__ */ jsxRuntimeExports.jsxs(Label, { htmlFor: `company-${index}`, className: "text-xs font-medium", children: [
1008                "Company ",
1009                /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-destructive", children: "*" })
1010              ] }),
1011              /* @__PURE__ */ jsxRuntimeExports.jsx(Input, { id: `company-${index}`, value: student.company, onChange: (e) => updateStudent(index, "company", e.target.value), placeholder: "Acme Corp", className: ((_e = errors[index]) == null ? void 0 : _e.company) ? "border-destructive" : "" }),
1012              ((_f = errors[index]) == null ? void 0 : _f.company) && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-destructive", children: errors[index].company })
1013            ] })
1014          ] })
1015        ] }) }, index);
1016      }) })
1017    ] }) }),
1018    /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-t p-4 flex gap-3 flex-shrink-0 bg-muted/30", children: [
1019      /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { type: "button", variant: "outline", onClick: onCancel, className: "w-32", children: "Cancel" }),
1020      /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { onClick: handleSubmit, className: "flex-1", size: "lg", children: "Continue to Payment" })
1021    ] })
1022  ] }) });
1023}
1024const RadioGroup = reactExports.forwardRef(({
1025  className,
1026  ...props
1027}, ref) => {
1028  return /* @__PURE__ */ jsxRuntimeExports.jsx(Root2, { className: cn("grid gap-2", className), ...props, ref });
1029});
1030RadioGroup.displayName = Root2.displayName;
1031const RadioGroupItem = reactExports.forwardRef(({
1032  className,
1033  ...props
1034}, ref) => {
1035  return /* @__PURE__ */ jsxRuntimeExports.jsx(Item2, { ref, className: cn("aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", className), ...props, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Indicator, { className: "flex items-center justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Circle, { className: "h-2.5 w-2.5 fill-current text-current" }) }) });
1036});
1037RadioGroupItem.displayName = Item2.displayName;
1038const Checkbox = reactExports.forwardRef(({
1039  className,
1040  ...props
1041}, ref) => /* @__PURE__ */ jsxRuntimeExports.jsx(Checkbox$1, { ref, className: cn("peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground", className), ...props, children: /* @__PURE__ */ jsxRuntimeExports.jsx(CheckboxIndicator, { className: cn("flex items-center justify-center text-current"), children: /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "h-4 w-4" }) }) }));
1042Checkbox.displayName = Checkbox$1.displayName;
1043function Cart() {
1044  const {
1045    items,
1046    removeItem,
1047    updateQuantity,
1048    totalItems,
1049    totalPrice,
1050    clearCart
1051  } = useCart();
1052  const [open, setOpen] = reactExports.useState(false);
1053  const [collectingInfoFor, setCollectingInfoFor] = reactExports.useState(null);
1054  const [studentData, setStudentData] = reactExports.useState([]);
1055  const [paymentMethod, setPaymentMethod] = reactExports.useState("card");
1056  const [paymentContact, setPaymentContact] = reactExports.useState({
1057    name: "",
1058    email: ""
1059  });
1060  const [showPaymentContactForm, setShowPaymentContactForm] = reactExports.useState(false);
1061  const [cancellationAgreed, setCancellationAgreed] = reactExports.useState(false);
1062  const [showCancellationModal, setShowCancellationModal] = reactExports.useState(false);
1063  const [termsOpen, setTermsOpen] = reactExports.useState(false);
1064  const navigate = useNavigate();
1065  const handleCheckout = () => {
1066    if (items.length === 0) return;
1067    const allItemsHaveInfo = items.every((item) => {
1068      const data2 = studentData.find((d) => d.sessionId === item.sessionId);
1069      return data2 && data2.students.length === item.quantity;
1070    });
1071    if (!allItemsHaveInfo) {
1072      const itemNeedingInfo = items.find((item) => {
1073        const data2 = studentData.find((d) => d.sessionId === item.sessionId);
1074        return !data2 || data2.students.length !== item.quantity;
1075      });
1076      if (itemNeedingInfo) {
1077        setOpen(false);
1078        setCollectingInfoFor(itemNeedingInfo.sessionId);
1079      }
1080      return;
1081    }
1082    if (paymentMethod === "invoice") {
1083      setShowPaymentContactForm(true);
1084    } else {
1085      proceedToStripeCheckout();
1086    }
1087  };
1088  const handleStudentInfoSubmit = (sessionId, students) => {
1089    const updatedStudentData = [...studentData.filter((d) => d.sessionId !== sessionId), {
1090      sessionId,
1091      students
1092    }];
1093    setStudentData(updatedStudentData);
1094    if (!paymentContact.name && !paymentContact.email && students.length > 0) {
1095      setPaymentContact({
1096        name: students[0].name,
1097        email: students[0].email
1098      });
1099    }
1100    const item = items.find((i) => i.sessionId === sessionId);
1101    if (item && students.length !== item.quantity) {
1102      updateQuantity(sessionId, students.length);
1103    }
1104    setCollectingInfoFor(null);
1105    const nextItemNeedingInfo = items.find((item2) => {
1106      if (item2.sessionId === sessionId) return false;
1107      const data2 = updatedStudentData.find((d) => d.sessionId === item2.sessionId);
1108      return !data2 || data2.students.length !== item2.quantity;
1109    });
1110    if (nextItemNeedingInfo) {
1111      setCollectingInfoFor(nextItemNeedingInfo.sessionId);
1112    } else {
1113      if (paymentMethod === "invoice") {
1114        setShowPaymentContactForm(true);
1115      } else {
1116        proceedToStripeCheckout(updatedStudentData);
1117      }
1118    }
1119  };
1120  const handleQuantityChange = (sessionId, newQuantity) => {
1121    updateQuantity(sessionId, newQuantity);
1122    setStudentData((prev) => {
1123      const existing = prev.find((d) => d.sessionId === sessionId);
1124      if (!existing) return prev;
1125      const updated = prev.filter((d) => d.sessionId !== sessionId);
1126      const students = existing.students.slice(0, newQuantity);
1127      return [...updated, {
1128        sessionId,
1129        students
1130      }];
1131    });
1132  };
1133  const proceedToStripeCheckout = async (currentStudentData) => {
1134    try {
1135      const dataToUse = currentStudentData || studentData;
1136      const itemsWithStudents = items.map((item) => {
1137        const data22 = dataToUse.find((d) => d.sessionId === item.sessionId);
1138        return {
1139          ...item,
1140          students: (data22 == null ? void 0 : data22.students) || []
1141        };
1142      });
1143      const itemsWithoutStudents = itemsWithStudents.filter((item) => !item.students || item.students.length === 0);
1144      if (itemsWithoutStudents.length > 0) {
1145        alert("Please provide student information for all items before checkout.");
1146        return;
1147      }
1148      const response = await fetch("/api/checkout/create-cart-session", {
1149        method: "POST",
1150        headers: {
1151          "Content-Type": "application/json"
1152        },
1153        body: JSON.stringify({
1154          items: itemsWithStudents
1155        })
1156      });
1157      const data2 = await response.json();
1158      if (!response.ok) {
1159        alert(data2.message || data2.error || "Failed to create checkout session");
1160        return;
1161      }
1162      if (data2.url) {
1163        window.open(data2.url, "_blank");
1164        alert("Checkout page opened in a new tab. Please complete your payment there. Your cart will be cleared after successful payment.");
1165        setOpen(false);
1166      } else {
1167        alert("Failed to create checkout session");
1168      }
1169    } catch (error) {
1170      console.error("Error creating checkout:", error);
1171      alert("Failed to create checkout session. Please try again.");
1172    }
1173  };
1174  const proceedToInvoiceCheckout = async () => {
1175    try {
1176      if (!paymentContact.name.trim() || !paymentContact.email.trim()) {
1177        alert("Please provide payment contact information.");
1178        return;
1179      }
1180      if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(paymentContact.email)) {
1181        alert("Please provide a valid email address.");
1182        return;
1183      }
1184      const itemsWithStudents = items.map((item) => {
1185        const data22 = studentData.find((d) => d.sessionId === item.sessionId);
1186        return {
1187          ...item,
1188          students: (data22 == null ? void 0 : data22.students) || []
1189        };
1190      });
1191      const response = await fetch("/api/checkout/create-invoice", {
1192        method: "POST",
1193        headers: {
1194          "Content-Type": "application/json"
1195        },
1196        body: JSON.stringify({
1197          items: itemsWithStudents,
1198          paymentContact
1199        })
1200      });
1201      const data2 = await response.json();
1202      if (!response.ok) {
1203        alert(data2.message || data2.error || "Failed to create invoice");
1204        return;
1205      }
1206      clearCart();
1207      setStudentData([]);
1208      setShowPaymentContactForm(false);
1209      setCancellationAgreed(false);
1210      setTermsOpen(false);
1211      setOpen(false);
1212      navigate(`/checkout/invoice-confirmation?invoice_number=${encodeURIComponent(data2.invoiceNumber)}`);
1213    } catch (error) {
1214      console.error("Error creating invoice:", error);
1215      alert("Failed to create invoice. Please try again.");
1216    }
1217  };
1218  const hasStudentInfo = (sessionId, quantity) => {
1219    const data2 = studentData.find((d) => d.sessionId === sessionId);
1220    return data2 && data2.students.length === quantity;
1221  };
1222  const currentItem = items.find((item) => item.sessionId === collectingInfoFor);
1223  return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
1224    collectingInfoFor && currentItem && /* @__PURE__ */ jsxRuntimeExports.jsx(StudentInfoForm, { quantity: currentItem.quantity, courseTitle: currentItem.courseTitle, sessionDate: currentItem.sessionDate, availableSeats: currentItem.availableSeats, onSubmit: (students) => handleStudentInfoSubmit(collectingInfoFor, students), onCancel: () => setCollectingInfoFor(null), onQuantityChange: (newQuantity) => handleQuantityChange(collectingInfoFor, newQuantity) }),
1225    showPaymentContactForm && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "fixed inset-0 bg-black/50 flex items-center justify-center z-50 p-4", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-background rounded-lg shadow-lg max-w-md w-full p-6 space-y-4", children: [
1226      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
1227        /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-2xl font-bold", children: "Payment Contact Information" }),
1228        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground", children: "Invoice will be sent to this email address with payment instructions." })
1229      ] }),
1230      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-4", children: [
1231        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
1232          /* @__PURE__ */ jsxRuntimeExports.jsx(Label, { htmlFor: "contact-name", children: "Contact Name" }),
1233          /* @__PURE__ */ jsxRuntimeExports.jsx(Input, { id: "contact-name", value: paymentContact.name, onChange: (e) => setPaymentContact({
1234            ...paymentContact,
1235            name: e.target.value
1236          }), placeholder: "John Doe" })
1237        ] }),
1238        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
1239          /* @__PURE__ */ jsxRuntimeExports.jsx(Label, { htmlFor: "contact-email", children: "Contact Email" }),
1240          /* @__PURE__ */ jsxRuntimeExports.jsx(Input, { id: "contact-email", type: "text", inputMode: "email", value: paymentContact.email, onChange: (e) => setPaymentContact({
1241            ...paymentContact,
1242            email: e.target.value
1243          }), placeholder: "[email protected]" })
1244        ] })
1245      ] }),
1246      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex gap-2", children: [
1247        /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { variant: "outline", className: "flex-1", onClick: () => setShowPaymentContactForm(false), children: "Back" }),
1248        /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { className: "flex-1", onClick: proceedToInvoiceCheckout, children: "Generate Invoice" })
1249      ] })
1250    ] }) }),
1251    /* @__PURE__ */ jsxRuntimeExports.jsxs(Sheet, { open, onOpenChange: setOpen, children: [
1252      /* @__PURE__ */ jsxRuntimeExports.jsx(SheetTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Button, { variant: "ghost", size: "icon", className: "relative", children: [
1253        /* @__PURE__ */ jsxRuntimeExports.jsx(ShoppingCart, { className: "h-5 w-5" }),
1254        totalItems > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "absolute -top-1 -right-1 h-5 w-5 rounded-full bg-primary text-primary-foreground text-xs flex items-center justify-center", children: totalItems })
1255      ] }) }),
1256      /* @__PURE__ */ jsxRuntimeExports.jsxs(SheetContent, { className: "w-full sm:max-w-lg overflow-y-auto", children: [
1257        /* @__PURE__ */ jsxRuntimeExports.jsx(SheetHeader, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(SheetTitle, { children: "Shopping Cart" }) }),
1258        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-8 space-y-4", children: items.length === 0 ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center py-12", children: [
1259          /* @__PURE__ */ jsxRuntimeExports.jsx(ShoppingCart, { className: "h-16 w-16 mx-auto text-muted-foreground mb-4" }),
1260          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground", children: "Your cart is empty" }),
1261          /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { variant: "outline", className: "mt-4", onClick: () => {
1262            setOpen(false);
1263            navigate("/courses");
1264          }, children: "Browse Courses" })
1265        ] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
1266          items.map((item) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border rounded-lg p-4 space-y-3", children: [
1267            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex justify-between items-start", children: [
1268              /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1", children: [
1269                /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "font-semibold", children: item.courseTitle }),
1270                /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground", children: new Date(item.sessionDate).toLocaleDateString("en-US", {
1271                  weekday: "short",
1272                  month: "short",
1273                  day: "numeric",
1274                  year: "numeric",
1275                  timeZone: "UTC"
1276                }) }),
1277                /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-sm font-medium mt-1", children: [
1278                  "$",
1279                  item.price,
1280                  " ",
1281                  item.currency.toUpperCase(),
1282                  " per student"
1283                ] })
1284              ] }),
1285              /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { variant: "ghost", size: "icon", onClick: () => removeItem(item.sessionId), className: "text-destructive hover:text-destructive", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Trash2, { className: "h-4 w-4" }) })
1286            ] }),
1287            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
1288              /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-sm text-muted-foreground", children: "Number of students:" }),
1289              /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
1290                /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { variant: "outline", size: "icon", className: "h-8 w-8", onClick: () => updateQuantity(item.sessionId, item.quantity - 1), disabled: item.quantity <= 1, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Minus, { className: "h-3 w-3" }) }),
1291                /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "w-8 text-center font-medium", children: item.quantity }),
1292                /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { variant: "outline", size: "icon", className: "h-8 w-8", onClick: () => updateQuantity(item.sessionId, item.quantity + 1), children: /* @__PURE__ */ jsxRuntimeExports.jsx(Plus, { className: "h-3 w-3" }) })
1293              ] })
1294            ] }),
1295            hasStudentInfo(item.sessionId, item.quantity) && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 text-sm text-green-600 bg-green-50 dark:bg-green-950 px-3 py-2 rounded", children: [
1296              /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "h-4 w-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 13l4 4L19 7" }) }),
1297              /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Student information provided" })
1298            ] }),
1299            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex justify-between items-center pt-2 border-t", children: [
1300              /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-sm font-medium", children: "Subtotal:" }),
1301              /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "font-semibold", children: [
1302                "$",
1303                (parseFloat(item.price) * item.quantity).toFixed(2),
1304                " ",
1305                item.currency.toUpperCase()
1306              ] })
1307            ] }),
1308            item.quantity >= item.availableSeats && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-amber-600", children: "Maximum available seats reached" }),
1309            "                  "
1310          ] }, item.sessionId)),
1311          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-t pt-4 space-y-4", children: [
1312            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex justify-between items-center text-lg font-bold", children: [
1313              /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Total:" }),
1314              /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { children: [
1315                "$",
1316                totalPrice.toFixed(2),
1317                " USD"
1318              ] })
1319            ] }),
1320            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-3 border rounded-lg p-4 bg-muted/30", children: [
1321              /* @__PURE__ */ jsxRuntimeExports.jsx(Label, { className: "text-sm font-semibold", children: "Payment Method" }),
1322              /* @__PURE__ */ jsxRuntimeExports.jsxs(RadioGroup, { value: paymentMethod, onValueChange: (value) => setPaymentMethod(value), children: [
1323                /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center space-x-2", children: [
1324                  /* @__PURE__ */ jsxRuntimeExports.jsx(RadioGroupItem, { value: "card", id: "card" }),
1325                  /* @__PURE__ */ jsxRuntimeExports.jsxs(Label, { htmlFor: "card", className: "flex items-center gap-2 cursor-pointer font-normal", children: [
1326                    /* @__PURE__ */ jsxRuntimeExports.jsx(CreditCard, { className: "h-4 w-4" }),
1327                    "Credit Card (Pay Now)"
1328                  ] })
1329                ] }),
1330                /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center space-x-2", children: [
1331                  /* @__PURE__ */ jsxRuntimeExports.jsx(RadioGroupItem, { value: "invoice", id: "invoice" }),
1332                  /* @__PURE__ */ jsxRuntimeExports.jsxs(Label, { htmlFor: "invoice", className: "flex items-center gap-2 cursor-pointer font-normal", children: [
1333                    /* @__PURE__ */ jsxRuntimeExports.jsx(FileText, { className: "h-4 w-4" }),
1334                    "Invoice (Pay Later)"
1335                  ] })
1336                ] })
1337              ] })
1338            ] }),
1339            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-lg border border-border bg-muted/30 overflow-hidden", children: [
1340              /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start gap-3 p-4", children: [
1341                /* @__PURE__ */ jsxRuntimeExports.jsx(Checkbox, { id: "cancellation-policy", checked: cancellationAgreed, onCheckedChange: (checked) => setCancellationAgreed(checked === true), className: "mt-0.5 flex-shrink-0" }),
1342                /* @__PURE__ */ jsxRuntimeExports.jsx("label", { htmlFor: "cancellation-policy", className: "text-sm text-muted-foreground leading-relaxed cursor-pointer", children: "By registering, I agree to the cancellation & rescheduling policy and SkillForge's terms & conditions." })
1343              ] }),
1344              /* @__PURE__ */ jsxRuntimeExports.jsxs(Collapsible, { open: termsOpen, onOpenChange: setTermsOpen, children: [
1345                /* @__PURE__ */ jsxRuntimeExports.jsxs(CollapsibleTrigger, { className: "w-full flex items-center justify-between px-4 py-2 border-t border-border text-xs text-muted-foreground hover:text-foreground hover:bg-muted/50 transition-colors", children: [
1346                  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "View full terms & conditions" }),
1347                  /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: `w-3.5 h-3.5 transition-transform duration-200 ${termsOpen ? "rotate-180" : ""}` })
1348                ] }),
1349                /* @__PURE__ */ jsxRuntimeExports.jsx(CollapsibleContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "px-4 pb-4 pt-3 border-t border-border space-y-4 text-xs text-muted-foreground leading-relaxed", children: [
1350                  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1.5", children: [
1351                    /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "font-semibold text-foreground text-xs uppercase tracking-wide", children: "Agreement Not to Distribute or Share" }),
1352                    /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "The pricing displayed for each live, online class is for one student to attend. Attending consists of anyone watching the screen cast portion of the instructor presentation, even if that person did not receive a book or is not completing hands-on exercises." }),
1353                    /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { children: [
1354                      "Sharing of course material or broadcasting the screen cast portion of the presentation for multiple people to view (when not having paid for each individual viewing) is a violation of our service agreement as well as a copyright violation and is ",
1355                      /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-medium text-foreground", children: "expressly prohibited" }),
1356                      "."
1357                    ] })
1358                  ] }),
1359                  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border-t border-border" }),
1360                  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1.5", children: [
1361                    /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "font-semibold text-foreground text-xs uppercase tracking-wide", children: "Cancellation & Rescheduling Policy" }),
1362                    /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "We understand that your needs or schedule might change prior to your class being held. Because our classes are guaranteed to run, even if you are the only student enrolled, we ask that you notify us at least 5 business days in advance if you will not be able to attend your class." }),
1363                    /* @__PURE__ */ jsxRuntimeExports.jsxs("ul", { className: "list-disc pl-4 space-y-1", children: [
1364                      /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { children: [
1365                        /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-medium text-foreground", children: "More than 5 business days in advance" }),
1366                        " — no cancellation/rescheduling fee."
1367                      ] }),
1368                      /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { children: [
1369                        /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-medium text-foreground", children: "5 business days or less in advance" }),
1370                        " — fee equaling 30% of total course tuition."
1371                      ] })
1372                    ] })
1373                  ] }),
1374                  /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { children: [
1375                    "Questions? Call us at",
1376                    " ",
1377                    /* @__PURE__ */ jsxRuntimeExports.jsx("a", { href: "tel:+18009713203", className: "text-[#4A7A8A] hover:underline font-medium", children: "800-971-3203" }),
1378                    ", Mon–Fri 8:00 AM – 5:00 PM ET."
1379                  ] })
1380                ] }) })
1381              ] })
1382            ] }),
1383            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
1384              /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { className: "w-full", size: "lg", onClick: handleCheckout, disabled: !cancellationAgreed, children: paymentMethod === "card" ? "Proceed to Payment" : "Generate Invoice" }),
1385              /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { variant: "outline", className: "w-full", onClick: () => {
1386                if (confirm("Are you sure you want to clear your cart?")) {
1387                  clearCart();
1388                  setStudentData([]);
1389                  setCancellationAgreed(false);
1390                }
1391              }, children: "Clear Cart" })
1392            ] })
1393          ] })
1394        ] }) })
1395      ] })
1396    ] }),
1397    /* @__PURE__ */ jsxRuntimeExports.jsx(Dialog, { open: showCancellationModal, onOpenChange: setShowCancellationModal, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(DialogContent, { className: "max-w-lg", children: [
1398      /* @__PURE__ */ jsxRuntimeExports.jsx(DialogHeader, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(DialogTitle, { children: "Cancellation & Rescheduling Policy" }) }),
1399      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-3 text-sm text-muted-foreground leading-relaxed", children: [
1400        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "We understand that your needs or schedule might change prior to your class being held. Because our classes are guaranteed to run, even if you are the only student enrolled, we ask that you notify us at least 5 business days in advance if you will not be able to attend your class." }),
1401        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "font-medium text-foreground", children: "Based on when you notify us, the following fees apply:" }),
1402        /* @__PURE__ */ jsxRuntimeExports.jsxs("ul", { className: "list-disc pl-5 space-y-1", children: [
1403          /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { children: [
1404            /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-medium text-foreground", children: "More than 5 business days in advance" }),
1405            " ",
1406            "— no cancellation/rescheduling fee."
1407          ] }),
1408          /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { children: [
1409            /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-medium text-foreground", children: "5 business days or less in advance" }),
1410            " ",
1411            "— cancellation/rescheduling fee equaling 30% of total course tuition."
1412          ] })
1413        ] }),
1414        /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { children: [
1415          "Please contact us at",
1416          " ",
1417          /* @__PURE__ */ jsxRuntimeExports.jsx("a", { href: "tel:+18009713203", className: "text-[#4A7A8A] hover:underline font-medium", children: "800-971-3203" }),
1418          " ",
1419          "if you have any questions about our policy."
1420        ] })
1421      ] }),
1422      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex gap-2 pt-2", children: [
1423        /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { variant: "outline", className: "flex-1", onClick: () => setShowCancellationModal(false), children: "Close" }),
1424        /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { className: "flex-1 bg-[#FF7A00] hover:bg-[#e06e00] text-white", onClick: () => {
1425          setCancellationAgreed(true);
1426          setShowCancellationModal(false);
1427        }, children: "I Agree" })
1428      ] })
1429    ] }) })
1430  ] });
1431}
1432const aboutSubmenu = [{
1433  name: "About SkillForge®",
1434  href: "/about"
1435}, {
1436  name: "Student Reviews",
1437  href: "/about/testimonials"
1438}, {
1439  name: "Our Clients",
1440  href: "/clients"
1441}, {
1442  name: "Blog & Tutorials",
1443  href: "/skillforge-blog"
1444}, {
1445  name: "Careers",
1446  href: "/careers"
1447}];
1448function Header() {
1449  const [mobileMenuOpen, setMobileMenuOpen] = reactExports.useState(false);
1450  const [aboutOpen, setAboutOpen] = reactExports.useState(false);
1451  const {
1452    session,
1453    isPending
1454  } = useSession();
1455  const navigate = useNavigate();
1456  const location = useLocation();
1457  const dropdownRef = reactExports.useRef(null);
1458  reactExports.useEffect(() => {
1459    function handleClick(e) {
1460      if (dropdownRef.current && !dropdownRef.current.contains(e.target)) {
1461        setAboutOpen(false);
1462      }
1463    }
1464    document.addEventListener("mousedown", handleClick);
1465    return () => document.removeEventListener("mousedown", handleClick);
1466  }, []);
1467  reactExports.useEffect(() => {
1468    setAboutOpen(false);
1469    setMobileMenuOpen(false);
1470  }, [location.pathname]);
1471  const handleSignOut = async () => {
1472    await signOut();
1473    navigate("/");
1474  };
1475  const getPortalLink = () => {
1476    if (!(session == null ? void 0 : session.user)) return null;
1477    const user = getUserWithRole(session.user);
1478    const role = user.role;
1479    if (role === "admin") return {
1480      name: "Admin Portal",
1481      href: "/admin"
1482    };
1483    if (role === "instructor") return {
1484      name: "Instructor Portal",
1485      href: "/instructor"
1486    };
1487    return {
1488      name: "My Dashboard",
1489      href: "/student"
1490    };
1491  };
1492  const portalLink = getPortalLink();
1493  const showCart = !isPending;
1494  const isAboutActive = location.pathname.startsWith("/about") || location.pathname === "/clients" || location.pathname === "/skillforge-blog";
1495  return /* @__PURE__ */ jsxRuntimeExports.jsx("header", { className: "bg-background border-b border-border sticky top-0 z-50", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("nav", { className: "mx-auto max-w-7xl px-4 sm:px-6 lg:px-8", children: [
1496    /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex h-16 items-center justify-between", children: [
1497      /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/", className: "flex items-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: "/assets/skillforge-logo.jpg", alt: "SkillForge®", className: "h-12", fetchPriority: "high", width: 160, height: 48 }) }),
1498      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "hidden md:flex md:items-center md:gap-8", children: [
1499        /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/", className: "text-sm font-medium text-foreground hover:text-primary transition-colors", children: "Home" }),
1500        /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/courses", className: "text-sm font-medium text-foreground hover:text-primary transition-colors", children: "Courses" }),
1501        /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/contact-us", className: `text-sm font-medium transition-colors hover:text-primary ${location.pathname === "/contact-us" ? "text-primary" : "text-foreground"}`, children: "Contact" }),
1502        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", ref: dropdownRef, children: [
1503          /* @__PURE__ */ jsxRuntimeExports.jsxs("button", { onClick: () => setAboutOpen((o) => !o), className: `flex items-center gap-1 text-sm font-medium transition-colors hover:text-primary ${isAboutActive ? "text-primary" : "text-foreground"}`, children: [
1504            "About",
1505            /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: `w-4 h-4 transition-transform duration-200 ${aboutOpen ? "rotate-180" : ""}` })
1506          ] }),
1507          aboutOpen && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute top-full left-1/2 -translate-x-1/2 mt-2 w-52 rounded-xl bg-background shadow-lg py-1 z-50", style: {
1508            border: "1px solid #e5e7eb"
1509          }, children: aboutSubmenu.map((item) => /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: item.href, className: "block px-4 py-2.5 text-sm text-foreground hover:bg-muted transition-colors", children: item.name }, item.href)) })
1510        ] })
1511      ] }),
1512      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "hidden md:flex md:items-center md:gap-2", children: [
1513        showCart && /* @__PURE__ */ jsxRuntimeExports.jsx(Cart, {}),
1514        (session == null ? void 0 : session.user) ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
1515          portalLink && /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, variant: "ghost", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: portalLink.href, children: portalLink.name }) }),
1516          /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { variant: "default", onClick: handleSignOut, children: "Sign Out" })
1517        ] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
1518          /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, variant: "ghost", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/auth", children: "Sign In" }) }),
1519          /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, variant: "default", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/courses", children: "Browse Courses" }) })
1520        ] })
1521      ] }),
1522      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex md:hidden items-center gap-2", children: [
1523        showCart && /* @__PURE__ */ jsxRuntimeExports.jsx(Cart, {}),
1524        /* @__PURE__ */ jsxRuntimeExports.jsx("button", { type: "button", className: "rounded-md p-2 text-foreground hover:bg-muted", onClick: () => setMobileMenuOpen(!mobileMenuOpen), children: mobileMenuOpen ? /* @__PURE__ */ jsxRuntimeExports.jsx(X, { className: "h-6 w-6" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Menu, { className: "h-6 w-6" }) })
1525      ] })
1526    ] }),
1527    mobileMenuOpen && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "md:hidden py-4 space-y-1 border-t border-border", children: [
1528      /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/", className: "block px-3 py-2 text-base font-medium text-foreground hover:bg-muted rounded-md", onClick: () => setMobileMenuOpen(false), children: "Home" }),
1529      /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/courses", className: "block px-3 py-2 text-base font-medium text-foreground hover:bg-muted rounded-md", onClick: () => setMobileMenuOpen(false), children: "Courses" }),
1530      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
1531        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "px-3 py-2 text-base font-medium text-foreground", children: "About" }),
1532        aboutSubmenu.map((item) => /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: item.href, className: "block pl-6 pr-3 py-2 text-sm text-muted-foreground hover:bg-muted hover:text-foreground rounded-md", onClick: () => setMobileMenuOpen(false), children: item.name }, item.href))
1533      ] }),
1534      /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/contact-us", className: "block px-3 py-2 text-base font-medium text-foreground hover:bg-muted rounded-md", onClick: () => setMobileMenuOpen(false), children: "Contact" }),
1535      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "pt-4 space-y-2 border-t border-border", children: (session == null ? void 0 : session.user) ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
1536        portalLink && /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: portalLink.href, className: "block px-3 py-2 text-base font-medium text-foreground hover:bg-muted rounded-md", onClick: () => setMobileMenuOpen(false), children: portalLink.name }),
1537        /* @__PURE__ */ jsxRuntimeExports.jsx("button", { onClick: () => {
1538          setMobileMenuOpen(false);
1539          handleSignOut();
1540        }, className: "block w-full text-left px-3 py-2 text-base font-medium text-foreground hover:bg-muted rounded-md", children: "Sign Out" })
1541      ] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
1542        /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/auth", className: "block px-3 py-2 text-base font-medium text-foreground hover:bg-muted rounded-md", onClick: () => setMobileMenuOpen(false), children: "Sign In" }),
1543        /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/courses", className: "block px-3 py-2 text-base font-medium bg-primary text-primary-foreground hover:bg-primary/90 rounded-md text-center", onClick: () => setMobileMenuOpen(false), children: "Browse Courses" })
1544      ] }) })
1545    ] })
1546  ] }) });
1547}
1548function Website({
1549  children,
1550  config = {},
1551  className
1552}) {
1553  const {
1554    layout = {
1555      maxWidth: "full",
1556      padding: "md",
1557      background: "default",
1558      minHeight: true
1559    }
1560  } = config;
1561  const getBackgroundClass = () => {
1562    switch (layout.background) {
1563      case "muted":
1564        return "bg-muted";
1565      case "gradient":
1566        return "bg-gradient-to-b from-background to-muted/20";
1567      default:
1568        return "bg-background";
1569    }
1570  };
1571  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: cn(layout.minHeight !== false && "min-h-screen", getBackgroundClass(), "flex flex-col", className), children });
1572}
1573const DEFAULT_OG_IMAGE = "https://skillforge.com/assets/skillforge-logo.jpg";
1574const DEFAULT_TITLE = "SkillForge | Professional Software Training";
1575const DEFAULT_DESCRIPTION = "SkillForge offers expert-led training in Microsoft Office, Adobe Creative Suite, Azure, Power BI, and more. Live online and on-site classes for individuals and teams.";
1576function RootLayout({
1577  children
1578}) {
1579  const location = useLocation();
1580  const isCoursePrintView = new URLSearchParams(location.search).get("course-information") === "print";
1581  return /* @__PURE__ */ jsxRuntimeExports.jsxs(Website, { children: [
1582    /* @__PURE__ */ jsxRuntimeExports.jsxs(Helmet, { children: [
1583      /* @__PURE__ */ jsxRuntimeExports.jsx("title", { children: DEFAULT_TITLE }),
1584      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "description", content: DEFAULT_DESCRIPTION }),
1585      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:title", content: DEFAULT_TITLE }),
1586      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:description", content: DEFAULT_DESCRIPTION }),
1587      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:type", content: "website" }),
1588      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:url", content: "https://skillforge.com/" }),
1589      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:image", content: DEFAULT_OG_IMAGE }),
1590      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:card", content: "summary_large_image" }),
1591      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:title", content: DEFAULT_TITLE }),
1592      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:description", content: DEFAULT_DESCRIPTION }),
1593      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:image", content: DEFAULT_OG_IMAGE })
1594    ] }),
1595    !isCoursePrintView && /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollRestoration, {}),
1596    !isCoursePrintView && /* @__PURE__ */ jsxRuntimeExports.jsx(Header, {}),
1597    children,
1598    !isCoursePrintView && /* @__PURE__ */ jsxRuntimeExports.jsx(Footer, {})
1599  ] });
1600}
1601function ScrollToTop() {
1602  const {
1603    pathname
1604  } = useLocation();
1605  reactExports.useEffect(() => {
1606    window.scrollTo({
1607      top: 0,
1608      left: 0,
1609      behavior: "instant"
1610    });
1611  }, [pathname]);
1612  return null;
1613}
1614function Spinner({
1615  className
1616}) {
1617  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `inline-block ${className || ""}`, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { className: "animate-spin h-8 w-8 text-gray-600", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", children: [
1618    /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { className: "opacity-10", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }),
1619    /* @__PURE__ */ jsxRuntimeExports.jsx("path", { className: "opacity-20", fill: "currentColor", d: "m4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" })
1620  ] }) });
1621}
1622const benefits = [{
1623  title: "Expert Instructors",
1624  description: "Learn from experienced professionals who bring real-world expertise and practical knowledge to every training session.",
1625  image: "/airo-assets/uploads/benefit-expert-instructors-v2.jpg",
1626  accent: "#FF7A00",
1627  icon: null,
1628  gradient: null,
1629  imagePosition: "center center"
1630}, {
1631  title: "Flexible Delivery Options",
1632  description: "Choose from live online classes you can attend from anywhere, or schedule onsite training delivered at your location.",
1633  image: "/airo-assets/images/courses/microsoft-teams",
1634  accent: "#4A7A8A",
1635  icon: null,
1636  gradient: null,
1637  imagePosition: "center 50%"
1638}, {
1639  title: "Post-Class Support",
1640  description: "Many of our classes come with support from an instructor after class, as well as access to a recorded version of your class to review.",
1641  image: "/airo-assets/uploads/benefit-post-class-support-v2.jpg",
1642  accent: "#FF7A00",
1643  icon: null,
1644  gradient: null,
1645  imagePosition: "center center"
1646}];
1647function HomePage() {
1648  const [hydrated, setHydrated] = reactExports.useState(false);
1649  reactExports.useEffect(() => {
1650    setHydrated(true);
1651  }, []);
1652  return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
1653    /* @__PURE__ */ jsxRuntimeExports.jsxs(Helmet, { children: [
1654      /* @__PURE__ */ jsxRuntimeExports.jsx("title", { children: "Home | SkillForge Instructor-Led Software & Business Skills Training" }),
1655      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "description", content: "SkillForge delivers expert instructor-led training in Microsoft Office, Excel, Power BI, SharePoint, Azure, leadership, and more. Live online classes and onsite training across North America." }),
1656      /* @__PURE__ */ jsxRuntimeExports.jsx("link", { rel: "canonical", href: "https://skillforge.com/" }),
1657      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:type", content: "website" }),
1658      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:url", content: "https://skillforge.com/" }),
1659      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:title", content: "SkillForge | Instructor-Led Software & Business Skills Training" }),
1660      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:description", content: "Expert instructor-led training in Microsoft Office, Excel, Power BI, SharePoint, Azure, leadership, and more. Live online and onsite classes across North America." }),
1661      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:image", content: "https://skillforge.com/assets/skillforge-logo.jpg" }),
1662      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:card", content: "summary_large_image" }),
1663      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:title", content: "SkillForge | Instructor-Led Software & Business Skills Training" }),
1664      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:description", content: "Expert instructor-led training in Microsoft Office, Excel, Power BI, SharePoint, Azure, leadership, and more." }),
1665      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:image", content: "https://skillforge.com/assets/skillforge-logo.jpg" }),
1666      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "google-site-verification", content: "WE39uGaJLTa66Kv5ec9RFPXtPyXrGics6ya6ZT_4Brc" }),
1667      /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify({
1668        "@context": "https://schema.org",
1669        "@graph": [{
1670          "@type": "WebSite",
1671          "@id": "https://skillforge.com/#website",
1672          "name": "SkillForge®",
1673          "url": "https://skillforge.com/"
1674        }, {
1675          "@type": "EducationalOrganization",
1676          "@id": "https://skillforge.com/#organization",
1677          "name": "SkillForge®",
1678          "url": "https://skillforge.com",
1679          "logo": {
1680            "@type": "ImageObject",
1681            "url": "https://skillforge.com/assets/skillforge-logo.jpg"
1682          },
1683          "description": "SkillForge delivers expert instructor-led training in software applications, business skills, leadership development, and professional certifications.",
1684          "foundingDate": "2010-06",
1685          "address": {
1686            "@type": "PostalAddress",
1687            "streetAddress": "2118 Plum Grove Rd. #206",
1688            "addressLocality": "Rolling Meadows",
1689            "addressRegion": "IL",
1690            "postalCode": "60008",
1691            "addressCountry": "US"
1692          },
1693          "telephone": "800-971-3203",
1694          "email": "[email protected]",
1695          "areaServed": "North America",
1696          "contactPoint": {
1697            "@type": "ContactPoint",
1698            "telephone": "800-971-3203",
1699            "contactType": "customer service",
1700            "areaServed": "US",
1701            "availableLanguage": "English"
1702          },
1703          "sameAs": []
1704        }, {
1705          "@type": "WebPage",
1706          "@id": "https://skillforge.com/#webpage",
1707          "url": "https://skillforge.com/",
1708          "name": "SkillForge | Instructor-Led Software & Business Skills Training",
1709          "description": "Expert instructor-led training in Microsoft Office, Excel, Power BI, SharePoint, Azure, leadership, and more. Live online and onsite classes across North America.",
1710          "isPartOf": {
1711            "@id": "https://skillforge.com/#website"
1712          },
1713          "about": {
1714            "@id": "https://skillforge.com/#organization"
1715          },
1716          "datePublished": "2010-01-01",
1717          "dateModified": "2026-07-25"
1718        }]
1719      }) })
1720    ] }),
1721    /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col", children: [
1722      /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "relative border-b border-border", style: {
1723        background: "#f5f6f7"
1724      }, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative container mx-auto px-6 py-10 md:py-14", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-8 items-center max-w-5xl mx-auto", children: [
1725        /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: hydrated ? {
1726          opacity: 0,
1727          y: 24
1728        } : false, animate: {
1729          opacity: 1,
1730          y: 0
1731        }, transition: {
1732          duration: 0.5,
1733          ease: "easeOut"
1734        }, className: "flex flex-col gap-4", children: [
1735          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold tracking-widest uppercase", style: {
1736            color: "#FF7A00"
1737          }, children: "Expert Training" }),
1738          /* @__PURE__ */ jsxRuntimeExports.jsxs("h1", { className: "text-3xl md:text-4xl font-bold leading-tight text-foreground", children: [
1739            "Forge your skills.",
1740            " ",
1741            /* @__PURE__ */ jsxRuntimeExports.jsx("span", { style: {
1742              color: "#FF7A00"
1743            }, children: "Ignite your future." })
1744          ] }),
1745          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-base text-muted-foreground leading-relaxed", children: "SkillForge delivers instructor-led training courses in software applications, business skills, leadership development, and professional certifications. Choose from live online classes or onsite training delivered at your location." }),
1746          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row gap-3", children: [
1747            /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, size: "lg", className: "text-base px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/courses", children: "Browse Courses" }) }),
1748            /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, size: "lg", variant: "outline", className: "text-base px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/course-categories/ai", children: "Explore AI Courses" }) })
1749          ] })
1750        ] }),
1751        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "hidden md:flex items-end justify-center pb-4", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-end justify-center", children: [
1752          /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: hydrated ? {
1753            x: -10
1754          } : false, animate: {
1755            x: 0
1756          }, transition: {
1757            duration: 0.5,
1758            ease: "easeOut",
1759            delay: 0.15
1760          }, className: "flex flex-col items-center flex-shrink-0", style: {
1761            zIndex: 1
1762          }, children: [
1763            /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-36 h-36 rounded-full overflow-hidden", style: {
1764              border: "3px solid #4A7A8A",
1765              boxShadow: "0 6px 24px rgba(74,122,138,0.18)"
1766            }, children: /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: "/airo-assets/uploads/hero-circle-2-v4.jpg", alt: "Student learning online", className: "w-full h-full object-cover", width: 144, height: 144, loading: "eager" }) }),
1767            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-2 text-center rounded-lg px-3 py-1 shadow-sm", style: {
1768              background: "#fff",
1769              border: "1px solid #e5e7eb",
1770              whiteSpace: "nowrap"
1771            }, children: [
1772              /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs font-bold text-foreground leading-tight", children: "Learn Anywhere" }),
1773              /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground leading-tight", children: "Online or onsite" })
1774            ] })
1775          ] }),
1776          /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: hydrated ? {
1777            y: 10
1778          } : false, animate: {
1779            y: 0
1780          }, transition: {
1781            duration: 0.5,
1782            ease: "easeOut",
1783            delay: 0.25
1784          }, className: "flex flex-col items-center flex-shrink-0", style: {
1785            zIndex: 3,
1786            marginLeft: -12,
1787            marginRight: -12,
1788            marginBottom: 24
1789          }, children: [
1790            /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-44 h-44 rounded-full overflow-hidden", style: {
1791              border: "3px solid #FF7A00",
1792              boxShadow: "0 8px 32px rgba(255,122,0,0.22)"
1793            }, children: /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: "/airo-assets/uploads/hero-circle-1-v3.jpg", alt: "Live instructor-led training", className: "w-full h-full object-cover", width: 176, height: 176, loading: "eager", fetchPriority: "high" }) }),
1794            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-2 text-center rounded-lg px-3 py-1 shadow-sm", style: {
1795              background: "#fff",
1796              border: "1px solid #FF7A00",
1797              whiteSpace: "nowrap"
1798            }, children: [
1799              /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs font-bold leading-tight", style: {
1800                color: "#FF7A00"
1801              }, children: "Live Instructor-Led" }),
1802              /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground leading-tight", children: "Real-time interaction" })
1803            ] })
1804          ] }),
1805          /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: hydrated ? {
1806            x: 10
1807          } : false, animate: {
1808            x: 0
1809          }, transition: {
1810            duration: 0.5,
1811            ease: "easeOut",
1812            delay: 0.35
1813          }, className: "flex flex-col items-center flex-shrink-0", style: {
1814            zIndex: 1
1815          }, children: [
1816            /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-36 h-36 rounded-full overflow-hidden", style: {
1817              border: "3px solid #4A7A8A",
1818              boxShadow: "0 6px 24px rgba(74,122,138,0.18)"
1819            }, children: /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: "/airo-assets/uploads/hero-circle-3-v5.jpg", alt: "Private training workshop", className: "w-full h-full object-cover", width: 144, height: 144, loading: "eager" }) }),
1820            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-2 text-center rounded-lg px-3 py-1 shadow-sm", style: {
1821              background: "#fff",
1822              border: "1px solid #e5e7eb",
1823              whiteSpace: "nowrap"
1824            }, children: [
1825              /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs font-bold text-foreground leading-tight", children: "Private Training" }),
1826              /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground leading-tight", children: "Custom team sessions" })
1827            ] })
1828          ] })
1829        ] }) })
1830      ] }) }) }),
1831      /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-16 bg-background", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mx-auto max-w-5xl px-6", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-6", children: benefits.map((benefit, index) => /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
1832        opacity: 0,
1833        y: 24
1834      }, whileInView: {
1835        opacity: 1,
1836        y: 0
1837      }, viewport: {
1838        once: true
1839      }, transition: {
1840        duration: 0.4,
1841        ease: "easeOut",
1842        delay: index * 0.1
1843      }, whileHover: {
1844        y: -4
1845      }, className: "rounded-xl overflow-hidden flex flex-col cursor-default transition-shadow hover:shadow-xl", style: {
1846        border: "1px solid #e5e7eb"
1847      }, children: [
1848        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-48 relative overflow-hidden", children: benefit.image ? /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: benefit.image, alt: benefit.title, className: "w-full h-full", style: {
1849          objectFit: "cover",
1850          objectPosition: benefit.imagePosition ?? "center center"
1851        }, width: 400, height: 192, loading: "lazy" }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "w-full h-full flex flex-col items-center justify-center gap-4", style: {
1852          background: benefit.gradient ?? "#1e3a4a"
1853        }, children: [
1854          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "rounded-full flex items-center justify-center", style: {
1855            width: 72,
1856            height: 72,
1857            background: "rgba(255,255,255,0.15)",
1858            border: "2px solid rgba(255,255,255,0.3)"
1859          }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Monitor, { size: 36, color: "white", strokeWidth: 1.5 }) }),
1860          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex gap-3", children: ["Live Online", "On-Site", "Hybrid"].map((label) => /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs font-semibold px-3 py-1 rounded-full", style: {
1861            background: "rgba(255,255,255,0.18)",
1862            color: "white",
1863            border: "1px solid rgba(255,255,255,0.25)"
1864          }, children: label }, label)) })
1865        ] }) }),
1866        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-1", style: {
1867          background: benefit.accent
1868        } }),
1869        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-6 flex flex-col gap-3 flex-1 bg-white", children: [
1870          /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "font-bold text-foreground text-xl", children: benefit.title }),
1871          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-base text-muted-foreground leading-relaxed", children: benefit.description })
1872        ] })
1873      ] }, benefit.title)) }) }) }),
1874      /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20", style: {
1875        background: "#f5f6f7"
1876      }, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mx-auto max-w-5xl px-6", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col md:flex-row items-center gap-12", children: [
1877        /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
1878          opacity: 0,
1879          y: 20
1880        }, whileInView: {
1881          opacity: 1,
1882          y: 0
1883        }, viewport: {
1884          once: true
1885        }, transition: {
1886          duration: 0.5
1887        }, className: "md:w-2/5 flex-shrink-0", children: [
1888          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold tracking-widest uppercase mb-3", style: {
1889            color: "#FF7A00"
1890          }, children: "Trusted By" }),
1891          /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-3xl font-bold text-foreground mb-4", children: "Trusted by Organizations Across North America" }),
1892          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground leading-relaxed mb-4", children: "From small businesses to governmental agencies and Fortune 500 companies, thousands of organizations have trusted us to train their staff." }),
1893          /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: "/clients", className: "inline-flex items-center gap-1.5 text-sm font-semibold hover:underline", style: {
1894            color: "#FF7A00"
1895          }, children: [
1896            "View Our Clients ",
1897            /* @__PURE__ */ jsxRuntimeExports.jsx(ArrowRight, { className: "w-4 h-4" })
1898          ] })
1899        ] }),
1900        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "md:w-3/5 grid grid-cols-3 gap-4", children: [{
1901          src: "/assets/cis-gray.png",
1902          alt: "Cisco"
1903        }, {
1904          src: "/assets/HP-gray.jpg",
1905          alt: "HP"
1906        }, {
1907          src: "/assets/loc-gray.png",
1908          alt: "Library of Congress"
1909        }, {
1910          src: "/assets/moo-gray.png",
1911          alt: "Mutual of Omaha"
1912        }, {
1913          src: "/assets/sge-gray.png",
1914          alt: "Sage"
1915        }, {
1916          src: "/assets/sie-gray.jpg",
1917          alt: "Siemens"
1918        }].map((logo, i) => /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { initial: {
1919          opacity: 0,
1920          y: 16
1921        }, whileInView: {
1922          opacity: 1,
1923          y: 0
1924        }, viewport: {
1925          once: true
1926        }, transition: {
1927          duration: 0.4,
1928          ease: "easeOut",
1929          delay: i * 0.06
1930        }, className: "flex items-center justify-center rounded-xl p-6 bg-background border border-border", style: {
1931          minHeight: "110px"
1932        }, children: /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: logo.src, alt: logo.alt, width: 106, height: 54, className: "max-h-16 max-w-full object-contain opacity-60 hover:opacity-90 transition-opacity", loading: "lazy" }) }, logo.alt)) })
1933      ] }) }) }),
1934      /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 bg-background", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mx-auto max-w-5xl px-6", children: [
1935        /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
1936          opacity: 0,
1937          y: 20
1938        }, whileInView: {
1939          opacity: 1,
1940          y: 0
1941        }, viewport: {
1942          once: true
1943        }, transition: {
1944          duration: 0.5
1945        }, className: "text-center mb-12", children: [
1946          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold tracking-widest uppercase mb-3 text-muted-foreground", children: "Student Reviews" }),
1947          /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-3xl font-bold text-foreground mb-4", children: "What Our Students Say" }),
1948          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-center gap-1 mb-2", children: [
1949            [...Array(5)].map((_, i) => /* @__PURE__ */ jsxRuntimeExports.jsx(Star, { className: "w-5 h-5", style: {
1950              fill: "#F5A623",
1951              color: "#F5A623"
1952            } }, i)),
1953            /* @__PURE__ */ jsxRuntimeExports.jsx("a", { href: "https://www.google.com/search?q=SkillForge&stick=H4sIAAAAAAAAAONgU1I1qLCwMEhLNDVINko0T0oxMje0MqhINjU3TkoxNkkyTzVLNrY0WcTKFZydmZPjll-UngoAQlFfUDYAAAA&ved=2ahUKEwj4rYLD4a34AhUEK0QIHYr9Da0QrMcEegQIAhAC#", target: "_blank", rel: "noopener noreferrer", className: "ml-2 font-semibold text-foreground hover:underline", children: "5 of 5 stars on Google" })
1954          ] })
1955        ] }),
1956        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-6", children: [{
1957          title: "Absolutely Fantastic!",
1958          quote: "Jennifer was absolutely fantastic! She delivered several hours of one-on-one training that significantly enhanced my understanding of how to leverage PowerPivot functionality within Microsoft Excel.",
1959          name: "Jim M.",
1960          company: "Bill and Melinda Gates Foundation"
1961        }, {
1962          title: "Expectations Exceeded",
1963          quote: "My expectations were definitely exceeded for this course. I had a bias towards courses with onsite instructors but the flexibility of the online classroom meant that this course was really just as good as any conventionally taught course.",
1964          name: "Michael B.",
1965          company: "Fitchburg State University"
1966        }, {
1967          title: "Excellent Instructor!",
1968          quote: "Aletha was an excellent instructor! Very knowledgeable. The training was interactive and I had plenty of opportunity to ask questions. This was my first time taking an online class — I would recommend SkillForge to anyone.",
1969          name: "Scott H.",
1970          company: "Washington County"
1971        }].map((review, i) => /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
1972          opacity: 0,
1973          y: 20
1974        }, whileInView: {
1975          opacity: 1,
1976          y: 0
1977        }, viewport: {
1978          once: true
1979        }, transition: {
1980          duration: 0.4,
1981          ease: "easeOut",
1982          delay: i * 0.1
1983        }, className: "rounded-xl flex flex-col", style: {
1984          border: "1px solid #e5e7eb"
1985        }, children: [
1986          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-1 rounded-t-xl bg-border" }),
1987          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-6 flex flex-col flex-1", children: [
1988            /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex gap-0.5 mb-3", children: [...Array(5)].map((_, s) => /* @__PURE__ */ jsxRuntimeExports.jsx(Star, { className: "w-4 h-4", style: {
1989              fill: "#F5A623",
1990              color: "#F5A623"
1991            } }, s)) }),
1992            /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "font-bold text-foreground mb-3", children: review.title }),
1993            /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-sm text-muted-foreground leading-relaxed flex-1", children: [
1994              '"',
1995              review.quote,
1996              '"'
1997            ] }),
1998            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-5 pt-4", style: {
1999              borderTop: "1px solid #d0e4ea"
2000            }, children: [
2001              /* @__P
2001URE__ */ jsxRuntimeExports.jsx("p", { className: "font-semibold text-foreground text-sm", children: review.name }),
2002              /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs mt-0.5 text-muted-foreground", children: review.company })
2003            ] })
2004          ] })
2005        ] }, review.name)) }),
2006        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center mt-10", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/about/testimonials", className: "text-sm font-semibold hover:underline", style: {
2007          color: "#4A7A8A"
2008        }, children: "Read all reviews →" }) })
2009      ] }) }),
2010      /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-16 bg-background border-t border-border", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mx-auto max-w-5xl px-6", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
2011        opacity: 1
2012      }, whileInView: {
2013        opacity: 1,
2014        y: 0
2015      }, viewport: {
2016        once: true
2017      }, className: "flex flex-col md:flex-row items-center gap-10", children: [
2018        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 text-center md:text-left", children: [
2019          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "inline-flex items-center gap-2 mb-4 px-3 py-1 rounded-full border", style: {
2020            background: "#fff4eb",
2021            borderColor: "#ffd4a8"
2022          }, children: [
2023            /* @__PURE__ */ jsxRuntimeExports.jsx(Youtube, { className: "w-4 h-4", style: {
2024              color: "#FF7A00"
2025            } }),
2026            /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs font-semibold uppercase tracking-wide", style: {
2027              color: "#FF7A00"
2028            }, children: "Free on YouTube" })
2029          ] }),
2030          /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-2xl md:text-3xl font-bold text-foreground mb-3", children: "Not ready to enroll? Start learning free." }),
2031          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground mb-6 max-w-md", children: "Watch course previews, software walkthroughs, and quick-skill videos on the SkillForge® YouTube channel — no signup required." }),
2032          /* @__PURE__ */ jsxRuntimeExports.jsxs("a", { href: "https://www.youtube.com/skillforge", target: "_blank", rel: "noopener noreferrer", className: "inline-flex items-center gap-2 px-6 py-3 rounded-lg font-semibold text-white transition-opacity hover:opacity-90", style: {
2033            background: "#FF7A00"
2034          }, children: [
2035            /* @__PURE__ */ jsxRuntimeExports.jsx(Youtube, { className: "w-5 h-5" }),
2036            "Visit our channel"
2037          ] })
2038        ] }),
2039        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-shrink-0 w-full md:w-80", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("a", { href: "https://www.youtube.com/skillforge", target: "_blank", rel: "noopener noreferrer", className: "group block rounded-2xl overflow-hidden transition-all duration-300 hover:-translate-y-1 hover:shadow-2xl", "aria-label": "Watch SkillForge on YouTube", style: {
2040          background: "#fff8f2",
2041          border: "2px solid #ffe0c2",
2042          boxShadow: "0 4px 24px rgba(255,122,0,0.10)"
2043        }, children: [
2044          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3 px-5 pt-5 pb-4", children: [
2045            /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-10 h-10 rounded-xl flex items-center justify-center flex-shrink-0", style: {
2046              background: "#FF7A00"
2047            }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Youtube, { className: "w-5 h-5 text-white" }) }),
2048            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2049              /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "font-bold text-sm text-foreground leading-tight", children: [
2050                "SkillForge",
2051                /* @__PURE__ */ jsxRuntimeExports.jsx("sup", { className: "text-[0.6em]", children: "®" }),
2052                " on YouTube"
2053              ] }),
2054              /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs text-muted-foreground", children: "Free training videos" })
2055            ] })
2056          ] }),
2057          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-4 pb-2 flex flex-col gap-2", children: [{
2058            title: "Microsoft Excel",
2059            duration: "18 lessons",
2060            color: "#1d6f42",
2061            icon: "📊",
2062            href: "https://www.youtube.com/playlist?list=PLwLw21RsChcuPF4HitxlMXOaJtXCtMwIx"
2063          }, {
2064            title: "Microsoft Copilot 365",
2065            duration: "Tips & walkthroughs",
2066            color: "#0078d4",
2067            icon: "🤖",
2068            href: "https://www.youtube.com/@SkillForge/videos"
2069          }, {
2070            title: "Power BI",
2071            duration: "4 videos",
2072            color: "#e8a800",
2073            icon: "📈",
2074            href: "https://www.youtube.com/playlist?list=PLwLw21RsChcuYNijcKSkzzFLo1D4-oZso"
2075          }].map((v) => /* @__PURE__ */ jsxRuntimeExports.jsxs("a", { href: v.href, target: "_blank", rel: "noopener noreferrer", className: "flex items-center gap-3 rounded-xl p-2.5 transition-colors hover:bg-orange-50", style: {
2076            background: "white",
2077            border: "1px solid #f0e8e0"
2078          }, children: [
2079            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "w-16 h-10 rounded-lg flex items-center justify-center flex-shrink-0 relative overflow-hidden", style: {
2080              background: v.color
2081            }, children: [
2082              /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-lg", children: v.icon }),
2083              /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-5 h-5 rounded-full bg-white/30 flex items-center justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { viewBox: "0 0 10 10", className: "w-2.5 h-2.5 fill-white ml-0.5", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntimeExports.jsx("polygon", { points: "2,1 9,5 2,9" }) }) }) })
2084            ] }),
2085            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [
2086              /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs font-semibold text-foreground truncate", children: v.title }),
2087              /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-[10px] text-muted-foreground", children: v.duration })
2088            ] }),
2089            /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { viewBox: "0 0 10 10", className: "w-3 h-3 flex-shrink-0 opacity-30", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntimeExports.jsx("polygon", { points: "2,1 9,5 2,9", fill: "currentColor" }) })
2090          ] }, v.title)) }),
2091          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mx-4 mb-4 mt-2 rounded-xl py-2.5 flex items-center justify-center gap-2 font-semibold text-sm text-white transition-opacity group-hover:opacity-90", style: {
2092            background: "#FF7A00"
2093          }, children: [
2094            /* @__PURE__ */ jsxRuntimeExports.jsx(Youtube, { className: "w-4 h-4" }),
2095            "Watch all videos"
2096          ] })
2097        ] }) })
2098      ] }) }) }),
2099      /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-16 text-white", style: {
2100        background: "#4A7A8A"
2101      }, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mx-auto max-w-5xl px-6", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
2102        opacity: 0,
2103        y: 20
2104      }, whileInView: {
2105        opacity: 1,
2106        y: 0
2107      }, viewport: {
2108        once: true
2109      }, transition: {
2110        duration: 0.5
2111      }, className: "text-center", children: [
2112        /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-3xl font-bold", children: "Ready to Start Learning?" }),
2113        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mt-4 text-lg opacity-90 max-w-2xl mx-auto", children: "Join our community of learners and take the next step in your professional development journey." }),
2114        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-8 flex justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, size: "lg", className: "text-lg px-8 font-semibold", style: {
2115          background: "white",
2116          color: "#4A7A8A"
2117        }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/courses", children: "Explore Courses" }) }) })
2118      ] }) }) })
2119    ] })
2120  ] });
2121}
2122function AuthPage() {
2123  const navigate = useNavigate();
2124  const {
2125    session,
2126    isPending
2127  } = useSession();
2128  const [email, setEmail] = reactExports.useState("");
2129  const [error, setError] = reactExports.useState("");
2130  const [loading, setLoading] = reactExports.useState(false);
2131  const [magicLinkSent, setMagicLinkSent] = reactExports.useState(false);
2132  if ((session == null ? void 0 : session.user) && !isPending) {
2133    const user = getUserWithRole(session.user);
2134    const userRole = user.role;
2135    if (userRole === "admin") return /* @__PURE__ */ jsxRuntimeExports.jsx(Navigate, { to: "/admin", replace: true });
2136    if (userRole === "instructor") return /* @__PURE__ */ jsxRuntimeExports.jsx(Navigate, { to: "/instructor", replace: true });
2137    return /* @__PURE__ */ jsxRuntimeExports.jsx(Navigate, { to: "/student", replace: true });
2138  }
2139  const handleSubmit = async (e) => {
2140    e.preventDefault();
2141    setError("");
2142    setLoading(true);
2143    setMagicLinkSent(false);
2144    try {
2145      await sendMagicLink(email);
2146      setMagicLinkSent(true);
2147    } catch (err) {
2148      setError("An unexpected error occurred");
2149    } finally {
2150      setLoading(false);
2151    }
2152  };
2153  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "min-h-screen flex items-center justify-center bg-muted px-4 py-12", children: [
2154    /* @__PURE__ */ jsxRuntimeExports.jsxs(Helmet, { children: [
2155      /* @__PURE__ */ jsxRuntimeExports.jsx("title", { children: "Sign In | SkillForge" }),
2156      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "description", content: "Sign in to your SkillForge student account to access your courses and training materials." }),
2157      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "robots", content: "noindex, nofollow" }),
2158      /* @__PURE__ */ jsxRuntimeExports.jsx("link", { rel: "canonical", href: "https://skillforge.com/auth" }),
2159      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:title", content: "Sign In | SkillForge" }),
2160      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:description", content: "Sign in to your SkillForge student account." }),
2161      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:url", content: "https://skillforge.com/auth" }),
2162      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:type", content: "website" }),
2163      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:card", content: "summary_large_image" }),
2164      /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify({
2165        "@context": "https://schema.org",
2166        "@type": "WebPage",
2167        "name": "Sign In",
2168        "url": "https://skillforge.com/auth",
2169        "isPartOf": {
2170          "@id": "https://skillforge.com/#website"
2171        }
2172      }) })
2173    ] }),
2174    /* @__PURE__ */ jsxRuntimeExports.jsxs(Card, { className: "w-full max-w-md", children: [
2175      /* @__PURE__ */ jsxRuntimeExports.jsxs(CardHeader, { className: "text-center", children: [
2176        /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "sr-only", children: "Sign In to SkillForge" }),
2177        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center mb-4", children: /* @__PURE__ */ jsxRuntimeExports.jsx(GraduationCap, { className: "h-12 w-12 text-primary" }) }),
2178        /* @__PURE__ */ jsxRuntimeExports.jsx(CardTitle, { className: "text-2xl", children: "Welcome back" }),
2179        /* @__PURE__ */ jsxRuntimeExports.jsx(CardDescription, { children: "Enter your email to receive a sign-in link" })
2180      ] }),
2181      /* @__PURE__ */ jsxRuntimeExports.jsx(CardContent, { children: magicLinkSent ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-4 text-center", children: [
2182        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-4 bg-green-50 border border-green-200 rounded-md", children: [
2183          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-green-800 font-medium", children: "Check your email!" }),
2184          /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-sm text-green-700 mt-2", children: [
2185            "We've sent a magic link to ",
2186            /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: email }),
2187            ". Click the link in the email to sign in."
2188          ] })
2189        ] }),
2190        /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { variant: "outline", onClick: () => {
2191          setMagicLinkSent(false);
2192          setEmail("");
2193        }, className: "w-full", children: "Try a different email" })
2194      ] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("form", { onSubmit: handleSubmit, className: "space-y-4", children: [
2195        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
2196          /* @__PURE__ */ jsxRuntimeExports.jsx(Label, { htmlFor: "email", children: "Email" }),
2197          /* @__PURE__ */ jsxRuntimeExports.jsx(Input, { id: "email", type: "email", value: email, onChange: (e) => setEmail(e.target.value), required: true, disabled: loading, placeholder: "[email protected]", autoComplete: "email" })
2198        ] }),
2199        error && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-sm text-destructive bg-destructive/10 p-3 rounded-md", children: error }),
2200        /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { type: "submit", className: "w-full", disabled: loading, children: loading ? "Sending..." : "Send Magic Link" }),
2201        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center text-sm text-muted-foreground mt-4", children: [
2202          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "font-medium text-foreground mb-2", children: "First time here?" }),
2203          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "Magic links only work for students who have already enrolled in a course." }),
2204          /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-2", children: [
2205            /* @__PURE__ */ jsxRuntimeExports.jsx("button", { type: "button", onClick: () => navigate("/courses"), className: "text-primary hover:underline font-medium", children: "Browse courses" }),
2206            " ",
2207            "to enroll. Your account will be created automatically when you complete your purchase."
2208          ] })
2209        ] })
2210      ] }) })
2211    ] })
2212  ] });
2213}
2214const badgeVariants = cva("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", {
2215  variants: {
2216    variant: {
2217      default: "border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
2218      secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
2219      destructive: "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",
2220      outline: "text-foreground"
2221    }
2222  },
2223  defaultVariants: {
2224    variant: "default"
2225  }
2226});
2227function Badge({
2228  className,
2229  variant,
2230  ...props
2231}) {
2232  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: cn(badgeVariants({
2233    variant
2234  }), className), ...props });
2235}
2236const Select = Root2$1;
2237const SelectValue = Value;
2238const SelectTrigger = reactExports.forwardRef(({
2239  className,
2240  children,
2241  ...props
2242}, ref) => /* @__PURE__ */ jsxRuntimeExports.jsxs(Trigger$1, { ref, className: cn("flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm r
2242ing-offset-background data-[placeholder]:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1", className), ...props, children: [
2243  children,
2244  /* @__PURE__ */ jsxRuntimeExports.jsx(Icon, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "h-4 w-4 opacity-50" }) })
2245] }));
2246SelectTrigger.displayName = Trigger$1.displayName;
2247const SelectScrollUpButton = reactExports.forwardRef(({
2248  className,
2249  ...props
2250}, ref) => /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollUpButton, { ref, className: cn("flex cursor-default items-center justify-center py-1", className), ...props, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronUp, { className: "h-4 w-4" }) }));
2251SelectScrollUpButton.displayName = ScrollUpButton.displayName;
2252const SelectScrollDownButton = reactExports.forwardRef(({
2253  className,
2254  ...props
2255}, ref) => /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollDownButton, { ref, className: cn("flex cursor-default items-center justify-center py-1", className), ...props, children: /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "h-4 w-4" }) }));
2256SelectScrollDownButton.displayName = ScrollDownButton.displayName;
2257const SelectContent = reactExports.forwardRef(({
2258  className,
2259  children,
2260  position = "popper",
2261  ...props
2262}, ref) => /* @__PURE__ */ jsxRuntimeExports.jsx(Portal$1, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Content2, { ref, className: cn("relative z-50 max-h-[--radix-select-content-available-height] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-select-content-transform-origin]", position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1", className), position, ...props, children: [
2263  /* @__PURE__ */ jsxRuntimeExports.jsx(SelectScrollUpButton, {}),
2264  /* @__PURE__ */ jsxRuntimeExports.jsx(Viewport, { className: cn("p-1", position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"), children }),
2265  /* @__PURE__ */ jsxRuntimeExports.jsx(SelectScrollDownButton, {})
2266] }) }));
2267SelectContent.displayName = Content2.displayName;
2268const SelectLabel = reactExports.forwardRef(({
2269  className,
2270  ...props
2271}, ref) => /* @__PURE__ */ jsxRuntimeExports.jsx(Label$1, { ref, className: cn("py-1.5 pl-8 pr-2 text-sm font-semibold", className), ...props }));
2272SelectLabel.displayName = Label$1.displayName;
2273const SelectItem = reactExports.forwardRef(({
2274  className,
2275  children,
2276  ...props
2277}, ref) => /* @__PURE__ */ jsxRuntimeExports.jsxs(Item, { ref, className: cn("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50", className), ...props, children: [
2278  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx(ItemIndicator, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "h-4 w-4" }) }) }),
2279  /* @__PURE__ */ jsxRuntimeExports.jsx(ItemText, { children })
2280] }));
2281SelectItem.displayName = Item.displayName;
2282const SelectSeparator = reactExports.forwardRef(({
2283  className,
2284  ...props
2285}, ref) => /* @__PURE__ */ jsxRuntimeExports.jsx(Separator, { ref, className: cn("-mx-1 my-1 h-px bg-muted", className), ...props }));
2286SelectSeparator.displayName = Separator.displayName;
2287function CoursesPage() {
2288  const loaderData = useLoaderData();
2289  const [searchParams, setSearchParams] = useSearchParams();
2290  const [courses, setCourses] = reactExports.useState((loaderData == null ? void 0 : loaderData.courses) ?? []);
2291  const [categories, setCategories] = reactExports.useState([]);
2292  const [filteredCourses, setFilteredCourses] = reactExports.useState((loaderData == null ? void 0 : loaderData.courses) ?? []);
2293  const searchQuery = searchParams.get("search") || "";
2294  const [categoryFilter, setCategoryFilter] = reactExports.useState("all");
2295  const [hydrated, setHydrated] = reactExports.useState(false);
2296  const setSearchQuery = (value) => {
2297    setSearchParams((prev) => {
2298      const next = new URLSearchParams(prev);
2299      if (value) {
2300        next.set("search", value);
2301      } else {
2302        next.delete("search");
2303      }
2304      return next;
2305    }, {
2306      replace: true
2307    });
2308  };
2309  reactExports.useEffect(() => {
2310    var _a2;
2311    setHydrated(true);
2312    const hasLoaderCourses = (((_a2 = loaderData == null ? void 0 : loaderData.courses) == null ? void 0 : _a2.length) ?? 0) > 0;
2313    const fetches = [fetch("/api/categories").then((res) => res.json())];
2314    if (!hasLoaderCourses) {
2315      fetches.unshift(fetch("/api/courses").then((res) => res.json()));
2316    }
2317    Promise.all(fetches).then((results) => {
2318      if (!hasLoaderCourses) {
2319        const [coursesData, categoriesData] = results;
2320        const coursesArray = Array.isArray(coursesData) ? coursesData : [];
2321        const categoriesArray = Array.isArray(categoriesData) ? categoriesData : [];
2322        const activeCourses = coursesArray.filter((c) => c.isActive !== false);
2323        setCourses(activeCourses);
2324        setCategories(categoriesArray);
2325      } else {
2326        const [categoriesData] = results;
2327        const categoriesArray = Array.isArray(categoriesData) ? categoriesData : [];
2328        setCategories(categoriesArray);
2329      }
2330    }).catch((err) => {
2331      console.error("Error fetching data:", err);
2332      if (!hasLoaderCourses) {
2333        setCourses([]);
2334        setFilteredCourses([]);
2335      }
2336      setCategories([]);
2337    });
2338  }, []);
2339  const getAllCategoryIds = (categoryId, cats) => {
2340    const ids = [categoryId];
2341    const findChildren = (parentId, catList) => {
2342      for (const cat of catList) {
2343        if (cat.parentId === parentId) {
2344          ids.push(cat.id);
2345          if (cat.children && cat.children.length > 0) {
2346            cat.children.forEach((child) => {
2347              ids.push(child.id);
2348              findChildren(child.id, catList);
2349            });
2350          }
2351        }
2352      }
2353    };
2354    const flattenCategories = (cats2) => {
2355      const result = [];
2356      for (const cat of cats2) {
2357        result.push(cat);
2358        if (cat.children && cat.children.length > 0) {
2359          result.push(...flattenCategories(cat.children));
2360        }
2361      }
2362      return result;
2363    };
2364    findChildren(categoryId, flattenCategories(cats));
2365    return ids;
2366  };
2367  const flattenCategoriesForDisplay = (cats, level = 0) => {
2368    const result = [];
2369    for (const cat of cats) {
2370      result.push({
2371        id: cat.id,
2372        name: cat.name,
2373        level
2374      });
2375      if (cat.children && cat.children.length > 0) {
2376        result.push(...flattenCategoriesForDisplay(cat.children, level 
2376+ 1));
2377      }
2378    }
2379    return result;
2380  };
2381  reactExports.useEffect(() => {
2382    let filtered = courses;
2383    if (searchQuery) {
2384      const q = searchQuery.toLowerCase();
2385      filtered = filtered.filter((course) => course.title.toLowerCase().includes(q) || (course.description || "").toLowerCase().includes(q));
2386    }
2387    if (categoryFilter !== "all") {
2388      const categoryId = parseInt(categoryFilter);
2389      const categoryIds = getAllCategoryIds(categoryId, categories);
2390      filtered = filtered.filter((course) => {
2391        var _a2;
2392        const ids = ((_a2 = course.categoryIds) == null ? void 0 : _a2.length) ? course.categoryIds : course.categoryId ? [course.categoryId] : [];
2393        return ids.some((id) => categoryIds.includes(id));
2394      });
2395    }
2396    setFilteredCourses(filtered);
2397  }, [searchQuery, categoryFilter, courses, categories]);
2398  const stripHtml = (html) => html.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim();
2399  const itemListJsonLd = {
2400    "@context": "https://schema.org",
2401    "@type": "ItemList",
2402    name: "SkillForge Training Courses",
2403    description: "Full catalog of instructor-led professional training courses",
2404    url: "https://skillforge.com/courses",
2405    numberOfItems: courses.length,
2406    itemListElement: courses.map((c, i) => {
2407      var _a2;
2408      return {
2409        "@type": "ListItem",
2410        position: i + 1,
2411        item: {
2412          "@type": "Course",
2413          name: c.title,
2414          url: `https://skillforge.com${c.relativeUrl}`,
2415          description: stripHtml(c.description || "").slice(0, 300),
2416          image: ((_a2 = c.imageUrl) == null ? void 0 : _a2.startsWith("http")) ? c.imageUrl : `https://skillforge.com${c.imageUrl || "/assets/skillforge-logo.jpg"}`,
2417          provider: {
2418            "@type": "Organization",
2419            name: "SkillForge",
2420            url: "https://skillforge.com"
2421          },
2422          offers: {
2423            "@type": "Offer",
2424            price: c.price,
2425            priceCurrency: "USD",
2426            availability: "https://schema.org/InStock",
2427            url: `https://skillforge.com${c.relativeUrl}`
2428          }
2429        }
2430      };
2431    })
2432  };
2433  const webPageJsonLd = {
2434    "@context": "https://schema.org",
2435    "@type": "CollectionPage",
2436    "@id": "https://skillforge.com/courses#webpage",
2437    name: "Training Courses | Microsoft Office, Excel, Power BI, Azure & More | SkillForge",
2438    url: "https://skillforge.com/courses",
2439    description: "Browse SkillForge's full catalog of instructor-led training courses — Microsoft Office, Excel, Power BI, SharePoint, Azure, SQL, Tableau, leadership, and business skills. Live online and onsite.",
2440    isPartOf: {
2441      "@id": "https://skillforge.com/#website"
2442    },
2443    about: {
2444      "@id": "https://skillforge.com/#organization"
2445    },
2446    breadcrumb: {
2447      "@type": "BreadcrumbList",
2448      itemListElement: [{
2449        "@type": "ListItem",
2450        position: 1,
2451        name: "Home",
2452        item: "https://skillforge.com"
2453      }, {
2454        "@type": "ListItem",
2455        position: 2,
2456        name: "Courses",
2457        item: "https://skillforge.com/courses"
2458      }]
2459    }
2460  };
2461  return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
2462    /* @__PURE__ */ jsxRuntimeExports.jsxs(Helmet, { children: [
2463      /* @__PURE__ */ jsxRuntimeExports.jsx("title", { children: "Training Courses | Microsoft Office, Excel, Power BI, Azure & More | SkillForge" }),
2464      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "description", content: "Browse SkillForge's full catalog of instructor-led training courses — Microsoft Office, Excel, Power BI, SharePoint, Azure, SQL, Tableau, leadership, and business skills. Live online and onsite." }),
2465      /* @__PURE__ */ jsxRuntimeExports.jsx("link", { rel: "canonical", href: "https://skillforge.com/courses" }),
2466      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:type", content: "website" }),
2467      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:url", content: "https://skillforge.com/courses" }),
2468      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:title", content: "Training Courses | Microsoft Office, Excel, Power BI, Azure & More | SkillForge" }),
2469      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:description", content: "Browse SkillForge's full catalog of instructor-led training courses — Microsoft Office, Excel, Power BI, SharePoint, Azure, SQL, Tableau, leadership, and business skills." }),
2470      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:image", content: "https://skillforge.com/assets/skillforge-logo.jpg" }),
2471      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:card", content: "summary_large_image" }),
2472      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:image", content: "https://skillforge.com/assets/skillforge-logo.jpg" }),
2473      /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify(itemListJsonLd).replace(/</g, "<") }),
2474      /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify(webPageJsonLd).replace(/</g, "<") })
2475    ] }),
2476    /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-h-screen bg-background py-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mx-auto max-w-7xl px-4 sm:px-6 lg:px-8", children: [
2477      /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: hydrated ? {
2478        opacity: 0,
2479        y: 20
2480      } : false, animate: {
2481        opacity: 1,
2482        y: 0
2483      }, transition: {
2484        duration: 0.5
2485      }, className: "text-center mb-12", children: [
2486        /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-4xl font-bold text-foreground", children: "Our Courses" }),
2487        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mt-4 text-lg text-muted-foreground", children: "Explore our comprehensive catalog of professional training programs" })
2488      ] }),
2489      /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: hydrated ? {
2490        opacity: 0,
2491        y: 20
2492      } : false, animate: {
2493        opacity: 1,
2494        y: 0
2495      }, transition: {
2496        duration: 0.5,
2497        delay: 0.1
2498      }, className: "mb-8 space-y-4", children: [
2499        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative", children: [
2500          /* @__PURE__ */ jsxRuntimeExports.jsx(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-5 w-5 text-muted-foreground" }),
2501          /* @__PURE__ */ jsxRuntimeExports.jsx(Input, { type: "text", placeholder: "Search courses...", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), className: "pl-10" })
2502        ] }),
2503        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Select, { value: categoryFilter, onValueChange: setCategoryFilter, children: [
2504          /* @__PURE__ */ jsxRuntimeExports.jsx(SelectTrigger, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(SelectValue, { placeholder: "All Categories" }) }),
2505          /* @__PURE__ */ jsxRuntimeExports.jsxs(SelectContent, { children: [
2506            /* @__PURE__ */ jsxRuntimeExports.jsx(SelectItem, { value: "all", children: "All Categories" }),
2507            flattenCategoriesForDisplay(categories).map((cat) => /* @__PURE__ */ jsxRuntimeExports.jsxs(SelectItem, { value: cat.id.toString(), children: [
2508              " ".repeat(cat.level * 4),
2509              cat.name
2510            ] }, cat.id))
2511          ] })
2512        ] }) })
2513      ] }),
2514      filteredCourses.length > 0 ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8", children: filteredCourses.map((course) => /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Card, { className: "h-full flex flex-col hover:shadow-lg transition-all hover:-translate-y-1", children: [
2515        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "aspect-video overflow-hidden rounded-t-lg", children: /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: course.imageUrl, alt: course.title, className: "w-full h-full object-cover", width: 400, height: 225, loading: "lazy" }) }),
2516        /* @__PURE__ */ jsxRuntimeExports.jsxs(CardHeader, { children: [
2517          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex items-center gap-2 mb-2", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "secondary", children: course.category }) }),
2518          /* @__PURE__ */ jsxRuntimeExports.jsx(CardTitle, { className: "text-xl", children: course.title }),
2519          /* @__PURE__ */ jsxRuntimeExports.jsx(CardDescription, { className: "line-clamp-2 prose prose-sm max-w-none prose-p:my-0 prose-p:inline", dangerouslySetInnerHTML: {
2520            __html: course.description
2521          } })
2522        ] }),
2523        /* @__PURE__ */ jsxRuntimeExports.jsx(CardContent, { className: "flex-grow", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex items-center gap-4 text-sm text-muted-foreground", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1", children: [
2524          /* @__PURE__ */ jsxRuntimeExports.jsx(Calendar, { className: "h-4 w-4" }),
2525          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: course.duration })
2526        ] }) }) }),
2527        /* @__PURE__ */ jsxRuntimeExports.jsxs(CardFooter, { className: "flex items-center justify-between", children: [
2528          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-2xl font-bold text-foreground", children: [
2529            "$",
2530            parseFloat(course.price).toFixed(2)
2531          ] }),
2532          /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: course.relativeUrl, children: "View Details" }) })
2533        ] })
2534      ] }) }, course.id)) }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center py-12", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground", children: "No courses found matching your criteria." }) })
2535    ] }) })
2536  ] });
2537}
2538function GroupTrainingModal({
2539  open,
2540  onOpenChange,
2541  courseTitle
2542}) {
2543  const [submitted, setSubmitted] = reactExports.useState(false);
2544  const [submitting, setSubmitting] = reactExports.useState(false);
2545  const [error, setError] = reactExports.useState("");
2546  const [form, setForm] = reactExports.useState({
2547    name: "",
2548    email: "",
2549    company: "",
2550    deliveryMode: "online",
2551    city: "",
2552    state: "",
2553    studentCount: ""
2554  });
2555  const handleChange = (field, value) => {
2556    setForm((prev) => ({
2557      ...prev,
2558      [field]: value
2559    }));
2560    setError("");
2561  };
2562  const handleSubmit = async (e) => {
2563    e.preventDefault();
2564    setSubmitting(true);
2565    setError("");
2566    try {
2567      const res = await fetch("/api/group-training-requests", {
2568        method: "POST",
2569        headers: {
2570          "Content-Type": "application/json"
2571        },
2572        body: JSON.stringify({
2573          name: form.name,
2574          email: form.email,
2575          company: form.company || void 0,
2576          courseTitle,
2577          deliveryMode: form.deliveryMode,
2578          city: form.deliveryMode === "onsite" ? form.city : void 0,
2579          state: form.deliveryMode === "onsite" ? form.state : void 0,
2580          studentCount: form.studentCount
2581        })
2582      });
2583      if (!res.ok) {
2584        const data2 = await res.json();
2585        throw new Error(data2.error || "Submission failed");
2586      }
2587      setSubmitted(true);
2588    } catch (err) {
2589      setError(err instanceof Error ? err.message : "Something went wrong. Please try again.");
2590    } finally {
2591      setSubmitting(false);
2592    }
2593  };
2594  const handleClose = (open2) => {
2595    if (!open2) {
2596      setSubmitted(false);
2597      setError("");
2598      setForm({
2599        name: "",
2600        email: "",
2601        company: "",
2602        deliveryMode: "online",
2603        city: "",
2604        state: "",
2605        studentCount: ""
2606      });
2607    }
2608    onOpenChange(open2);
2609  };
2610  return /* @__PURE__ */ jsxRuntimeExports.jsx(Dialog, { open, onOpenChange: handleClose, children: /* @__PURE__ */ jsxRuntimeExports.jsx(DialogContent, { className: "sm:max-w-lg", children: submitted ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "py-8 text-center", children: [
2611    /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { className: "h-14 w-14 text-green-500 mx-auto mb-4" }),
2612    /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-xl font-semibold text-foreground mb-2", children: "Request Received!" }),
2613    /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-muted-foreground mb-6", children: [
2614      "Thank you! A member of our team will be in touch shortly with group pricing details for",
2615      " ",
2616      /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-medium text-foreground", children: courseTitle }),
2617      "."
2618    ] }),
2619    /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { onClick: () => handleClose(false), children: "Close" })
2620  ] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
2621    /* @__PURE__ */ jsxRuntimeExports.jsxs(DialogHeader, { children: [
2622      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 mb-1", children: [
2623        /* @__PURE__ */ jsxRuntimeExports.jsx(Users, { className: "h-5 w-5 text-primary" }),
2624        /* @__PURE__ */ jsxRuntimeExports.jsx(DialogTitle, { children: "Request Group Training Pricing" })
2625      ] }),
2626      /* @__PURE__ */ jsxRuntimeExports.jsx(DialogDescription, { children: "Fill out the form below and we'll get back to you with custom pricing for your team." })
2627    ] }),
2628    /* @__PURE__ */ jsxRuntimeExports.jsxs("form", { onSubmit: handleSubmit, className: "space-y-4 mt-2", children: [
2629      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1.5", children: [
2630        /* @__PURE__ */ jsxRuntimeExports.jsx(Label, { htmlFor: "courseTitle", children: "Course" }),
2631        /* @__PURE__ */ jsxRuntimeExports.jsx(Input, { id: "courseTitle", value: courseTitle, readOnly: true, className: "bg-muted text-muted-foreground" })
2632      ] }),
2633      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1.5", children: [
2634        /* @__PURE__ */ jsxRuntimeExports.jsxs(Label, { htmlFor: "name", children: [
2635          "Your Name ",
2636          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-destructive", children: "*" })
2637        ] }),
2638        /* @__PURE__ */ jsxRuntimeExports.jsx(Input, { id: "name", placeholder: "Jane Smith", value: form.name, onChange: (e) => handleChange("name", e.target.value), required: true })
2639      ] }),
2640      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1.5", children: [
2641        /* @__PURE__ */ jsxRuntimeExports.jsxs(Label, { htmlFor: "email", children: [
2642          "Email Address ",
2643          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-destructive", children: "*" })
2644        ] }),
2645        /* @__PURE__ */ jsxRuntimeExports.jsx(Input, { id: "email", type: "email", placeholder: "[email protected]", value: form.email, onChange: (e) => handleChange("email", e.target.value), required: true })
2646      ] }),
2647      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1.5", children: [
2648        /* @__PURE__ */ jsxRuntimeExports.jsxs(Label, { htmlFor: "company", children: [
2649          "Company ",
2650          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-muted-foreground text-xs font-normal", children: "(optional)" })
2651        ] }),
2652        /* @__PURE__ */ jsxRuntimeExports.jsx(Input, { id: "company", placeholder: "Acme Corp", value: form.company, onChange: (e) => handleChange("company", e.target.value) })
2653      ] }),
2654      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-2", children: [
2655        /* @__PURE__ */ jsxRuntimeExports.jsxs(Label, { children: [
2656          "Training Format ",
2657          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-destructive", children: "*" })
2658        ] }),
2659        /* @__PURE__ */ jsxRuntimeExports.jsxs(RadioGroup, { value: form.deliveryMode, onValueChange: (val) => handleChange("deliveryMode", val), className: "flex gap-6", children: [
2660          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
2661            /* @__PURE__ */ jsxRuntimeExports.jsx(RadioGroupItem, { value: "online", id: "online" }),
2662            /* @__PURE__ */ jsxRuntimeExports.jsx(Label, { htmlFor: "online", className: "cursor-pointer font-normal", children: "Live Online" })
2663          ] }),
2664          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
2665            /* @__PURE__ */ jsxRuntimeExports.jsx(RadioGroupItem, { value: "onsite", id: "onsite" }),
2666            /* @__PURE__ */ jsxRuntimeExports.jsx(Label, { htmlFor: "onsite", className: "cursor-pointer font-normal", children: "Onsite" })
2667          ] })
2668        ] })
2669      ] }),
2670      form.deliveryMode === "onsite" && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-2 gap-3", children: [
2671        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1.5", children: [
2672          /* @__PURE__ */ jsxRuntimeExports.jsxs(Label, { htmlFor: "city", children: [
2673            "City ",
2674            /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-destructive", children: "*" })
2675          ] }),
2676          /* @__PURE__ */ jsxRuntimeExports.jsx(Input, { id: "city", placeholder: "Chicago", value: form.city, onChange: (e) => handleChange("city", e.target.value), required: true })
2677        ] }),
2678        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1.5", children: [
2679          /* @__PURE__ */ jsxRuntimeExports.jsxs(Label, { htmlFor: "state", children: [
2680            "State ",
2681            /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-destructive", children: "*" })
2682          ] }),
2683          /* @__PURE__ */ jsxRuntimeExports.jsx(Input, { id: "state", placeholder: "IL", value: form.state, onChange: (e) => handleChange("state", e.target.value), required: true })
2684        ] })
2685      ] }),
2686      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1.5", children: [
2687        /* @__PURE__ */ jsxRuntimeExports.jsxs(Label, { htmlFor: "studentCount", children: [
2688          "Approximate Number of Students ",
2689          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-destructive", children: "*" })
2690        ] }),
2691        /* @__PURE__ */ jsxRuntimeExports.jsx(Input, { id: "studentCount", type: "number", min: "2", placeholder: "e.g. 10", value: form.studentCount, onChange: (e) => handleChange("studentCount", e.target.value), required: true })
2692      ] }),
2693      error && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-destructive", children: error }),
2694      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex justify-end gap-3 pt-2", children: [
2695        /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { type: "button", variant: "outline", onClick: () => handleClose(false), children: "Cancel" }),
2696        /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { type: "submit", disabled: submitting, children: submitting ? "Submitting..." : "Submit Request" })
2697      ] })
2698    ] })
2699  ] }) }) });
2700}
2701function parseFaqForJsonLd(html) {
2702  var _a2;
2703  if (!html) return [];
2704  const pairs = [];
2705  const dtMatches = [...html.matchAll(/<dt[^>]*>([\s\S]*?)<\/dt>/gi)];
2706  const ddMatches = [...html.matchAll(/<dd[^>]*>([\s\S]*?)<\/dd>/gi)];
2707  for (let i = 0; i < dtMatches.length; i++) {
2708    const q = stripTags(dtMatches[i][1]).trim();
2709    const a = stripTags(((_a2 = ddMatches[i]) == null ? void 0 : _a2[1]) ?? "").trim();
2710    if (q) pairs.push({
2711      q,
2712      a
2713    });
2714  }
2715  return pairs;
2716}
2717function htmlToPlainFaq(html) {
2718  if (!html) return "";
2719  const trimmed = html.trim();
2720  if (!trimmed.startsWith("<")) return trimmed;
2721  const pairs = parseFaqForJsonLd(trimmed);
2722  if (!pairs.length) return stripTags(trimmed);
2723  return pairs.map(({
2724    q,
2725    a
2726  }) => `Q: ${q}
2727A: ${a}`).join("\n\n");
2728}
2729function stripTags(str) {
2730  return str.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim();
2731}
2732const Accordion = Root2$2;
2733const AccordionItem = reactExports.forwardRef(({
2734  className,
2735  ...props
2736}, ref) => /* @__PURE__ */ jsxRuntimeExports.jsx(Item$1, { ref, className: cn("border-b", className), ...props }));
2737AccordionItem.displayName = "AccordionItem";
2738const AccordionTrigger = reactExports.forwardRef(({
2739  className,
2740  children,
2741  ...props
2742}, ref) => /* @__PURE__ */ jsxRuntimeExports.jsx(Header$1, { className: "flex", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Trigger2, { ref, className: cn("flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180", className), ...props, children: [
2743  children,
2744  /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronDown, { className: "h-4 w-4 shrink-0 transition-transform duration-200" })
2745] }) }));
2746AccordionTrigger.displayName = Trigger2.displayName;
2747const AccordionContent = reactExports.forwardRef(({
2748  className,
2749  children,
2750  ...props
2751}, ref) => /* @__PURE__ */ jsxRuntimeExports.jsx(Content2$1, { ref, className: "overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down", ...props, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: cn("pb-4 pt-0", className), children }) }));
2752AccordionContent.displayName = Content2$1.displayName;
2753function FaqAccordion({
2754  html,
2755  className
2756}) {
2757  const pairs = parseFaqForJsonLd(html);
2758  if (!pairs.length) return null;
2759  return /* @__PURE__ */ jsxRuntimeExports.jsx(Accordion, { type: "single", collapsible: true, className, children: pairs.map(({
2760    q,
2761    a
2762  }, i) => /* @__PURE__ */ jsxRuntimeExports.jsxs(AccordionItem, { value: `faq-${i}`, children: [
2763    /* @__PURE__ */ jsxRuntimeExports.jsx(AccordionTrigger, { className: "text-left font-semibold text-foreground hover:no-underline", children: q }),
2764    /* @__PURE__ */ jsxRuntimeExports.jsx(AccordionContent, { className: "text-muted-foreground leading-relaxed", children: a })
2765  ] }, i)) });
2766}
2767function CourseInformationDownload({
2768  course
2769}) {
2770  const openPrintableCourseInformation = () => {
2771    const url = new URL(window.location.href);
2772    url.searchParams.set("course-information", "print");
2773    window.open(url.toString(), "_blank", "noopener,noreferrer");
2774  };
2775  return /* @__PURE__ */ jsxRuntimeExports.jsxs(Button, { type: "button", variant: "outline", onClick: openPrintableCourseInformation, className: "course-print-hide gap-2", "aria-label": `Download course information PDF for ${course.title}`, children: [
2776    /* @__PURE__ */ jsxRuntimeExports.jsx(FileDown, { className: "h-4 w-4" }),
2777    " Download course information PDF"
2778  ] });
2779}
2780function Detail({
2781  label,
2782  value
2783}) {
2784  if (!value) return null;
2785  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "print-detail", children: [
2786    /* @__PURE__ */ jsxRuntimeExports.jsx("dt", { children: label }),
2787    /* @__PURE__ */ jsxRuntimeExports.jsx("dd", { children: value })
2788  ] });
2789}
2790function Section$1({
2791  title,
2792  html
2793}) {
2794  if (!html) return null;
2795  return /* @__PURE__ */ jsxRuntimeExports.jsxs("section", { className: "print-section", children: [
2796    /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { children: title }),
2797    /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "print-copy", dangerouslySetInnerHTML: {
2798      __html: html
2799    } })
2800  ] });
2801}
2802function CoursePrintableInformation({
2803  course
2804}) {
2805  var _a2;
2806  return /* @__PURE__ */ jsxRuntimeExports.jsxs("main", { className: "course-print-document", children: [
2807    /* @__PURE__ */ jsxRuntimeExports.jsxs("header", { className: "print-header", children: [
2808      /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: "/assets/skillforge-logo.jpg", alt: "SkillForge", width: 274, height: 82 }),
2809      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
2810        /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Course information" }),
2811        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "800-971-3203 · [email protected]" })
2812      ] })
2813    ] }),
2814    /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "print-rule" }),
2815    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "print-intro", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "print-title", children: [
2816      /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { children: [
2817        course.courseId,
2818        " · ",
2819        course.category
2820      ] }),
2821      /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { children: course.title }),
2822      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { dangerouslySetInnerHTML: {
2823        __html: course.description
2824      } })
2825    ] }) }),
2826    /* @__PURE__ */ jsxRuntimeExports.jsxs("dl", { className: "print-details", children: [
2827      /* @__PURE__ */ jsxRuntimeExports.jsx(Detail, { label: "Duration", value: course.duration }),
2828      /* @__PURE__ */ jsxRuntimeExports.jsx(Detail, { label: "Level", value: course.level }),
2829      /* @__PURE__ */ jsxRuntimeExports.jsx(Detail, { label: "Course fee", value: course.price ? `$${Number(course.price).toFixed(2)}` : void 0 }),
2830      /* @__PURE__ */ jsxRuntimeExports.jsx(Detail, { label: "Versions", value: (_a2 = course.versionsSupported) == null ? void 0 : _a2.replace(/<[^>]+>/g, " ") })
2831    ] }),
2832    /* @__PURE__ */ jsxRuntimeExports.jsx(Section$1, { title: "Who should take this course", html: course.courseAudience }),
2833    /* @__PURE__ */ jsxRuntimeExports.jsx(Section$1, { title: "What you’ll learn", html: course.courseObjectives }),
2834    /* @__PURE__ */ jsxRuntimeExports.jsx(Section$1, { title: "Course content", html: course.courseSyllabus }),
2835    /* @__PURE__ */ jsxRuntimeExports.jsx(Section$1, { title: "Prerequisites", html: course.prerequisites }),
2836    /* @__PURE__ */ jsxRuntimeExports.jsx(Section$1, { title: "Why SkillForge", html: course.whySkillForge }),
2837    /* @__PURE__ */ jsxRuntimeExports.jsx(Section$1, { title: "Certification", html: course.certification }),
2838    /* @__PURE__ */ jsxRuntimeExports.jsx(Section$1, { title: "Frequently asked questions", html: course.faq }),
2839    /* @__PURE__ */ jsxRuntimeExports.jsxs("footer", { className: "print-footer", children: [
2840      /* @__PURE__ */ jsxRuntimeExports.jsx(FileText, { size: 14 }),
2841      /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "SkillForge professional training" }),
2842      /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "skillforge.com" })
2843    ] })
2844  ] });
2845}
2846function CourseDetailPage() {
2847  var _a2, _b2, _c2;
2848  const {
2849    slug
2850  } = useParams();
2851  const location = useLocation();
2852  const printRequested = new URLSearchParams(location.search).get("course-information") === "print";
2853  const {
2854    addItem,
2855    items
2856  } = useCart();
2857  const loaderData = useLoaderData();
2858  const [course, setCourse] = reactExports.useState((loaderData == null ? void 0 : loaderData.course) ?? null);
2859  const [sessions, setSessions] = reactExports.useState((loaderData == null ? void 0 : loaderData.sessions) ?? []);
2860  const [loading, setLoading] = reactExports.useState(loaderData == null);
2861  const [addedToCart, setAddedToCart] = reactExports.useState(null);
2862  const [groupModalOpen, setGroupModalOpen] = reactExports.useState(false);
2863  reactExports.useEffect(() => {
2864    if (!loaderData) return;
2865    setCourse(loaderData.course);
2866    setSessions(loaderData.sessions);
2867    setLoading(false);
2868  }, [loaderData]);
2869  reactExports.useEffect(() => {
2870    window.scrollTo(0, 0);
2871  }, [slug]);
2872  reactExports.useEffect(() => {
2873    if (!printRequested || loading || !course) return;
2874    let printStarted = false;
2875    let printMediaActivated = false;
2876    const printMedia = window.matchMedia("print");
2877    const closePrintPreview = () => window.close();
2878    const handlePrintMediaChange = (event) => {
2879      if (event.matches) {
2880        printMediaActivated = true;
2881      } else if (printMediaActivated) {
2882        closePrintPreview();
2883      }
2884    };
2885    const handleWindowFocus = () => {
2886      if (printStarted) window.setTimeout(closePrintPreview, 100);
2887    };
2888    const timer = window.setTimeout(() => {
2889      printStarted = true;
2890      window.print();
2891      window.setTimeout(() => window.addEventListener("focus", handleWindowFocus, {
2892        once: true
2893      }), 1e3);
2894    }, 500);
2895    printMedia.addEventListener("change", handlePrintMediaChange);
2896    window.addEventListener("afterprint", closePrintPreview, {
2897      once: true
2898    });
2899    return () => {
2900      window.clearTimeout(timer);
2901      printMedia.removeEventListener("change", handlePrintMediaChange);
2902      window.removeEventListener("afterprint", closePrintPreview);
2903      window.removeEventListener("focus", handleWindowFocus);
2904    };
2905  }, [course, loading, printRequested]);
2906  reactExports.useEffect(() => {
2907    if (loaderData != null || !slug) return;
2908    fetch(`/api/courses/${slug}`, {
2909      cache: "no-store"
2910    }).then((res) => {
2911      if (!res.ok) throw new Error(`Course not found (${res.status})`);
2912      return res.json();
2913    }).then(async (courseData) => {
2914      if (!courseData || courseData.error) throw new Error((courseData == null ? void 0 : courseData.error) || "Course not found");
2915      setCourse(courseData);
2916      const sessionsData = await fetch(`/api/sessions?courseId=${courseData.id}`).then((r) => r.json());
2917      const sessionsArray = Array.isArray(sessionsData) ? sessionsData : [];
2918      const sessionsWithCounts = await Promise.all(sessionsArray.map(async (sessionData) => {
2919        try {
2920          const enrollmentsRes = await fetch(`/api/enrollments/session/${sessionData.session.id}`);
2921          const enrollments = await enrollmentsRes.json();
2922          return {
2923            ...sessionData,
2924            enrolledCount: Array.isArray(enrollments) ? enrollments.length : 0
2925          };
2926        } catch {
2927          return {
2928            ...sessionData,
2929            enrolledCount: 0
2930          };
2931        }
2932      }));
2933      const now = /* @__PURE__ */ new Date();
2934      const threeMonthsOut = new Date(now);
2935      threeMonthsOut.setMonth(threeMonthsOut.getMonth() + 3);
2936      const filtered = sessionsWithCounts.filter((s) => {
2937        const start = new Date(s.session.startDate);
2938        return start >= now && start <= threeMonthsOut;
2939      }).sort((a, b) => new Date(a.session.startDate).getTime() - new Date(b.session.startDate).getTime());
2940      setSessions(filtered);
2941      setLoading(false);
2942    }).catch((err) => {
2943      console.error("Error fetching course details:", err);
2944      setLoading(false);
2945    });
2946  }, [slug, loaderData]);
2947  reactExports.useEffect(() => {
2948    var _a3;
2949    if (!((_a3 = loaderData == null ? void 0 : loaderData.sessions) == null ? void 0 : _a3.length)) return;
2950    Promise.all(loaderData.sessions.map(async (s) => {
2951      try {
2952        const res = await fetch(`/api/enrollments/session/${s.session.id}`);
2953        const enrollments = await res.json();
2954        return {
2955          ...s,
2956          enrolledCount: Array.isArray(enrollments) ? enrollments.length : 0
2957        };
2958      } catch {
2959        return s;
2960      }
2961    })).then((updated) => setSessions(updated));
2962  }, [loaderData]);
2963  const handleAddToCart = (sessionData) => {
2964    if (!course) return;
2965    const enrolledCount = sessionData.enrolledCount || 0;
2966    const availableSeats = sessionData.session.maxStudents - enrolledCount;
2967    addItem({
2968      sessionId: sessionData.session.id,
2969      courseId: course.id,
2970      courseTitle: course.title,
2971      sessionDate: sessionData.session.startDate,
2972      price: course.price,
2973      currency: "usd",
2974      maxStudents: sessionData.session.maxStudents,
2975      availableSeats
2976    });
2977    setAddedToCart(sessionData.session.id);
2978    setTimeout(() => setAddedToCart(null), 2e3);
2979  };
2980  const isInCart = (sessionId) => {
2981    return items.some((item) => item.sessionId === sessionId);
2982  };
2983  if (loading) {
2984    return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-h-screen bg-background flex items-center justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground", children: "Loading course details..." }) });
2985  }
2986  if (!course) {
2987    return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-h-screen bg-background flex items-center justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center", children: [
2988      /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground mb-4", children: "Course not found" }),
2989      /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/courses", children: "Back to Courses" }) })
2990    ] }) });
2991  }
2992  if (printRequested) {
2993    return /* @__PURE__ */ jsxRuntimeExports.jsx(CoursePrintableInformation, { course });
2994  }
2995  const canonicalUrl = `https://skillforge.com${course.relativeUrl}`;
2996  const titleSuffix = /\btraining\b/i.test(course.title.trim().split(" ").slice(-1)[0]) ? "Course" : "Training Course";
2997  const pageTitle = `${course.title} ${titleSuffix} | SkillForge`;
2998  const stripHtml = (html) => html.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim();
2999  const buildMetaDescription = () => {
3000    const parts = [];
3001    const modes = new Set(sessions.map((s) => s.session.deliveryMode));
3002    const deliveryLabel = modes.has("onsite") && modes.has("online") ? "Live online & onsite instructor-led" : modes.has("onsite") ? "Onsite instructor-led" : "Live online instructor-led";
3003    parts.push(`${deliveryLabel} ${course.title} training.`);
3004    if (course.duration) parts.push(`${course.duration}.`);
3005    if (course.price && Number(course.price) > 0) {
3006      parts.push(`From ${Number(course.price).toLocaleString()}.`);
3007    }
3008    parts.push("Small class sizes. Expert instructors. Enroll today.");
3009    const candidate = parts.join(" ");
3010    if (candidate.length >= 80) return candidate.substring(0, 160);
3011    return stripHtml(course.description).substring(0, 160);
3012  };
3013  const metaDescription = buildMetaDescription();
3014  const courseSchema = {
3015    "@context": "https://schema.org",
3016    "@type": "Course",
3017    name: course.title,
3018    description: stripHtml(course.description),
3019    url: canonicalUrl,
3020    image: course.imageUrl || "https://skillforge.com/assets/skillforge-logo.jpg",
3021    provider: {
3022      "@type": "Organization",
3023      name: "SkillForge",
3024      url: "https://skillforge.com",
3025      logo: "https://skillforge.com/assets/skillforge-logo.jpg"
3026    },
3027    offers: {
3028      "@type": "Offer",
3029      price: course.price,
3030      priceCurrency: "USD",
3031      url: canonicalUrl,
3032      availability: sessions.length > 0 ? "https://schema.org/InStock" : "https://schema.org/OutOfStock"
3033    },
3034    ...course.level && {
3035      educationalLevel: course.level
3036    },
3037    ...course.duration && {
3038      timeRequired: course.duration
3039    },
3040    ...course.whySkillForge && {
3041      teaches: stripHtml(course.whySkillForge).substring(0, 500)
3042    },
3043    ...sessions.length > 0 && {
3044      hasCourseInstance: sessions.map((s) => ({
3045        "@type": "CourseInstance",
3046        courseMode: s.session.deliveryMode === "onsite" ? "onsite" : "online",
3047        startDate: s.session.startDate ? new Date(s.session.startDate).toISOString().split("T")[0] : void 0,
3048        endDate: s.session.endDate ? new Date(s.session.endDate).toISOString().split("T")[0] : void 0,
3049        ...s.session.startTime && {
3050          courseSchedule: {
3051            "@type": "Schedule",
3052            startTime: s.session.startTime,
3053            endTime: s.session.endTime || void 0,
3054            scheduleTimezone: s.session.timezone || "America/Chicago"
3055          }
3056        },
3057        ...s.instructor && {
3058          instructor: {
3059            "@type": "Person",
3060            name: s.instructor.name
3061          }
3062        },
3063        offers: {
3064          "@type": "Offer",
3065          price: course.price,
3066          priceCurrency: "USD",
3067          url: canonicalUrl,
3068          availability: (s.enrolledCount || 0) < s.session.maxStudents ? "https://schema.org/InStock" : "https://schema.org/SoldOut"
3069        }
3070      }))
3071    }
3072  };
3073  return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
3074    /* @__PURE__ */ jsxRuntimeExports.jsxs(Helmet, { children: [
3075      /* @__PURE__ */ jsxRuntimeExports.jsx("title", { children: pageTitle }),
3076      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "description", content: metaDescription }),
3077      /* @__PURE__ */ jsxRuntimeExports.jsx("link", { rel: "canonical", href: canonicalUrl }),
3078      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:type", content: "website" }),
3079      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:url", content: canonicalUrl }),
3080      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:title", content: pageTitle }),
3081      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:description", content: metaDescription }),
3082      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:image", content: ((_a2 = course.imageUrl) == null ? void 0 : _a2.startsWith("http")) ? course.imageUrl : `https://skillforge.com${course.imageUrl || "/assets/skillforge-logo.jpg"}` }),
3083      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "twitter:card", content: "summary_large_image" }),
3084      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "twitter:url", content: canonicalUrl }),
3085      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "twitter:title", content: pageTitle }),
3086      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "twitter:description", content: metaDescription }),
3087      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "twitter:image", content: ((_b2 = course.imageUrl) == null ? void 0 : _b2.startsWith("http")) ? course.imageUrl : `https://skillforge.com${course.imageUrl || "/assets/skillforge-logo.jpg"}` }),
3088      /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify(courseSchema) }),
3089      /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify({
3090        "@context": "https://schema.org",
3091        "@type": "BreadcrumbList",
3092        itemListElement: [{
3093          "@type": "ListItem",
3094          position: 1,
3095          name: "Home",
3096          item: "https://skillforge.com/"
3097        }, {
3098          "@type": "ListItem",
3099          position: 2,
3100          name: "Courses",
3101          item: "https://skillforge.com/courses"
3102        }, {
3103          "@type": "ListItem",
3104          position: 3,
3105          name: course.title,
3106          item: canonicalUrl
3107        }]
3108      }) }),
3109      course.faq && parseFaqForJsonLd(course.faq).length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify({
3110        "@context": "https://schema.org",
3111        "@type": "FAQPage",
3112        mainEntity: parseFaqForJsonLd(course.faq).map(({
3113          q,
3114          a
3115        }) => ({
3116          "@type": "Question",
3117          name: q,
3118          acceptedAnswer: {
3119            "@type": "Answer",
3120            text: a
3121          }
3122        }))
3123      }) })
3124    ] }),
3125    /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-background", children: [
3126      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative bg-gradient-to-br from-primary/10 via-background to-secondary/10 py-12 border-b", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mx-auto max-w-7xl px-4 sm:px-6 lg:px-8", children: [
3127        /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, variant: "ghost", className: "course-print-hide mb-6", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: "/courses", children: [
3128          /* @__PURE__ */ jsxRuntimeExports.jsx(ArrowLeft, { className: "h-4 w-4 mr-2" }),
3129          "Back to Courses"
3130        ] }) }),
3131        /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
3132          opacity: 0,
3133          y: 20
3134        }, animate: {
3135          opacity: 1,
3136          y: 0
3137        }, transition: {
3138          duration: 0.5
3139        }, className: "grid grid-cols-1 lg:grid-cols-3 gap-8", children: [
3140          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "lg:col-span-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "aspect-square overflow-hidden rounded-lg shadow-lg", children: /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: course.imageUrl, alt: course.title, className: "w-full h-full object-cover", width: 600, height: 600, loading: "eager", fetchPriority: "high" }) }) }),
3141          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "lg:col-span-2", children: [
3142            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 mb-4", children: [
3143              /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "secondary", className: "text-sm", children: course.category }),
3144              course.courseId && /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "outline", className: "text-sm font-mono", children: course.courseId })
3145            ] }),
3146            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-4 mb-4 sm:flex-row sm:items-start sm:justify-between", children: [
3147              /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-4xl font-bold text-foreground", children: course.title }),
3148              /* @__PURE__ */ jsxRuntimeExports.jsx(CourseInformationDownload, { course })
3149            ] }),
3150            /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: `text-muted-foreground mb-6 prose prose-base max-w-none prose-p:my-2 prose-p:first:mt-0 ${(((_c2 = course.description) == null ? void 0 : _c2.length) ?? 0) > 300 ? "text-base" : "text-lg"}`, dangerouslySetInnerHTML: {
3151              __html: course.description
3152            } }),
3153            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-2 md:grid-cols-4 gap-4", children: [
3154              /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 text-muted-foreground", children: [
3155                /* @__PURE__ */ jsxRuntimeExports.jsx(Clock, { className: "h-5 w-5 text-primary" }),
3156                /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
3157                  /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground", children: "Duration" }),
3158                  /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "font-medium text-foreground", children: course.duration })
3159                ] })
3160              ] }),
3161              course.versionsSupported && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 text-muted-foreground md:col-span-2", children: [
3162                /* @__PURE__ */ jsxRuntimeExports.jsx(Tag, { className: "h-6 w-6 text-primary shrink-0" }),
3163                /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
3164                  /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground", children: "Versions" }),
3165                  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-medium text-foreground prose prose-sm max-w-none prose-p:my-0 prose-p:inline", dangerouslySetInnerHTML: {
3166                    __html: course.versionsSupported
3167                  } })
3168                ] })
3169              ] }),
3170              !course.versionsSupported && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 text-muted-foreground md:col-span-2", children: [
3171                /* @__PURE__ */ jsxRuntimeExports.jsx(Tag, { className: "h-6 w-6 text-primary shrink-0" }),
3172                /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
3173                  /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground", children: "Versions" }),
3174                  /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "font-medium text-foreground", children: "N/A" })
3175                ] })
3176              ] }),
3177              /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex items-center justify-end", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-3xl font-bold text-foreground", children: [
3178                "$",
3179                parseFloat(course.price).toFixed(2)
3180              ] }) })
3181            ] })
3182          ] })
3183        ] }),
3184        /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
3185          opacity: 0,
3186          y: 10
3187        }, animate: {
3188          opacity: 1,
3189          y: 0
3190        }, transition: {
3191          duration: 0.5,
3192          delay: 0.15
3193        }, className: `mt-8 grid gap-3 ${course.offersPostClassSupport ? "grid-cols-2 md:grid-cols-5" : "grid-cols-2 md:grid-cols-4"}`, children: [
3194          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center text-center gap-2 p-4 rounded-lg bg-background/70 border border-border shadow-sm", children: [
3195            /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-9 w-9 rounded-full bg-primary/10 flex items-center justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Video, { className: "h-4 w-4 text-primary" }) }),
3196            /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs font-semibold text-foreground leading-tight", children: "Live, Instructor-Led Training" })
3197          ] }),
3198          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center text-center gap-2 p-4 rounded-lg bg-background/70 border border-border shadow-sm", children: [
3199            /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-9 w-9 rounded-full bg-primary/10 flex items-center justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx(CirclePlay, { className: "h-4 w-4 text-primary" }) }),
3200            /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs font-semibold text-foreground leading-tight", children: "Up to One Year Access to Recorded Course" })
3201          ] }),
3202          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center text-center gap-2 p-4 rounded-lg bg-background/70 border border-border shadow-sm", children: [
3203            /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-9 w-9 rounded-full bg-primary/10 flex items-center justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Wrench, { className: "h-4 w-4 text-primary" }) }),
3204            /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs font-semibold text-foreground leading-tight", children: "Hands-On Exercises" })
3205          ] }),
3206          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center text-center gap-2 p-4 rounded-lg bg-background/70 border border-border shadow-sm", children: [
3207            /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-9 w-9 rounded-full bg-primary/10 flex items-center justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Award, { className: "h-4 w-4 text-primary" }) }),
3208            /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs font-semibold text-foreground leading-tight", children: "Certificate of Completion" })
3209          ] }),
3210          course.offersPostClassSupport && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center text-center gap-2 p-4 rounded-lg bg-background/70 border border-border shadow-sm", children: [
3211            /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-9 w-9 rounded-full bg-primary/10 flex items-center justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx(MessageCircle, { className: "h-4 w-4 text-primary" }) }),
3212            /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs font-semibold text-foreground leading-tight", children: "Six Months of Post-Class Instructor Support" })
3213          ] })
3214        ] })
3215      ] }) }),
3216      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 py-12", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-3 gap-8", children: [
3217        /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
3218          opacity: 0,
3219          y: 20
3220        }, animate: {
3221          opacity: 1,
3222          y: 0
3223        }, transition: {
3224          duration: 0.5,
3225          delay: 0.2
3226        }, className: "lg:col-span-2 space-y-8", children: [
3227          course.courseAudience && /* @__PURE__ */ jsxRuntimeExports.jsxs(Card, { children: [
3228            /* @__PURE__ */ jsxRuntimeExports.jsx(CardHeader, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(CardTitle, { className: "flex items-center gap-2", children: [
3229              /* @__PURE__ */ jsxRuntimeExports.jsx(Target, { className: "h-5 w-5 text-primary" }),
3230              "Who Should Take This Course"
3231            ] }) }),
3232            /* @__PURE__ */ jsxRuntimeExports.jsx(CardContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-muted-foreground prose prose-base max-w-none prose-ul:list-disc prose-ul:pl-5 prose-ul:space-y-1 prose-ol:list-decimal prose-ol:pl-5 prose-ol:space-y-1 prose-li:my-1 prose-p:my-2", dangerouslySetInnerHTML: {
3233              __html: course.courseAudience
3234            } }) })
3235          ] }),
3236          course.courseObjectives && /* @__PURE__ */ jsxRuntimeExports.jsxs(Card, { children: [
3237            /* @__PURE__ */ jsxRuntimeExports.jsx(CardHeader, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(CardTitle, { className: "flex items-center gap-2", children: [
3238              /* @__PURE__ */ jsxRuntimeExports.jsx(Award, { className: "h-5 w-5 text-primary" }),
3239              "What You'll Learn"
3240            ] }) }),
3241            /* @__P
3241URE__ */ jsxRuntimeExports.jsx(CardContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-muted-foreground prose prose-base max-w-none prose-ul:list-disc prose-ul:pl-5 prose-ul:space-y-1 prose-ol:list-decimal prose-ol:pl-5 prose-ol:space-y-1 prose-li:my-1 prose-p:my-2", dangerouslySetInnerHTML: {
3242              __html: course.courseObjectives
3243            } }) })
3244          ] }),
3245          course.courseSyllabus && /* @__PURE__ */ jsxRuntimeExports.jsxs(Card, { children: [
3246            /* @__PURE__ */ jsxRuntimeExports.jsx(CardHeader, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(CardTitle, { className: "flex items-center gap-2", children: [
3247              /* @__PURE__ */ jsxRuntimeExports.jsx(BookOpen, { className: "h-5 w-5 text-primary" }),
3248              "Course Content"
3249            ] }) }),
3250            /* @__PURE__ */ jsxRuntimeExports.jsx(CardContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-muted-foreground prose prose-base max-w-none prose-ul:list-disc prose-ul:pl-5 prose-ul:space-y-1 prose-ol:list-decimal prose-ol:pl-5 prose-ol:space-y-1 prose-li:my-1 prose-p:my-2", dangerouslySetInnerHTML: {
3251              __html: course.courseSyllabus
3252            } }) })
3253          ] }),
3254          course.prerequisites && /* @__PURE__ */ jsxRuntimeExports.jsxs(Card, { children: [
3255            /* @__PURE__ */ jsxRuntimeExports.jsx(CardHeader, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(CardTitle, { className: "flex items-center gap-2", children: [
3256              /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { className: "h-5 w-5 text-primary" }),
3257              "Prerequisites"
3258            ] }) }),
3259            /* @__PURE__ */ jsxRuntimeExports.jsx(CardContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-muted-foreground prose prose-base max-w-none prose-ul:list-disc prose-ul:pl-5 prose-ul:space-y-1 prose-ol:list-decimal prose-ol:pl-5 prose-ol:space-y-1 prose-li:my-1 prose-p:my-2", dangerouslySetInnerHTML: {
3260              __html: course.prerequisites
3261            } }) })
3262          ] }),
3263          course.whySkillForge && /* @__PURE__ */ jsxRuntimeExports.jsxs(Card, { children: [
3264            /* @__PURE__ */ jsxRuntimeExports.jsx(CardHeader, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(CardTitle, { className: "flex items-center gap-2", children: [
3265              /* @__PURE__ */ jsxRuntimeExports.jsx(Users, { className: "h-5 w-5 text-primary" }),
3266              "Why SkillForge for Live Training?"
3267            ] }) }),
3268            /* @__PURE__ */ jsxRuntimeExports.jsx(CardContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-muted-foreground prose prose-base max-w-none prose-ul:list-disc prose-ul:pl-5 prose-ul:space-y-1 prose-ol:list-decimal prose-ol:pl-5 prose-ol:space-y-1 prose-li:my-1 prose-p:my-2", dangerouslySetInnerHTML: {
3269              __html: course.whySkillForge
3270            } }) })
3271          ] }),
3272          /* @__PURE__ */ jsxRuntimeExports.jsxs(Card, { children: [
3273            /* @__PURE__ */ jsxRuntimeExports.jsx(CardHeader, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(CardTitle, { className: "flex items-center gap-2", children: [
3274              /* @__PURE__ */ jsxRuntimeExports.jsx(Award, { className: "h-5 w-5 text-primary" }),
3275              "Certification"
3276            ] }) }),
3277            /* @__PURE__ */ jsxRuntimeExports.jsx(CardContent, { children: course.certification ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-muted-foreground", children: [
3278              /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mb-2", children: "This course helps prepare students for the following certification exam:" }),
3279              /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "prose prose-base max-w-none prose-p:my-2 prose-p:first:mt-0", dangerouslySetInnerHTML: {
3280                __html: course.certification
3281              } })
3282            ] }) : /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground", children: "This course does not align to a specific exam or certification." }) })
3283          ] }),
3284          course.faq && /* @__PURE__ */ jsxRuntimeExports.jsxs(Card, { children: [
3285            /* @__PURE__ */ jsxRuntimeExports.jsx(CardHeader, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(CardTitle, { className: "flex items-center gap-2", children: [
3286              /* @__PURE__ */ jsxRuntimeExports.jsx(CircleHelp, { className: "h-5 w-5 text-primary" }),
3287              "Frequently Asked Questions"
3288            ] }) }),
3289            /* @__P
3289URE__ */ jsxRuntimeExports.jsx(CardContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(FaqAccordion, { html: course.faq }) })
3290          ] })
3291        ] }),
3292        /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { initial: {
3293          opacity: 0,
3294          x: 20
3295        }, animate: {
3296          opacity: 1,
3297          x: 0
3298        }, transition: {
3299          duration: 0.5,
3300          delay: 0.3
3301        }, className: "course-print-hide lg:col-span-1", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "sticky top-20 max-h-[calc(100vh-5.5rem)] flex flex-col", children: [
3302          /* @__PURE__ */ jsxRuntimeExports.jsxs(Card, { className: "shadow-lg flex flex-col min-h-0 overflow-hidden", children: [
3303            /* @__PURE__ */ jsxRuntimeExports.jsxs(CardHeader, { className: "bg-primary/5 flex-shrink-0", children: [
3304              /* @__PURE__ */ jsxRuntimeExports.jsxs(CardTitle, { className: "flex items-center gap-2", children: [
3305                /* @__PURE__ */ jsxRuntimeExports.jsx(Calendar, { className: "h-5 w-5 text-primary" }),
3306                "Available Sessions"
3307              ] }),
3308              /* @__PURE__ */ jsxRuntimeExports.jsx(CardDescription, { children: "Select a session to enroll" })
3309            ] }),
3310            /* @__PURE__ */ jsxRuntimeExports.jsx(CardContent, { className: "p-0 flex flex-col min-h-0", children: sessions.length > 0 ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "divide-y overflow-y-auto flex-1 min-h-0", children: sessions.map((sessionData, index) => {
3311              const enrolledCount = sessionData.enrolledCount || 0;
3312              const availableSeats = sessionData.session.maxStudents - enrolledCount;
3313              const isFullyBooked = availableSeats <= 0;
3314              return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "p-4 hover:bg-muted/50 transition-colors", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-3", children: [
3315                /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
3316                  /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "font-semibold text-foreground", children: formatSessionDate$1(sessionData.session.startDate, {
3317                    weekday: "short",
3318                    month: "short",
3319                    day: "numeric",
3320                    year: "numeric"
3321                  }) }),
3322                  sessionData.session.startDate !== sessionData.session.endDate && /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-sm text-muted-foreground", children: [
3323                    "to",
3324                    " ",
3325                    formatSessionDate$1(sessionData.session.endDate, {
3326                      weekday: "short",
3327                      month: "short",
3328                      day: "numeric"
3329                    })
3330                  ] })
3331                ] }),
3332                /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start gap-2 text-sm text-muted-foreground", children: [
3333                  /* @__PURE__ */ jsxRuntimeExports.jsx(MapPin, { className: "h-4 w-4 mt-0.5 flex-shrink-0" }),
3334                  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: sessionData.session.deliveryMode === "online" ? "Live Online" : sessionData.session.location || "Location TBD" })
3335                ] }),
3336                /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [
3337                  /* @__PURE__ */ jsxRuntimeExports.jsx(Clock, { className: "h-4 w-4 flex-shrink-0" }),
3338                  /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { children: [
3339                    sessionData.session.startTime,
3340                    " - ",
3341                    sessionData.session.endTime,
3342                    " ",
3343                    sessionData.session.timezone
3344                  ] })
3345                ] }),
3346                /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { className: "w-full", size: "sm", onClick: () => handleAddToCart(sessionData), disabled: addedToCart === sessionData.session.id || isInCart(sessionData.session.id) || isFullyBooked, variant: isFullyBooked ? "outline" : "default", children: isFullyBooked ? "Fully Booked" : addedToCart === sessionData.session.id ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
3347                  /* @__PURE__ */ jsxRuntimeExports.jsx(Check, { className: "h-4 w-4 mr-2" }),
3348                  "Added!"
3349                ] }) : isInCart(sessionData.session.id) ? "In Cart" : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
3350                  /* @__PURE__ */ jsxRuntimeExports.jsx(ShoppingCart, { className: "h-4 w-4 mr-2" }),
3351                  "Add to Cart"
3352                ] }) })
3353              ] }) }, sessionData.session.id);
3354            }) }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-8 text-center", children: [
3355              /* @__PURE__ */ jsxRuntimeExports.jsx(Calendar, { className: "h-12 w-12 text-muted-foreground mx-auto mb-4" }),
3356              /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground mb-2", children: "No sessions currently available" }),
3357              /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground", children: "Check back soon for upcoming dates" })
3358            ] }) })
3359          ] }),
3360          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-4 rounded-lg border border-border bg-muted/40 p-4 text-center", children: [
3361            /* @__PURE__ */ jsxRuntimeExports.jsx(Users, { className: "h-7 w-7 text-primary mx-auto mb-2" }),
3362            /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-medium text-foreground mb-1", children: "Training a team?" }),
3363            /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground mb-3", children: "Get custom pricing for groups of 5 or more." }),
3364            /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { variant: "outline", size: "sm", className: "w-full", onClick: () => setGroupModalOpen(true), children: "Request Group Pricing" })
3365          ] })
3366        ] }) })
3367      ] }) }),
3368      /* @__PURE__ */ jsxRuntimeExports.jsx(GroupTrainingModal, { open: groupModalOpen, onOpenChange: setGroupModalOpen, courseTitle: course.title })
3369    ] })
3370  ] });
3371}
3372const differentiators = [{
3373  icon: BookOpen,
3374  title: "Our Teaching Methodology",
3375  description: 'In all of our classes, we use a "Show, Do, Review" methodology. Instructors demonstrate how to complete a task, students then practice hands-on, and finally we review to ensure everyone understands before moving on.'
3376}, {
3377  icon: Users,
3378  title: "Our Instructors",
3379  description: "Our instructors are the heart of our company. We select only the best trainers — experts with years of hands-on experience and a genuine passion for teaching. That passion is what turns a good class into a truly amazing one."
3380}, {
3381  icon: Headphones,
3382  title: "Our Support",
3383  description: "Learning doesn't stop when class ends. We offer six months of instructor email support for most courses, and one year of access to a recorded video of your class. We're committed to your success after you return to work."
3384}, {
3385  icon: MonitorPlay,
3386  title: "How We Deliver",
3387  description: "We deliver courses in multiple formats: live instructor-led online classes, private group onsite or online sessions, and self-paced eLearning. Whatever works best for you or your team, we have an option."
3388}];
3389const testimonials$2 = [{
3390  quote: "I really enjoy the hands-on nature of the courses, without having to travel. The access to the instructors after the class is a great benefit. I always plan for a challenging project after the class to take advantage of their guidance!",
3391  name: "Tracy R.",
3392  company: "Port of Seattle"
3393}, {
3394  quote: "I have been working with the course content for almost 10 years, and was still able to learn something new. Our instructor was clear and concise and kept us on track and on time. Awesome!",
3395  name: "R.V.",
3396  company: "HealthHelp"
3397}, {
3398  quote: "I had no experience with Crystal Reports at the beginning of the week and now I feel comfortable enough to create basic to intermediate reports all on my own. Joel was a wonderful instructor and provided real-life feedback.",
3399  name: "Kim Y.",
3400  company: "Aramco"
3401}];
3402const clients$1 = ["Fortune 500 Companies", "Government Agencies", "Universities & Colleges", "Healthcare Organizations", "Financial Institutions", "Small & Mid-size Businesses"];
3403function AboutPage() {
3404  const [hydrated, setHydrated] = reactExports.useState(false);
3405  reactExports.useEffect(() => {
3406    setHydrated(true);
3407  }, []);
3408  return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
3409    /* @__PURE__ */ jsxRuntimeExports.jsxs(Helmet, { children: [
3410      /* @__PURE__ */ jsxRuntimeExports.jsx("title", { children: "About SkillForge | Expert Instructor-Led Training Since 2010" }),
3411      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "description", content: "Learn about SkillForge — a different kind of training company based outside Chicago, delivering expert instructor-led training across North America since 2010." }),
3412      /* @__PURE__ */ jsxRuntimeExports.jsx("link", { rel: "canonical", href: "https://skillforge.com/about" }),
3413      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:type", content: "website" }),
3414      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:url", content: "https://skillforge.com/about" }),
3415      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:title", content: "About SkillForge | Expert Instructor-Led Training Since 2010" }),
3416      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:description", content: "A different kind of training company based outside Chicago, delivering expert instructor-led training across North America since 2010." }),
3417      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:image", content: "https://skillforge.com/assets/skillforge-logo.jpg" }),
3418      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:card", content: "summary_large_image" }),
3419      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:title", content: "About SkillForge | Expert Instructor-Led Training Since 2010" }),
3420      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:description", content: "A different kind of training company based outside Chicago, delivering expert instructor-led training across North America since 2010." }),
3421      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:image", content: "https://skillforge.com/assets/skillforge-logo.jpg" }),
3422      /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify({
3423        "@context": "https://schema.org",
3424        "@type": "BreadcrumbList",
3425        itemListElement: [{
3426          "@type": "ListItem",
3427          position: 1,
3428          name: "Home",
3429          item: "https://skillforge.com/"
3430        }, {
3431          "@type": "ListItem",
3432          position: 2,
3433          name: "About",
3434          item: "https://skillforge.com/about"
3435        }]
3436      }) }),
3437      /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify({
3438        "@context": "https://schema.org",
3439        "@type": "AboutPage",
3440        "name": "About SkillForge® | Expert Instructor-Led Training Since 2010",
3441        "description": "A different kind of training company based outside Chicago, delivering expert instructor-led training across North America since 2010.",
3442        "url": "https://skillforge.com/about",
3443        "publisher": {
3444          "@type": "EducationalOrganization",
3445          "name": "SkillForge®",
3446          "url": "https://skillforge.com"
3447        }
3448      }) })
3449    ] }),
3450    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "relative overflow-hidden border-b border-border", style: {
3451      background: "#f5f6f7"
3452    }, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative container mx-auto px-6 py-16 md:py-20", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-10 items-center max-w-5xl mx-auto", children: [
3453      /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: hydrated ? {
3454        opacity: 0,
3455        y: 24
3456      } : false, animate: {
3457        opacity: 1,
3458        y: 0
3459      }, transition: {
3460        duration: 0.5,
3461        ease: "easeOut"
3462      }, children: [
3463        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold tracking-widest uppercase mb-4", style: {
3464          color: "#FF7A00"
3465        }, children: "About Us" }),
3466        /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-4xl md:text-5xl font-bold mb-6 leading-tight text-foreground", children: "We're a Different Kind of Training Company." }),
3467        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-lg text-muted-foreground leading-relaxed", children: "Based just outside of Chicago, SkillForge delivers training to companies, institutions, and individuals across North America. We believe learning requires real interaction — and that students always deserve access to an expert instructor." })
3468      ] }),
3469      /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { initial: hydrated ? {
3470        opacity: 0,
3471        x: 24
3472      } : false, animate: {
3473        opacity: 1,
3474        x: 0
3475      }, transition: {
3476        duration: 0.55,
3477        ease: "easeOut",
3478        delay: 0.15
3479      }, className: "hidden md:grid grid-cols-2 gap-4", children: [{
3480        value: "2010",
3481        label: "Founded"
3482      }, {
3483        value: "3,500+",
3484        label: "Courses Delivered"
3485      }, {
3486        value: "10,000+",
3487        label: "Students Trained"
3488      }, {
3489        value: "50+",
3490        label: "Course Topics"
3491      }].map((stat, i) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-xl p-6 bg-white flex flex-col justify-center", style: {
3492        border: "1px solid #e5e7eb",
3493        borderTop: `3px solid ${i % 2 === 0 ? "#FF7A00" : "#4A7A8A"}`
3494      }, children: [
3495        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-3xl font-bold text-foreground", children: stat.value }),
3496        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground mt-1", children: stat.label })
3497      ] }, stat.label)) })
3498    ] }) }) }),
3499    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 bg-background", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "container mx-auto px-6", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-16 items-start max-w-5xl mx-auto", children: [
3500      /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
3501        opacity: 0,
3502        x: -24
3503      }, whileInView: {
3504        opacity: 1,
3505        x: 0
3506      }, viewport: {
3507        once: true
3508      }, transition: {
3509        duration: 0.5,
3510        ease: "easeOut"
3511      }, children: [
3512        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold tracking-widest uppercase text-primary mb-3", children: "Our Story" }),
3513        /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-3xl md:text-4xl font-bold text-foreground mb-6", children: "Founded on a Belief That Learning Should Be Interactive" }),
3514        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground leading-relaxed mb-4", children: "You can't ask questions when you're watching a video. That simple truth is at the heart of everything we do. In all of our classes — whether self-paced, online, or in-person — students always have access to an instructor, both during and after class." }),
3515        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground leading-relaxed mb-4", children: "Our instructors are experts in their field with years of hands-on experience and multiple certifications. For them — and for us — training isn't just a job. It's a calling." }),
3516        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground leading-relaxed", children: "SkillForge was founded in 2010 and has since trained thousands of professionals at organizations ranging from small businesses to Fortune 500 companies and government agencies across North America." })
3517      ] }),
3518      /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
3519        opacity: 0,
3520        x: 24
3521      }, whileInView: {
3522        opacity: 1,
3523        x: 0
3524      }, viewport: {
3525        once: true
3526      }, transition: {
3527        duration: 0.5,
3528        ease: "easeOut",
3529        delay: 0.1
3530      }, className: "flex flex-col gap-4", children: [
3531        [{
3532          icon: Users,
3533          accent: "#FF7A00",
3534          title: "Always a Live Instructor",
3535          description: "Every class is led by a real expert — not a recording. Ask questions, get answers, and learn the way humans learn best."
3536        }, {
3537          icon: Headphones,
3538          accent: "#4A7A8A",
3539          title: "Access to Support After Class",
3540          description: "Have a question after class ends? Reach out to your instructor directly. We don't disappear when the session is over.*"
3541        }, {
3542          icon: BookOpen,
3543          accent: "#FF7A00",
3544          title: "Classes Guaranteed to Run",
3545          description: "When you register, your class runs. We don't cancel on you at the last minute — your time is too valuable for that."
3546        }].map((item, i) => /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
3547          opacity: 0,
3548          y: 16
3549        }, whileInView: {
3550          opacity: 1,
3551          y: 0
3552        }, viewport: {
3553          once: true
3554        }, transition: {
3555          duration: 0.4,
3556          ease: "easeOut",
3557          delay: 0.15 + i * 0.1
3558        }, className: "flex gap-4 rounded-xl p-5 bg-background", style: {
3559          border: "1px solid #e5e7eb",
3560          borderLeft: `4px solid ${item.accent}`
3561        }, children: [
3562          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-10 h-10 rounded-lg flex items-center justify-center flex-shrink-0 mt-0.5", style: {
3563            background: item.accent === "#FF7A00" ? "rgba(255,122,0,0.08)" : "rgba(74,122,138,0.08)"
3564          }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(item.icon, { className: "w-5 h-5", style: {
3565            color: item.accent
3566          } }) }),
3567          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
3568            /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "font-bold text-foreground mb-1", children: item.title }),
3569            /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground leading-relaxed", children: item.description })
3570          ] })
3571        ] }, item.title)),
3572        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground mt-2 pl-1", children: "* Post-class instructor support available for most courses." })
3573      ] })
3574    ] }) }) }),
3575    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20", style: {
3576      background: "#f5f9fa"
3577    }, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "container mx-auto px-6", children: [
3578      /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
3579        opacity: 0,
3580        y: 20
3581      }, whileInView: {
3582        opacity: 1,
3583        y: 0
3584      }, viewport: {
3585        once: true
3586      }, transition: {
3587        duration: 0.5,
3588        ease: "easeOut"
3589      }, className: "text-center max-w-2xl mx-auto mb-14", children: [
3590        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold tracking-widest uppercase text-primary mb-3", children: "What Sets Us Apart" }),
3591        /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-3xl md:text-4xl font-bold text-foreground", children: "The SkillForge Difference" })
3592      ] }),
3593      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid md:grid-cols-2 gap-8 max-w-5xl mx-auto", children: differentiators.map((item, i) => /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
3594        opacity: 0,
3595        y: 20
3596      }, whileInView: {
3597        opacity: 1,
3598        y: 0
3599      }, viewport: {
3600        once: true
3601      }, transition: {
3602        duration: 0.4,
3603        ease: "easeOut",
3604        delay: i * 0.08
3605      }, className: "bg-background rounded-xl p-8 border border-border", children: [
3606        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-12 h-12 rounded-lg flex items-center justify-center mb-5", style: {
3607          background: "rgba(255,122,0,0.1)"
3608        }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(item.icon, { className: "w-6 h-6", style: {
3609          color: "#FF7A00"
3610        } }) }),
3611        /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-lg font-bold text-foreground mb-3", children: item.title }),
3612        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground leading-relaxed", children: item.description })
3613      ] }, item.title)) })
3614    ] }) }),
3615    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 bg-background", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "container mx-auto px-6", children: [
3616      /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
3617        opacity: 0,
3618        y: 20
3619      }, whileInView: {
3620        opacity: 1,
3621        y: 0
3622      }, viewport: {
3623        once: true
3624      }, transition: {
3625        duration: 0.5,
3626        ease: "easeOut"
3627      }, className: "text-center max-w-2xl mx-auto mb-14", children: [
3628        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold tracking-widest uppercase mb-3 text-muted-foreground", children: "Student Reviews" }),
3629        /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-3xl md:text-4xl font-bold text-foreground", children: "What Our Students Say" })
3630      ] }),
3631      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid md:grid-cols-3 gap-8 max-w-5xl mx-auto", children: testimonials$2.map((t, i) => /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
3632        opacity: 0,
3633        y: 20
3634      }, whileInView: {
3635        opacity: 1,
3636        y: 0
3637      }, viewport: {
3638        once: true
3639      }, transition: {
3640        duration: 0.4,
3641        ease: "easeOut",
3642        delay: i * 0.1
3643      }, className: "rounded-xl p-8 bg-background", style: {
3644        border: "1px solid #e5e7eb",
3645        background: "#f9fafb"
3646      }, children: [
3647        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex gap-0.5 mb-4", children: [...Array(5)].map((_, s) => /* @__PURE__ */ jsxRuntimeExports.jsx(Star, { className: "w-4 h-4", style: {
3648          fill: "#F5A623",
3649          color: "#F5A623"
3650        } }, s)) }),
3651        /* @__PURE__ */ jsxRuntimeExports.jsx(Quote, { className: "w-7 h-7 mb-4 text-muted-foreground opacity-40" }),
3652        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground leading-relaxed mb-6 text-sm", children: t.quote }),
3653        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "pt-4 border-t border-border", children: [
3654          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "font-semibold text-foreground", children: t.name }),
3655          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground", children: t.company })
3656        ] })
3657      ] }, t.name)) }),
3658      /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { initial: {
3659        opacity: 0,
3660        y: 16
3661      }, whileInView: {
3662        opacity: 1,
3663        y: 0
3664      }, viewport: {
3665        once: true
3666      }, transition: {
3667        duration: 0.4,
3668        ease: "easeOut",
3669        delay: 0.3
3670      }, className: "text-center mt-12", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, size: "lg", className: "gap-2 font-semibold", style: {
3671        background: "#4A7A8A",
3672        color: "white",
3673        border: "none"
3674      }, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: "/about/testimonials", children: [
3675        "View All Reviews ",
3676        /* @__PURE__ */ jsxRuntimeExports.jsx(ArrowRight, { className: "w-4 h-4" })
3677      ] }) }) })
3678    ] }) }),
3679    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 bg-background", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "container mx-auto px-6", children: [
3680      /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
3681        opacity: 0,
3682        y: 20
3683      }, whileInView: {
3684        opacity: 1,
3685        y: 0
3686      }, viewport: {
3687        once: true
3688      }, transition: {
3689        duration: 0.5,
3690        ease: "easeOut"
3691      }, className: "text-center max-w-2xl mx-auto mb-12", children: [
3692        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold tracking-widest uppercase text-primary mb-3", children: "Trusted By" }),
3693        /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-3xl md:text-4xl font-bold text-foreground", children: "Organizations Across North America" }),
3694        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground mt-4", children: "From small businesses to government agencies and Fortune 500 companies, thousands of organizations have trusted SkillForge to train their staff." }),
3695        /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: "/clients", className: "inline-flex items-center gap-1.5 text-sm font-semibold mt-4 hover:underline", style: {
3696          color: "#FF7A00"
3697        }, children: [
3698          "View Our Clients ",
3699          /* @__PURE__ */ jsxRuntimeExports.jsx(ArrowRight, { className: "w-4 h-4" })
3700        ] })
3701      ] }),
3702      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-2 md:grid-cols-3 gap-4 max-w-3xl mx-auto", children: clients$1.map((client, i) => /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { initial: {
3703        opacity: 0,
3704        scale: 0.95
3705      }, whileInView: {
3706        opacity: 1,
3707        scale: 1
3708      }, viewport: {
3709        once: true
3710      }, transition: {
3711        duration: 0.3,
3712        ease: "easeOut",
3713        delay: i * 0.06
3714      }, className: "rounded-lg px-5 py-4 text-center text-sm font-medium", style: {
3715        background: "#f5f9fa",
3716        border: "1px solid #d0e4ea",
3717        color: "#4A7A8A"
3718      }, children: client }, client)) })
3719    ] }) }),
3720    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20", style: {
3721      background: "#FF7A00"
3722    }, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "container mx-auto px-6 text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
3723      opacity: 0,
3724      y: 20
3725    }, whileInView: {
3726      opacity: 1,
3727      y: 0
3728    }, viewport: {
3729      once: true
3730    }, transition: {
3731      duration: 0.5,
3732      ease: "easeOut"
3733    }, className: "max-w-2xl mx-auto", children: [
3734      /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-3xl md:text-4xl font-bold text-white mb-4", children: "Ready to Experience the Difference?" }),
3735      /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-white/80 mb-8 text-lg", children: "Browse our full course catalog and find the right training for you or your team." }),
3736      /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, size: "lg", className: "gap-2 font-semibold", style: {
3737        background: "white",
3738        color: "#FF7A00"
3739      }, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: "/courses", children: [
3740        "View Our Courses ",
3741        /* @__PURE__ */ jsxRuntimeExports.jsx(ArrowRight, { className: "w-4 h-4" })
3742      ] }) })
3743    ] }) }) })
3744  ] });
3745}
3746const testimonials$1 = [{
3747  title: "Thank You!",
3748  quote: "Donna was an excellent instructor! It was easy to follow along with her and the book. I highly recommend SkillForge for all your training needs!",
3749  name: "Diana S.",
3750  company: "U.S. Foods"
3751}, {
3752  title: "Great Trainer",
3753  quote: "Great trainer. She answered all my questions and went above and beyond by showing me a few extra things.",
3754  name: "Mike L.",
3755  company: "Journeys"
3756}, {
3757  title: "Love the Course",
3758  quote: "Dan (my teacher) was a great teacher. It was an online class and he was able to keep me interested in the topic the entire day for 2 days. The course material was very easy and clear. I was able to do the labs without any trouble. I will recommend my manager to use this training company and teacher.",
3759  name: "Uyen Q.",
3760  company: "San Diego County"
3761}, {
3762  title: "Excellent Instructor!",
3763  quote: "Aletha was an excellent instructor! Very knowledgeable. The training was interactive and I had plenty of opportunity to ask questions. She checked in with me often to make sure I understood the material. This was my first time taking an online class. I would recommend SkillForge to anyone considering a live instructor-led online class.",
3764  name: "Scott H.",
3765  company: "Washington County"
3766}, {
3767  title: "Positive Experience",
3768  quote: "This is my first experience taking an online/instructor-led class. I was a little hesitant at first but it was a very positive experience! My instructor was very easy to talk to, was a great listener and was very knowledgeable. I tend to ask a lot of questions, and he was very patient. I will not hesitate to take an online instructor-led class in the future!",
3769  name: "Julie R.",
3770  company: "Ultraflote"
3771}, {
3772  title: "Absolutely Fantastic!",
3773  quote: "Jennifer was absolutely fantastic! She delivered several hours of one-on-one training that significantly enhanced my understanding of how to leverage PowerPivot functionality within Microsoft Excel. She was a consummate professional, and I would highly recommend her to anyone interested in this course or any of the others she delivers.",
3774  name: "Jim M.",
3775  company: "Bill and Melinda Gates Foundation"
3776}, {
3777  title: "Excellent Learning Experience",
3778  quote: "This was an excellent learning experience. I started the class with some knowledge of the content, so the pace worked very well for me.",
3779  name: "Debbie M.",
3780  company: "Pharmacists Mutual Insurance"
3781}, {
3782  title: "Awesome Trainer",
3783  quote: "I really enjoyed the MS Access class. It was very informative and very easy to understand. It was great that it was a live instructor and Seth was able to answer questions on the spot. Seth was an awesome trainer and I would highly recommend him!",
3784  name: "Denise M.",
3785  company: "Fossil"
3786}, {
3787  title: "Absolutely Amazing",
3788  quote: "Andrew (our instructor) was ABSOLUTELY AMAZING — he met our needs and was very good at showing everything we needed to know about MS Project. I would absolutely recommend him to everyone! Thanks to him, I will be recommending your company to ours, and will be using him for Excel training.",
3789  name: "Eva B.",
3790  company: "Lam Research"
3791}, {
3792  title: "Expectations Exceeded",
3793  quote: "My expectations were definitely exceeded for this course. I had a bias towards courses with onsite instructors but the flexibility of the online classroom meant that this course was really just as good as any conventionally taught course. Donna was very professional, knowledgeable, and helpful.",
3794  name: "Michael B.",
3795  company: "Fitchburg State University"
3796}, {
3797  title: "Enjoyed the Class",
3798  quote: "Enjoyed the class. Rodney was accommodating, yet stayed on task. Gave plenty of time to ask questions to any level of detail we wanted.",
3799  name: "David C.",
3800  company: "Siemens Energy"
3801}, {
3802  title: "Very Much Enjoyed",
3803  quote: "I very much enjoyed this Crystal Reports class. Seth did a great job of trying to make it fun and interesting. He covered the lessons thoroughly, at a good pace — not too fast or slow. He was happy to answer all my questions. I am recommending this type of training to anyone who asks!",
3804  name: "Nicole B.",
3805  company: "City of Windsor"
3806}];
3807function TestimonialsPage() {
3808  const [hydrated, setHydrated] = reactExports.useState(false);
3809  reactExports.useEffect(() => {
3810    setHydrated(true);
3811  }, []);
3812  return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
3813    /* @__PURE__ */ jsxRuntimeExports.jsxs(Helmet, { children: [
3814      /* @__PURE__ */ jsxRuntimeExports.jsx("title", { children: "Student Reviews & Testimonials | SkillForge" }),
3815      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "description", content: "See what SkillForge students say about their training experience. Real reviews from professionals at organizations across North America." }),
3816      /* @__PURE__ */ jsxRuntimeExports.jsx("link", { rel: "canonical", href: "https://skillforge.com/about/testimonials" }),
3817      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:type", content: "website" }),
3818      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:url", content: "https://skillforge.com/about/testimonials" }),
3819      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:title", content: "Student Reviews & Testimonials | SkillForge" }),
3820      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:description", content: "See what SkillForge students say about their training experience. Real reviews from professionals at organizations across North America." }),
3821      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:image", content: "https://skillforge.com/assets/skillforge-logo.jpg" }),
3822      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:card", content: "summary_large_image" }),
3823      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:title", content: "Student Reviews & Testimonials | SkillForge" }),
3824      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:description", content: "See what SkillForge students say about their training experience. Real reviews from professionals at organizations across North America." }),
3825      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:image", content: "https://skillforge.com/assets/skillforge-logo.jpg" }),
3826      /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify({
3827        "@context": "https://schema.org",
3828        "@type": "BreadcrumbList",
3829        itemListElement: [{
3830          "@type": "ListItem",
3831          position: 1,
3832          name: "Home",
3833          item: "https://skillforge.com/"
3834        }, {
3835          "@type": "ListItem",
3836          position: 2,
3837          name: "About",
3838          item: "https://skillforge.com/about"
3839        }, {
3840          "@type": "ListItem",
3841          position: 3,
3842          name: "Testimonials",
3843          item: "https://skillforge.com/about/testimonials"
3844        }]
3845      }) }),
3846      /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify({
3847        "@context": "https://schema.org",
3848        "@type": "WebPage",
3849        "name": "Student Reviews & Testimonials | SkillForge",
3850        "description": "See what SkillForge students say about their training experience. Real reviews from professionals at organizations across North America.",
3851        "url": "https://skillforge.com/about/testimonials",
3852        "publisher": {
3853          "@type": "EducationalOrganization",
3854          "name": "SkillForge",
3855          "url": "https://skillforge.com"
3856        }
3857      }) })
3858    ] }),
3859    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "relative overflow-hidden border-b border-border", style: {
3860      background: "#f5f6f7"
3861    }, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative container mx-auto px-6 py-16 md:py-20", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-10 items-center max-w-5xl mx-auto", children: [
3862      /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: hydrated ? {
3863        opacity: 0,
3864        y: 24
3865      } : false, animate: {
3866        opacity: 1,
3867        y: 0
3868      }, transition: {
3869        duration: 0.5,
3870        ease: "easeOut"
3871      }, children: [
3872        /* @__PURE__ */ jsxRuntimeExports.jsxs("nav", { className: "flex items-center gap-2 text-sm mb-5 text-muted-foreground", children: [
3873          /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/about", className: "hover:text-foreground transition-colors", children: "About" }),
3874          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "/" }),
3875          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-foreground", children: "Student Reviews" })
3876        ] }),
3877        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold tracking-widest uppercase mb-4", style: {
3878          color: "#FF7A00"
3879        }, children: "Student Reviews" }),
3880        /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-4xl md:text-5xl font-bold mb-6 leading-tight text-foreground", children: "What Our Students Say" }),
3881        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-lg text-muted-foreground leading-relaxed mb-6", children: "You don't have to take our word for it. See what students say about their experience in a SkillForge class — from Fortune 500 employees to government professionals." }),
3882        /* @__PURE__ */ jsxRuntimeExports.jsxs("a", { href: "https://www.google.com/search?q=SkillForge&stick=H4sIAAAAAAAA_-NgU1I1qLCwMEhLNDVINko0T0oxMje0MqhINjU3TkoxNkkyTzVLNrY0WcTKFZydmZPjll-UngoAQlFfUDYAAAA&hl=en&mat=CX6ApG7g3nsyElcBTVDHnjKjn8M20qcHgbVbYo-MR5WGKCUeJo7OeT2ZT5ZScPhypgWCSiyy1W09XuN5G41BPZAFqPwJXXNJNKqs1GI-RG1PfPewNInvu0C1WUftiiBH_KM&authuser=1&ved=2ahUKEwii3vbihpSUAxUkPt4AHZUMM_sQ-MgIegQIFhAi#", target: "_blank", rel: "noopener noreferrer", className: "inline-flex items-center gap-3 rounded-xl px-5 py-3 transition-shadow hover:shadow-md", style: {
3883          background: "white",
3884          border: "1px solid #e5e7eb"
3885        }, children: [
3886          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex gap-0.5", children: [...Array(5)].map((_, i) => /* @__PURE__ */ jsxRuntimeExports.jsx(Star, { className: "w-4 h-4", style: {
3887            fill: "#F5A623",
3888            color: "#F5A623"
3889          } }, i)) }),
3890          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-sm font-semibold text-foreground", children: "5 of 5 stars on Google" })
3891        ] })
3892      ] }),
3893      /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { initial: hydrated ? {
3894        opacity: 0,
3895        x: 24
3896      } : false, animate: {
3897        opacity: 1,
3898        x: 0
3899      }, transition: {
3900        duration: 0.55,
3901        ease: "easeOut",
3902        delay: 0.15
3903      }, className: "hidden md:block", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-2xl p-8 bg-white", style: {
3904        border: "1px solid #e5e7eb",
3905        borderLeft: "4px solid #4A7A8A"
3906      }, children: [
3907        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex gap-0.5 mb-5", children: [...Array(5)].map((_, i) => /* @__PURE__ */ jsxRuntimeExports.jsx(Star, { className: "w-4 h-4", style: {
3908          fill: "#F5A623",
3909          color: "#F5A623"
3910        } }, i)) }),
3911        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-lg text-foreground leading-relaxed mb-6 italic", children: '"Jennifer was absolutely fantastic! She delivered several hours of one-on-one training that significantly enhanced my understanding of how to leverage PowerPivot functionality within Microsoft Excel."' }),
3912        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "pt-5", style: {
3913          borderTop: "1px solid #e5e7eb"
3914        }, children: [
3915          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "font-bold text-foreground", children: "Jim M." }),
3916          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground mt-0.5", children: "Bill and Melinda Gates Foundation" })
3917        ] })
3918      ] }) })
3919    ] }) }) }),
3920    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 bg-background", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "container mx-auto px-6", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "columns-1 md:columns-2 lg:columns-3 gap-6 max-w-6xl mx-auto", children: testimonials$1.map((t, i) => /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
3921      opacity: 0,
3922      y: 20
3923    }, whileInView: {
3924      opacity: 1,
3925      y: 0
3926    }, viewport: {
3927      once: true
3928    }, transition: {
3929      duration: 0.4,
3930      ease: "easeOut",
3931      delay: i % 3 * 0.08
3932    }, className: "break-inside-avoid mb-6 bg-background rounded-xl flex flex-col", style: {
3933      border: "1px solid #d0e4ea"
3934    }, children: [
3935      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-1 rounded-t-xl", style: {
3936        background: "linear-gradient(90deg, #FF7A00, #ffb366)"
3937      } }),
3938      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-7 flex flex-col flex-1", children: [
3939        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex gap-0.5 mb-4", children: [...Array(5)].map((_, s) => /* @__PURE__ */ jsxRuntimeExports.jsx(Star, { className: "w-4 h-4", style: {
3940          fill: "#FF7A00",
3941          color: "#FF7A00"
3942        } }, s)) }),
3943        /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "font-bold text-foreground text-base mb-3", children: t.title }),
3944        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative flex-1", children: [
3945          /* @__PURE__ */ jsxRuntimeExports.jsx(Quote, { className: "absolute -top-1 -left-1 w-6 h-6", style: {
3946            color: "rgba(74,122,138,0.25)"
3947          } }),
3948          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground text-sm leading-relaxed pl-4", children: t.quote })
3949        ] }),
3950        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-5 pt-4", style: {
3951          borderTop: "1px solid #d0e4ea"
3952        }, children: [
3953          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "font-semibold text-foreground text-sm", children: t.name }),
3954          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs mt-0.5", style: {
3955            color: "#4A7A8A"
3956          }, children: t.company })
3957        ] })
3958      ] })
3959    ] }, t.name)) }) }) }),
3960    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20", style: {
3961      background: "#FF7A00"
3962    }, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "container mx-auto px-6 text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
3963      opacity: 0,
3964      y: 20
3965    }, whileInView: {
3966      opacity: 1,
3967      y: 0
3968    }, viewport: {
3969      once: true
3970    }, transition: {
3971      duration: 0.5,
3972      ease: "easeOut"
3973    }, className: "max-w-2xl mx-auto", children: [
3974      /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-3xl md:text-4xl font-bold text-white mb-4", children: "Ready to Have Your Own Amazing Learning Experience?" }),
3975      /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-white/80 mb-8 text-lg", children: "Browse our full course catalog and find the right training for you or your team." }),
3976      /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, size: "lg", className: "gap-2 font-semibold", style: {
3977        background: "white",
3978        color: "#FF7A00"
3979      }, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: "/courses", children: [
3980        "View Our Courses ",
3981        /* @__PURE__ */ jsxRuntimeExports.jsx(ArrowRight, { className: "w-4 h-4" })
3982      ] }) })
3983    ] }) }) })
3984  ] });
3985}
3986const clients = ["Accenture", "ADP", "American Express", "Army Corps of Engineers", "Blinds.com", "Bob Evans Farms", "Booz Allen Hamilton", "Capital Crossing Servicing Company", "Cigna", "Cisco Systems, Inc.", "CME Group", "ConAgra Foods, Inc.", "Department of Labor", "Department of Veterans Affairs", "Devry", "Discover Financial Services", "Equifax", "Excellus", "Fannie Mae", "Federal Aviation Administration", "Federal Reserve Bank of St. Louis", "GE Water and Process Technologies", "General Services Administration (GSA)", "Hunter Douglas", "Indiana University Health", "Integra", "Kaiser Permanente", "Matrix Health", "McGladrey", "Newberry College", "Northern Arizona Healthcare", "Nuclear Energy Institute", "Office of Naval Intelligence", "Office of the Attorney General", "Parker Hannifin", "PayPal", "Pearson Education", "Purdue University", "Seagate Technology LLC", "State of Alaska", "Sysmex", "T-Mobile", "Teachers Retirement Association", "The Salk Institute for Biological Studies", "Thomson Reuters", "United Actuarial Services", "United Health", "US Department of Education, Federal Student Aid", "Verizon", "Wellpoint", "Wells Fargo", "Whole Foods Market", "YMCA Youth & Family Services", "Zions Bancorporation"];
3987function ClientsPage() {
3988  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col", children: [
3989    /* @__PURE__ */ jsxRuntimeExports.jsxs(Helmet, { children: [
3990      /* @__PURE__ */ jsxRuntimeExports.jsx("title", { children: "Our Clients | SkillForge Training" }),
3991      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "description", content: "SkillForge has trained professionals at organizations ranging from Fortune 500 companies to government agencies across North America." }),
3992      /* @__PURE__ */ jsxRuntimeExports.jsx("link", { rel: "canonical", href: "https://skillforge.com/clients" }),
3993      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:type", content: "website" }),
3994      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:url", content: "https://skillforge.com/clients" }),
3995      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:title", content: "Our Clients | SkillForge Training" }),
3996      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:description", content: "SkillForge has trained professionals at organizations ranging from Fortune 500 companies to government agencies across North America." }),
3997      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:image", content: "https://skillforge.com/assets/skillforge-logo.jpg" }),
3998      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:card", content: "summary_large_image" }),
3999      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:title", content: "Our Clients | SkillForge Training" }),
4000      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:description", content: "SkillForge has trained professionals at organizations ranging from Fortune 500 companies to government agencies across North America." }),
4001      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:image", content: "https://skillforge.com/assets/skillforge-logo.jpg" }),
4002      /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify({
4003        "@context": "https://schema.org",
4004        "@type": "BreadcrumbList",
4005        itemListElement: [{
4006          "@type": "ListItem",
4007          position: 1,
4008          name: "Home",
4009          item: "https://skillforge.com/"
4010        }, {
4011          "@type": "ListItem",
4012          position: 2,
4013          name: "Our Clients",
4014          item: "https://skillforge.com/clients"
4015        }]
4016      }) }),
4017      /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify({
4018        "@context": "https://schema.org",
4019        "@type": "WebPage",
4020        "name": "Our Clients | SkillForge Training",
4021        "description": "SkillForge has trained professionals at organizations ranging from Fortune 500 companies to government agencies across North America.",
4022        "url": "https://skillforge.com/clients",
4023        "publisher": {
4024          "@type": "EducationalOrganization",
4025          "name": "SkillForge",
4026          "url": "https://skillforge.com"
4027        }
4028      }) })
4029    ] }),
4030    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "border-b border-border", style: {
4031      background: "#f5f6f7"
4032    }, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "container mx-auto px-6 py-16 md:py-20", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-10 items-center max-w-5xl mx-auto", children: [
4033      /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
4034        opacity: 0,
4035        y: 24
4036      }, animate: {
4037        opacity: 1,
4038        y: 0
4039      }, transition: {
4040        duration: 0.5,
4041        ease: "easeOut"
4042      }, children: [
4043        /* @__PURE__ */ jsxRuntimeExports.jsxs("nav", { className: "flex items-center gap-2 text-sm mb-5 text-muted-foreground", children: [
4044          /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/about", className: "hover:text-foreground transition-colors", children: "About" }),
4045          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "/" }),
4046          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-foreground", children: "Our Clients" })
4047        ] }),
4048        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold tracking-widest uppercase mb-4", style: {
4049          color: "#FF7A00"
4050        }, children: "Our Clients" }),
4051        /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-4xl md:text-5xl font-bold mb-6 leading-tight text-foreground", children: "Trusted by Organizations Across North America" }),
4052        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-lg text-muted-foreground leading-relaxed", children: "From small businesses to Fortune 500 companies and government agencies, thousands of organizations have trusted SkillForge to train their staff." })
4053      ] }),
4054      /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { initial: {
4055        opacity: 0,
4056        x: 24
4057      }, animate: {
4058        opacity: 1,
4059        x: 0
4060      }, transition: {
4061        duration: 0.55,
4062        ease: "easeOut",
4063        delay: 0.15
4064      }, className: "hidden md:grid grid-cols-2 gap-4", children: [{
4065        value: "3,500+",
4066        label: "Courses Delivered"
4067      }, {
4068        value: "10,000+",
4069        label: "Students Trained"
4070      }, {
4071        value: "50+",
4072        label: "Course Topics"
4073      }, {
4074        value: "2010",
4075        label: "Founded"
4076      }].map((stat, i) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-xl p-6 bg-white flex flex-col justify-center", style: {
4077        border: "1px solid #e5e7eb",
4078        borderTop: `3px solid ${i % 2 === 0 ? "#FF7A00" : "#4A7A8A"}`
4079      }, children: [
4080        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-3xl font-bold text-foreground", children: stat.value }),
4081        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground mt-1", children: stat.label })
4082      ] }, stat.label)) })
4083    ] }) }) }),
4084    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 bg-background", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "container mx-auto px-6", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-5xl mx-auto", children: [
4085      /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
4086        opacity: 0,
4087        y: 20
4088      }, whileInView: {
4089        opacity: 1,
4090        y: 0
4091      }, viewport: {
4092        once: true
4093      }, transition: {
4094        duration: 0.5
4095      }, className: "mb-10", children: [
4096        /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-2xl font-bold text-foreground", children: "Organizations We've Trained" }),
4097        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground mt-2", children: "A partial list of organizations whose employees have attended SkillForge training." })
4098      ] }),
4099      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 gap-3", children: clients.map((client, i) => /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { initial: {
4100        opacity: 0,
4101        y: 12
4102      }, whileInView: {
4103        opacity: 1,
4104        y: 0
4105      }, viewport: {
4106        once: true
4107      }, transition: {
4108        duration: 0.3,
4109        ease: "easeOut",
4110        delay: Math.min(i * 0.02, 0.4)
4111      }, className: "rounded-lg px-5 py-3 text-sm font-medium text-foreground", style: {
4112        background: "#f9fafb",
4113        border: "1px solid #e5e7eb",
4114        borderLeft: "3px solid #4A7A8A"
4115      }, children: client }, client)) })
4116    ] }) }) }),
4117    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20", style: {
4118      background: "#FF7A00"
4119    }, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "container mx-auto px-6 text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
4120      opacity: 0,
4121      y: 20
4122    }, whileInView: {
4123      opacity: 1,
4124      y: 0
4125    }, viewport: {
4126      once: true
4127    }, transition: {
4128      duration: 0.5
4129    }, className: "max-w-2xl mx-auto", children: [
4130      /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-3xl md:text-4xl font-bold text-white mb-4", children: "Ready to Join Them?" }),
4131      /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-white/80 mb-8 text-lg", children: "Browse our full course catalog and find the right training for your team." }),
4132      /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, size: "lg", className: "gap-2 font-semibold text-base", style: {
4133        background: "white",
4134        color: "#FF7A00",
4135        border: "none"
4136      }, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: "/courses", children: [
4137        "Explore Courses ",
4138        /* @__PURE__ */ jsxRuntimeExports.jsx(ArrowRight, { className: "w-4 h-4" })
4139      ] }) })
4140    ] }) }) })
4141  ] });
4142}
4143function useDebounce(value, delay) {
4144  const [debounced, setDebounced] = reactExports.useState(value);
4145  reactExports.useEffect(() => {
4146    const t = setTimeout(() => setDebounced(value), delay);
4147    return () => clearTimeout(t);
4148  }, [value, delay]);
4149  return debounced;
4150}
4151function BlogPage() {
4152  const loaderData = useLoaderData();
4153  const loaderHasPosts = loaderData != null && loaderData.posts.length > 0;
4154  const [data2, setData] = reactExports.useState(loaderHasPosts ? loaderData : null);
4155  const [loading, setLoading] = reactExports.useState(!loaderHasPosts);
4156  const [error, setError] = reactExports.useState(null);
4157  const [page, setPage] = reactExports.useState(1);
4158  const [searchInput, setSearchInput] = reactExports.useState("");
4159  const searchRef = reactExports.useRef(null);
4160  const debouncedSearch = useDebounce(searchInput, 400);
4161  reactExports.useEffect(() => {
4162    setPage(1);
4163  }, [debouncedSearch]);
4164  const seededFromLoader = reactExports.useRef(loaderHasPosts);
4165  reactExports.useEffect(() => {
4166    if (seededFromLoader.current && page === 1 && !debouncedSearch) {
4167      seededFromLoader.current = false;
4168      return;
4169    }
4170    seededFromLoader.current = false;
4171    setLoading(true);
4172    setError(null);
4173    const params = new URLSearchParams({
4174      page: String(page),
4175      per_page: "12"
4176    });
4177    if (debouncedSearch) params.set("search", debouncedSearch);
4178    fetch(`/api/blog?${params}`).then((r) => r.json()).then((d) => {
4179      setData(d);
4180      setLoading(false);
4181    }).catch(() => {
4182      setError("Could not load posts. Please try again.");
4183      setLoading(false);
4184    });
4185  }, [page, debouncedSearch]);
4186  const handlePageChange = (newPage) => {
4187    setPage(newPage);
4188    window.scrollTo({
4189      top: 0,
4190      behavior: "smooth"
4191    });
4192  };
4193  const clearFilters = () => {
4194    var _a2;
4195    setSearchInput("");
4196    (_a2 = searchRef.current) == null ? void 0 : _a2.focus();
4197  };
4198  const hasActiveFilters = !!searchInput;
4199  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col", children: [
4200    /* @__PURE__ */ jsxRuntimeExports.jsxs(Helmet, { children: [
4201      /* @__PURE__ */ jsxRuntimeExports.jsx("title", { children: "Blog & Tutorials | SkillForge" }),
4202      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "description", content: "Free software training tips, tutorials, and how-to guides from the SkillForge instructor team." }),
4203      /* @__PURE__ */ jsxRuntimeExports.jsx("link", { rel: "canonical", href: "https://skillforge.com/skillforge-blog" }),
4204      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:type", content: "website" }),
4205      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:url", content: "https://skillforge.com/skillforge-blog" }),
4206      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:title", content: "Blog & Tutorials | SkillForge" }),
4207      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:description", content: "Free software training tips, tutorials, and how-to guides from the SkillForge instructor team." }),
4208      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:image", content: "https://skillforge.com/assets/skillforge-logo.jpg" }),
4209      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:card", content: "summary_large_image" }),
4210      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:title", content: "Blog & Tutorials | SkillForge" }),
4211      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:description", content: "Free software training tips, tutorials, and how-to guides from the SkillForge instructor team." }),
4212      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:image", content: "https://skillforge.com/assets/skillforge-logo.jpg" }),
4213      /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify({
4214        "@context": "https://schema.org",
4215        "@type": "Blog",
4216        "@id": "https://skillforge.com/skillforge-blog#blog",
4217        name: "SkillForge Blog & Tutorials",
4218        description: "Free software training tips, tutorials, and how-to guides from the SkillForge instructor team.",
4219        url: "https://skillforge.com/skillforge-blog",
4220        publisher: {
4221          "@type": "EducationalOrganization",
4222          "@id": "https://skillforge.com/#organization",
4223          name: "SkillForge",
4224          url: "https://skillforge.com"
4225        },
4226        isPartOf: {
4227          "@id": "https://skillforge.com/#website"
4228        }
4229      }) }),
4230      /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify({
4231        "@context": "https://schema.org",
4232        "@type": "BreadcrumbList",
4233        itemListElement: [{
4234          "@type": "ListItem",
4235          position: 1,
4236          name: "Home",
4237          item: "https://skillforge.com/"
4238        }, {
4239          "@type": "ListItem",
4240          position: 2,
4241          name: "Blog & Tutorials",
4242          item: "https://skillforge.com/skillforge-blog"
4243        }]
4244      }) })
4245    ] }),
4246    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "border-b border-border", style: {
4247      background: "#f5f6f7"
4248    }, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "container mx-auto px-6 py-14 md:py-18 max-w-5xl", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
4249      /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold tracking-widest uppercase mb-3", style: {
4250        color: "#FF7A00"
4251      }, children: "Blog & Tutorials" }),
4252      /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-4xl md:text-5xl font-bold mb-4 leading-tight text-foreground", children: "Free Tips & Tutorials" }),
4253      /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-lg text-muted-foreground max-w-2xl mb-8", children: "Short how-to guides and video tutorials from our instructor team — covering Microsoft Office, Power BI, Crystal Reports, and more." }),
4254      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative max-w-lg", children: [
4255        /* @__PURE__ */ jsxRuntimeExports.jsx(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground pointer-events-none" }),
4256        /* @__PURE__ */ jsxRuntimeExports.jsx(Input, { ref: searchRef, type: "text", placeholder: "Search tutorials...", value: searchInput, onChange: (e) => setSearchInput(e.target.value), className: "pl-9 pr-9 bg-background h-11 text-base" }),
4257        searchInput && /* @__PURE__ */ jsxRuntimeExports.jsx("button", { onClick: () => setSearchInput(""), className: "absolute right-3 top-1/2 -translate-y-1/2 text-muted-foreground hover:text-foreground transition-colors", "aria-label": "Clear search", children: /* @__PURE__ */ jsxRuntimeExports.jsx(X, { className: "w-4 h-4" }) })
4258      ] })
4259    ] }) }) }),
4260    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-10 bg-background", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "container mx-auto px-6 max-w-5xl", children: [
4261      hasActiveFilters && !loading && data2 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between mb-6", children: [
4262        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground", children: data2.total === 0 ? "No posts found" : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
4263          /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-medium text-foreground", children: data2.total }),
4264          " post",
4265          data2.total !== 1 ? "s" : "",
4266          " found",
4267          debouncedSearch && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
4268            " matching ",
4269            /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "font-medium text-foreground", children: [
4270              '"',
4271              debouncedSearch,
4272              '"'
4273            ] })
4274          ] })
4275        ] }) }),
4276        /* @__PURE__ */ jsxRuntimeExports.jsxs("button", { onClick: clearFilters, className: "text-sm flex items-center gap-1 hover:underline", style: {
4277          color: "#FF7A00"
4278        }, children: [
4279          /* @__PURE__ */ jsxRuntimeExports.jsx(X, { className: "w-3 h-3" }),
4280          " Clear filters"
4281        ] })
4282      ] }),
4283      loading && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid md:grid-cols-3 gap-6", children: [...Array(12)].map((_, i) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-xl overflow-hidden animate-pulse", style: {
4284        border: "1px solid #e5e7eb"
4285      }, children: [
4286        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-44 bg-muted" }),
4287        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-5", children: [
4288          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-3 bg-muted rounded w-1/3 mb-3" }),
4289          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-4 bg-muted rounded w-full mb-2" }),
4290          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-4 bg-muted rounded w-3/4 mb-4" }),
4291          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-3 bg-muted rounded w-1/2" })
4292        ] })
4293      ] }, i)) }),
4294      error && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center py-20", children: [
4295        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground", children: error }),
4296        /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { className: "mt-4", onClick: () => setPage(1), children: "Try Again" })
4297      ] }),
4298      !loading && !error && data2 && data2.posts.length === 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center py-24", children: [
4299        /* @__PURE__ */ jsxRuntimeExports.jsx(Search, { className: "w-10 h-10 mx-auto mb-4 text-muted-foreground opacity-40" }),
4300        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-lg font-medium text-foreground mb-1", children: "No posts found" }),
4301        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground mb-6", children: "Try a different search term or browse all categories." }),
4302        /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { variant: "outline", onClick: clearFilters, children: "Clear filters" })
4303      ] }),
4304      data2 && !loading && data2.posts.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
4305        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid md:grid-cols-3 gap-6", children: data2.posts.map((post, i) => /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: `/skillforge-blog/${post.slug.replace(/^\/*(skillforge-blog\/)?/, "")}`, className: "group rounded-xl overflow-hidden flex flex-col bg-background hover:shadow-md transition-shadow duration-200 h-full", style: {
4306          border: "1px solid #e5e7eb",
4307          display: "flex"
4308        }, children: [
4309          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "overflow-hidden bg-muted flex-shrink-0", style: {
4310            aspectRatio: "16/9"
4311          }, children: post.featuredImage ? /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: post.featuredImage, alt: post.title, className: "w-full h-full object-cover group-hover:scale-105 transition-transform duration-300", width: 400, height: 225, loading: "lazy", decoding: "async" }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-full h-full flex items-center justify-center", style: {
4312            background: "#f5f9fa"
4313          }, children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-3xl font-bold", style: {
4314            color: "#d0e4ea"
4315          }, children: "SF" }) }) }),
4316          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-5 flex flex-col flex-1", children: [
4317            post.categories[0] && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs font-semibold uppercase tracking-wide mb-2 inline-block", style: {
4318              color: "#4A7A8A"
4319            }, children: post.categories[0].name }),
4320            /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "font-bold text-foreground leading-snug mb-2 group-hover:text-primary transition-colors line-clamp-2", children: post.title }),
4321            /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground leading-relaxed mb-4 line-clamp-3 flex-1", children: post.excerpt }),
4322            /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex items-center text-xs text-muted-foreground pt-3", style: {
4323              borderTop: "1px solid #e5e7eb"
4324            }, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "flex items-center gap-1", children: [
4325              /* @__PURE__ */ jsxRuntimeExports.jsx(Calendar, { className: "w-3 h-3" }),
4326              post.date ? format(new Date(post.date), "MMM d, yyyy") : "Unknown date"
4327            ] }) })
4328          ] })
4329        ] }) }, post.id)) }),
4330        data2.totalPages > 1 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-center gap-3 mt-12", children: [
4331          /* @__PURE__ */ jsxRuntimeExports.jsxs(Button, { variant: "outline", size: "sm", onClick: () => handlePageChange(page - 1), disabled: page <= 1, className: "gap-1", children: [
4332            /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronLeft, { className: "w-4 h-4" }),
4333            " Previous"
4334          ] }),
4335          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex items-center gap-1", children: Array.from({
4336            length: Math.min(data2.totalPages, 7)
4337          }, (_, i) => {
4338            let pageNum;
4339            if (data2.totalPages <= 7) {
4340              pageNum = i + 1;
4341            } else if (page <= 4) {
4342              pageNum = i + 1;
4343            } else if (page >= data2.totalPages - 3) {
4344              pageNum = data2.totalPages - 6 + i;
4345            } else {
4346              pageNum = page - 3 + i;
4347            }
4348            return /* @__PURE__ */ jsxRuntimeExports.jsx("button", { onClick: () => handlePageChange(pageNum), className: `w-8 h-8 rounded text-sm font-medium transition-colors ${pageNum === page ? "text-white" : "text-muted-foreground hover:bg-muted"}`, style: pageNum === page ? {
4349              background: "#4A7A8A"
4350            } : {}, children: pageNum }, pageNum);
4351          }) }),
4352          /* @__PURE__ */ jsxRuntimeExports.jsxs(Button, { variant: "outline", size: "sm", onClick: () => handlePageChange(page + 1), disabled: page >= data2.totalPages, className: "gap-1", children: [
4353            "Next ",
4354            /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "w-4 h-4" })
4355          ] })
4356        ] }),
4357        /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-center text-sm text-muted-foreground mt-6", children: [
4358          "Showing ",
4359          data2.posts.length,
4360          " of ",
4361          data2.total,
4362          " posts"
4363        ] })
4364      ] })
4365    ] }) })
4366  ] });
4367}
4368function RelatedCoursesCTA({
4369  slug
4370}) {
4371  const [courses, setCourses] = reactExports.useState([]);
4372  const [loaded, setLoaded] = reactExports.useState(false);
4373  reactExports.useEffect(() => {
4374    if (!slug) return;
4375    fetch(`/api/blog/${encodeURIComponent(slug)}/related-courses`).then((r) => r.ok ? r.json() : []).then((data2) => {
4376      setCourses(data2 ?? []);
4377      setLoaded(true);
4378    }).catch(() => setLoaded(true));
4379  }, [slug]);
4380  if (!loaded || courses.length === 0) return null;
4381  return /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.section, { initial: {
4382    opacity: 0,
4383    y: 24
4384  }, animate: {
4385    opacity: 1,
4386    y: 0
4387  }, transition: {
4388    duration: 0.4,
4389    ease: "easeOut"
4390  }, className: "mt-12 rounded-2xl overflow-hidden border border-border", "aria-label": "Related training courses", children: [
4391    /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "px-6 py-4 flex items-center gap-3", style: {
4392      background: "hsl(var(--primary))"
4393    }, children: [
4394      /* @__PURE__ */ jsxRuntimeExports.jsx(BookOpen, { className: "w-5 h-5 text-primary-foreground shrink-0" }),
4395      /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-primary-foreground", children: "Want to go deeper? We teach this." })
4396    ] }),
4397    /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "divide-y divide-border bg-card", children: courses.map((course) => {
4398      var _a2;
4399      return /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: course.relativeUrl, className: "flex items-start gap-4 px-6 py-4 hover:bg-muted/50 transition-colors group", children: [
4400        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-0.5 w-9 h-9 rounded-lg flex items-center justify-center shrink-0", style: {
4401          background: "hsl(var(--primary) / 0.1)"
4402        }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(BookOpen, { className: "w-4 h-4", style: {
4403          color: "hsl(var(--primary))"
4404        } }) }),
4405        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [
4406          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "font-semibold text-foreground group-hover:text-primary transition-colors leading-snug", children: course.title }),
4407          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground mt-0.5 line-clamp-2", children: (_a2 = course.description) == null ? void 0 : _a2.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim() }),
4408          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-wrap gap-2 mt-2", children: course.duration && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "inline-flex items-center gap-1 text-xs font-medium px-2 py-0.5 rounded-full bg-muted text-muted-foreground", children: [
4409            /* @__PURE__ */ jsxRuntimeExports.jsx(Clock, { className: "w-3 h-3" }),
4410            course.duration
4411          ] }) })
4412        ] }),
4413        /* @__PURE__ */ jsxRuntimeExports.jsx(ArrowRight, { className: "w-4 h-4 text-muted-foreground group-hover:text-primary group-hover:translate-x-0.5 transition-all mt-1 shrink-0" })
4414      ] }, course.id);
4415    }) }),
4416    /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "px-6 py-3 bg-muted/40 border-t border-border flex items-center justify-between", children: [
4417      /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-muted-foreground", children: "Instructor-led, live online classes — small groups, real experts." }),
4418      /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: "/courses", className: "text-xs font-semibold flex items-center gap-1 hover:underline", style: {
4419        color: "hsl(var(--primary))"
4420      }, children: [
4421        "Browse all courses ",
4422        /* @__PURE__ */ jsxRuntimeExports.jsx(ArrowRight, { className: "w-3 h-3" })
4423      ] })
4424    ] })
4425  ] });
4426}
4427function sanitizeBlogContent(html) {
4428  if (!html || html.length > 2e6) return html || "";
4429  html = html.replace(/<div[^>]{0,500}class="[^"]{0,200}lyMe[^"]{0,200}"[^>]{0,500}id="WYL_([^"]{1,50})"[^>]{0,500}>[\s\S]{0,5000}?<\/div>\s*<\/div>\s*<\/div>/g, (_m, id) => `<div class="wp-video-embed"><iframe src="https://www.youtube.com/embed/${id}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen loading="lazy"></iframe></div>`);
4430  html = html.replace(/<div[^>]{0,500}class="lyte-wrapper"[^>]{0,500}>[\s\S]{0,5000}?id="lyte_([^"]{1,50})"[\s\S]{0,5000}?<\/div>\s*<\/div>/g, (_m, id) => `<div class="wp-video-embed"><iframe src="https://www.youtube.com/embed/${id}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen loading="lazy"></iframe></div>`);
4431  html = html.replace(/<figure[^>]{0,500}class="[^"]{0,200}wp-block-embed[^"]{0,200}youtube[^"]{0,200}"[^>]{0,500}>[\s\S]{0,5000}?https?:\/\/(?:www\.)?(?:youtube\.com\/watch\?v=|youtu\.be\/)([A-Za-z0-9_-]{11})[^\s<"]{0,200}[\s\S]{0,5000}?<\/figure>/gi, (_m, id) => `<div class="wp-video-embed"><iframe src="https://www.youtube.com/embed/${id}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen loading="lazy"></iframe></div>`);
4432  html = html.replace(/<p[^>]{0,500}>\s*(?:<a[^>]{0,500}>)?\s*(https?:\/\/(?:www\.)?(?:youtube\.com\/watch\?[^\s<"]{0,200}v=|youtu\.be\/)([A-Za-z0-9_-]{11})[^\s<"]{0,200})\s*(?:<\/a>)?\s*<\/p>/gi, (_m, _url, id) => `<div class="wp-video-embed"><iframe src="https://www.youtube.com/embed/${id}" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen loading="lazy"></iframe></div>`);
4433  html = html.replace(/https:\/\/skillforge\.com\/wp-content\/plugins\/wp-youtube-lyte\/lyteCache\.php\?origThumbUrl=([^"&\s]+)/g, (_m, encoded) => {
4434    try {
4435      return decodeURIComponent(encoded);
4436    } catch {
4437      return _m;
4438    }
4439  });
4440  return html;
4441}
4442const videoCss = `
4443  .wp-video-embed {
4444    position: relative;
4445    margin: 1.5rem 0;
4446    border-radius: 0.5rem;
4447    overflow: hidden;
4448    aspect-ratio: 16 / 9;
4449    background: #000;
4450  }
4451  .wp-video-embed iframe {
4452    position: absolute;
4453    inset: 0;
4454    width: 100%;
4455    height: 100%;
4456    display: block;
4457    border: none;
4458    border-radius: 0.5rem;
4459  }
4460  .wp-content iframe { max-width: 100%; border-radius: 0.5rem; }
4461  .wp-content .wp-block-embed { margin: 1.5rem 0; }
4462`;
4463function htmlToText(html) {
4464  return html.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim();
4465}
4466function detectHowTo(title, content) {
4467  const titleLower = title.toLowerCase();
4468  if (titleLower.startsWith("how to") || titleLower.startsWith("how do") || titleLower.includes(": how to")) return true;
4469  const olMatches = content.match(/<li[^>]*>/g);
4470  const hasOl = /<ol[^>]*>/.test(content) && ((olMatches == null ? void 0 : olMatches.length) ?? 0) >= 3;
4471  if (hasOl) return true;
4472  if (/step\s+\d+|<h[2-4][^>]*>\s*\d+[\.\)]/i.test(content)) return true;
4473  return false;
4474}
4475function extractSteps(content) {
4476  const steps = [];
4477  const olMatch = content.match(/<ol[^>]*>([\s\S]*?)<\/ol>/i);
4478  if (olMatch) {
4479    const liMatches = [...olMatch[1].matchAll(/<li[^>]*>([\s\S]*?)<\/li>/gi)];
4480    liMatches.forEach((m, i) => {
4481      const text = htmlToText(m[1]).replace(/\s+/g, " ").trim();
4482      if (text) steps.push({
4483        name: `Step ${i + 1}`,
4484        text
4485      });
4486    });
4487    if (steps.length >= 2) return steps;
4488  }
4489  const headingMatches = [...content.matchAll(/<h[23][^>]*>([\s\S]*?)<\/h[23]>([\s\S]*?)(?=<h[23]|$)/gi)];
4490  headingMatches.forEach((m, i) => {
4491    const name = htmlToText(m[1]).trim();
4492    const bodyHtml = m[2].match(/<p[^>]*>([\s\S]*?)<\/p>/i);
4493    const text = bodyHtml ? htmlToText(bodyHtml[1]).trim() : "";
4494    if (name) steps.push({
4495      name: `Step ${i + 1}: ${name}`,
4496      text
4497    });
4498  });
4499  return steps;
4500}
4501function BlogPostPage() {
4502  var _a2, _b2;
4503  const {
4504    slug
4505  } = useParams();
4506  const loaderData = useLoaderData();
4507  const [post, setPost] = reactExports.useState(loaderData ?? null);
4508  const [loading, setLoading] = reactExports.useState(loaderData == null);
4509  const [notFound, setNotFound] = reactExports.useState(false);
4510  reactExports.useEffect(() => {
4511    if (loaderData != null || !slug) return;
4512    setLoading(true);
4513    setNotFound(false);
4514    fetch(`/api/blog/${encodeURIComponent(slug)}`).then((r) => {
4515      if (r.status === 404) {
4516        setNotFound(true);
4517        setLoading(false);
4518        return null;
4519      }
4520      return r.json();
4521    }).then((d) => {
4522      if (d) {
4523        setPost(d);
4524        setLoading(false);
4525      }
4526    }).catch(() => {
4527      setNotFound(true);
4528      setLoading(false);
4529    });
4530  }, [slug, loaderData]);
4531  if (loading) {
4532    return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "container mx-auto px-6 py-20 max-w-3xl", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "animate-pulse space-y-4", children: [
4533      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-8 bg-muted rounded w-3/4" }),
4534      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-4 bg-muted rounded w-1/3" }),
4535      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-64 bg-muted rounded mt-8" }),
4536      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-3 mt-8", children: [...Array(8)].map((_, i) => /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "h-4 bg-muted rounded" }, i)) })
4537    ] }) });
4538  }
4539  if (notFound || !post) {
4540    return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "container mx-auto px-6 py-32 max-w-3xl text-center", children: [
4541      /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-2xl font-bold mb-4", children: "Post not found" }),
4542      /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground mb-8", children: "This post may not have been imported yet." }),
4543      /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, variant: "outline", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: "/skillforge-blog", children: [
4544        /* @__PURE__ */ jsxRuntimeExports.jsx(ArrowLeft, { className: "w-4 h-4 mr-2" }),
4545        " Back to Blog"
4546      ] }) })
4547    ] });
4548  }
4549  const bareSlug = post.slug.replace(/^\//, "");
4550  const postUrl = `https://skillforge.com/skillforge-blog/${bareSlug}`;
4551  const isHowTo = detectHowTo(post.title, post.content);
4552  const steps = isHowTo ? extractSteps(post.content) : [];
4553  const plainExcerpt = post.excerpt ? htmlToText(post.excerpt) : `${post.title} — SkillForge training tips and tutorials.`;
4554  const wordCount = htmlToText(post.content).split(/\s+/).filter(Boolean).length;
4555  const courseLinks = [];
4556  const courseLinkRe = /<a\s+href="(https:\/\/skillforge\.com\/courses\/[^"]+)"[^>]*title="([^"]+)"/gi;
4557  let clMatch;
4558  while ((clMatch = courseLinkRe.exec(post.content)) !== null) {
4559    const url = clMatch[1];
4560    const title = clMatch[2].replace(" training course", "");
4561    if (!courseLinks.some((c) => c.url === url)) courseLinks.push({
4562      title,
4563      url
4564    });
4565  }
4566  const SOFTWARE_MENTIONS = ["Microsoft Excel", "Microsoft Word", "Microsoft PowerPoint", "Microsoft Access", "Microsoft Outlook", "Microsoft Teams", "Microsoft Project", "Microsoft SharePoint", "Power BI", "Power Automate", "PowerApps", "Microsoft Copilot", "Adobe Acrobat", "Tableau", "Crystal Reports", "SQL Server"];
4567  const mentionedSoftware = SOFTWARE_MENTIONS.filter((name) => post.content.toLowerCase().includes(name.toLowerCase()));
4568  const faqPairs = [];
4569  const faqRe = /<h[2-4][^>]*>(.*?\?)<\/h[2-4]>\s*<p[^>]*>([\s\S]*?)<\/p>/gi;
4570  let faqMatch;
4571  while ((faqMatch = faqRe.exec(post.content)) !== null) {
4572    const question = htmlToText(faqMatch[1]).trim();
4573    const answer = htmlToText(faqMatch[2]).trim();
4574    if (question && answer) faqPairs.push({
4575      question,
4576      answer
4577    });
4578  }
4579  const articleSchema = {
4580    "@context": "https://schema.org",
4581    "@type": "Article",
4582    headline: post.title,
4583    description: plainExcerpt,
4584    url: postUrl,
4585    wordCount,
4586    datePublished: post.date ? new Date(post.date).toISOString() : void 0,
4587    dateModified: post.updatedAt ? new Date(post.updatedAt).toISOString() : void 0,
4588    author: {
4589      "@type": "Person",
4590      name: post.author || "SkillForge"
4591    },
4592    publisher: {
4593      "@type": "Organization",
4594      name: "SkillForge",
4595      url: "https://skillforge.com",
4596      logo: {
4597        "@type": "ImageObject",
4598        url: "https://skillforge.com/assets/skillforge-logo.jpg"
4599      }
4600    },
4601    ...post.featuredImage && {
4602      image: {
4603        "@type": "ImageObject",
4604        url: post.featuredImage
4605      }
4606    },
4607    ...((_a2 = post.categories) == null ? void 0 : _a2.length) > 0 && {
4608      keywords: post.categories.map((c) => c.name).join(", ")
4609    },
4610    // Courses linked in the post body — tells Google what this article is about
4611    ...courseLinks.length > 0 && {
4612      about: courseLinks.map((c) => ({
4613        "@type": "Course",
4614        name: c.title,
4615        url: c.url,
4616        provider: {
4617          "@type": "Organization",
4618          name: "SkillForge",
4619          url: "https://skillforge.com"
4620        }
4621      }))
4622    },
4623    // Software products mentioned in the post body
4624    ...mentionedSoftware.length > 0 && {
4625      mentions: mentionedSoftware.map((name) => ({
4626        "@type": "SoftwareApplication",
4627        name
4628      }))
4629    },
4630    mainEntityOfPage: {
4631      "@type": "WebPage",
4632      "@id": postUrl
4633    }
4634  };
4635  const howToSchema = isHowTo && steps.length >= 2 ? {
4636    "@context": "https://schema.org",
4637    "@type": "HowTo",
4638    name: post.title,
4639    description: plainExcerpt,
4640    url: postUrl,
4641    ...post.featuredImage && {
4642      image: post.featuredImage
4643    },
4644    step: steps.map((s) => ({
4645      "@type": "HowToStep",
4646      name: s.name,
4647      text: s.text
4648    }))
4649  } : null;
4650  const videoSchemas = [];
4651  const ytEmbedRe = /youtube\.com\/embed\/([A-Za-z0-9_-]{11})/g;
4652  let ytMatch;
4653  const sanitized = sanitizeBlogContent(post.content);
4654  while ((ytMatch = ytEmbedRe.exec(sanitized)) !== null) {
4655    const videoId = ytMatch[1];
4656    if (!videoSchemas.some((v) => {
4657      var _a3;
4658      return (_a3 = v.embedUrl) == null ? void 0 : _a3.includes(videoId);
4659    })) {
4660      videoSchemas.push({
4661        "@context": "https://schema.org",
4662        "@type": "VideoObject",
4663        name: post.title,
4664        description: plainExcerpt,
4665        embedUrl: `https://www.youtube.com/embed/${videoId}`,
4666        url: `https://www.youtube.com/watch?v=${videoId}`,
4667        thumbnailUrl: `https://img.youtube.com/vi/${videoId}/maxresdefault.jpg`,
4668        uploadDate: post.date ? new Date(post.date).toISOString() : void 0,
4669        publisher: {
4670          "@type": "Organization",
4671          name: "SkillForge",
4672          url: "https://skillforge.com"
4673        }
4674      });
4675    }
4676  }
4677  const faqSchema = !isHowTo && faqPairs.length >= 2 ? {
4678    "@context": "https://schema.org",
4679    "@type": "FAQPage",
4680    mainEntity: faqPairs.map((pair) => ({
4681      "@type": "Question",
4682      name: pair.question,
4683      acceptedAnswer: {
4684        "@type": "Answer",
4685        text: pair.answer
4686      }
4687    }))
4688  } : null;
4689  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col", children: [
4690    /* @__PURE__ */ jsxRuntimeExports.jsxs(Helmet, { children: [
4691      /* @__PURE__ */ jsxRuntimeExports.jsxs("title", { children: [
4692        post.title,
4693        " | SkillForge Blog"
4694      ] }),
4695      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "description", content: plainExcerpt }),
4696      post.status === "draft" && /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "robots", content: "noindex, nofollow" }),
4697      /* @__PURE__ */ jsxRuntimeExports.jsx("link", { rel: "canonical", href: postUrl }),
4698      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:title", content: post.title }),
4699      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:description", content: plainExcerpt }),
4700      post.featuredImage && /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:image", content: post.featuredImage }),
4701      !post.featuredImage && /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:image", content: "https://skillforge.com/assets/skillforge-logo.jpg" }),
4702      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:type", content: "article" }),
4703      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:url", content: postUrl }),
4704      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:card", content: "summary_large_image" }),
4705      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:title", content: post.title }),
4706      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:description", content: plainExcerpt }),
4707      post.featuredImage && /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:image", content: post.featuredImage }),
4708      !post.featuredImage && /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:image", content: "https://skillforge.com/assets/skillforge-logo.jpg" }),
4709      post.date && /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "article:published_time", content: new Date(post.date).toISOString() }),
4710      post.updatedAt && /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "article:modified_time", content: new Date(post.updatedAt).toISOString() }),
4711      post.author && /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "article:author", content: post.author }),
4712      /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify(articleSchema) }),
4713      howToSchema && /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify(howToSchema) }),
4714      faqSchema && /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify(faqSchema) }),
4715      videoSchemas.map((vs, i) => /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify(vs) }, i)),
4716      /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify({
4717        "@context": "https://schema.org",
4718        "@type": "BreadcrumbList",
4719        itemListElement: [{
4720          "@type": "ListItem",
4721          position: 1,
4722          name: "Home",
4723          item: "https://skillforge.com/"
4724        }, {
4725          "@type": "ListItem",
4726          position: 2,
4727          name: "Blog & Tutorials",
4728          item: "https://skillforge.com/skillforge-blog"
4729        }, {
4730          "@type": "ListItem",
4731          position: 3,
4732          name: post.title,
4733          item: postUrl
4734        }]
4735      }) })
4736    ] }),
4737    post.featuredImage && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "w-full overflow-hidden relative flex items-center justify-center", style: {
4738      height: "420px",
4739      background: "#111"
4740    }, children: [
4741      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 scale-110", style: {
4742        backgroundImage: `url(${post.featuredImage})`,
4743        backgroundSize: "cover",
4744        backgroundPosition: "center",
4745        filter: "blur(18px) brightness(0.45)"
4746      } }),
4747      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative z-10 flex items-center justify-center", style: {
4748        maxHeight: "420px",
4749        padding: "16px"
4750      }, children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
4751        background: "#fff",
4752        borderRadius: "6px",
4753        padding: "8px",
4754        display: "flex",
4755        alignItems: "center",
4756        justifyContent: "center"
4757      }, children: /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: post.featuredImage, alt: post.title, className: "object-contain", style: {
4758        maxHeight: "380px",
4759        maxWidth: "100%",
4760        display: "block"
4761      }, loading: "eager", fetchPriority: "high", decoding: "sync" }) }) })
4762    ] }),
4763    /* @__PURE__ */ jsxRuntimeExports.jsxs("article", { className: "container mx-auto px-6 py-12 max-w-3xl", children: [
4764      /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: "/skillforge-blog", className: "inline-flex items-center gap-1.5 text-sm mb-8 hover:underline", style: {
4765        color: "#4A7A8A"
4766      }, children: [
4767        /* @__PURE__ */ jsxRuntimeExports.jsx(ArrowLeft, { className: "w-4 h-4" }),
4768        " Back to Blog"
4769      ] }),
4770      /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
4771        opacity: 0,
4772        y: 20
4773      }, animate: {
4774        opacity: 1,
4775        y: 0
4776      }, transition: {
4777        duration: 0.4,
4778        ease: "easeOut"
4779      }, children: [
4780        (((_b2 = post.categories) == null ? void 0 : _b2.length) ?? 0) > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-wrap gap-2 mb-4", children: (post.categories ?? []).map((cat) => /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "inline-flex items-center gap-1 text-xs font-semibold uppercase tracking-wide px-2.5 py-1 rounded-full", style: {
4781          background: "#f0f6f8",
4782          color: "#4A7A8A"
4783        }, children: [
4784          /* @__PURE__ */ jsxRuntimeExports.jsx(Tag, { className: "w-3 h-3" }),
4785          cat.name
4786        ] }, cat.id)) }),
4787        /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-3xl md:text-4xl font-bold leading-tight text-foreground mb-5", children: post.title }),
4788        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap items-center gap-4 text-sm text-muted-foreground mb-10 pb-8", style: {
4789          borderBottom: "1px solid #e5e7eb"
4790        }, children: [
4791          /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "flex items-center gap-1.5", children: [
4792            /* @__PURE__ */ jsxRuntimeExports.jsx(Calendar, { className: "w-4 h-4" }),
4793            post.date ? format(new Date(post.date), "MMMM d, yyyy") : "Unknown date"
4794          ] }),
4795          post.updatedAt && post.date && (() => {
4796            const published = new Date(post.date).getTime();
4797            const updated = new Date(post.updatedAt).getTime();
4798            return updated - published > 24 * 60 * 60 * 1e3 ? /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "flex items-center gap-1.5", children: [
4799              /* @__PURE__ */ jsxRuntimeExports.jsx(RefreshCw, { className: "w-4 h-4" }),
4800              "Updated ",
4801              format(new Date(post.updatedAt), "MMMM d, yyyy")
4802            ] }) : null;
4803          })()
4804        ] }),
4805        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "wp-content prose prose-slate max-w-none", dangerouslySetInnerHTML: {
4806          __html: sanitized
4807        } })
4808      ] }),
4809      /* @__PURE__ */ jsxRuntimeExports.jsx(RelatedCoursesCTA, { slug: post.slug }),
4810      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-16 pt-8", style: {
4811        borderTop: "1px solid #e5e7eb"
4812      }, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, variant: "outline", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: "/skillforge-blog", children: [
4813        /* @__PURE__ */ jsxRuntimeExports.jsx(ArrowLeft, { className: "w-4 h-4 mr-2" }),
4814        " Back to Blog"
4815      ] }) }) })
4816    ] }),
4817    /* @__PURE__ */ jsxRuntimeExports.jsx("style", { children: `
4818        .wp-content h1, .wp-content h2, .wp-content h3, .wp-content h4 {
4819          font-weight: 700;
4820          line-height: 1.3;
4821          margin-top: 2rem;
4822          margin-bottom: 0.75rem;
4823          color: hsl(var(--foreground));
4824        }
4825        .wp-content h2 { font-size: 1.5rem; }
4826        .wp-content h3 { font-size: 1.25rem; }
4827        .wp-content h4 { font-size: 1.1rem; }
4828        .wp-content p { margin-bottom: 1.25rem; line-height: 1.75; color: hsl(var(--foreground)); }
4829        .wp-content a { color: #4A7A8A; text-decoration: underline; }
4830        .wp-content a:hover { color: #FF7A00; }
4831        .wp-content ul, .wp-content ol { margin: 1rem 0 1.25rem 1.5rem; }
4832        .wp-content ul { list-style-type: disc; }
4833        .wp-content ol { list-style-type: decimal; }
4834        .wp-content li { margin-bottom: 0.4rem; line-height: 1.7; }
4835        .wp-content img { max-width: 100%; height: auto; border-radius: 0.5rem; margin: 1.5rem 0; }
4836        .wp-content blockquote {
4837          border-left: 4px solid #4A7A8A;
4838          padding: 0.75rem 1.25rem;
4839          margin: 1.5rem 0;
4840          background: #f5f9fa;
4841          border-radius: 0 0.375rem 0.375rem 0;
4842          font-style: italic;
4843          color: hsl(var(--muted-foreground));
4844        }
4845        .wp-content pre, .wp-content code {
4846          background: #f5f6f7;
4847          border-radius: 0.375rem;
4848          font-family: monospace;
4849          font-size: 0.875rem;
4850        }
4851        .wp-content pre { padding: 1rem 1.25rem; overflow-x: auto; margin: 1.25rem 0; }
4852        .wp-content code { padding: 0.15rem 0.4rem; }
4853        .wp-content table { width: 100%; border-collapse: collapse; margin: 1.5rem 0; font-size: 0.9rem; }
4854        .wp-content th, .wp-content td { padding: 0.6rem 0.9rem; border: 1px solid #e5e7eb; text-align: left; }
4855        .wp-content th { background: #f5f6f7; font-weight: 600; }
4856        .wp-content figure { margin: 1.5rem 0; }
4857        .wp-content figcaption { font-size: 0.8rem; color: hsl(var(--muted-foreground)); text-align: center; margin-top: 0.5rem; }
4858        .wp-content .wp-block-image { margin: 1.5rem 0; }
4859        ${videoCss}
4860        .wp-content strong { font-weight: 700; }
4861        .wp-content em { font-style: italic; }
4862        .wp-content hr { border: none; border-top: 1px solid #e5e7eb; margin: 2rem 0; }
4863      ` })
4864  ] });
4865}
4866const Textarea = reactExports.forwardRef(({
4867  className,
4868  ...props
4869}, ref) => {
4870  return /* @__PURE__ */ jsxRuntimeExports.jsx("textarea", { className: cn("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", className), ref, ...props });
4871});
4872Textarea.displayName = "Textarea";
4873const contactInfo = [{
4874  icon: Phone,
4875  label: "Phone",
4876  value: "800-971-3203",
4877  href: "tel:+18009713203"
4878}, {
4879  icon: Mail,
4880  label: "Email",
4881  value: "[email protected]",
4882  href: "mailto:[email protected]"
4883}, {
4884  icon: MapPin,
4885  label: "Location",
4886  value: "Serving clients nationwide — online & onsite",
4887  href: null
4888}, {
4889  icon: Clock,
4890  label: "Hours",
4891  value: "Mon–Fri, 8:00 AM – 5:00 PM ET",
4892  href: null
4893}];
4894const inquiryTypes = ["General Question", "Course Information", "Group / Corporate Training", "Onsite Training Request", "Pricing & Invoicing", "Technical Support", "Other"];
4895function ContactUsPage() {
4896  const [form, setForm] = reactExports.useState({
4897    name: "",
4898    email: "",
4899    phone: "",
4900    company: "",
4901    inquiryType: "",
4902    message: ""
4903  });
4904  const [submitting, setSubmitting] = reactExports.useState(false);
4905  const [submitted, setSubmitted] = reactExports.useState(false);
4906  const [error, setError] = reactExports.useState("");
4907  function handleChange(field, value) {
4908    setForm((prev) => ({
4909      ...prev,
4910      [field]: value
4911    }));
4912  }
4913  async function handleSubmit(e) {
4914    e.preventDefault();
4915    if (!form.name || !form.email || !form.message) return;
4916    setSubmitting(true);
4917    setError("");
4918    try {
4919      const res = await fetch("/api/contact", {
4920        method: "POST",
4921        headers: {
4922          "Content-Type": "application/json"
4923        },
4924        body: JSON.stringify(form)
4925      });
4926      if (!res.ok) throw new Error("Failed to send");
4927      setSubmitted(true);
4928    } catch {
4929      setError("Something went wrong. Please try emailing us directly at [email protected].");
4930    } finally {
4931      setSubmitting(false);
4932    }
4933  }
4934  return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
4935    /* @__PURE__ */ jsxRuntimeExports.jsxs(Helmet, { children: [
4936      /* @__PURE__ */ jsxRuntimeExports.jsx("title", { children: "Contact Us | SkillForge Training" }),
4937      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "description", content: "Get in touch with SkillForge. Ask about courses, group training, pricing, or onsite options. We're here to help." }),
4938      /* @__PURE__ */ jsxRuntimeExports.jsx("link", { rel: "canonical", href: "https://skillforge.com/contact-us" }),
4939      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:type", content: "website" }),
4940      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:url", content: "https://skillforge.com/contact-us" }),
4941      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:title", content: "Contact Us | SkillForge Training" }),
4942      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:description", content: "Get in touch with SkillForge. Ask about courses, group training, pricing, or onsite options. We're here to help." }),
4943      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:image", content: "https://skillforge.com/assets/skillforge-logo.jpg" }),
4944      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:card", content: "summary_large_image" }),
4945      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:title", content: "Contact Us | SkillForge Training" }),
4946      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:description", content: "Get in touch with SkillForge. Ask about courses, group training, pricing, or onsite options. We're here to help." }),
4947      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:image", content: "https://skillforge.com/assets/skillforge-logo.jpg" }),
4948      /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify({
4949        "@context": "https://schema.org",
4950        "@type": "BreadcrumbList",
4951        itemListElement: [{
4952          "@type": "ListItem",
4953          position: 1,
4954          name: "Home",
4955          item: "https://skillforge.com/"
4956        }, {
4957          "@type": "ListItem",
4958          position: 2,
4959          name: "Contact Us",
4960          item: "https://skillforge.com/contact-us"
4961        }]
4962      }) }),
4963      /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify({
4964        "@context": "https://schema.org",
4965        "@type": "ContactPage",
4966        "name": "Contact Us | SkillForge Training",
4967        "description": "Get in touch with SkillForge. Ask about courses, group training, pricing, or onsite options.",
4968        "url": "https://skillforge.com/contact-us",
4969        "publisher": {
4970          "@type": "EducationalOrganization",
4971          "name": "SkillForge",
4972          "url": "https://skillforge.com"
4973        }
4974      }) })
4975    ] }),
4976    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "bg-[#4A7A8A] text-white py-16", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mx-auto max-w-7xl px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
4977      opacity: 0,
4978      y: 16
4979    }, animate: {
4980      opacity: 1,
4981      y: 0
4982    }, transition: {
4983      duration: 0.4,
4984      ease: "easeOut"
4985    }, children: [
4986      /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-4xl font-bold mb-3", children: "Contact Us" }),
4987      /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-lg text-white/80 max-w-xl", children: "Have a question about a course, need a group training quote, or want to schedule onsite training? We'd love to hear from you." })
4988    ] }) }) }),
4989    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-16 bg-background", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mx-auto max-w-7xl px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-3 gap-12", children: [
4990      /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
4991        opacity: 0,
4992        x: -16
4993      }, animate: {
4994        opacity: 1,
4995        x: 0
4996      }, transition: {
4997        duration: 0.4,
4998        delay: 0.1,
4999        ease: "easeOut"
5000      }, className: "space-y-8", children: [
5001        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
5002          /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-xl font-semibold text-foreground mb-6", children: "Get in Touch" }),
5003          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-5", children: contactInfo.map((item) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex gap-4", children: [
5004            /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-shrink-0 w-10 h-10 rounded-lg bg-[#FF7A00]/10 flex items-center justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx(item.icon, { className: "w-5 h-5 text-[#FF7A00]" }) }),
5005            /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
5006              /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs font-medium text-muted-foreground uppercase tracking-wide mb-0.5", children: item.label }),
5007              item.href ? /* @__PURE__ */ jsxRuntimeExports.jsx("a", { href: item.href, className: "text-sm text-foreground hover:text-[#FF7A00] transition-colors", children: item.value }) : /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-foreground", children: item.value })
5008            ] })
5009          ] }, item.label)) })
5010        ] }),
5011        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-t border-border pt-8", children: [
5012          /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-sm font-semibold text-foreground mb-4 uppercase tracking-wide", children: "Quick Links" }),
5013          /* @__PURE__ */ jsxRuntimeExports.jsxs("ul", { className: "space-y-2 text-sm", children: [
5014            /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: /* @__PURE__ */ jsxRuntimeExports.jsx("a", { href: "/courses", className: "text-[#4A7A8A] hover:underline", children: "Browse all courses" }) }),
5015            /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: /* @__PURE__ */ jsxRuntimeExports.jsx("a", { href: "/about", className: "text-[#4A7A8A] hover:underline", children: "About SkillForge" }) }),
5016            /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: /* @__PURE__ */ jsxRuntimeExports.jsx("a", { href: "/student", className: "text-[#4A7A8A] hover:underline", children: "Student portal" }) })
5017          ] })
5018        ] })
5019      ] }),
5020      /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { initial: {
5021        opacity: 0,
5022        y: 16
5023      }, animate: {
5024        opacity: 1,
5025        y: 0
5026      }, transition: {
5027        duration: 0.4,
5028        delay: 0.15,
5029        ease: "easeOut"
5030      }, className: "lg:col-span-2", children: submitted ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center justify-center py-20 text-center", children: [
5031        /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { className: "w-14 h-14 text-green-500 mb-4" }),
5032        /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-2xl font-bold text-foreground mb-2", children: "Message Sent!" }),
5033        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground max-w-sm", children: "Thanks for reaching out. We'll get back to you within one business day." }),
5034        /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { variant: "outline", className: "mt-6", onClick: () => {
5035          setSubmitted(false);
5036          setForm({
5037            name: "",
5038            email: "",
5039            phone: "",
5040            company: "",
5041            inquiryType: "",
5042            message: ""
5043          });
5044        }, children: "Send another message" })
5045      ] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("form", { onSubmit: handleSubmit, className: "space-y-6", children: [
5046        /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-xl font-semibold text-foreground", children: "Send Us a Message" }),
5047        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4", children: [
5048          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1.5", children: [
5049            /* @__PURE__ */ jsxRuntimeExports.jsxs(Label, { htmlFor: "name", children: [
5050              "Full Name ",
5051              /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-destructive", children: "*" })
5052            ] }),
5053            /* @__PURE__ */ jsxRuntimeExports.jsx(Input, { id: "name", value: form.name, onChange: (e) => handleChange("name", e.target.value), placeholder: "Jane Smith", required: true })
5054          ] }),
5055          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1.5", children: [
5056            /* @__PURE__ */ jsxRuntimeExports.jsxs(Label, { htmlFor: "email", children: [
5057              "Email Address ",
5058              /* @__P
5058URE__ */ jsxRuntimeExports.jsx("span", { className: "text-destructive", children: "*" })
5059            ] }),
5060            /* @__PURE__ */ jsxRuntimeExports.jsx(Input, { id: "email", type: "email", value: form.email, onChange: (e) => handleChange("email", e.target.value), placeholder: "[email protected]", required: true })
5061          ] }),
5062          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1.5", children: [
5063            /* @__PURE__ */ jsxRuntimeExports.jsx(Label, { htmlFor: "phone", children: "Phone Number" }),
5064            /* @__PURE__ */ jsxRuntimeExports.jsx(Input, { id: "phone", type: "tel", value: form.phone, onChange: (e) => handleChange("phone", e.target.value), placeholder: "(555) 000-0000" })
5065          ] }),
5066          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1.5", children: [
5067            /* @__PURE__ */ jsxRuntimeExports.jsx(Label, { htmlFor: "company", children: "Company / Organization" }),
5068            /* @__PURE__ */ jsxRuntimeExports.jsx(Input, { id: "company", value: form.company, onChange: (e) => handleChange("company", e.target.value), placeholder: "Acme Corp" })
5069          ] })
5070        ] }),
5071        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1.5", children: [
5072          /* @__PURE__ */ jsxRuntimeExports.jsx(Label, { htmlFor: "inquiryType", children: "What can we help you with?" }),
5073          /* @__PURE__ */ jsxRuntimeExports.jsxs(Select, { value: form.inquiryType, onValueChange: (v) => handleChange("inquiryType", v), children: [
5074            /* @__PURE__ */ jsxRuntimeExports.jsx(SelectTrigger, { id: "inquiryType", children: /* @__PURE__ */ jsxRuntimeExports.jsx(SelectValue, { placeholder: "Select an inquiry type" }) }),
5075            /* @__PURE__ */ jsxRuntimeExports.jsx(SelectContent, { children: inquiryTypes.map((t) => /* @__PURE__ */ jsxRuntimeExports.jsx(SelectItem, { value: t, children: t }, t)) })
5076          ] })
5077        ] }),
5078        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-1.5", children: [
5079          /* @__PURE__ */ jsxRuntimeExports.jsxs(Label, { htmlFor: "message", children: [
5080            "Message ",
5081            /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-destructive", children: "*" })
5082          ] }),
5083          /* @__PURE__ */ jsxRuntimeExports.jsx(Textarea, { id: "message", value: form.message, onChange: (e) => handleChange("message", e.target.value), placeholder: "Tell us about your training needs, questions, or anything else we can help with...", rows: 6, required: true })
5084        ] }),
5085        error && /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-destructive", children: error }),
5086        /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { type: "submit", disabled: submitting || !form.name || !form.email || !form.message, className: "bg-[#FF7A00] hover:bg-[#e06e00] text-white", children: submitting ? "Sending..." : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
5087          /* @__PURE__ */ jsxRuntimeExports.jsx(Send, { className: "w-4 h-4 mr-2" }),
5088          "Send Message"
5089        ] }) })
5090      ] }) })
5091    ] }) }) })
5092  ] });
5093}
5094const faqs = [{
5095  id: "recorded",
5096  question: "Is this a recorded video class?",
5097  answer: "Our live, instructor-led online classes are not recorded eLearning! These are live, hands-on classes where you will watch your instructor demonstrate skills and then get the chance to practice yourself, all while your instructor remains in the classroom with you available to answer questions or give assistance."
5098}, {
5099  id: "questions",
5100  question: "Am I able to ask questions during class?",
5101  answer: "Yes! You can ask questions at any time. We recommend using a USB headset with microphone (if you have one) for audio, or you can also dial-in via telephone if you prefer. And, if you'd like to chat with your instructor privately, our online classroom provides a private chat function as well."
5102}, {
5103  id: "connect",
5104  question: "How do I connect to the class?",
5105  answer: "After registering, you will receive an email from us with a link to join your class. We use Zoom in our online classroom. Some students may be prompted to install Zoom, but it is a quick, automatic download and works in virtually every network environment with no issues. It is also possible to join the class without downloading Zoom, directly from your browser. Please contact us at 800-971-3203 if you have additional questions."
5106}, {
5107  id: "equipment",
5108  question: "What equipment will I need?",
5109  answer: `To attend class, you will need a Windows PC or laptop (Mac OS is supported for some courses — please refer to your specific course's "Versions" section to check). While having a second monitor is helpful, it is not required for class. And, of course, you will want a reliable internet connection to join the class.`
5110}, {
5111  id: "software",
5112  question: "Do I need the software for the class I'm taking?",
5113  answer: "In order to complete the hands-on exercises and labs in each course, you will need the software installed locally on your machine. So, if you are taking an Excel Introduction class, for instance, you will need Excel installed. Most software companies provide a free trial version that can be used in class. Please contact us if you are not sure about how to obtain the software you need."
5114}, {
5115  id: "recordings",
5116  question: "Are the classes recorded?",
5117  answer: "Many of our courses offer one year access to a recorded version of the class included in the price. Please refer to the specific course you are interested in to see if this option is included."
5118}, {
5119  id: "cancellation-low",
5120  question: "Will my class be cancelled if not enough students enroll?",
5121  answer: "No! All of our live, online classes are guaranteed not to be cancelled for low enrollment. Even if you are the only student enrolled, your class will still run."
5122}, {
5123  id: "times",
5124  question: "What are the class times?",
5125  answer: "Our live, online classes are either offered at 10:00 AM – 5:00 PM Eastern Time or 9:00 AM – 5:00 PM Eastern Time. Please refer to your course for the specific time it is offered."
5126}, {
5127  id: "sharing-policy",
5128  question: "Can I share or broadcast the class with others?",
5129  answer: null,
5130  answerHtml: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-3 text-sm text-muted-foreground leading-relaxed", children: [
5131    /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "The pricing displayed for each live, online class is for one student to attend. Attending consists of anyone watching the screen cast portion of the instructor presentation, even if that person did not receive a book or is not completing hands-on exercises." }),
5132    /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { children: [
5133      "Sharing of course material or broadcasting the screen cast portion of the presentation for multiple people to view (when not having paid for each individual viewing) is a violation of our service agreement as well as a copyright violation and is",
5134      " ",
5135      /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { className: "text-foreground", children: "expressly prohibited" }),
5136      "."
5137    ] })
5138  ] })
5139}, {
5140  id: "cancellation-policy",
5141  question: "What is your cancellation policy?",
5142  answer: null,
5143  answerHtml: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-3 text-sm text-muted-foreground leading-relaxed", children: [
5144    /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "We understand that your needs or schedule might change prior to your class being held. Because our classes are guaranteed to run, even if you are the only student enrolled, we ask that you notify us at least 5 business days in advance if you will not be able to attend your class. Based on when you notify us of your registration cancellation/rescheduling, the following fees will apply:" }),
5145    /* @__PURE__ */ jsxRuntimeExports.jsxs("ul", { className: "list-disc pl-5 space-y-1", children: [
5146      /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { children: [
5147        /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { className: "text-foreground", children: "More than 5 business days in advance" }),
5148        " — no cancellation/rescheduling fee."
5149      ] }),
5150      /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { children: [
5151        /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { className: "text-foreground", children: "5 business days or less in advance" }),
5152        " — cancellation/rescheduling fee equaling 30% of total course tuition."
5153      ] })
5154    ] })
5155  ] })
5156}, {
5157  id: "certificate",
5158  question: "Do I receive a certificate showing I completed the class?",
5159  answer: "Yes. Once you have completed the class, we will email your certificate to you."
5160}];
5161function FaqPage() {
5162  const faqSchema = {
5163    "@context": "https://schema.org",
5164    "@type": "FAQPage",
5165    mainEntity: [{
5166      "@type": "Question",
5167      name: "Is this a recorded video class?",
5168      acceptedAnswer: {
5169        "@type": "Answer",
5170        text: "Our live, instructor-led online classes are not recorded eLearning! These are live, hands-on classes where you will watch your instructor demonstrate skills and then get the chance to practice yourself, all while your instructor remains in the classroom with you available to answer questions or give assistance."
5171      }
5172    }, {
5173      "@type": "Question",
5174      name: "Am I able to ask questions during class?",
5175      acceptedAnswer: {
5176        "@type": "Answer",
5177        text: "Yes! You can ask questions at any time. We recommend using a USB headset with microphone (if you have one) for audio, or you can also dial-in via telephone if you prefer. And, if you'd like to chat with your instructor privately, our online classroom provides a private chat function as well."
5178      }
5179    }, {
5180      "@type": "Question",
5181      name: "How do I connect to the class?",
5182      acceptedAnswer: {
5183        "@type": "Answer",
5184        text: "After registering, you will receive an email from us with a link to join your class. We use Zoom in our online classroom. Some students may be prompted to install Zoom, but it is a quick, automatic download and works in virtually every network environment with no issues. It is also possible to join the class without downloading Zoom, directly from your browser. Please contact us at 800-971-3203 if you have additional questions."
5185      }
5186    }, {
5187      "@type": "Question",
5188      name: "What equipment will I need?",
5189      acceptedAnswer: {
5190        "@type": "Answer",
5191        text: `To attend class, you will need a Windows PC or laptop (Mac OS is supported for some courses — please refer to your specific course's "Versions" section to check). While having a second monitor is helpful, it is not required for class. And, of course, you will want a reliable internet connection to join the class.`
5192      }
5193    }, {
5194      "@type": "Question",
5195      name: "Do I need the software for the class I'm taking?",
5196      acceptedAnswer: {
5197        "@type": "Answer",
5198        text: "In order to complete the hands-on exercises and labs in each course, you will need the software installed locally on your machine. So, if you are taking an Excel Introduction class, for instance, you will need Excel installed. Most software companies provide a free trial version that can be used in class. Please contact us if you are not sure about how to obtain the software you need."
5199      }
5200    }, {
5201      "@type": "Question",
5202      name: "Are the classes recorded?",
5203      acceptedAnswer: {
5204        "@type": "Answer",
5205        text: "Many of our courses offer one year access to a recorded version of the class included in the price. Please refer to the specific course you are interested in to see if this option is included."
5206      }
5207    }, {
5208      "@type": "Question",
5209      name: "Will my class be cancelled if not enough students enroll?",
5210      acceptedAnswer: {
5211        "@type": "Answer",
5212        text: "No! All of our live, online classes are guaranteed not to be cancelled for low enrollment. Even if you are the only student enrolled, your class will still run."
5213      }
5214    }, {
5215      "@type": "Question",
5216      name: "What are the class times?",
5217      acceptedAnswer: {
5218        "@type": "Answer",
5219        text: "Our live, online classes are either offered at 10:00 AM – 5:00 PM Eastern Time or 9:00 AM – 5:00 PM Eastern Time. Please refer to your course for the specific time it is offered."
5220      }
5221    }, {
5222      "@type": "Question",
5223      name: "Can I share or broadcast the class with others?",
5224      acceptedAnswer: {
5225        "@type": "Answer",
5226        text: "The pricing displayed for each live, online class is for one student to attend. Attending consists of anyone watching the screen cast portion of the instructor presentation, even if that person did not receive a book or is not completing hands-on exercises. Sharing of course material or broadcasting the screen cast portion of the presentation for multiple people to view (when not having paid for each individual viewing) is a violation of our service agreement as well as a copyright violation and is expressly prohibited."
5227      }
5228    }, {
5229      "@type": "Question",
5230      name: "What is your cancellation policy?",
5231      acceptedAnswer: {
5232        "@type": "Answer",
5233        text: "We understand that your needs or schedule might change prior to your class being held. Because our classes are guaranteed to run, even if you are the only student enrolled, we ask that you notify us at least 5 business days in advance if you will not be able to attend your class. More than 5 business days in advance: no cancellation/rescheduling fee. 5 business days or less in advance: cancellation/rescheduling fee equaling 30% of total course tuition."
5234      }
5235    }, {
5236      "@type": "Question",
5237      name: "Do I receive a certificate showing I completed the class?",
5238      acceptedAnswer: {
5239        "@type": "Answer",
5240        text: "Yes. Once you have completed the class, we will email your certificate to you."
5241      }
5242    }]
5243  };
5244  return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
5245    /* @__PURE__ */ jsxRuntimeExports.jsxs(Helmet, { children: [
5246      /* @__PURE__ */ jsxRuntimeExports.jsx("title", { children: "FAQ | Instructor-Led Online Class Questions | SkillForge" }),
5247      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "description", content: "Answers to frequently asked questions about SkillForge's live, instructor-led online training classes — equipment, software, cancellation policy, and more." }),
5248      /* @__PURE__ */ jsxRuntimeExports.jsx("link", { rel: "canonical", href: "https://skillforge.com/instructor-led-online-class-faqs" }),
5249      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:type", content: "website" }),
5250      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:url", content: "https://skillforge.com/instructor-led-online-class-faqs" }),
5251      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:title", content: "Instructor-Led Online Class FAQs | SkillForge" }),
5252      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:description", content: "Answers to frequently asked questions about SkillForge's live, instructor-led online training classes — equipment, software, cancellation policy, and more." }),
5253      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:image", content: "https://skillforge.com/assets/skillforge-logo.jpg" }),
5254      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:card", content: "summary_large_image" }),
5255      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:title", content: "Instructor-Led Online Class FAQs | SkillForge" }),
5256      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:description", content: "Answers to frequently asked questions about SkillForge's live, instructor-led online training classes — equipment, software, cancellation policy, and more." }),
5257      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:image", content: "https://skillforge.com/assets/skillforge-logo.jpg" }),
5258      /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify({
5259        "@context": "https://schema.org",
5260        "@type": "BreadcrumbList",
5261        itemListElement: [{
5262          "@type": "ListItem",
5263          position: 1,
5264          name: "Home",
5265          item: "https://skillforge.com/"
5266        }, {
5267          "@type": "ListItem",
5268          position: 2,
5269          name: "FAQs",
5270          item: "https://skillforge.com/instructor-led-online-class-faqs"
5271        }]
5272      }) }),
5273      /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify(faqSchema) })
5274    ] }),
5275    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "bg-[#4A7A8A] text-white py-16", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mx-auto max-w-7xl px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
5276      opacity: 0,
5277      y: 16
5278    }, animate: {
5279      opacity: 1,
5280      y: 0
5281    }, transition: {
5282      duration: 0.4,
5283      ease: "easeOut"
5284    }, className: "flex items-start gap-4", children: [
5285      /* @__PURE__ */ jsxRuntimeExports.jsx(CircleHelp, { className: "w-10 h-10 flex-shrink-0 opacity-80 mt-1" }),
5286      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
5287        /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-4xl font-bold leading-tight", children: "Instructor-Led Online Class FAQs" }),
5288        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mt-3 text-lg text-white/80 max-w-2xl", children: "Everything you need to know about attending a live, online training class with SkillForge." })
5289      ] })
5290    ] }) }) }),
5291    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-16 bg-background", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mx-auto max-w-7xl px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-3 gap-12", children: [
5292      /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { initial: {
5293        opacity: 0,
5294        y: 16
5295      }, animate: {
5296        opacity: 1,
5297        y: 0
5298      }, transition: {
5299        duration: 0.4,
5300        delay: 0.1,
5301        ease: "easeOut"
5302      }, className: "lg:col-span-2", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Accordion, { type: "single", collapsible: true, className: "space-y-3", children: faqs.map((faq) => /* @__PURE__ */ jsxRuntimeExports.jsxs(AccordionItem, { value: faq.id, className: "border border-border rounded-xl px-5 data-[state=open]:border-[#4A7A8A]", children: [
5303        /* @__PURE__ */ jsxRuntimeExports.jsx(AccordionTrigger, { className: "text-left font-semibold text-foreground hover:no-underline py-5", children: faq.question }),
5304        /* @__PURE__ */ jsxRuntimeExports.jsx(AccordionContent, { className: "pb-5", children: faq.answerHtml ? faq.answerHtml : /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground leading-relaxed", children: faq.answer }) })
5305      ] }, faq.id)) }) }),
5306      /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
5307        opacity: 0,
5308        x: 16
5309      }, animate: {
5310        opacity: 1,
5311        x: 0
5312      }, transition: {
5313        duration: 0.4,
5314        delay: 0.15,
5315        ease: "easeOut"
5316      }, className: "space-y-6", children: [
5317        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-xl border border-border bg-card p-6 space-y-4", children: [
5318          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
5319            /* @__PURE__ */ jsxRuntimeExports.jsx(MessageCircle, { className: "w-5 h-5 text-[#FF7A00]" }),
5320            /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "font-semibold text-foreground text-lg", children: "Still have questions?" })
5321          ] }),
5322          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground leading-relaxed", children: "Don't see your question here? Our team is happy to help — reach out and we'll get back to you promptly." }),
5323          /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, className: "w-full bg-[#FF7A00] hover:bg-[#e06e00] text-white", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/contact-us", children: "Contact Us" }) }),
5324          /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-xs text-muted-foreground text-center", children: [
5325            "Or call us at",
5326            " ",
5327            /* @__PURE__ */ jsxRuntimeExports.jsx("a", { href: "tel:+18009713203", className: "text-[#4A7A8A] hover:underline", children: "800-971-3203" }),
5328            /* @__PURE__ */ jsxRuntimeExports.jsx("br", {}),
5329            "Mon–Fri, 8:00 AM – 5:00 PM ET"
5330          ] })
5331        ] }),
5332        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-xl border border-border bg-muted/40 p-6 space-y-3", children: [
5333          /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "font-semibold text-foreground", children: "Ready to register?" }),
5334          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground", children: "Browse our full catalog of live, instructor-led online courses." }),
5335          /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, variant: "outline", className: "w-full", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/courses", children: "Browse Courses" }) })
5336        ] }),
5337        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-xl bg-[#4A7A8A]/10 border border-[#4A7A8A]/20 p-6 space-y-2", children: [
5338          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "font-semibold text-[#4A7A8A]", children: "Guaranteed to run" }),
5339          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground leading-relaxed", children: "Every live online class is guaranteed not to be cancelled for low enrollment — even if you're the only student registered." })
5340        ] })
5341      ] })
5342    ] }) }) })
5343  ] });
5344}
5345const skillAreas = ["Microsoft Excel (Introduction, Intermediate, Advanced, VBA, Power Pivot, Dashboards, Data Analysis)", "Microsoft Word (Introduction, Intermediate, Advanced)", "Microsoft PowerPoint (Introduction, Advanced)", "Microsoft Access (Introduction, Advanced, VBA)", "Microsoft Outlook (Introduction, Advanced)", "Microsoft SharePoint (Site User, Site Owner, Advanced Owner, Power User, Administrator)", "Microsoft Project", "Microsoft Teams", "Office 365 / Microsoft 365", "Power Platform (Power BI, Power Automate, PowerApps, Power Platform Fundamentals)", "Microsoft Copilot & AI Tools", "Azure (Fundamentals, Administration, Development, Security, SQL, Infrastructure)", "Microsoft 365 Administration (Endpoint, Messaging, Security)", "PowerShell", "Crystal Reports (Introduction, Intermediate)", "SQL (Introduction, Advanced, SQL Databases)", "Tableau (Introduction, Intermediate)", "Business Skills (Communication, Customer Service, Presentation Skills, Time Management, Leadership)", "Project Management"];
5346const whyUs = [{
5347  title: "Trainers at the center",
5348  body: "Our company was founded by trainers. We firmly believe the trainer is the center of our business and strive to provide the best environment for you to shine in every engagement."
5349}, {
5350  title: "Competitive compensation",
5351  body: "We ensure the key success components are in place — from our systems to our compensation — so each training delivery can be exceptional."
5352}, {
5353  title: "Flexible delivery",
5354  body: "Many courses are delivered at the client's physical site, but we also offer a regular schedule of live, instructor-led online courses that can be delivered from home."
5355}, {
5356  title: "Full classroom support",
5357  body: "We provide courseware, classroom support, and everything you need so you can focus on what you do best — delivering outstanding training."
5358}];
5359function CareersPage() {
5360  return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
5361    /* @__PURE__ */ jsxRuntimeExports.jsxs(Helmet, { children: [
5362      /* @__PURE__ */ jsxRuntimeExports.jsx("title", { children: "Careers | Contract Trainers & Instructors | SkillForge" }),
5363      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "description", content: "Join SkillForge as a contract trainer or instructor. We're seeking experts in Microsoft Office, Adobe, SQL, SharePoint, Tableau, and more." }),
5364      /* @__PURE__ */ jsxRuntimeExports.jsx("link", { rel: "canonical", href: "https://skillforge.com/careers" }),
5365      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:type", content: "website" }),
5366      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:url", content: "https://skillforge.com/careers" }),
5367      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:title", content: "Careers — Contract Trainers & Instructors | SkillForge" }),
5368      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:description", content: "Join SkillForge as a contract trainer or instructor. We're seeking experts in Microsoft Office, Adobe, SQL, SharePoint, Tableau, and more." }),
5369      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:image", content: "https://skillforge.com/assets/skillforge-logo.jpg" }),
5370      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:card", content: "summary_large_image" }),
5371      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:title", content: "Careers — Contract Trainers & Instructors | SkillForge" }),
5372      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:description", content: "Join SkillForge as a contract trainer or instructor. We're seeking experts in Microsoft Office, Adobe, SQL, SharePoint, Tableau, and more." }),
5373      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:image", content: "https://skillforge.com/assets/skillforge-logo.jpg" }),
5374      /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify({
5375        "@context": "https://schema.org",
5376        "@type": "BreadcrumbList",
5377        itemListElement: [{
5378          "@type": "ListItem",
5379          position: 1,
5380          name: "Home",
5381          item: "https://skillforge.com/"
5382        }, {
5383          "@type": "ListItem",
5384          position: 2,
5385          name: "Careers",
5386          item: "https://skillforge.com/careers"
5387        }]
5388      }) }),
5389      /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify({
5390        "@context": "https://schema.org",
5391        "@type": "WebPage",
5392        "name": "Careers — Contract Trainers & Instructors | SkillForge",
5393        "description": "Join SkillForge as a contract trainer or instructor. We seek experts in Microsoft Office, Adobe, SQL, SharePoint, Tableau, and more.",
5394        "url": "https://skillforge.com/careers",
5395        "publisher": {
5396          "@type": "EducationalOrganization",
5397          "name": "SkillForge",
5398          "url": "https://skillforge.com"
5399        }
5400      }) })
5401    ] }),
5402    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "bg-[#4A7A8A] text-white py-16", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mx-auto max-w-7xl px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
5403      opacity: 0,
5404      y: 16
5405    }, animate: {
5406      opacity: 1,
5407      y: 0
5408    }, transition: {
5409      duration: 0.4,
5410      ease: "easeOut"
5411    }, className: "flex items-start gap-4", children: [
5412      /* @__PURE__ */ jsxRuntimeExports.jsx(Briefcase, { className: "w-10 h-10 flex-shrink-0 opacity-80 mt-1" }),
5413      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
5414        /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-4xl font-bold leading-tight", children: "Careers — Contract Trainers & Instructors" }),
5415        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mt-3 text-lg text-white/80 max-w-2xl", children: "Are you an expert in your field? Do you pride yourself on delivering training that consistently thrills your clients? If so, we'd love to speak with you." })
5416      ] })
5417    ] }) }) }),
5418    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-16 bg-background", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mx-auto max-w-7xl px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-3 gap-12", children: [
5419      /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
5420        opacity: 0,
5421        y: 16
5422      }, animate: {
5423        opacity: 1,
5424        y: 0
5425      }, transition: {
5426        duration: 0.4,
5427        delay: 0.1,
5428        ease: "easeOut"
5429      }, className: "lg:col-span-2 space-y-8", children: [
5430        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
5431          /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-2xl font-bold text-foreground mb-4", children: "About Us" }),
5432          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-4 text-muted-foreground leading-relaxed", children: [
5433            /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "SkillForge is a technical and business skills training company, delivering training to companies and individuals across North America. Our company was founded by trainers with years of experience in the industry." }),
5434            /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "We firmly believe that the trainer is the center of our business, and we strive to provide the best environment for trainers to shine in each and every engagement. From our systems to our compensation to our classroom support to our courseware, we ensure the key success components are in place so that each training delivery can be exceptional." }),
5435            /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "Many of our courses are delivered at our client's physical site, but we also offer a regular schedule of live, instructor-led online courses. Our online live courses can be delivered while working from home. We are seeking trainers interested in either type of delivery." })
5436          ] })
5437        ] }),
5438        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
5439          /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-2xl font-bold text-foreground mb-5", children: "Why SkillForge?" }),
5440          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-4", children: whyUs.map((item) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-xl border border-border bg-muted/40 p-5", children: [
5441            /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "font-semibold text-foreground mb-1.5", children: item.title }),
5442            /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground leading-relaxed", children: item.body })
5443          ] }, item.title)) })
5444        ] }),
5445        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
5446          /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-2xl font-bold text-foreground mb-4", children: "Skills We're Looking For" }),
5447          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground mb-4", children: "SkillForge is actively seeking trainers with expertise in the following areas:" }),
5448          /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { className: "space-y-2", children: skillAreas.map((skill) => /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { className: "flex items-start gap-2.5", children: [
5449            /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheck, { className: "w-4 h-4 mt-0.5 flex-shrink-0 text-[#FF7A00]" }),
5450            /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-sm text-foreground", children: skill })
5451          ] }, skill)) })
5452        ] })
5453      ] }),
5454      /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
5455        opacity: 0,
5456        x: 16
5457      }, animate: {
5458        opacity: 1,
5459        x: 0
5460      }, transition: {
5461        duration: 0.4,
5462        delay: 0.15,
5463        ease: "easeOut"
5464      }, className: "space-y-6", children: [
5465        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-xl border border-border bg-card p-6 space-y-4", children: [
5466          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
5467            /* @__PURE__ */ jsxRuntimeExports.jsx(Send, { className: "w-5 h-5 text-[#FF7A00]" }),
5468            /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "font-semibold text-foreground text-lg", children: "Apply Now" })
5469          ] }),
5470          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground leading-relaxed", children: "Send us your current resume and a brief overview of your training experience. If your skills match one of our current needs, we'll reach out for an in-depth interview." }),
5471          /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, className: "w-full bg-[#FF7A00] hover:bg-[#e06e00] text-white", children: /* @__PURE__ */ jsxRuntimeExports.jsx("a", { href: "mailto:[email protected]?subject=Contract Trainer Application", children: "Email Your Resume" }) }),
5472          /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-xs text-muted-foreground text-center", children: [
5473            "Send to",
5474            " ",
5475            /* @__PURE__ */ jsxRuntimeExports.jsx("a", { href: "mailto:[email protected]", className: "text-[#4A7A8A] hover:underline", children: "[email protected]" })
5476          ] })
5477        ] }),
5478        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-xl border border-border bg-muted/40 p-6 space-y-3", children: [
5479          /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "font-semibold text-foreground", children: "Have Questions?" }),
5480          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground", children: "Not sure if you're a fit? Reach out through our contact form and we'll be happy to chat." }),
5481          /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, variant: "outline", className: "w-full", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/contact-us", children: "Contact Us" }) })
5482        ] }),
5483        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-xl border border-border bg-muted/40 p-6 space-y-3", children: [
5484          /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "font-semibold text-foreground", children: "Learn More About SkillForge" }),
5485          /* @__PURE__ */ jsxRuntimeExports.jsxs("ul", { className: "space-y-2 text-sm", children: [
5486            /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/about", className: "text-[#4A7A8A] hover:underline", children: "About SkillForge" }) }),
5487            /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/courses", className: "text-[#4A7A8A] hover:underline", children: "Browse our course catalog" }) }),
5488            /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/about/testimonials", className: "text-[#4A7A8A] hover:underline", children: "Student testimonials" }) })
5489          ] })
5490        ] })
5491      ] })
5492    ] }) }) })
5493  ] });
5494}
5495function PrivacyPolicyPage() {
5496  return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
5497    /* @__PURE__ */ jsxRuntimeExports.jsxs(Helmet, { children: [
5498      /* @__PURE__ */ jsxRuntimeExports.jsx("title", { children: "Privacy Policy | SkillForge" }),
5499      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "description", content: "SkillForge's privacy policy — how we collect, use, and protect your personal information." }),
5500      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "robots", content: "noindex, follow" }),
5501      /* @__PURE__ */ jsxRuntimeExports.jsx("link", { rel: "canonical", href: "https://skillforge.com/privacy-policy" }),
5502      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:type", content: "website" }),
5503      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:url", content: "https://skillforge.com/privacy-policy" }),
5504      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:title", content: "Privacy Policy | SkillForge" }),
5505      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:description", content: "SkillForge's privacy policy — how we collect, use, and protect your personal information." }),
5506      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:image", content: "https://skillforge.com/assets/skillforge-logo.jpg" }),
5507      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:card", content: "summary" }),
5508      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:title", content: "Privacy Policy | SkillForge" }),
5509      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:description", content: "SkillForge's privacy policy — how we collect, use, and protect your personal information." })
5510    ] }),
5511    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "bg-[#4A7A8A] text-white py-14", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mx-auto max-w-7xl px-4 sm:px-6 lg:px-8 flex items-center gap-4", children: [
5512      /* @__PURE__ */ jsxRuntimeExports.jsx(Shield, { className: "w-9 h-9 flex-shrink-0 opacity-80" }),
5513      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
5514        /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-4xl font-bold", children: "Privacy Policy" }),
5515        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-white/75 mt-1 text-sm", children: "Last modified: April 27, 2026" })
5516      ] })
5517    ] }) }),
5518    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-14 bg-background", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mx-auto max-w-3xl px-4 sm:px-6 lg:px-8 prose prose-slate max-w-none", children: [
5519      /* @__PURE__ */ jsxRuntimeExports.jsxs(Section, { title: "What information do we collect?", children: [
5520        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "We collect information from you when you register on our site, place an order, subscribe to our newsletter, respond to a survey, or fill out a form." }),
5521        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "When ordering or registering on our site, as appropriate, you may be asked to enter your name, e-mail address, mailing address, phone number, or credit card information. You may, however, visit our site anonymously." })
5522      ] }),
5523      /* @__PURE__ */ jsxRuntimeExports.jsxs(Section, { title: "What do we use your information for?", children: [
5524        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "Any of the information we collect from you may be used in one of the following ways:" }),
5525        /* @__PURE__ */ jsxRuntimeExports.jsxs("ul", { children: [
5526          /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { children: [
5527            /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "To personalize your experience" }),
5528            " — your information helps us to better respond to your individual needs."
5529          ] }),
5530          /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { children: [
5531            /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "To improve our website" }),
5532            " — we continually strive to improve our website offerings based on the information and feedback we receive from you."
5533          ] }),
5534          /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { children: [
5535            /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "To improve customer service" }),
5536            " — your information helps us to more effectively respond to your customer service requests and support needs."
5537          ] }),
5538          /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { children: [
5539            /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "To process transactions" }),
5540            " — your information, whether public or private, will not be sold, exchanged, transferred, or given to any other company for any reason whatsoever, without your consent, other than for the express purpose of delivering the purchased product or service requested."
5541          ] }),
5542          /* @__PURE__ */ jsxRuntimeExports.jsx("li", { children: /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "To administer a contest, promotion, survey, or other site feature." }) }),
5543          /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { children: [
5544            /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "To send periodic emails" }),
5545            " — the email address you provide for order processing may be used to send you information and updates pertaining to your order, in addition to receiving occasional company news, updates, related product or service information, etc."
5546          ] })
5547        ] }),
5548        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground", children: "Note: If at any time you would like to unsubscribe from receiving future emails, we include detailed unsubscribe instructions at the bottom of each email." })
5549      ] }),
5550      /* @__PURE__ */ jsxRuntimeExports.jsxs(Section, { title: "How do we protect your information?", children: [
5551        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "We implement a variety of security measures to maintain the safety of your personal information when you place an order. We offer the use of a secure server. All supplied sensitive/credit information is transmitted via Secure Socket Layer (SSL) technology and then encrypted into our payment gateway provider's database, accessible only by those authorized with special access rights to such systems, who are required to keep the information confidential." }),
5552        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "After a transaction, your private information (credit cards, social security numbers, financials, etc.) will not be stored on our servers." })
5553      ] }),
5554      /* @__PURE__ */ jsxRuntimeExports.jsxs(Section, { title: "Do we use cookies?", children: [
5555        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "Yes. Cookies are small files that a site or its service provider transfers to your computer's hard drive through your web browser (if you allow) that enables the site's or service provider's systems to recognize your browser and capture and remember certain information." }),
5556        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "We use cookies to help us remember and process the items in your shopping cart and to understand and save your preferences for future visits." }),
5557        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "If you prefer, you can choose to have your computer warn you each time a cookie is being sent, or you can choose to turn off all cookies via your browser settings. Like most websites, if you turn your cookies off, some of our services may not function properly. However, you can still place orders by contacting customer service." })
5558      ] }),
5559      /* @__PURE__ */ jsxRuntimeExports.jsx(Section, { title: "Do we disclose any information to outside parties?", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. This does not include trusted third parties who assist us in operating our website, conducting our business, or servicing you, so long as those parties agree to keep this information confidential. We may also release your information when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or others' rights, property, or safety. However, non-personally identifiable visitor information may be provided to other parties for marketing, advertising, or other uses." }) }),
5560      /* @__PURE__ */ jsxRuntimeExports.jsx(Section, { title: "Third party links", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "Occasionally, at our discretion, we may include or offer third-party products or services on our website. These third-party sites have separate and independent privacy policies. We therefore have no responsibility or liability for the content and activities of these linked sites. Nonetheless, we seek to protect the integrity of our site and welcome any feedback about these sites." }) }),
5561      /* @__PURE__ */ jsxRuntimeExports.jsx(Section, { title: "California Online Privacy Protection Act Compliance", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "Because we value your privacy we have taken the necessary precautions to be in compliance with the California Online Privacy Protection Act. We therefore will not distribute your personal information to outside parties without your consent." }) }),
5562      /* @__PURE__ */ jsxRuntimeExports.jsx(Section, { title: "Children's Online Privacy Protection Act Compliance", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "We are in compliance with the requirements of COPPA (Children's Online Privacy Protection Act). We do not collect any information from anyone under 13 years of age. Our website, products, and services are all directed to people who are at least 13 years old or older." }) }),
5563      /* @__PURE__ */ jsxRuntimeExports.jsx(Section, { title: "Your Consent", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "By using our site, you consent to our privacy policy." }) }),
5564      /* @__PURE__ */ jsxRuntimeExports.jsxs(Section, { title: "Changes to our Privacy Policy", children: [
5565        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "If we decide to change our privacy policy, we will post those changes on this page and/or update the Privacy Policy modification date below." }),
5566        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground", children: "This policy was last modified on 4/27/2026." })
5567      ] }),
5568      /* @__PURE__ */ jsxRuntimeExports.jsxs(Section, { title: "Contacting Us", children: [
5569        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "If there are any questions regarding this privacy policy you may contact us using the information below." }),
5570        /* @__PURE__ */ jsxRuntimeExports.jsxs("address", { className: "not-italic text-sm space-y-1 mt-3 text-foreground", children: [
5571          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "font-semibold", children: "SkillForge" }),
5572          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "2118 Plum Grove Rd. #206" }),
5573          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: "Rolling Meadows, IL 60008 USA" }),
5574          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: /* @__PURE__ */ jsxRuntimeExports.jsx("a", { href: "mailto:[email protected]", className: "text-[#4A7A8A] hover:underline", children: "[email protected]" }) }),
5575          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: /* @__PURE__ */ jsxRuntimeExports.jsx("a", { href: "tel:+18009713203", className: "text-[#4A7A8A] hover:underline", children: "800-971-3203" }) })
5576        ] }),
5577        /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-6", children: [
5578          "You can also reach us via our",
5579          " ",
5580          /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/contact-us", className: "text-[#4A7A8A] hover:underline", children: "contact form" }),
5581          "."
5582        ] })
5583      ] })
5584    ] }) })
5585  ] });
5586}
5587function Section({
5588  title,
5589  children
5590}) {
5591  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mb-10", children: [
5592    /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-xl font-semibold text-foreground mb-3 pb-2 border-b border-border", children: title }),
5593    /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-muted-foreground space-y-3 text-sm leading-relaxed [&_ul]:list-disc [&_ul]:pl-5 [&_ul]:space-y-2 [&_strong]:text-foreground", children })
5594  ] });
5595}
5596const BENEFIT_ICONS = [CircleCheckBig, BookOpen, Users, Award, Calendar, CircleCheckBig];
5597const SITE_URL = "https://skillforge.com";
5598function groupAiCourses(courses) {
5599  const leadershipKeywords = ["agentic", "agenticai", "agz", "strategy", "governance", "executive", "leadership", "manager", "management", "bizbiz", "certnexus", "business leader", "transformation"];
5600  const devKeywords = ["developer", "development", "admin", "administrator", "it pro", "power automate", "power apps", "api", "technical", "engineering", "architect", "devops", "programming", "code", "coding"];
5601  const leadership = [];
5602  const dev = [];
5603  const business = [];
5604  for (const course of courses) {
5605    const t = course.title.toLowerCase();
5606    if (leadershipKeywords.some((kw) => t.includes(kw))) {
5607      leadership.push(course);
5608    } else if (devKeywords.some((kw) => t.includes(kw))) {
5609      dev.push(course);
5610    } else {
5611      business.push(course);
5612    }
5613  }
5614  const groups = [];
5615  if (business.length > 0) {
5616    groups.push({
5617      label: "For Business Users",
5618      description: "Practical AI skills for everyday professionals — learn to use ChatGPT, Claude, Copilot, and generative AI tools to work faster and smarter.",
5619      courses: business
5620    });
5621  }
5622  if (leadership.length > 0) {
5623    groups.push({
5624      label: "For Managers & Leadership",
5625      description: "Strategic AI training for leaders — evaluate AI initiatives, govern responsible use, and build an AI-ready organization.",
5626      courses: leadership
5627    });
5628  }
5629  if (dev.length > 0) {
5630    groups.push({
5631      label: "For Developers & IT Admins",
5632      description: "Technical AI training for builders and administrators — integrate AI into applications, automate workflows, and manage AI deployments.",
5633      courses: dev
5634    });
5635  }
5636  return groups;
5637}
5638function CourseCard({
5639  course
5640}) {
5641  return /* @__PURE__ */ jsxRuntimeExports.jsxs(Card, { className: "h-full flex flex-col hover:shadow-lg transition-all hover:-translate-y-1", children: [
5642    course.imageUrl && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "aspect-video overflow-hidden rounded-t-lg", children: /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: course.imageUrl, alt: course.title, className: "w-full h-full object-cover", width: 400, height: 225, loading: "lazy" }) }),
5643    /* @__PURE__ */ jsxRuntimeExports.jsxs(CardHeader, { children: [
5644      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 flex-wrap mb-1", children: [
5645        course.level && /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "secondary", children: course.level }),
5646        course.offersPostClassSupport && /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "outline", className: "text-xs border-primary/40 text-primary", children: "6-mo support" })
5647      ] }),
5648      /* @__PURE__ */ jsxRuntimeExports.jsx(CardTitle, { className: "text-xl leading-snug", children: course.title }),
5649      /* @__PURE__ */ jsxRuntimeExports.jsx(CardDescription, { className: "line-clamp-2 prose prose-sm max-w-none prose-p:my-0 prose-p:inline", dangerouslySetInnerHTML: {
5650        __html: course.description
5651      } })
5652    ] }),
5653    /* @__PURE__ */ jsxRuntimeExports.jsx(CardContent, { className: "flex-grow", children: course.duration && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 text-sm text-muted-foreground", children: [
5654      /* @__P
5654URE__ */ jsxRuntimeExports.jsx(Calendar, { className: "h-4 w-4 shrink-0" }),
5655      /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: course.duration })
5656    ] }) }),
5657    /* @__PURE__ */ jsxRuntimeExports.jsxs(CardFooter, { className: "flex items-center justify-between", children: [
5658      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-2xl font-bold text-foreground", children: [
5659        "$",
5660        parseFloat(course.price || "0").toFixed(2)
5661      ] }),
5662      /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: course.relativeUrl, children: "View Details" }) })
5663    ] })
5664  ] });
5665}
5666function CategoryPageTemplate({
5667  data: initialData,
5668  slug,
5669  canonicalPath
5670}) {
5671  const [data2, setData] = reactExports.useState(initialData);
5672  const [loading, setLoading] = reactExports.useState(!initialData);
5673  const [blogIndex, setBlogIndex] = reactExports.useState(0);
5674  const blogIntervalRef = reactExports.useRef(null);
5675  reactExports.useEffect(() => {
5676    if (initialData) {
5677      setData(initialData);
5678      setLoading(false);
5679      return;
5680    }
5681    setData(null);
5682    setLoading(true);
5683    let cancelled = false;
5684    fetch(`/api/category-pages/${encodeURIComponent(slug)}`).then((r) => r.ok ? r.json() : Promise.reject(r.status)).then((json) => {
5685      if (!cancelled) {
5686        setData({
5687          ...json,
5688          canonicalPath
5689        });
5690        setLoading(false);
5691      }
5692    }).catch(() => {
5693      if (!cancelled) setLoading(false);
5694    });
5695    return () => {
5696      cancelled = true;
5697    };
5698  }, [slug, canonicalPath, initialData]);
5699  reactExports.useEffect(() => {
5700    if (loading || !data2) return;
5701    const hash = window.location.hash.slice(1);
5702    if (!hash) return;
5703    const t = setTimeout(() => {
5704      const el = document.getElementById(hash);
5705      if (el) el.scrollIntoView({
5706        behavior: "smooth",
5707        block: "start"
5708      });
5709    }, 120);
5710    return () => clearTimeout(t);
5711  }, [loading, data2]);
5712  if (loading) {
5713    return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
5714      /* @__PURE__ */ jsxRuntimeExports.jsxs(Helmet, { children: [
5715        /* @__PURE__ */ jsxRuntimeExports.jsx("title", { children: "Loading… | SkillForge" }),
5716        /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "robots", content: "noindex, nofollow" })
5717      ] }),
5718      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-h-[60vh] flex items-center justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-muted-foreground text-lg animate-pulse", children: "Loading..." }) })
5719    ] });
5720  }
5721  if (!data2) {
5722    return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
5723      /* @__PURE__ */ jsxRuntimeExports.jsxs(Helmet, { children: [
5724        /* @__PURE__ */ jsxRuntimeExports.jsx("title", { children: "Training Courses | SkillForge" }),
5725        /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "description", content: "Browse instructor-led training courses at SkillForge." }),
5726        /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "robots", content: "noindex, nofollow" })
5727      ] }),
5728      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-h-[60vh] flex items-center justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center", children: [
5729        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground text-lg mb-4", children: "Category not found." }),
5730        /* @__PURE__ */ jsxRuntimeExports.jsx("a", { href: "/courses", className: "text-primary underline", children: "Browse all courses" })
5731      ] }) })
5732    ] });
5733  }
5734  const {
5735    name,
5736    pageTitle,
5737    pageIntro,
5738    metaDescription,
5739    benefits: benefits2,
5740    faq,
5741    courses,
5742    blogPosts
5743  } = data2;
5744  const canonicalUrl = `${SITE_URL}${canonicalPath}`;
5745  const ogImage = `${SITE_URL}/assets/skillforge-logo.jpg`;
5746  const prevBlog = () => {
5747    if (blogIntervalRef.current) clearInterval(blogIntervalRef.current);
5748    setBlogIndex((i) => (i - 1 + blogPosts.length) % blogPosts.length);
5749  };
5750  const nextBlog = () => {
5751    if (blogIntervalRef.current) clearInterval(blogIntervalRef.current);
5752    setBlogIndex((i) => (i + 1) % blogPosts.length);
5753  };
5754  const faqItems = faq ? parseFaqForJsonLd(faq) : [];
5755  return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
5756    /* @__PURE__ */ jsxRuntimeExports.jsxs(Helmet, { children: [
5757      /* @__PURE__ */ jsxRuntimeExports.jsxs("title", { children: [
5758        pageTitle,
5759        " | SkillForge"
5760      ] }),
5761      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "description", content: metaDescription || `Live instructor-led ${name} training courses. Small class sizes, expert instructors, hands-on practice.` }),
5762      /* @__PURE__ */ jsxRuntimeExports.jsx("link", { rel: "canonical", href: canonicalUrl }),
5763      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:title", content: `${pageTitle} | SkillForge` }),
5764      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:description", content: metaDescription || "" }),
5765      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:url", content: canonicalUrl }),
5766      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:type", content: "website" }),
5767      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:image", content: ogImage }),
5768      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:card", content: "summary_large_image" }),
5769      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:title", content: `${pageTitle} | SkillForge` }),
5770      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:description", content: metaDescription || "" }),
5771      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:image", content: ogImage }),
5772      /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify({
5773        "@context": "https://schema.org",
5774        "@type": "ItemList",
5775        name: pageTitle,
5776        description: metaDescription,
5777        url: canonicalUrl,
5778        numberOfItems: courses.length,
5779        itemListElement: courses.map((c, i) => {
5780          var _a2;
5781          return {
5782            "@type": "ListItem",
5783            position: i + 1,
5784            item: {
5785              "@type": "Course",
5786              name: c.title,
5787              url: `${SITE_URL}${c.relativeUrl}`,
5788              description: (_a2 = c.description) == null ? void 0 : _a2.replace(/<[^>]+>/g, "").slice(0, 300),
5789              provider: {
5790                "@type": "Organization",
5791                name: "SkillForge",
5792                url: SITE_URL
5793              },
5794              offers: {
5795                "@type": "Offer",
5796                price: c.price,
5797                priceCurrency: "USD",
5798                availability: "https://schema.org/InStock",
5799                url: `${SITE_URL}${c.relativeUrl}`
5800              }
5801            }
5802          };
5803        })
5804      }) }),
5805      /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify({
5806        "@context": "https://schema.org",
5807        "@type": "BreadcrumbList",
5808        itemListElement: [{
5809          "@type": "ListItem",
5810          position: 1,
5811          name: "Home",
5812          item: SITE_URL
5813        }, {
5814          "@type": "ListItem",
5815          position: 2,
5816          name: "Courses",
5817          item: `${SITE_URL}/courses`
5818        }, {
5819          "@type": "ListItem",
5820          position: 3,
5821          name,
5822          item: canonicalUrl
5823        }]
5824      }) }),
5825      faqItems.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify({
5826        "@context": "https://schema.org",
5827        "@type": "FAQPage",
5828        mainEntity: faqItems.map(({
5829          q,
5830          a
5831        }) => ({
5832          "@type": "Question",
5833          name: q,
5834          acceptedAnswer: {
5835            "@type": "Answer",
5836            text: a
5837          }
5838        }))
5839      }) })
5840    ] }),
5841    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "bg-gradient-to-br from-primary/10 via-background to-accent/10 py-12 px-4", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "max-w-4xl mx-auto", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(motion.div, { initial: {
5842      opacity: 1,
5843      y: 0
5844    }, animate: {
5845      opacity: 1,
5846      y: 0
5847    }, transition: {
5848      duration: 0.5
5849    }, children: [
5850      /* @__PURE__ */ jsxRuntimeExports.jsxs("nav", { className: "flex items-center gap-2 text-sm text-muted-foreground mb-4", "aria-label": "Breadcrumb", children: [
5851        /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/courses", className: "hover:text-primary transition-colors", children: "All Courses" }),
5852        /* @__PURE__ */ jsxRuntimeExports.jsx("span", { "aria-hidden": "true", children: "/" }),
5853        /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-foreground font-medium", children: name })
5854      ] }),
5855      /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-4xl md:text-5xl font-bold mb-4 text-foreground", children: pageTitle }),
5856      slug === "ai" && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mb-6", children: [
5857        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs font-semibold uppercase tracking-widest text-muted-foreground mb-2", children: "Jump to:" }),
5858        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-wrap gap-2", children: [{
5859          label: "Business Users",
5860          anchor: "For Business Users"
5861        }, {
5862          label: "Managers & Leadership",
5863          anchor: "For Managers & Leadership"
5864        }, {
5865          label: "Developers & IT Admins",
5866          anchor: "For Developers & IT Admins"
5867        }].map(({
5868          label,
5869          anchor
5870        }) => /* @__PURE__ */ jsxRuntimeExports.jsxs("a", { href: `#${encodeURIComponent(anchor)}`, className: "inline-flex items-center gap-1.5 rounded-full border border-primary/40 bg-background px-4 py-2 text-sm font-medium text-foreground hover:border-primary hover:text-primary transition-colors", children: [
5871          label,
5872          /* @__PURE__ */ jsxRuntimeExports.jsx(ArrowRight, { className: "h-3.5 w-3.5 opacity-60" })
5873        ] }, label)) })
5874      ] }),
5875      pageIntro && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "prose prose-lg max-w-none prose-p:text-muted-foreground prose-p:leading-relaxed prose-p:mb-5 prose-p:text-base prose-strong:text-foreground prose-strong:font-semibold prose-ul:text-muted-foreground prose-ul:mt-2 prose-li:my-1 prose-headings:text-foreground", dangerouslySetInnerHTML: {
5876        __html: pageIntro
5877      } }),
5878      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-6 flex flex-wrap gap-3", children: [
5879        /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { size: "lg", asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx("a", { href: "#courses", children: "View Courses" }) }),
5880        /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { size: "lg", variant: "outline", asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/contact-us", children: "Request Private Training" }) })
5881      ] })
5882    ] }) }) }),
5883    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { id: "courses", className: "py-20 px-4 bg-background", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto", children: [
5884      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mb-12", children: [
5885        /* @__PURE__ */ jsxRuntimeExports.jsxs("h2", { className: "text-3xl font-bold mb-3", children: [
5886          name,
5887          " Courses"
5888        ] }),
5889        /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-muted-foreground text-lg", children: [
5890          courses.length,
5891          " course",
5892          courses.length !== 1 ? "s" : "",
5893          " available — all taught live by expert instructors."
5894        ] })
5895      ] }),
5896      courses.length > 0 ? slug === "ai" ? (
5897        /* ── AI: grouped by audience ── */
5898        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-16", children: groupAiCourses(courses).map((group) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { id: encodeURIComponent(group.label), children: [
5899          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mb-8 pb-4 border-b border-border", children: [
5900            /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-2xl font-bold mb-2", children: group.label }),
5901            /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground", children: group.description })
5902          ] }),
5903          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8", children: group.courses.map((course) => /* @__PURE__ */ jsxRuntimeExports.jsx(CourseCard, { course }, course.id)) })
5904        ] }, group.label)) })
5905      ) : (
5906        /* ── All other categories: flat grid ── */
5907        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8", children: courses.map((course) => /* @__PURE__ */ jsxRuntimeExports.jsx(CourseCard, { course }, course.id)) })
5908      ) : /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center py-16 border border-dashed rounded-xl", children: [
5909        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground text-lg", children: "No courses found for this category yet." }),
5910        /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { className: "mt-4", asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/courses", children: "Browse All Courses" }) })
5911      ] })
5912    ] }) }),
5913    benefits2.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 px-4 bg-muted/40", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto", children: [
5914      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center mb-12", children: [
5915        /* @__PURE__ */ jsxRuntimeExports.jsxs("h2", { className: "text-3xl font-bold mb-3", children: [
5916          "Why Choose SkillForge for ",
5917          name,
5918          " Training?"
5919        ] }),
5920        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground text-lg max-w-2xl mx-auto", children: "We've been delivering expert-led training since 2010. Here's what sets us apart." })
5921      ] }),
5922      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6", children: benefits2.map((benefit, index) => {
5923        const Icon2 = BENEFIT_ICONS[index % BENEFIT_ICONS.length];
5924        return /* @__PURE__ */ jsxRuntimeExports.jsxs(Card, { className: "h-full border-0 shadow-sm bg-background", children: [
5925          /* @__PURE__ */ jsxRuntimeExports.jsx(CardHeader, { className: "pb-3", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3", children: [
5926            /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "p-2 rounded-lg bg-primary/10", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Icon2, { className: "h-5 w-5 text-primary" }) }),
5927            /* @__PURE__ */ jsxRuntimeExports.jsx(CardTitle, { className: "text-base font-semibold", children: benefit.title })
5928          ] }) }),
5929          /* @__PURE__ */ jsxRuntimeExports.jsx(CardContent, { children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground leading-relaxed", children: benefit.description }) })
5930        ] }, index);
5931      }) })
5932    ] }) }),
5933    blogPosts.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 px-4 bg-background", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-7xl mx-auto", children: [
5934      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-end justify-between mb-10", children: [
5935        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
5936          /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-3xl font-bold mb-2", children: "From the SkillForge Blog" }),
5937          /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-muted-foreground", children: [
5938            "Tips, tutorials, and insights on ",
5939            name,
5940            "."
5941          ] })
5942        ] }),
5943        blogPosts.length > 3 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
5944          /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { variant: "outline", size: "icon", onClick: prevBlog, "aria-label": "Previous post", children: /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronLeft, { className: "h-4 w-4" }) }),
5945          /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { variant: "outline", size: "icon", onClick: nextBlog, "aria-label": "Next post", children: /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "h-4 w-4" }) })
5946        ] })
5947      ] }),
5948      /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-6 overflow-hidden", children: [0, 1, 2].map((offset) => {
5949        const post = blogPosts[(blogIndex + offset) % blogPosts.length];
5950        if (!post) return null;
5951        return /* @__PURE__ */ jsxRuntimeExports.jsx(AnimatePresence, { mode: "wait", children: /* @__PURE__ */ jsxRuntimeExports.jsx(motion.div, { initial: {
5952          opacity: 1,
5953          x: 0
5954        }, animate: {
5955          opacity: 1,
5956          x: 0
5957        }, exit: {
5958          opacity: 0,
5959          x: -20
5960        }, transition: {
5961          duration: 0.35,
5962          delay: offset * 0.05
5963        }, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Card, { className: "h-full flex flex-col hover:shadow-md transition-shadow", children: [
5964          post.featuredImage && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "aspect-video overflow-hidden rounded-t-lg", children: /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: post.featuredImage, alt: post.title, className: "w-full h-full object-cover", width: 400, height: 225, loading: "lazy" }) }),
5965          /* @__PURE__ */ jsxRuntimeExports.jsxs(CardHeader, { className: "flex-grow", children: [
5966            /* @__PURE__ */ jsxRuntimeExports.jsx(CardTitle, { className: "text-base font-semibold leading-snug line-clamp-2", children: post.title }),
5967            post.excerpt && /* @__PURE__ */ jsxRuntimeExports.jsx(CardDescription, { className: "line-clamp-3 text-sm prose prose-sm max-w-none prose-p:my-0", dangerouslySetInnerHTML: {
5968              __html: post.excerpt
5969            } })
5970          ] }),
5971          /* @__PURE__ */ jsxRuntimeExports.jsx(CardFooter, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { variant: "outline", size: "sm", asChild: true, className: "w-full", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: `/${post.slug}`, children: "Read Article" }) }) })
5972        ] }) }) }, `${blogIndex}-${offset}`);
5973      }) }),
5974      blogPosts.length > 3 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center gap-2 mt-8", children: blogPosts.map((_, i) => /* @__PURE__ */ jsxRuntimeExports.jsx("button", { onClick: () => {
5975        if (blogIntervalRef.current) clearInterval(blogIntervalRef.current);
5976        setBlogIndex(i);
5977      }, className: `w-2 h-2 rounded-full transition-all ${i === blogIndex % blogPosts.length ? "bg-primary w-6" : "bg-muted-foreground/30"}`, "aria-label": `Go to post ${i + 1}` }, i)) })
5978    ] }) }),
5979    faq && /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-16 px-4 bg-muted/30", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-3xl mx-auto", children: [
5980      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3 mb-8", children: [
5981        /* @__PURE__ */ jsxRuntimeExports.jsx(CircleHelp, { className: "h-6 w-6 text-primary flex-shrink-0" }),
5982        /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-3xl font-bold", children: "Frequently Asked Questions" })
5983      ] }),
5984      /* @__PURE__ */ jsxRuntimeExports.jsx(FaqAccordion, { html: faq })
5985    ] }) }),
5986    /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 px-4 bg-primary text-primary-foreground", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-3xl mx-auto text-center", children: [
5987      /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-3xl font-bold mb-4", children: "Ready to Get Started?" }),
5988      /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-primary-foreground/80 text-lg mb-8", children: "Join thousands of professionals who've advanced their careers with SkillForge training." }),
5989      /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap justify-center gap-4", children: [
5990        /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { size: "lg", variant: "secondary", asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsxs("a", { href: "#courses", children: [
5991          "Browse ",
5992          name,
5993          " Courses"
5994        ] }) }),
5995        /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { size: "lg", variant: "outline", className: "border-primary-foreground/40 text-primary-foreground hover:bg-primary-foreground/10", asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/contact-us", children: "Talk to Us" }) })
5996      ] })
5997    ] }) })
5998  ] });
5999}
6000function CategoryPage$F() {
6001  const data2 = useLoaderData();
6002  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "ai", canonicalPath: "/course-categories/ai" });
6003}
6004function CategoryPage$E() {
6005  const data2 = useLoaderData();
6006  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "adobe", canonicalPath: "/course-categories/adobe" });
6007}
6008function CategoryPage$D() {
6009  const data2 = useLoaderData();
6010  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "acrobat", canonicalPath: "/course-categories/adobe/acrobat" });
6011}
6012function CategoryPage$C() {
6013  const data2 = useLoaderData();
6014  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "illustrator", canonicalPath: "/course-categories/adobe/illustrator" });
6015}
6016function CategoryPage$B() {
6017  const data2 = useLoaderData();
6018  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "indesign", canonicalPath: "/course-categories/adobe/indesign" });
6019}
6020function CategoryPage$A() {
6021  const data2 = useLoaderData();
6022  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "photoshop", canonicalPath: "/course-categories/adobe/photoshop" });
6023}
6024function CategoryPage$z() {
6025  const data2 = useLoaderData();
6026  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "business-skills", canonicalPath: "/course-categories/business-skills" });
6027}
6028function CategoryPage$y() {
6029  const data2 = useLoaderData();
6030  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "communication-skills", canonicalPath: "/course-categories/business-skills/communication-skills" });
6031}
6032function CategoryPage$x() {
6033  const data2 = useLoaderData();
6034  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "customer-service", canonicalPath: "/course-categories/business-skills/customer-service" });
6035}
6036function CategoryPage$w() {
6037  const data2 = useLoaderData();
6038  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "presentation-skills", canonicalPath: "/course-categories/business-skills/presentation-skills" });
6039}
6040function CategoryPage$v() {
6041  const data2 = useLoaderData();
6042  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "time-management", canonicalPath: "/course-categories/business-skills/time-management" });
6043}
6044function CategoryPage$u() {
6045  const data2 = useLoaderData();
6046  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "crystal-reports", canonicalPath: "/course-categories/crystal-reports" });
6047}
6048function CategoryPage$t() {
6049  const data2 = useLoaderData();
6050  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "introduction", canonicalPath: "/course-categories/crystal-reports/introduction" });
6051}
6052function CategoryPage$s() {
6053  const data2 = useLoaderData();
6054  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "intermediate", canonicalPath: "/course-categories/crystal-reports/intermediate" });
6055}
6056function CategoryPage$r() {
6057  const data2 = useLoaderData();
6058  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "microsoft", canonicalPath: "/course-categories/microsoft" });
6059}
6060function CategoryPage$q() {
6061  const data2 = useLoaderData();
6062  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "excel", canonicalPath: "/course-categories/microsoft/excel" });
6063}
6064function CategoryPage$p() {
6065  const data2 = useLoaderData();
6066  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "word", canonicalPath: "/course-categories/microsoft/word" });
6067}
6068function CategoryPage$o() {
6069  const data2 = useLoaderData();
6070  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "powerpoint", canonicalPath: "/course-categories/microsoft/powerpoint" });
6071}
6072function CategoryPage$n() {
6073  const data2 = useLoaderData();
6074  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "access", canonicalPath: "/course-categories/microsoft/access" });
6075}
6076function CategoryPage$m() {
6077  const data2 = useLoaderData();
6078  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "outlook", canonicalPath: "/course-categories/microsoft/outlook" });
6079}
6080function CategoryPage$l() {
6081  const data2 = useLoaderData();
6082  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "project", canonicalPath: "/course-categories/microsoft/project" });
6083}
6084function CategoryPage$k() {
6085  const data2 = useLoaderData();
6086  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "sharepoint", canonicalPath: "/course-categories/microsoft/sharepoint" });
6087}
6088function CategoryPage$j() {
6089  const data2 = useLoaderData();
6090  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "power-bi", canonicalPath: "/course-categories/microsoft/power-bi" });
6091}
6092function CategoryPage$i() {
6093  const data2 = useLoaderData();
6094  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "copilot", canonicalPath: "/course-categories/microsoft/copilot" });
6095}
6096function CategoryPage$h() {
6097  const data2 = useLoaderData();
6098  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "teams", canonicalPath: "/course-categories/microsoft/teams" });
6099}
6100function CategoryPage$g() {
6101  const data2 = useLoaderData();
6102  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "microsoft-technical", canonicalPath: "/course-categories/microsoft-technical" });
6103}
6104function CategoryPage$f() {
6105  const data2 = useLoaderData();
6106  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "azure", canonicalPath: "/course-categories/microsoft-technical/azure" });
6107}
6108function CategoryPage$e() {
6109  const data2 = useLoaderData();
6110  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "powershell", canonicalPath: "/course-categories/microsoft-technical/powershell" });
6111}
6112function CategoryPage$d() {
6113  const data2 = useLoaderData();
6114  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "microsoft-365", canonicalPath: "/course-categories/microsoft-technical/microsoft-365" });
6115}
6116function CategoryPage$c() {
6117  const data2 = useLoaderData();
6118  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "power-apps", canonicalPath: "/course-categories/microsoft-technical/power-apps" });
6119}
6120function CategoryPage$b() {
6121  const data2 = useLoaderData();
6122  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "power-automate", canonicalPath: "/course-categories/microsoft-technical/power-automate" });
6123}
6124function CategoryPage$a() {
6125  const data2 = useLoaderData();
6126  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "security", canonicalPath: "/course-categories/microsoft-technical/security" });
6127}
6128function CategoryPage$9() {
6129  const data2 = useLoaderData();
6130  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "project-management", canonicalPath: "/course-categories/project-management" });
6131}
6132function CategoryPage$8() {
6133  const data2 = useLoaderData();
6134  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "agile-and-scrum", canonicalPath: "/course-categories/project-management/agile-and-scrum" });
6135}
6136function CategoryPage$7() {
6137  const data2 = useLoaderData();
6138  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "project-management-training", canonicalPath: "/course-categories/project-management/project-management-training" });
6139}
6140function CategoryPage$6() {
6141  const data2 = useLoaderData();
6142  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "sql", canonicalPath: "/course-categories/sql" });
6143}
6144function CategoryPage$5() {
6145  const data2 = useLoaderData();
6146  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "sql-introduction", canonicalPath: "/course-categories/sql/sql-introduction" });
6147}
6148function CategoryPage$4() {
6149  const data2 = useLoaderData();
6150  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "sql-advanced", canonicalPath: "/course-categories/sql/sql-advanced" });
6151}
6152function CategoryPage$3() {
6153  const data2 = useLoaderData();
6154  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "introduction-to-sql-databases", canonicalPath: "/course-categories/sql/introduction-to-sql-databases" });
6155}
6156function CategoryPage$2() {
6157  const data2 = useLoaderData();
6158  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "tableau", canonicalPath: "/course-categories/tableau" });
6159}
6160function CategoryPage$1() {
6161  const data2 = useLoaderData();
6162  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "tableau-introduction", canonicalPath: "/course-categories/tableau/tableau-introduction" });
6163}
6164function CategoryPage() {
6165  const data2 = useLoaderData();
6166  return /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPageTemplate, { data: data2, slug: "tableau-intermediate", canonicalPath: "/course-categories/tableau/tableau-intermediate" });
6167}
6168let landingPages$1 = [];
6169function setLandingPages(pages2) {
6170  landingPages$1 = pages2;
6171}
6172function getPageBySlugUnfiltered(slug) {
6173  return landingPages$1.find((p) => p.slug === slug) || null;
6174}
6175const schemas = {
6176  data: {
6177    landingPages: arrayType(objectType({
6178      "id": stringType(),
6179      "slug": stringType(),
6180      "componentPath": stringType(),
6181      "startDate": stringType(),
6182      "endDate": stringType(),
6183      "status": stringType(),
6184      "campaignId": stringType()
6185    }))
6186  },
6187  pages: {
6188    microsoft_copilot_training: objectType({
6189      "hero": objectType({
6190        "badge": stringType(),
6191        "title": stringType(),
6192        "lead": stringType(),
6193        "supporting": stringType(),
6194        "cta": stringType()
6195      }),
6196      "benefits": objectType({
6197        "title": stringType(),
6198        "body": stringType(),
6199        "items": arrayType(objectType({
6200          "title": stringType(),
6201          "body": stringType(),
6202          "id": stringType()
6203        }))
6204      }),
6205      "learning": objectType({
6206        "title": stringType(),
6207        "body": stringType(),
6208        "outcomes": arrayType(objectType({
6209          "text": stringType(),
6210          "id": stringType()
6211        }))
6212      }),
6213      "details": objectType({
6214        "title": stringType(),
6215        "rows": arrayType(objectType({
6216          "label": stringType(),
6217          "value": stringType(),
6218          "id": stringType()
6219        })),
6220        "cta": stringType()
6221      }),
6222      "audience": objectType({
6223        "title": stringType(),
6224        "body": stringType(),
6225        "items": arrayType(objectType({
6226          "text": stringType(),
6227          "id": stringType()
6228        })),
6229        "asideLabel": stringType(),
6230        "asideTitle": stringType(),
6231        "asideBody": stringType()
6232      }),
6233      "courses": objectType({
6234        "title": stringType(),
6235        "body": stringType(),
6236        "items": arrayType(objectType({
6237          "title": stringType(),
6238          "description": stringType(),
6239          "href": stringType(),
6240          "id": stringType()
6241        })),
6242        "cta": stringType()
6243      }),
6244      "finalCta": objectType({
6245        "title": stringType(),
6246        "body": stringType(),
6247        "primaryCta": stringType(),
6248        "secondaryCta": stringType(),
6249        "questions": stringType(),
6250        "contact": stringType()
6251      })
6252    }),
6253    manual_viewer: objectType({
6254      "gate": objectType({
6255        "title": stringType(),
6256        "description": stringType(),
6257        "codePlaceholder": stringType(),
6258        "codeLabel": stringType(),
6259        "unlockButton": stringType()
6260      })
6261    })
6262  }
6263};
6264const identity = { parse: (v) => v };
6265const pages = {
6266  "manual_viewer": (((_a = schemas.pages) == null ? void 0 : _a.manual_viewer) ?? schemas.manual_viewer ?? identity).parse({
6267    "gate": {
6268      "title": "Access Required",
6269      "description": "Enter your access code to view this manual.",
6270      "codePlaceholder": "Enter access code",
6271      "codeLabel": "Access Code",
6272      "unlockButton": "Unlock Manual"
6273    }
6274  }),
6275  "microsoft_copilot_training": (((_b = schemas.pages) == null ? void 0 : _b.microsoft_copilot_training) ?? schemas.microsoft_copilot_training ?? identity).parse({
6276    "hero": {
6277      "badge": "Live Instructor-Led Training · Three Copilot Courses · $245 each",
6278      "title": "Microsoft Copilot training for the work you do every day",
6279      "lead": "Choose a focused, instructor-led course for Excel, PowerPoint, or finance workflows — and start using Copilot with greater clarity and confidence.",
6280      "supporting": "Live instructor. Small class. Real workplace scenarios. Leave with practical skills you can put to work right away.",
6281      "cta": "Explore the courses"
6282    },
6283    "benefits": {
6284      "title": "Why take Microsoft Copilot training?",
6285      "body": "Copilot is already part of the Microsoft 365 tools many professionals use every day. These focused courses show you how to get useful results while keeping your expertise and judgment in the loop.",
6286      "items": [
6287        {
6288          "title": "Save time on routine work",
6289          "body": "Use Copilot to create stronger first drafts, summarize information, and speed up tasks that normally take more time.",
6290          "id": "vygJ71nKoPZ4WF93g14rx"
6291        },
6292        {
6293          "title": "Work with more confidence",
6294          "body": "Learn how to give Copilot useful context, evaluate its output, and make the results fit the job at hand.",
6295          "id": "PzhIthm1Salhdmozvn-A9"
6296        },
6297        {
6298          "title": "Practical from the first hour",
6299          "body": "Follow real workplace examples with a live instructor, so you build habits you can use the same day.",
6300          "id": "dsK6PDUhQbSY2aIdN0nHs"
6301        }
6302      ]
6303    },
6304    "learning": {
6305      "title": "What you'll learn",
6306      "body": "The core Copilot practices that carry across Microsoft 365, taught in the order you would actually use them.",
6307      "outcomes": [
6308        {
6309          "text": "Write clear, specific prompts that get better results",
6310          "id": "tHElaMNTZfy-cw2MQeTL9"
6311        },
6312        {
6313          "text": "Use Copilot to draft, summarize, analyze, and refine work",
6314          "id": "FIGMUYkVr_gWPZS1X4Y9j"
6315        },
6316        {
6317          "text": "Review AI output for accuracy, context, and audience",
6318          "id": "2DgK_H-zIFs2o_32SP-TR"
6319        },
6320        {
6321          "text": "Apply Copilot in Excel and PowerPoint workflows",
6322          "id": "EEltNH-NYUIc-EAhlr7jY"
6323        },
6324        {
6325          "text": "Build repeatable habits for using Copilot responsibly",
6326          "id": "48YHqIiM1_1vT77E29f5e"
6327        }
6328      ]
6329    },
6330    "details": {
6331      "title": "Course details",
6332      "rows": [
6333        {
6334          "label": "Format",
6335          "value": "Live online or onsite at your location",
6336          "id": "YRTirwPKBEt1lKUA-rKkH"
6337        },
6338        {
6339          "label": "Duration",
6340          "value": "4 hours (half day)",
6341          "id": "mP0UaH9w7wp1YQbapRa-j"
6342        },
6343        {
6344          "label": "Class size",
6345          "value": "Small class sizes",
6346          "id": "bezsrDm0PNntl0h-46sVx"
6347        },
6348        {
6349          "label": "Level",
6350          "value": "Introductory",
6351          "id": "nxLPeQ77uz2BNHxsG7NB5"
6352        },
6353        {
6354          "label": "Price",
6355          "value": "$245 per person",
6356          "id": "PdbSI7ON9e8pcNf7Wi1xH"
6357        },
6358        {
6359          "label": "Copilot requirement",
6360          "value": "A paid Microsoft 365 Copilot add-on is required — not Microsoft 365 with Copilot Chat alone. Look for the Copilot icon floating on screen or in your app ribbon to confirm you have it.",
6361          "id": "WwIVElS16hC8TjNLFSC4U"
6362        }
6363      ],
6364      "cta": "View all courses"
6365    },
6366    "audience": {
6367      "title": "Who should attend?",
6368      "body": "These courses are designed for professionals who use Microsoft 365 and want practical, responsible ways to bring Copilot into their daily work.",
6369      "items": [
6370        {
6371          "text": "Excel users who want help with formulas, analysis, and reporting",
6372          "id": "Gdp_CmgbaApr70OF0CmTj"
6373        },
6374        {
6375          "text": "Finance professionals working with models, budgets, and data",
6376          "id": "oa-YfYia98Vo8DEgOyr1V"
6377        },
6378        {
6379          "text": "Professionals who create documents, summaries, or presentations",
6380          "id": "iVtboJVnbs0jXFMqUlLUd"
6381        },
6382        {
6383          "text": "Teams looking for a shared, thoughtful approach to Copilot",
6384          "id": "0UjXGrV3YdfqBKeMfltPO"
6385        }
6386      ],
6387      "asideLabel": "Not sure where to begin?",
6388      "asideTitle": "Start with the Microsoft application that is most central to your day.",
6389      "asideBody": "Choose Excel for data and reporting, Finance for advanced spreadsheet workflows, or PowerPoint for creating stronger presentations. No previous Copilot experience is required."
6390    },
6391    "courses": {
6392      "title": "Choose your Copilot course",
6393      "body": "Choose live online training or bring the course onsite to your location. Pick the course that fits the work you want to improve.",
6394      "items": [
6395        {
6396          "title": "Using Copilot in Excel",
6397          "description": "Use plain-English prompts for formulas, analysis, summaries, and spreadsheet tasks.",
6398          "href": "/courses/copilot-excel",
6399          "id": "pfCKaU5mcuPEH9Mo6Sz6m"
6400        },
6401        {
6402          "title": "Copilot in Excel for Finance Professionals",
6403          "description": "Apply Copilot to finance-focused Excel workflows, analysis, and reporting.",
6404          "href": "/courses/copilot-excel-finance",
6405          "id": "wiUPEHNugMgDXMUCpueLn"
6406        },
6407        {
6408          "title": "Using Copilot in PowerPoint",
6409          "description": "Create clearer presentation content, structure, and speaker-ready materials.",
6410          "href": "/courses/copilot-powerpoint",
6411          "id": "kcGZpOoQ3i55iNm51zw3b"
6412        }
6413      ],
6414      "cta": "View course dates and enroll"
6415    },
6416    "finalCta": {
6417      "title": "Ready to make Copilot useful?",
6418      "body": "Choose a live SkillForge course and build practical skills for the Microsoft 365 work you already do.",
6419      "primaryCta": "Explore Copilot courses",
6420      "secondaryCta": "Browse all courses",
6421      "questions": "Questions?",
6422      "contact": "Contact us"
6423    }
6424  })
6425};
6426const data = {
6427  "blog": (((_c = schemas.data) == null ? void 0 : _c.blog) ?? schemas.blog ?? identity).parse([
6428    {
6429      "slug": "copilot-excel-less-painful",
6430      "campaignId": "7jvkst38abi2",
6431      "id": "blog-post-nw31f4csvv8x",
6432      "title": "5 Ways Microsoft Copilot Makes Excel Less Painful",
6433      "publishedAt": "2026-09-07T04:00:00.000Z",
6434      "published": true,
6435      "tags": [
6436        "Microsoft Copilot",
6437        "Excel",
6438        "Productivity",
6439        "AI Tools",
6440        "Microsoft 365"
6441      ],
6442      "excerpt": "From writing formulas to summarizing data, here are five real ways Copilot in Excel cuts the tedious work out of your day — with step-by-step examples you can try right now.",
6443      "featuredImage": "/airo-assets/images/blog/copilot-excel-less-painful",
6444      "imageUrl": "/airo-assets/images/blog/copilot-excel-less-painful",
6445      "content": `If you've spent any time in Excel, you know the feeling: a deadline is approaching, your spreadsheet is a mess, and 
6445you're staring at a formula that refuses to cooperate. Microsoft Copilot won't fix your deadline, but it will fix the formula — and a lot more besides.
6446
6447Copilot is an AI assistant built directly into Excel as part of Microsoft 365. It understands natural language, which means you can describe what you want in plain English and it figures out the how. No syntax memorization. No tutorial rabbit holes. Just results.
6448
6449Here are five ways Copilot in Excel is changing how professionals work with data every day — along with concrete examples and prompts you can use immediately.
6450
6451---
6452
6453## 1. Write formulas in plain English
6454
6455This is the one that gets people. Instead of hunting through documentation to remember the exact syntax for \`XLOOKUP\`, \`SUMIFS\`, or \`INDEX/MATCH\`, you just describe what you want and Copilot writes the formula for you.
6456
6457### How to do it
6458
64591. Open your Excel workbook and make sure your data is formatted as a table (select your data range, then press **Ctrl + T**). Copilot works best with structured tables.
64602. Click the **Copilot** button in the Home ribbon (you'll see it on the far right).
64613. In the Copilot panel that opens, type your request in plain English.
64624. Review the formula Copilot suggests, then click **Insert Column** or **Copy** to use it.
6463
6464### Example prompts to try
6465
6466- *"Add a column that shows the total sales for each rep where the region is East."*
6467- *"Show me the average order value for customers who placed more than three orders."*
6468- *"Create a formula that flags any row where the margin is below 15%."*
6469
6470Copilot writes the formula, explains what it does, and lets you insert it with one click. If the result isn't quite right, you can refine it conversationally — type *"adjust that to only include orders from Q3"* and it updates accordingly. No Stack Overflow required.
6471
6472This is especially powerful for functions that are genuinely hard to remember: \`XLOOKUP\` with multiple conditions, nested \`IF\` statements, or anything involving \`INDIRECT\` or \`OFFSET\`. You describe the logic; Copilot handles the syntax.
6473
6474---
6475
6476## 2. Summarize large datasets instantly
6477
6478Got a table with thousands of rows and a manager asking for a quick read on what's in it? Copilot can give you a plain-language summary — key trends, outliers, totals, and patterns — without you building a single pivot table.
6479
6480### How to do it
6481
64821. With your data table selected, open the Copilot panel.
64832. Ask for a summary in plain language.
64843. Copilot returns a written analysis. You can follow up with more specific questions to drill deeper.
6485
6486### Example prompts to try
6487
6488- *"Summarize this data. What are the main trends?"*
6489- *"Which product category has the highest average revenue per order?"*
6490- *"What does this dataset tell me about customer behavior over the last six months?"*
6491- *"Give me a three-sentence executive summary of this sales data."*
6492
6493This is particularly useful when you inherit someone else's spreadsheet and need to get oriented quickly. Instead of spending 20 minutes reverse-engineering what the data represents and how it's structured, you ask Copilot and get a plain-English briefing in seconds.
6494
6495It's not a replacement for deep analysis — but for a quick "what am I looking at here?" it's remarkably fast, and it often surfaces things you'd have missed on a first pass.
6496
6497---
6498
6499## 3. Highlight and explain anomalies
6500
6501One of the more underrated Copilot capabilities is anomaly detection. You can ask it to scan your data and flag things that look unusual — a spike in a metric, a missing value pattern, a number that's way outside the norm — and it explains what it found in plain language.
6502
6503### How to do it
6504
65051. Open the Copilot panel with your data table active.
65062. Ask Copilot to look for anomalies, outliers, or unusual patterns.
65073. Copilot highlights the relevant rows or cells and explains what it found and why it flagged them.
6508
6509### Example prompts to try
6510
6511- *"Are there any outliers in the revenue column?"*
6512- *"Flag any rows where the order quantity seems unusually high compared to the rest of the data."*
6513- *"Are there any missing values or gaps in this dataset I should know about?"*
6514- *"Which months show a significant deviation from the average? Explain why they stand out."*
6515
6516The key difference from just sorting a column is context. Copilot doesn't just highlight a cell — it tells you *why* it's unusual relative to the rest of the data. For anyone doing financial review, operations reporting, or quality control, this alone can save significant time and catch errors that would otherwise slip through.
6517
6518---
6519
6520## 4. Clean messy data without formulas
6521
6522Inconsistent date formats. Mixed capitalization. Extra spaces. Duplicate entries. Columns that should be split. These are the small annoyances that eat up disproportionate amounts of time — and they're exactly the kind of tedious, repetitive work that Copilot handles well.
6523
6524### How to do it
6525
65261. Open the Copilot panel with your messy data table selected.
65272. Describe the problem in plain English.
65283. Copilot suggests the fix — often as a new column or a transformation you can apply with one click.
6529
6530### Example prompts to try
6531
6532- *"Standardize the date format in the Order Date column to MM/DD/YYYY."*
6533- *"The City column has inconsistent capitalization — fix it so every city name is title case."*
6534- *"Split the Full Name column into separate First Name and Last Name columns."*
6535- *"Find and remove duplicate rows based on the Customer ID column."*
6536- *"The phone numbers in column D have inconsistent formatting — strip everything except the digits."*
6537
6538Before Copilot, fixing these issues meant writing \`TRIM\`, \`PROPER\`, \`TEXT\`, \`LEFT\`, \`RIGHT\`, and \`SUBSTITUTE\` formulas — or doing it manually. Now you describe the problem and Copilot proposes the solution. You review it, apply it, and move on.
6539
6540---
6541
6542## 5. Generate charts and visualizations on demand
6543
6544Instead of manually selecting data ranges, choosing a chart type, adjusting axes, and tweaking labels, you can ask Copilot to create a visualization and it builds it for you. You can then refine it from there.
6545
6546### How to do it
6547
65481. Open the Copilot panel with your data table active.
65492. Describe the chart you want — what data to show, what type of chart, and any grouping or filtering.
65503. Copilot generates the chart and inserts it into your workbook. You can ask it to adjust the chart type, change colors, or add a title.
6551
6552### Example prompts to try
6553
6554- *"Create a bar chart comparing monthly revenue by region for Q3."*
6555- *"Show me a line chart of weekly sales over the past 12 months."*
6556- *"Build a pie chart showing the revenue breakdown by product category."*
6557- *"Create a chart that shows the top 10 customers by total spend."*
6558- *"Add a trendline to the sales chart and label the highest and lowest months."*
6559
6560This is particularly useful for people who need to produce reports regularly but aren't Excel power users. The chart creation workflow in Excel has always had a learning curve — choosing the right chart type, getting the data range right, formatting axes. Copilot collapses most of that into a single conversational request.
6561
6562---
6563
6564## Putting it all together: a real-world example
6565
6566Say you've just received a monthly sales export from your CRM — 3,000 rows, inconsistent formatting, and your manager wants a summary and a chart by end of day.
6567
6568Here's how you'd work through it with Copilot:
6569
65701. **Clean the data first.** *"Standardize the date format in the Sale Date column and fix the capitalization in the Region column."*
65712. **Get oriented.** *"Summarize this dataset. What are the top-performing regions and products?"*
65723. **Check for problems.** *"Are there any anomalies in the revenue figures I should flag before I send this to my manager?"*
65734. **Build the formula you need.** *"Add a column showing each rep's revenue as a percentage of their region's total."*
65745. **Create the chart.** *"Build a bar chart comparing total revenue by region for this month."*
6575
6576What used to take 90 minutes of formula-writing, pivot table building, and manual cleanup now takes 15. That's the real value proposition of Copilot in Excel — not that it does things you couldn't do before, but that it removes the friction from things you were already doing.
6577
6578---
6579
6580## What you need to get started
6581
6582To use Copilot in Excel, you need:
6583
6584- **Microsoft 365 Copilot license** — this is separate from a standard Microsoft 365 subscription. Check with your IT department or Microsoft 365 admin to confirm your organization has it enabled.
6585- **Excel for Microsoft 365** — the desktop app (Windows or Mac) or Excel on the web. Copilot is not available in older standalone versions of Excel.
6586- **Data formatted as a table** — Copilot works best when your data is in a proper Excel table (Ctrl + T). It can work with regular ranges, but table formatting gives it more context to work with.
6587
6588If you're not sure whether your organization has Copilot licenses, the easiest way to check is to open Excel and look for the Copilot button in the Home ribbon. If it's there and active, you're good to go.
6589
6590---
6591
6592The common thread across all five of these is time. Copilot doesn't replace Excel knowledge — it removes the friction that slows you down when you already know what you want to accomplish. The more you use it, the more natural it becomes to reach for it first.
6593
6594If you want to see all of this in action with a live instructor — working through real examples, asking questions, and building the habit in a structured environment — [our half-day Copilot in Excel training](/lp/copilot-excel-awareness?utm_source=blog-aab&utm_medium=blog&utm_campaign=cmp_wY-6NGGGDJAKBXsOgA3SMqQ-O8xcWnwRaIJJvzaf_xE&utm_content=act_glcwGqiyEzTcVJ68nyVScmLn8DcslC264oHXa5Y5Fws&utm_term=topic_copilot-excel) covers each of these areas hands-on. Sessions run from September through December 2026, with morning and afternoon options available. Maximum 20 participants per session so everyone gets time with the instructor.
6595
6596---
6597
6598## Take the same practical approach into PowerPoint
6599
6600Excel is often the fastest place to see Copilot’s value because the work is concrete: clean the data, ask a question, review a formula, and create a chart. The same prompt-and-review habit matters in PowerPoint.
6601
6602Try this simple workflow when you need to turn an approved Excel summary into a presentation:
6603
66041. **Start with reviewed numbers.** Confirm the totals, labels, and key takeaway in Excel before asking Copilot to help you communicate them.
66052. **Give Copilot a clear audience.** Ask for a concise outline for a leadership update, a customer discussion, or a team meeting.
66063. **Request a structure, not blind automation.** Try: *“Create a five-slide outline that explains the Q3 sales trend, the main driver, and the decision we need from leadership.”*
66074. **Review every claim and visual.** Check that the narrative matches the Excel source and that the slides use the right level of detail.
6608
6609That is the core skill across both courses: use Copilot to get a stronger starting point, then apply your judgment before anything is shared. [Explore live Copilot training for Excel and PowerPoint](/lp/microsoft-copilot-training?utm_source=blog-aab&utm_medium=blog&utm_campaign=cmp_hpuKwX7YPBDTy2b-6Mwu0SbMsMmGOGPd_bb7GgIF-4s&utm_content=act_te21S83Rg7FCVkaQWqnhmRrEb1a3n1ICiUi8z3ylpn8&utm_term=topic_copilot-excel-powerpoint-workflow).`
6610    },
6611    {
6612      "slug": "copilot-excel-worth-learning",
6613      "campaignId": "7jvkst38abi2",
6614      "id": "blog-post-1mhz5bt33hl2",
6615      "title": "Is Copilot in Excel Worth Learning? Here's What to Expect",
6616      "publishedAt": "2026-09-09T04:00:00.000Z",
6617      "published": true,
6618      "tags": [
6619        "Microsoft Copilot",
6620        "Excel",
6621        "Professional Development",
6622        "AI Tools",
6623        "Training"
6624      ],
6625      "excerpt": "Wondering whether learning Copilot in Excel is worth your time? Here's an honest look at what it can and can't do, who benefits most, and how to get up to speed quickly.",
6626      "featuredImage": "/airo-assets/images/blog/copilot-excel-worth-learning",
6627      "imageUrl": "/airo-assets/images/blog/copilot-excel-worth-learning",
6628      "content": `Every few years a new tool comes along that promises to change how you work. Most of them don't. Microsoft Copilot in Excel is different — but it's worth being clear-eyed about what "different" actually means before you invest time in learning it.
6629
6630This post gives you an honest look at what Copilot in Excel can do, who benefits most, what it won't do, and how to actually get started — including the specific steps to take on your first day using it.
6631
6632---
6633
6634## What Copilot in Excel actually does
6635
6636Copilot is an AI assistant built into Excel as part of the Microsoft 365 Copilot subscription. It sits in a panel on the right side of your screen and lets you interact with your spreadsheets using natural language.
6637
6638In practical terms, that means you can:
6639
6640- **Ask for formulas** by describing what you want in plain English, and Copilot writes the syntax for you
6641- **Get a plain-language summary** of what's in a dataset without building pivot tables
6642- **Request charts and visualizations** by describing what you want to show
6643- **Find anomalies and outliers** by asking Copilot to scan your data for unusual patterns
6644- **Clean and transform data** by describing the problem — inconsistent formatting, duplicate rows, columns that need splitting — and letting Copilot propose the fix
6645
6646It's not magic. It works best when your data is reasonably well-structured (ideally formatted as an Excel table) and your requests are clear and specific. But within those parameters, it's genuinely fast and useful in ways that matter for day-to-day work.
6647
6648---
6649
6650## Who benefits most from Copilot in Excel
6651
6652Not everyone will get the same value from Copilot. Here's an honest breakdown of who benefits most — and why.
6653
6654### Regular Excel users who aren't power users
6655
6656If you use Excel daily but don't consider yourself an expert, Copilot closes a lot of the gap. Tasks that previously required knowing advanced functions — \`XLOOKUP\`, nested \`IF\` statements, \`SUMPRODUCT\` — are now accessible through plain-English requests. You describe the logic; Copilot handles the syntax.
6657
6658This doesn't mean you can skip learning Excel fundamentals. Understanding what a formula is doing is still important, especially before you rely on it for financial calculations. But Copilot dramatically lowers the barrier to getting things done.
6659
6660### People who produce recurring reports
6661
6662If you build the same reports week after week — sales summaries, operational dashboards, financial reviews — Copilot can dramatically speed up the repetitive parts: summarizing data, generating charts, formatting outputs. The first time you build a report with Copilot's help, you'll notice the difference. By the third or fourth time, the workflow becomes second nature.
6663
6664### Anyone who inherits spreadsheets
6665
6666Getting oriented in someone else's workbook is tedious. You don't know 
6666what the columns mean, how the formulas work, or what the data represents. Copilot can explain what's in a dataset, describe the structure of a formula, and help you understand the logic behind a workbook you didn't build. What used to take 30 minutes of reverse-engineering can take five.
6667
6668### Finance, operations, and HR professionals
6669
6670These roles tend to involve a lot of data work that isn't highly technical but is time-consuming: reconciling figures, flagging anomalies, producing summaries, cleaning exports from other systems. Copilot handles a lot of that middle ground well — the work that's too repetitive to be interesting but too important to skip.
6671
6672### Managers and team leads who need data on demand
6673
6674If you regularly need to pull quick answers from data — "what's our close rate this quarter compared to last?" — but don't have time to build a proper analysis, Copilot lets you ask the question directly and get an answer in plain language. It's not a replacement for a data analyst, but for ad-hoc questions it's remarkably capable.
6675
6676---
6677
6678## What Copilot in Excel won't do
6679
6680Being honest about the limitations matters, because overpromising leads to frustration.
6681
6682**It won't replace deep Excel expertise.** Complex financial modeling, advanced VBA automation, Power Query transformations, and highly customized analytical work still require real Excel knowledge. Copilot is a productivity multiplier for people who already know what they want to accomplish — it's not a substitute for understanding the tool.
6683
6684**It requires a Microsoft 365 Copilot license.** This is a separate, paid add-on to Microsoft 365 — it's not included in standard Microsoft 365 Business or Enterprise plans. Your organization may or may not have it. Check with your IT department or Microsoft 365 admin before assuming you have access.
6685
6686**It's not infallible.** Copilot can generate formulas that look right but have subtle errors, especially with complex logic or ambiguous data structures. You should always review formulas before relying on them, particularly for financial calculations. Think of it as a capable assistant, not an authority.
6687
6688**It works best with structured data.** If your spreadsheet is a mess — merged cells, inconsistent column headers, data mixed with notes — Copilot will struggle. Cleaning up your data structure first pays dividends.
6689
6690**It doesn't learn your specific business context.** Copilot doesn't know that "Region 4" means the Southeast, or that your company's fiscal year starts in October. You'll need to provide that c
6690ontext in your prompts, or build it into your data structure.
6691
6692---
6693
6694## Is the learning curve steep?
6695
6696No. That's one of the more pleasant surprises about Copilot in Excel.
6697
6698If you're already comfortable in Excel, picking up Copilot is mostly about learning how to phrase requests effectively. The core skill is prompt clarity: being specific about what data you want to work with, what you want Copilot to do with it, and what the output should look like.
6699
6700A few principles that make a big difference:
6701
6702- **Be specific about columns and tables.** Instead of "summarize the data," say "summarize the Sales table, focusing on revenue by region."
6703- **State the output format you want.** "Add a new column" vs. "give me a summary in the chat panel" vs. "create a chart" — Copilot needs to know what form you want the answer in.
6704- **Iterate conversationally.** If the first result isn't quite right, don't start over — refine it. "Adjust that to only include Q3 data" or "change the chart to a line chart instead" works well.
6705- **Ask follow-up questions.** Copilot maintains context within a session. You can ask "why did you use SUMIFS instead of SUMPRODUCT there?" and get a real explanation.
6706
6707A half-day of focused training is enough to get genuinely productive with Copilot. The bigger adjustment is mental: learning to reach for Copilot first instead of defaulting to doing things manually. That habit shift takes a little time, but it comes quickly once you've seen what it can do.
6708
6709---
6710
6711## How to get started with Copilot in Excel: a step-by-step guide
6712
6713If you have access to Microsoft 365 Copilot and want to start using it in Excel today, here's exactly how to do it.
6714
6715### Step 1: Confirm you have access
6716
6717Open Excel and look for the **Copilot** button in the Home ribbon (far right side). If it's there and clickable, you're ready. If it's grayed out or missing, contact your Microsoft 365 admin — your organization may need to enable the license.
6718
6719### Step 2: Format your data as a table
6720
6721Copilot works significantly better with data formatted as an Excel table.
6722
67231. Select your data range (including headers).
67242. Press **Ctrl + T** (or go to Insert > Table).
67253. Make sure "My table has headers" is checked, then click OK.
67264. Give your table a descriptive name in the Table Design tab (e.g., "SalesData" instead of "Table1"). This helps Copilot reference it accurately.
6727
6728### Step 3: Open the Copilot panel
6729
6730Click the **Copilot** button in the Home ribbon. A panel opens on the right side of your screen. This is where you'll type your requests.
6731
6732### Step 4: Start with a summary
6733
6734For your first prompt, ask for a summary of your data. This is the lowest-risk way to see Copilot in action and verify it understands your dataset correctly.
6735
6736Try: *"Summarize this table. What are the main trends?"*
6737
6738Review what it returns. If it misunderstands something — references the wrong column, for example — that's useful feedback for how to structure your prompts going forward.
6739
6740### Step 5: Ask for a formula
6741
6742Next, try asking for a formula that you'd normally have to look up or think through carefully.
6743
6744Try: *"Add a column that calculates each row's revenue as a percentage of the total revenue in the table."*
6745
6746Copilot will write the formula and show you a preview. Click **Insert Column** to add it to your table. Check the results against a few rows manually to confirm it's correct.
6747
6748### Step 6: Request a visualization
6749
6750Finally, ask for a chart.
6751
6752Try: *"Create a bar chart showing total revenue by [your category column]."*
6753
6754Copilot generates the chart and inserts it into your workbook. You can follow up with refinements: *"Change it to a horizontal bar chart"* or *"Add data labels to each bar."*
6755
6756### Step 7: Build the habit
6757
6758The most important step is the one that happens after you close Excel: the next time you're about to write a formula from memory or build a pivot table manually, pause and ask Copilot first. Even if you know how to do it yourself, doing it through Copilot is usually faster — and over time, you'll develop a sense of exactly when to reach for it and when to work directly.
6759
6760---
6761
6762## A realistic picture of the productivity gain
6763
6764The productivity gains from Copilot in Excel aren't evenly distributed. Some tasks see dramatic improvements; others see little change.
6765
6766**High impact:**
6767- Writing complex formulas you'd otherwise need to look up
6768- Summarizing large datasets for quick briefings
6769- Cleaning and standardizing messy data exports
6770- Generating charts for recurring reports
6771- Getting oriented in an unfamiliar workbook
6772
6773**Moderate impact:**
6774- Formatting and layout tasks
6775- Simple calculations you already know how to do
6776- Building pivot tables (Copilot can help, but pivot tables aren't hard once you know them)
6777
6778**Low or no impact:**
6779- Complex financial models with custom logic
6780- VBA macros and automation
6781- Power Query transformations
6782- Highly customized analytical work
6783
6784If a significant portion of your Excel time falls into the high-impact category — and for most business professionals it does — then Copilot is worth learning. The ROI is real and measurable.
6785
6786---
6787
6788## The bottom line
6789
6790If your organization has Microsoft 365 Copilot licenses and you spend meaningful time in Excel, learning to use Copilot effectively is one of the higher-ROI investments you can make in your own productivity right now. The skill gap between people who use it well and people who don't is real and growing.
6791
6792The good news is that the learning curve is genuinely shallow. A half-day of focused, hands-on training is enough to get productive — and the skills transfer immediately to your actual work.
6793
6794If you want a structured introduction with a live instructor, [our Copilot in Excel half-day training](/lp/copilot-excel-awareness?utm_source=blog-aab&utm_medium=blog&utm_campaign=cmp_wY-6NGGGDJAKBXsOgA3SMqQ-O8xcWnwRaIJJvzaf_xE&utm_content=act_OKsyC0_j0_psKnCMtEfQi1b2Qenq3-0Qu8t4E9AsYa8&utm_term=topic_copilot-excel) is designed exactly for this — practical, instructor-led, and focused on the skills that matter most in day-to-day work. Sessions are available from September through December 2026, with morning and afternoon options and a maximum of 20 participants per session.
6795
6796
6797---
6798
6799## How Excel and PowerPoint skills work together
6800
6801Many real assignments do not end when the spreadsheet is finished. You analyze the numbers in Excel, explain the result in PowerPoint, and then answer questions from the people making decisions. Copilot can support each stage, but only when you use a deliberate workflow.
6802
6803### A simple handoff from analysis to presentation
6804
68051. **Use Excel to test the story.** Ask Copilot to summarize a table, identify trends, and flag exceptions. Verify the findings yourself.
68062. **Write down the takeaway.** Before opening PowerPoint, state the point in one sentence: what changed, why it matters, and what decision is needed.
68073. **Ask for a presentation outline.** In PowerPoint, try: *“Create a short executive presentation that explains this finding, the supporting evidence, and the recommended next step.”*
68084. **Refine for the audience.** Ask Copilot to make the language clearer, shorten crowded slides, or create speaker notes — then check that it has not changed the meaning.
6809
6810Learning both Copilot in Excel and Copilot in PowerPoint helps you move from data to a clear message without treating the AI output as final. [Explore the live Excel and PowerPoint Copilot courses](/lp/microsoft-copilot-training?utm_source=blog-aab&utm_medium=blog&utm_campaign=cmp_hpuKwX7YPBDTy2b-6Mwu0SbMsMmGOGPd_bb7GgIF-4s&utm_content=act_2O8-s1fVv-0o4tnyUsm4Oj6K5BtVPSIMM4R6ceNvtNw&utm_term=topic_copilot-excel-powerpoint-workflow).`
6811    },
6812    {
6813      "slug": "microsoft-copilot-confidence",
6814      "campaignId": "7jvkst38abi2",
6815      "id": "blog-post-da73kvvloya8",
6816      "title": "Build Confidence with Microsoft Copilot",
6817      "publishedAt": "2026-09-11T04:00:00.000Z",
6818      "published": true,
6819      "tags": [
6820        "Microsoft Copilot",
6821        "AI Adoption",
6822        "Microsoft 365",
6823        "Workplace Learning"
6824      ],
6825      "excerpt": "A practical framework for helping teams move from curiosity about Microsoft Copilot to confident, responsible everyday use.",
6826      "featuredImage": "/airo-assets/images/blog/microsoft-copilot-confidence",
6827      "author": "SkillForge Team",
6828      "category": "Workplace Learning",
6829      "seoTitle": "Build Confidence with Microsoft Copilot",
6830      "seoDescription": "Help your team adopt Microsoft Copilot with practical training, thoughtful review, and everyday workplace examples.",
6831      "content": "Most teams do not need another reminder that artificial intelligence is changing workplace tools. What they need is a sensible way to decide where Microsoft Copilot fits, how to use it responsibly, and how to avoid wasting time on output that does not help.\n\nConfidence is built through practice. A clear learning plan gives professionals permission to try useful tasks, ask better questions, and improve results before they reach a colleague or customer.\n\n## Begin with a clear purpose\n\nCopilot adoption often stalls when the goal is too broad. “Use AI more” is not practical instruction. A stronger starting point connects the tool to a real challenge: reducing time spent preparing a recurring update, organizing a project summary, or improving a first draft.\n\nAsk teams to identify tasks that are frequent, time-consuming, and easy to review. Those are usually better candidates than work that is highly sensitive or entirely unfamiliar.\n\n## Teach people how to supply context\n\nCopilot does not see the full situation unless you provide it. Better outcomes come from explaining the relevant information, desired format, audience, and limits. A request to summarize material should state which source to use, how much detail to retain, and what the reader needs to do next.\n\n### Practice the prompt-and-review loop\n\nA helpful routine looks like this:\n\n1. Describe the task and audience clearly.\n2. Provide the source or context Copilot needs.\n3. Ask for a defined format, such as a short brief or presentation outline.\n4. Review the response against the original material.\n5. Refine the request when the result is 
6831incomplete or off target.\n\nThis loop is more valuable than memorizing a list of “perfect prompts.” It teaches people how to think with the tool while keeping responsibility for the final work.\n\n## Make review visible\n\nFast output is only useful when it is accurate and appropriate. Teams should expect to check Copilot’s work, not treat the first answer as finished. This is particularly important for numbers, claims, policy-sensitive language, and content that represents the organization externally.\n\nA simple shared standard helps: verify facts, remove anything unsupported, adjust language for the audience, and use professional judgment before sharing. When leaders model this behavior, it reinforces that responsible use is part of good work.\n\n## Learn through familiar Microsoft 365 scenarios\n\nConfidence grows faster when examples resemble the work people already perform. In Excel, teams might explore a well-structured data set, identify trends, or create a starting point for a report. In PowerPoint, they might build a narrative outline from a project brief and improve slide clarity. In documents, they can use Copilot to propose a first draft, then add their expertise and voice.\n\nThe common thread is not a flashy demonstration. It is seeing a real task move forward with less friction and the same attention to quality.\n\n## Share what works without forcing one workflow\n\nDifferent roles need different approaches. A finance professional, project manager, and communications lead will not use Copilot in identical ways. What they can share is the practice behind strong results: provide relevant context, make a specific request, review carefully, and keep improving.\n\nEncourage people to share effective tasks, prompts they refined, and review steps that prevented mistakes. This creates a library of useful habits while allowing each role to retain its own expertise.\n\n## Turn curiosity into capability\n\nMicrosoft Copilot is most valuable when it supports thoughtful work, not when it simply generates more text. Practical training gives professionals structure to experiment with purpose, confidence to question what they see, and skills to apply the tool where it matters.\n\nStart with the work your team already does. Choose a manageable task, make the outcome clear, and practice the prompt-and-review loop together. Over time, that is how curiosity becomes dependable capability.\n\nLooking for a practical place to start? [Explore SkillForge Microsoft Copilot training](/lp/microsoft-copilot-training?utm_source=blog-aab&utm_medium=blog&utm_campaign=cmp_hpuKwX7YPBDTy2b-6Mwu0SbMsMmGOGPd_bb7GgIF-4s&utm_content=act_cxwgk6wYv5PNlCRDMFi32feqSlhLuHWExt-YdXDPCz4&utm_term=topic_copilot-confidence).\n\n\n---\n\n## Put confidence into practice: two starter workflows\n\nA useful way to build confidence is to start with a small, familiar task and make review part of the process. These two workflows give teams a repeatable place to begin.\n\n### In Excel: turn a table into a checked insight\n\n1. Format the data as a table and make sure column names are clear.\n2. Ask Copilot: *“Summarize the trends in this table and identify any unusual changes by month.”*\n3. Follow up: *“Show the figures that support the most important trend.”*\n4. Check the result against the workbook before using it in a report or decision.\n\n### In PowerPoint: turn an approved idea into a clear story\n\n1. Start with a verified finding, a rough outline, or approved source material.\n2. Ask Copilot: *“Create a concise five-slide structure for explaining this result to a non-technical audience.”*\n3. Request revisions for tone, length, or speaker notes.\n4. Confirm that every slide reflects the source and matches the audience’s needs.\n\nThe goal is not to hand work over to Copilot. It is to use its first draft as a faster starting point while your team remains accountable for the final answer. [Build these habits in live Copilot training for Excel and PowerPoint](/lp/microsoft-copilot-training?utm_source=blog-aab&utm_medium=blog&utm_campaign=cmp_hpuKwX7YPBDTy2b-6Mwu0SbMsMmGOGPd_bb7GgIF-4s&utm_content=act_cxwgk6wYv5PNlCRDMFi32feqSlhLuHWExt-YdXDPCz4&utm_term=topic_copilot-excel-powerpoint-workflow)."
6832    },
6833    {
6834      "slug": "microsoft-copilot-training-value",
6835      "campaignId": "7jvkst38abi2",
6836      "id": "blog-post-332j8fme5ilx",
6837      "title": "Where Microsoft Copilot Training Delivers Value",
6838      "publishedAt": "2026-09-13T04:00:00.000Z",
6839      "published": true,
6840      "tags": [
6841        "Microsoft Copilot",
6842        "Microsoft 365",
6843        "Professional Development",
6844        "AI Training"
6845      ],
6846      "excerpt": "See where practical Microsoft Copilot training can support better work, stronger judgment, and more confident use across your team.",
6847      "featuredImage": "/airo-assets/images/blog/microsoft-copilot-training-value",
6848      "author": "SkillForge Team",
6849      "category": "Professional Development",
6850      "seoTitle": "Where Microsoft Copilot Training Delivers Value",
6851      "seoDescription": "Learn where practical Microsoft Copilot training can deliver value for business professionals and team
6851s.",
6852      "content": "Microsoft Copilot can support better everyday work, but value does not come from access alone. It comes from practical skill, clear expectations, and good judgment. Training gives teams a shared starting point for using Copilot with the Microsoft 365 tools they already know.\n\n## Start with work that repeats\n\nThe best place to begin is usually not the most impressive use case. It is the task that comes up often enough to matter: a weekly report, a client update, a project recap, or a presentation outline. Copilot can help create momentum while you remain responsible for the final result.\n\nUseful starting points include:\n\n- Turning meeting notes into clear follow-up actions\n- Preparing a first draft from existing source material\n- Finding themes in a long document or structured data set\n- Building an outline for a presentation\n- Rephrasing content for a different audience\n\n## Better prompts create better starting points\n\nA useful prompt explains the desired outcome, audience, source information, constraints, and format. Rather than asking Copilot to simply write an email, identify the readers, the decision they need to make, and the tone the message needs. You own the message; Copilot helps you create an informed first version faster.\n\n### Give the tool context and a result\n\nWhen people practice with familiar workplace scenarios, prompting becomes a repeatable habit rather than a novelty. They can see how a small amount of relevant context changes the quality of a result and learn how to refine a response when it misses the mark.\n\n## Use Copilot to support judgment\n\nCopilot can summarize, organize, and propose. It cannot know every business nuance, policy requirement, or relationship consideration behind your work. Review is essential, especially for data, customer communications, financial material, and high-stakes decisions.\n\nA strong review routine is straightforward:\n\n1. Check facts against source material.\n2. Confirm names, numbers, and dates.\n3. Adjust the tone for the intended audience.\n4. Remove unsupported claims or confidential detail.\n5. Add the experience and context only a person can provide.\n\n## Match learning to real Microsoft tools\n\nThe most useful Copilot training connects directly with actual workflows. Excel users may want to examine patterns and improve reporting. PowerPoint users may need help organizing a story and shaping clearer slides. Across Microsoft 365, professionals need a dependable approach for drafting and refining communication.\n\nShared training helps a team build a common language for prompts, review, and appropriate use. It creates better conversations about where Copilot can save time without weakening quality.\n\n## Make the first step practical\n\nChoose one frequent task, define what good output looks like, and practice giving Copilot the right context. Review the result, improve the prompt, and notice where the tool helps. The goal is not to use Copilot for everything. The goal is to use it well when it can help.\n\nReady to help your team build those skills? [Explore SkillForge Microsoft Copilot training](/lp/microsoft-copilot-training?utm_source=blog-aab&utm_medium=blog&utm_campaign=cmp_hpuKwX7YPBDTy2b-6Mwu0SbMsMmGOGPd_bb7GgIF-4s&utm_content=act_8evb50pUI9kc1fJTtWHcA8mP3r0_wJ3db17WzazosQI&utm_term=topic_copilot-training-value).\n\n\n---\n\n## How to choose a first Copilot workflow\n\nThe best first use case is small enough to review quickly and common enough to repeat. Start with work that already has a clear owner and a clear definition of “good.”\n\n### Choose Excel when the question begins with data\n\nUse the Excel course when your team spends time cleaning reports, writing formulas, finding patterns, or translating a table into a summary. A practical first exercise is to ask Copilot for a trend summary, verify it against the source, then request a chart that supports the verified conclusion.\n\n### Choose PowerPoint when the question is how to communicate\n\nUse the PowerPoint course when your team needs to turn approved ideas or analysis into clearer slides. Start by asking Copilot for an outline tailored to a specific audie
6852nce, then refine the slide language and speaker notes while checking every statement against the source material.\n\n### Use a repeatable review checklist\n\nBefore sharing any Copilot-assisted work, ask:\n\n- Is the source information current and complete?\n- Did I give Copilot enough context about the audience and outcome?\n- Can I verify the figures, claims, and wording?\n- Does the final Excel analysis or PowerPoint presentation reflect my professional judgment?\n\nThis approach turns Copilot from a novelty into a useful part of everyday work. [Explore live Copilot training for Excel and PowerPoint](/lp/microsoft-copilot-training?utm_source=blog-aab&utm_medium=blog&utm_campaign=cmp_hpuKwX7YPBDTy2b-6Mwu0SbMsMmGOGPd_bb7GgIF-4s&utm_content=act_8evb50pUI9kc1fJTtWHcA8mP3r0_wJ3db17WzazosQI&utm_term=topic_copilot-excel-powerpoint-workflow)."
6853    }
6854  ]),
6855  "landingPages": (((_d = schemas.data) == null ? void 0 : _d.landingPages) ?? schemas.landingPages ?? identity).parse([
6856    {
6857      "id": "lp-yrifcprb5i55",
6858      "slug": "copilot-excel-awareness",
6859      "componentPath": "./copilot-excel-awareness.tsx",
6860      "startDate": "2026-08-25",
6861      "endDate": "2026-09-22",
6862      "status": "scheduled",
6863      "campaignId": "sbzbrajv8ujs"
6864    },
6865    {
6866      "id": "lp-4zkc57q5v6mw",
6867      "slug": "microsoft-copilot-training",
6868      "componentPath": "./microsoft-copilot-training.tsx",
6869      "startDate": "2026-09-07",
6870      "endDate": "2026-10-13",
6871      "status": "published",
6872      "campaignId": "7jvkst38abi2"
6873    }
6874  ])
6875};
6876const manual_viewer = pages.manual_viewer;
6877const microsoft_copilot_training = pages.microsoft_copilot_training;
6878const landingPages = data.landingPages;
6879function formatSessionDate(startDate) {
6880  return new Intl.DateTimeFormat("en-US", {
6881    month: "long",
6882    day: "numeric",
6883    year: "numeric",
6884    timeZone: "UTC"
6885  }).format(new Date(startDate));
6886}
6887function formatSessionTime(session) {
6888  return `${session.startTime} – ${session.endTime} ${session.timezone}`;
6889}
6890const outcomes = ["Use plain-English prompts to generate formulas and functions instantly", "Summarize and analyze large datasets without pivot tables", "Automate repetitive tasks — no macros or VBA required", "Spot trends and anomalies with AI-powered insights", "Clean and transform messy data in seconds"];
6891const testimonials = [{
6892  name: "Rachel M.",
6893  role: "Financial Analyst",
6894  quote: "I used to spend half my Monday building reports. After this course I have them done before my first coffee.",
6895  stars: 5
6896}, {
6897  name: "David K.",
6898  role: "Operations Manager",
6899  quote: "The instructor kept it practical. Every example was something I could use the same afternoon.",
6900  stars: 5
6901}, {
6902  name: "Priya S.",
6903  role: "HR Business Partner",
6904  quote: "I was skeptical about AI tools but this course made Copilot feel completely approachable.",
6905  stars: 5
6906}];
6907function CopilotExcelAwarenessPage() {
6908  const enrollUrl = "/courses/copilot-excel";
6909  const loaderData = useLoaderData();
6910  const [sessions, setSessions] = reactExports.useState((loaderData == null ? void 0 : loaderData.sessions) ?? null);
6911  reactExports.useEffect(() => {
6912    if (sessions !== null) return;
6913    let active = true;
6914    fetch("/api/sessions?courseId=115").then((response) => response.ok ? response.json() : Promise.reject()).then((data2) => {
6915      if (!active || !Array.isArray(data2)) return;
6916      const grouped = data2.filter(({
6917        session
6918      }) => session.status !== "cancelled" && session.status !== "completed").reduce((groups, item) => {
6919        const date = formatSessionDate(item.session.startDate);
6920        const time = formatSessionTime(item.session);
6921        const existing = groups.find((group) => group.date === date);
6922        if (existing) {
6923          if (!existing.times.includes(time)) existing.times.push(time);
6924        } else {
6925          groups.push({
6926            date,
6927            times: [time]
6928          });
6929        }
6930        return groups;
6931      }, []);
6932      setSessions(grouped);
6933    }).catch(() => {
6934      if (active) setSessions([]);
6935    });
6936    return () => {
6937      active = false;
6938    };
6939  }, [sessions]);
6940  return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
6941    /* @__PURE__ */ jsxRuntimeExports.jsxs(Helmet, { children: [
6942      /* @__PURE__ */ jsxRuntimeExports.jsx("title", { children: "Using Copilot in Excel — Half-Day Live Training — SkillForge" }),
6943      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "description", content: "Learn to use Microsoft Copilot in Excel in just 4 hours. Live, instructor-led online training. Sessions from September 2026. Only $245. Max 20 seats." }),
6944      /* @__PURE__ */ jsxRuntimeExports.jsx("link", { rel: "canonical", href: "https://skillforge.com/lp/copilot-excel-awareness" }),
6945      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:title", content: "Using Copilot in Excel — Half-Day Live Training | SkillForge" }),
6946      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:description", content: "Stop spending hours on spreadsheets. Learn Microsoft Copilot in Excel in a focused half-day live class. Sessions from Sep 1, 2026." }),
6947      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:type", content: "website" })
6948    ] }),
6949    /* @__PURE__ */ jsxRuntimeExports.jsxs("main", { className: "bg-background", children: [
6950      /* @__PURE__ */ jsxRuntimeExports.jsxs("section", { className: "relative overflow-hidden", children: [
6951        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-cover bg-center", style: {
6952          backgroundImage: "url(/airo-assets/images/pages/lp/copilot-excel-awareness/hero)"
6953        } }),
6954        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 pointer-events-none bg-foreground/75" }),
6955        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative container mx-auto px-6 py-24 md:py-32 max-w-5xl", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-2xl", children: [
6956          /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { className: "mb-5 text-xs px-3 py-1 font-semibold bg-primary text-primary-foreground", children: "Half-Day Live Training · Online · $245" }),
6957          /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-4xl md:text-5xl font-bold text-background leading-tight mb-5", children: "Using Copilot in Excel" }),
6958          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xl text-background/85 mb-4 leading-relaxed font-medium", children: "A focused 4-hour class that shows you exactly how to use Microsoft Copilot inside Excel — from writing formulas with plain English to analyzing data without pivot tables." }),
6959          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-base text-background/70 mb-8 leading-relaxed", children: "Live instructor. Small class. Real spreadsheets. You'll leave with skills you can put to work the same afternoon." }),
6960          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap gap-5 mb-8 text-sm text-background/70", children: [
6961            /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "flex items-center gap-1.5", children: [
6962              /* @__PURE__ */ jsxRuntimeExports.jsx(Monitor, { className: "w-4 h-4" }),
6963              " Online, instructor-led"
6964            ] }),
6965            /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "flex items-center gap-1.5", children: [
6966              /* @__PURE__ */ jsxRuntimeExports.jsx(Clock, { className: "w-4 h-4" }),
6967              " 4 hours"
6968            ] }),
6969            /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "flex items-center gap-1.5", children: [
6970              /* @__PURE__ */ jsxRuntimeExports.jsx(Users, { className: "w-4 h-4" }),
6971              " Max 20 seats"
6972            ] })
6973          ] }),
6974          /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, size: "lg", className: "text-base font-semibold", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: enrollUrl, children: [
6975            "Enroll now ",
6976            /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "w-4 h-4 ml-1" })
6977          ] }) })
6978        ] }) })
6979      ] }),
6980      /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-16 bg-muted/40 border-b border-border", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "container mx-auto px-6 max-w-5xl", children: [
6981        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center mb-12", children: [
6982          /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-3xl font-bold text-foreground mb-3", children: "Why take this course?" }),
6983          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground max-w-2xl mx-auto", children: "Copilot is already inside Excel for most Microsoft 365 users — but most people don't know how to use it effectively. This course closes that gap in half a day." })
6984        ] }),
6985        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-6", children: [{
6986          icon: /* @__PURE__ */ jsxRuntimeExports.jsx(Zap, { className: "w-6 h-6 text-primary" }),
6987          title: "Save hours every week",
6988          body: "Tasks that used to take 30 minutes — building formulas, cleaning data, summarizing tables — take seconds with Copilot. You'll feel the difference immediately."
6989        }, {
6990          icon: /* @__PURE__ */ jsxRuntimeExports.jsx(ChartNoAxesColumn, { className: "w-6 h-6 text-primary" }),
6991          title: "Analyze data without the complexity",
6992          body: "Ask Copilot to spot trends, flag anomalies, or summarize a dataset in plain English. No pivot tables, no advanced functions — just answers."
6993        }, {
6994          icon: /* @__PURE__ */ jsxRuntimeExports.jsx(RefreshCw, { className: "w-6 h-6 text-primary" }),
6995          title: "Practical from the first hour",
6996          body: "Every exercise uses real-world spreadsheet scenarios. You follow along with Copilot active, so you build muscle memory — not just notes."
6997        }].map((card) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-background rounded-xl border border-border p-6", children: [
6998          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mb-4", children: card.icon }),
6999          /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "font-semibold text-foreground mb-2", children: card.title }),
7000          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground text-sm leading-relaxed", children: card.body })
7001        ] }, card.title)) })
7002      ] }) }),
7003      /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-16 bg-background border-b border-border", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "container mx-auto px-6 max-w-5xl", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-12 items-start", children: [
7004        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
7005          /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-3xl font-bold text-foreground mb-2", children: "What you'll learn" }),
7006          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground mb-8", children: "The course covers the core Copilot capabilities that Excel users reach for most — taught in the order you'd actually use them." }),
7007          /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { className: "space-y-3", children: outcomes.map((item) => /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { className: "flex items-start gap-3", children: [
7008            /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { className: "w-5 h-5 mt-0.5 shrink-0 text-primary" }),
7009            /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-foreground", children: item })
7010          ] }, item)) })
7011        ] }),
7012        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "rounded-2xl overflow-hidden border border-border shadow-sm", children: [
7013          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-muted px-6 py-5 border-b border-border", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "font-semibold text-foreground", children: "Course details" }) }),
7014          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "divide-y divide-border", children: [{
7015            label: "Course",
7016            value: "Using Copilot in Excel"
7017          }, {
7018            label: "Duration",
7019            value: "4 hours (half day)"
7020          }, {
7021            label: "Format",
7022            value: "Live, instructor-led online"
7023          }, {
7024            label: "Class size",
7025            value: "Max 20 participants"
7026          }, {
7027            label: "Level",
7028            value: "Introductory"
7029          }, {
7030            label: "Price",
7031            value: "$245 per person"
7032          }, {
7033            label: "Prerequisite",
7034            value: "Basic Excel familiarity"
7035          }].map(({
7036            label,
7037            value
7038          }) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex justify-between px-6 py-3 text-sm", children: [
7039            /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-muted-foreground", children: label }),
7040            /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-medium text-foreground text-right", children: value })
7041          ] }, label)) }),
7042          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "px-6 py-5 bg-muted/40", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, size: "sm", className: "w-full font-semibold", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: enrollUrl, children: [
7043            "Enroll now ",
7044            /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "w-4 h-4 ml-1" })
7045          ] }) }) })
7046        ] })
7047      ] }) }) }),
7048      /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-16 bg-muted/40 border-b border-border", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "container mx-auto px-6 max-w-5xl", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid md:grid-cols-2 gap-12 items-center", children: [
7049        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
7050          /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-3xl font-bold text-foreground mb-4", children: "Who should attend?" }),
7051          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground mb-6", children: "This course is designed for anyone who uses Excel regularly and wants to get more done in less time. You don't need to be an Excel expert — you just need to be comfortable opening a spreadsheet." }),
7052          /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { className: "space-y-2", children: ["Analysts who build reports and want to speed up the process", "Finance and operations professionals who live in spreadsheets", "Managers who need quick data summaries without the manual work", "Anyone with Microsoft 365 who hasn't explored Copilot yet"].map((item) => /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { className: "flex items-start gap-3 text-sm text-foreground", children: [
7053            /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { className: "w-4 h-4 mt-0.5 shrink-0 text-primary" }),
7054            /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: item })
7055          ] }, item)) })
7056        ] }),
7057        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-background rounded-2xl border border-border p-8", children: [
7058          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-primary mb-2", children: "Not sure if this is right for you?" }),
7059          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-foreground font-semibold text-lg mb-3", children: "If you use Excel more than twice a week, this course will pay for itself in the first day back at your desk." }),
7060          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground text-sm", children: "The only prerequisite is basic Excel familiarity — knowing how to open a file, enter data, and navigate cells. Copilot experience is not required." })
7061        ] })
7062      ] }) }) }),
7063      /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-16 bg-background border-b border-border", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "container mx-auto px-6 max-w-5xl", children: [
7064        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center mb-10", children: [
7065          /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-3xl font-bold text-foreground mb-3", children: "Upcoming sessions" }),
7066          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground", children: "All sessions run online. Choose the date and time that fits your schedule." })
7067        ] }),
7068        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 mb-8", children: sessions === null ? /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "col-span-full text-center text-sm text-muted-foreground", children: "Loading upcoming sessions…" }) : sessions.length > 0 ? sessions.map((s) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-muted/40 rounded-xl border border-border p-5", children: [
7069          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 mb-3", children: [
7070            /* @__PURE__ */ jsxRuntimeExports.jsx(Calendar, { className: "w-4 h-4 shrink-0 text-primary" }),
7071            /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-semibold text-foreground text-sm", children: s.date })
7072          ] }),
7073          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-1", children: s.times.map((t) => /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-xs text-muted-foreground flex items-center gap-1.5", children: [
7074            /* @__PURE__ */ jsxRuntimeExports.jsx(Clock, { className: "w-3 h-3 shrink-0" }),
7075            " ",
7076            t
7077          ] }, t)) })
7078        ] }, s.date)) : /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "col-span-full text-center text-sm text-muted-foreground", children: "New sessions are being scheduled. View the course page for the latest availability." }) })
7079      ] }) }),
7080      /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-16 bg-muted/40 border-b border-border", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "container mx-auto px-6 max-w-5xl", children: [
7081        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center mb-10", children: [
7082          /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-3xl font-bold text-foreground mb-3", children: "What attendees say" }),
7083          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground", children: "Hear from professionals who've taken the course." })
7084        ] }),
7085        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-6", children: testimonials.map((t) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-background rounded-xl border border-border p-6", children: [
7086          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex gap-0.5 mb-4", children: Array.from({
7087            length: t.stars
7088          }).map((_, i) => /* @__PURE__ */ jsxRuntimeExports.jsx(Star, { className: "w-4 h-4 fill-current text-primary" }, i)) }),
7089          /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-foreground mb-4 leading-relaxed", children: [
7090            '"',
7091            t.quote,
7092            '"'
7093          ] }),
7094          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
7095            /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "font-semibold text-foreground text-sm", children: t.name }),
7096            /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground text-xs", children: t.role })
7097          ] })
7098        ] }, t.name)) })
7099      ] }) }),
7100      /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "py-20 bg-primary", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "container mx-auto px-6 max-w-3xl text-center", children: [
7101        /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-3xl md:text-4xl font-bold text-primary-foreground mb-4", children: "Ready to get more out of Excel?" }),
7102        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-primary-foreground/80 text-lg mb-8", children: "Seats are limited to 20 per session. Enroll today and choose the date that works for you." }),
7103        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-col sm:flex-row gap-4 justify-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, size: "lg", variant: "secondary", className: "text-base font-semibold", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: enrollUrl, children: [
7104          "View all sessions ",
7105          /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "w-4 h-4 ml-1" })
7106        ] }) }) })
7107      ] }) })
7108    ] })
7109  ] });
7110}
7111function MicrosoftCopilotTrainingPage({
7112  startDate,
7113  endDate
7114}) {
7115  const [searchParams] = useSearchParams();
7116  const configuredStart = startDate ? startDate + "T00:00:00Z" : "";
7117  const configuredEnd = endDate ? endDate + "T23:59:59Z" : "";
7118  const previewStart = searchParams.get("__preview_start");
7119  const previewEnd = searchParams.get("__preview_end");
7120  const isPreviewState = Boolean(previewStart && previewEnd);
7121  const activeStart = isPreviewState ? previewStart : configuredStart;
7122  const activeEnd = isPreviewState ? previewEnd : configuredEnd;
7123  const now = Date.now();
7124  const startMs = new Date(activeStart).getTime();
7125  const endMs = new Date(activeEnd).getTime();
7126  const hasStarted = Number.isNaN(startMs) || now >= startMs;
7127  const hasEnded = !Number.isNaN(endMs) && now >= endMs;
7128  const pageUrl = "https://skillforge.com/lp/microsoft-copilot-training";
7129  const heroImage = "/airo-assets/images/pages/lp/microsoft-copilot-training/hero";
7130  const schema = {
7131    "@context": "https://schema.org",
7132    "@type": "WebPage",
7133    name: "Microsoft Copilot Training | SkillForge",
7134    url: pageUrl,
7135    isPartOf: {
7136      "@id": "https://skillforge.com/#website"
7137    },
7138    about: {
7139      "@id": "https://skillforge.com/#organization"
7140    }
7141  };
7142  return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
7143    /* @__PURE__ */ jsxRuntimeExports.jsxs(Helmet, { children: [
7144      /* @__PURE__ */ jsxRuntimeExports.jsx("title", { children: "Microsoft Copilot Training | SkillForge" }),
7145      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "description", content: "Build practical Microsoft Copilot skills through live online or onsite training for Excel, Finance, and PowerPoint from SkillForge." }),
7146      /* @__PURE__ */ jsxRuntimeExports.jsx("link", { rel: "canonical", href: pageUrl }),
7147      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:title", content: "Microsoft Copilot Training | SkillForge" }),
7148      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:description", content: "Practical live Copilot training for Excel, finance, and PowerPoint workflows." }),
7149      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:type", content: "website" }),
7150      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:url", content: pageUrl }),
7151      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { property: "og:image", content: "https://skillforge.com" + heroImage }),
7152      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:card", content: "summary_large_image" }),
7153      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:title", content: "Microsoft Copilot Training | SkillForge" }),
7154      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:description", content: "Practical live Copilot training for Excel, finance, and PowerPoint workflows." }),
7155      /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "twitter:image", content: "https://skillforge.com" + heroImage }),
7156      /* @__PURE__ */ jsxRuntimeExports.jsx("script", { type: "application/ld+json", children: JSON.stringify(schema) })
7157    ] }),
7158    hasEnded ? /* @__PURE__ */ jsxRuntimeExports.jsx("main", { className: "bg-background py-24", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("section", { className: "mx-auto max-w-2xl px-6 text-center", children: [
7159      /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-4xl font-bold text-foreground", children: "Build practical Microsoft Copilot skills" }),
7160      /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mt-5 text-muted-foreground", children: "This focused training window has ended, but SkillForge courses are available year-round." }),
7161      /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, className: "mt-8", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/courses", children: "Explore courses" }) })
7162    ] }) }) : !hasStarted ? /* @__PURE__ */ jsxRuntimeExports.jsx("main", { className: "bg-background py-24", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("section", { className: "mx-auto max-w-2xl px-6 text-center", children: [
7163      /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-4xl font-bold text-foreground", children: "Practical Microsoft Copilot training is coming soon" }),
7164      /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mt-5 text-muted-foreground", children: "Get ready to learn how Copilot can support the work you already do in Microsoft 365." }),
7165      /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, className: "mt-8", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/courses", children: "Browse current courses" }) })
7166    ] }) }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("main", { className: "bg-background", children: [
7167      /* @__PURE__ */ jsxRuntimeExports.jsxs("section", { className: "relative overflow-hidden", children: [
7168        /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: heroImage, alt: "Business team using productivity software in an office", width: "1600", height: "900", loading: "eager", fetchPriority: "high", className: "absolute inset-0 h-full w-full object-cover" }),
7169        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "pointer-events-none absolute inset-0 bg-gradient-to-r from-gray-900/90 to-gray-900/55" }),
7170        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "relative container mx-auto max-w-5xl px-6 py-24 md:py-32", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-2xl", children: [
7171          /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { className: "mb-5 bg-primary px-3 py-1 text-xs font-semibold text-primary-foreground", children: microsoft_copilot_training.hero.badge }),
7172          /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "mb-5 text-4xl font-bold leading-tight text-background md:text-5xl", style: {
7173            whiteSpace: "pre-line"
7174          }, children: microsoft_copilot_training.hero.title }),
7175          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mb-4 text-xl font-medium leading-relaxed text-background", style: {
7176            whiteSpace: "pre-line"
7177          }, children: microsoft_copilot_training.hero.lead }),
7178          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mb-8 text-base leading-relaxed text-background", style: {
7179            whiteSpace: "pre-line"
7180          }, children: microsoft_copilot_training.hero.supporting }),
7181          /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mb-8 flex flex-wrap gap-5 text-sm text-background", children: [
7182            /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "flex items-center gap-1.5", children: [
7183              /* @__PURE__ */ jsxRuntimeExports.jsx(Monitor, { className: "h-4 w-4" }),
7184              "Online or onsite"
7185            ] }),
7186            /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "flex items-center gap-1.5", children: [
7187              /* @__PURE__ */ jsxRuntimeExports.jsx(Clock, { className: "h-4 w-4" }),
7188              "4 hours per course"
7189            ] }),
7190            /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "flex items-center gap-1.5", children: [
7191              /* @__PURE__ */ jsxRuntimeExports.jsx(Users, { className: "h-4 w-4" }),
7192              "Small class sizes"
7193            ] })
7194          ] }),
7195          /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, size: "lg", className: "text-base font-semibold", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: "#courses", children: [
7196            microsoft_copilot_training.hero.cta,
7197            /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "ml-1 h-4 w-4" })
7198          ] }) })
7199        ] }) })
7200      ] }),
7201      /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "border-b border-border bg-muted py-16", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "container mx-auto max-w-5xl px-6", children: [
7202        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mb-12 text-center", children: [
7203          /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "mb-3 text-3xl font-bold text-foreground", style: {
7204            whiteSpace: "pre-line"
7205          }, children: microsoft_copilot_training.benefits.title }),
7206          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mx-auto max-w-2xl text-muted-foreground", style: {
7207            whiteSpace: "pre-line"
7208          }, children: microsoft_copilot_training.benefits.body })
7209        ] }),
7210        /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "grid grid-cols-1 gap-6 md:grid-cols-3", children: microsoft_copilot_training.benefits.items.map((item, index) => /* @__PURE__ */ jsxRuntimeExports.jsxs("article", { className: "rounded-xl border border-border bg-background p-6", children: [
7211          index === 0 ? /* @__PURE__ */ jsxRuntimeExports.jsx(Zap, { className: "mb-4 h-6 w-6 text-primary" }) : index === 1 ? /* @__PURE__ */ jsxRuntimeExports.jsx(ChartNoAxesColumn, { className: "mb-4 h-6 w-6 text-primary" }) : /* @__PURE__ */ jsxRuntimeExports.jsx(RefreshCw, { className: "mb-4 h-6 w-6 text-primary" }),
7212          /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "mb-2 font-semibold text-foreground", style: {
7213            whiteSpace: "pre-line"
7214          }, children: item.title }),
7215          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm leading-relaxed text-muted-foreground", style: {
7216            whiteSpace: "pre-line"
7217          }, children: item.body })
7218        ] }, item.id)) })
7219      ] }) }),
7220      /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "border-b border-border bg-background py-16", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "container mx-auto grid max-w-5xl items-start gap-12 px-6 md:grid-cols-2", children: [
7221        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
7222          /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "mb-2 text-3xl font-bold text-foreground", style: {
7223            whiteSpace: "pre-line"
7224          }, children: microsoft_copilot_training.learning.title }),
7225          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mb-8 text-muted-foreground", style: {
7226            whiteSpace: "pre-line"
7227          }, children: microsoft_copilot_training.learning.body }),
7228          /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { className: "flex flex-col gap-3", children: microsoft_copilot_training.learning.outcomes.map((outcome) => /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { className: "flex items-start gap-3", children: [
7229            /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { className: "mt-0.5 h-5 w-5 shrink-0 text-primary" }),
7230            /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-foreground", style: {
7231              whiteSpace: "pre-line"
7232            }, children: outcome.text })
7233          ] }, outcome.id)) })
7234        ] }),
7235        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "overflow-hidden rounded-2xl border border-border shadow-sm", children: [
7236          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border-b border-border bg-muted px-6 py-5", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "font-semibold text-foreground", style: {
7237            whiteSpace: "pre-line"
7238          }, children: microsoft_copilot_training.details.title }) }),
7239          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "divide-y divide-border", children: microsoft_copilot_training.details.rows.map((row) => /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start justify-between gap-6 px-6 py-3 text-sm", children: [
7240            /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "shrink-0 text-muted-foreground", style: {
7241              whiteSpace: "pre-line"
7242            }, children: row.label }),
7243            /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "max-w-sm text-right font-medium leading-relaxed text-foreground", style: {
7244              whiteSpace: "pre-line"
7245            }, children: row.value })
7246          ] }, row.id)) }),
7247          /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-muted px-6 py-5", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, size: "sm", className: "w-full font-semibold", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: "#courses", children: [
7248            microsoft_copilot_training.details.cta,
7249            /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "ml-1 h-4 w-4" })
7250          ] }) }) })
7251        ] })
7252      ] }) }),
7253      /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "border-b border-border bg-muted py-16", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "container mx-auto grid max-w-5xl items-center gap-12 px-6 md:grid-cols-2", children: [
7254        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
7255          /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "mb-4 text-3xl font-bold text-foreground", style: {
7256            whiteSpace: "pre-line"
7257          }, children: microsoft_copilot_training.audience.title }),
7258          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mb-6 text-muted-foreground", style: {
7259            whiteSpace: "pre-line"
7260          }, children: microsoft_copilot_training.audience.body }),
7261          /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { className: "flex flex-col gap-2", children: microsoft_copilot_training.audience.items.map((item) => /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { className: "flex items-start gap-3 text-sm text-foreground", children: [
7262            /* @__PURE__ */ jsxRuntimeExports.jsx(CircleCheckBig, { className: "mt-0.5 h-4 w-4 shrink-0 text-primary" }),
7263            /* @__PURE__ */ jsxRuntimeExports.jsx("span", { style: {
7264              whiteSpace: "pre-line"
7265            }, children: item.text })
7266          ] }, item.id)) })
7267        ] }),
7268        /* @__PURE__ */ jsxRuntimeExports.jsxs("aside", { className: "rounded-2xl border border-border bg-background p-8", children: [
7269          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mb-2 text-sm font-semibold text-primary", style: {
7270            whiteSpace: "pre-line"
7271          }, children: microsoft_copilot_training.audience.asideLabel }),
7272          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mb-3 text-lg font-semibold text-foreground", style: {
7273            whiteSpace: "pre-line"
7274          }, children: microsoft_copilot_training.audience.asideTitle }),
7275          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-muted-foreground", style: {
7276            whiteSpace: "pre-line"
7277          }, children: microsoft_copilot_training.audience.asideBody })
7278        ] })
7279      ] }) }),
7280      /* @__PURE__ */ jsxRuntimeExports.jsx("section", { id: "courses", className: "border-b border-border bg-background py-16", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "container mx-auto max-w-5xl px-6", children: [
7281        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mb-10 text-center", children: [
7282          /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "mb-3 text-3xl font-bold text-foreground", style: {
7283            whiteSpace: "pre-line"
7284          }, children: microsoft_copilot_training.courses.title }),
7285          /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground", style: {
7286            whiteSpace: "pre-line"
7287          }, children: microsoft_copilot_training.courses.body })
7288        ] }),
7289        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: [
7290          /* @__PURE__ */ jsxRuntimeExports.jsxs("article", { className: "flex flex-col rounded-xl border border-border bg-muted p-5", children: [
7291            /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-lg font-semibold text-foreground", style: {
7292              whiteSpace: "pre-line"
7293            }, children: microsoft_copilot_training.courses.items[0].title }),
7294            /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mt-3 flex-1 text-sm leading-relaxed text-muted-foreground", style: {
7295              whiteSpace: "pre-line"
7296            }, children: microsoft_copilot_training.courses.items[0].description }),
7297            /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, variant: "outline", className: "mt-6 w-full", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: "/courses/copilot-excel", children: [
7298              "View course ",
7299              /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "ml-1 h-4 w-4" })
7300            ] }) })
7301          ] }),
7302          /* @__PURE__ */ jsxRuntimeExports.jsxs("article", { className: "flex flex-col rounded-xl border border-border bg-muted p-5", children: [
7303            /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-lg font-semibold text-foreground", style: {
7304              whiteSpace: "pre-line"
7305            }, children: microsoft_copilot_training.courses.items[1].title }),
7306            /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mt-3 flex-1 text-sm leading-relaxed text-muted-foreground", style: {
7307              whiteSpace: "pre-line"
7308            }, children: microsoft_copilot_training.courses.items[1].description }),
7309            /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, variant: "outline", className: "mt-6 w-full", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: "/courses/copilot-excel-finance", children: [
7310              "View course ",
7311              /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "ml-1 h-4 w-4" })
7312            ] }) })
7313          ] }),
7314          /* @__PURE__ */ jsxRuntimeExports.jsxs("article", { className: "flex flex-col rounded-xl border border-border bg-muted p-5", children: [
7315            /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-lg font-semibold text-foreground", style: {
7316              whiteSpace: "pre-line"
7317            }, children: microsoft_copilot_training.courses.items[2].title }),
7318            /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mt-3 flex-1 text-sm leading-relaxed text-muted-foreground", style: {
7319              whiteSpace: "pre-line"
7320            }, children: microsoft_copilot_training.courses.items[2].description }),
7321            /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, variant: "outline", className: "mt-6 w-full", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: "/courses/copilot-powerpoint", children: [
7322              "View course ",
7323              /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "ml-1 h-4 w-4" })
7324            ] }) })
7325          ] })
7326        ] })
7327      ] }) }),
7328      /* @__PURE__ */ jsxRuntimeExports.jsx("section", { className: "bg-primary py-20", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "container mx-auto max-w-3xl px-6 text-center", children: [
7329        /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "mb-4 text-3xl font-bold text-primary-foreground md:text-4xl", style: {
7330          whiteSpace: "pre-line"
7331        }, children: microsoft_copilot_training.finalCta.title }),
7332        /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mb-8 text-lg text-primary-foreground", style: {
7333          whiteSpace: "pre-line"
7334        }, children: microsoft_copilot_training.finalCta.body }),
7335        /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col justify-center gap-4 sm:flex-row", children: [
7336          /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, size: "lg", variant: "secondary", className: "text-base font-semibold", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: "#courses", children: [
7337            microsoft_copilot_training.finalCta.primaryCta,
7338            /* @__PURE__ */ jsxRuntimeExports.jsx(ChevronRight, { className: "ml-1 h-4 w-4" })
7339          ] }) }),
7340          /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { asChild: true, size: "lg", variant: "outline", className: "border-primary-foreground bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/courses", children: microsoft_copilot_training.finalCta.secondaryCta }) })
7341        ] }),
7342        /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "mt-6 text-sm text-primary-foreground", children: [
7343          /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { style: {
7344            whiteSpace: "pre-line"
7345          }, children: [
7346            microsoft_copilot_training.finalCta.questions,
7347            " "
7348          ] }),
7349          /* @__PURE__ */ jsxRuntimeExports.jsx(Link, { to: "/contact", className: "underline", children: microsoft_copilot_training.finalCta.contact }),
7350          "."
7351        ] })
7352      ] }) })
7353    ] })
7354  ] });
7355}
7356const normalize = (p) => p.startsWith("./") ? p : `./${p.replace(/^\//, "")}`;
7357const pageModules = {
7358  "./copilot-excel-awareness.tsx": {
7359    default: CopilotExcelAwarenessPage
7360  },
7361  "./microsoft-copilot-training.tsx": {
7362    default: MicrosoftCopilotTrainingPage
7363  }
7364};
7365const manifest = landingPages ?? [];
7366const componentLoaders = {};
7367for (const entry of manifest) {
7368  const mod = pageModules[normalize(entry.componentPath)];
7369  if (mod == null ? void 0 : mod.default) componentLoaders[entry.slug] = mod.default;
7370}
7371setLandingPages(manifest.map((e) => ({
7372  id: e.id,
7373  slug: e.slug,
7374  startDate: e.startDate,
7375  endDate: e.endDate,
7376  status: e.status
7377})));
7378function LandingPage() {
7379  const {
7380    slug
7381  } = useParams();
7382  const canonicalUrl = `https://skillforge.com/lp/${slug ?? ""}`;
7383  const page = slug ? getPageBySlugUnfiltered(slug) : null;
7384  const Page = slug ? componentLoaders[slug] : void 0;
7385  if (typeof window !== "undefined" && slug && page && Page) {
7386    sessionStorage.removeItem(`__lp_reload:${slug}`);
7387  }
7388  if (!page || !Page) {
7389    if (typeof window !== "undefined") console.warn(`[landing-page] no page found for slug "${slug}" — redirecting home`);
7390    return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
7391      /* @__PURE__ */ jsxRuntimeExports.jsxs(Helmet, { children: [
7392        /* @__PURE__ */ jsxRuntimeExports.jsx("title", { children: "Training Courses | SkillForge" }),
7393        /* @__PURE__ */ jsxRuntimeExports.jsx("meta", { name: "description", content: "Explore instructor-led technology and business training courses from SkillForge." }),
7394        /* @__PURE__ */ jsxRuntimeExports.jsx("link", { rel: "canonical", href: canonicalUrl })
7395      ] }),
7396      /* @__PURE__ */ jsxRuntimeExports.jsxs("main", { children: [
7397        /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "sr-only", children: "Training Courses" }),
7398        /* @__PURE__ */ jsxRuntimeExports.jsx(Navigate, { to: "/", replace: true })
7399      ] })
7400    ] });
7401  }
7402  return /* @__PURE__ */ jsxRuntimeExports.jsx(Page, { startDate: page.startDate, endDate: page.endDate });
7403}
7404function lazyWithReload$1(factory) {
7405  return reactExports.lazy(() => factory().catch((err) => {
7406    const msg = err instanceof Error ? err.message : String(err);
7407    const isChunkError = msg.includes("dynamically imported module") || msg.includes("Failed to fetch dynamically imported module") || msg.includes("Importing a module script failed") || msg.includes("error loading dynamically imported module");
7408    if (isChunkError && typeof window !== "undefined") {
7409      const key = `chunk_reload_${window.location.pathname}`;
7410      if (!sessionStorage.getItem(key)) {
7411        sessionStorage.setItem(key, "1");
7412        window.location.reload();
7413        return new Promise(() => {
7414        });
7415      }
7416    }
7417    throw err;
7418  }));
7419}
7420const NotFoundPage = lazyWithReload$1(() => __vitePreload(() => import("./_404-CJ5XVNv6.js"), true ? __vite__mapDeps([0,1,2]) : void 0));
7421const PowerPivotBook = lazyWithReload$1(() => __vitePreload(() => import("./powerpivot-book-CUVPBfij.js"), true ? __vite__mapDeps([3,1,2,4]) : void 0));
7422const CopilotExcelBook = lazyWithReload$1(() => __vitePreload(() => import("./copilot-excel-book-DFIX0nXb.js"), true ? __vite__mapDeps([5,1,2,4]) : void 0));
7423const ManualViewer = lazyWithReload$1(() => __vitePreload(() => import("./_id_-BnDw6l9Y.js"), true ? __vite__mapDeps([6,1,2,4]) : void 0));
7424const StudentDashboard = lazyWithReload$1(() => __vitePreload(() => import("./student-8iMTkCO3.js"), true ? __vite__mapDeps([7,1,2,8,4,9]) : void 0));
7425const InstructorDashboard = lazyWithReload$1(() => __vitePreload(() => import("./instructor-B8sJKUi6.js"), true ? __vite__mapDeps([10,1,2,8,11,9]) : void 0));
7426const InstructorBlog = lazyWithReload$1(() => __vitePreload(() => import("./instructor-blog-W6A6aBBN.js"), true ? __vite__mapDeps([12,1,2,13,8]) : void 0));
7427const AdminDashboard = lazyWithReload$1(() => __vitePreload(() => import("./admin-mwydos7a.js"), true ? __vite__mapDeps([14,1,2,8,13,11,4,9]) : void 0));
7428const CheckoutSuccess = lazyWithReload$1(() => __vitePreload(() => import("./success-CrklEs3W.js"), true ? __vite__mapDeps([15,1,2]) : void 0));
7429const CheckoutCancel = lazyWithReload$1(() => __vitePreload(() => import("./cancel-C43VT2ZE.js"), true ? __vite__mapDeps([16,1,2]) : void 0));
7430const InvoiceConfirmation = lazyWithReload$1(() => __vitePreload(() => import("./invoice-confirmation-DnOZWkI0.js"), true ? __vite__mapDeps([17,1,2]) : void 0));
7431const InvoicePaymentSuccess = lazyWithReload$1(() => __vitePreload(() => import("./invoice-payment-success-E47MHV7Z.js"), true ? __vite__mapDeps([18,1,2]) : void 0));
7432const StaffLogin = lazyWithReload$1(() => __vitePreload(() => import("./staff-login-CdvqelaB.js"), true ? __vite__mapDeps([19,1,2,8]) : void 0));
7433const ResetPassword = lazyWithReload$1(() => __vitePreload(() => import("./reset-password-Chmuuhq4.js"), true ? __vite__mapDeps([20,1,2]) : void 0));
7434const ResetPasswordConfirm = lazyWithReload$1(() => __vitePreload(() => import("./reset-password-confirm-DHEAQV0b.js"), true ? __vite__mapDeps([21,1,2]) : void 0));
7435const TestEnrollment = lazyWithReload$1(() => __vitePreload(() => import("./test-enrollment-D0tBRKFX.js"), true ? __vite__mapDeps([22,1,2]) : void 0));
7436const TestMagicLink = lazyWithReload$1(() => __vitePreload(() => import("./test-magic-link-Cw5A0QFT.js"), true ? __vite__mapDeps([23,1,2,4]) : void 0));
7437const DevResetPassword = lazyWithReload$1(() => __vitePreload(() => import("./dev-reset-password-C2khYBJ4.js"), true ? __vite__mapDeps([24,1,2]) : void 0));
7438const UnsubscribePage = lazyWithReload$1(() => __vitePreload(() => import("./unsubscribe-BjwoSPno.js"), true ? __vite__mapDeps([25,1,2]) : void 0));
7439const SurveyPage = lazyWithReload$1(() => __vitePreload(() => import("./_token_-CIiEJRHv.js"), true ? __vite__mapDeps([26,1,2]) : void 0));
7440async function courseLoader({
7441  params
7442}) {
7443  return null;
7444}
7445async function coursesLoader() {
7446  return null;
7447}
7448async function categoryPageLoader(_slug, _canonicalPath) {
7449  return null;
7450}
7451async function copilotExcelAwarenessLoader() {
7452  return null;
7453}
7454async function blogListLoader() {
7455  return null;
7456}
7457async function blogPostLoader({
7458  params
7459}) {
7460  return null;
7461}
7462function RouteError() {
7463  const error = useRouteError();
7464  const is404 = isRouteErrorResponse(error) && error.status === 404;
7465  const isChunkError = error instanceof Error && (error.message.includes("dynamically imported module") || error.message.includes("Failed to fetch dynamically imported module") || error.message.includes("error loading dynamically imported module"));
7466  if (is404) {
7467    if (typeof window !== "undefined") window.location.replace("/404");
7468    return null;
7469  }
7470  if (isChunkError) {
7471    return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "min-h-[60vh] flex flex-col items-center justify-center gap-4 px-4 text-center", children: [
7472      /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-lg font-semibold text-foreground", children: "This page was updated" }),
7473      /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground max-w-sm", children: "A new version of SkillForge was just deployed. Please refresh the page to continue." }),
7474      /* @__PURE__ */ jsxRuntimeExports.jsx("button", { onClick: () => window.location.reload(), className: "mt-2 px-5 py-2 rounded-md bg-primary text-primary-foreground text-sm font-medium hover:opacity-90 transition-opacity", children: "Refresh now" })
7475    ] });
7476  }
7477  return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-h-[60vh] flex items-center justify-center px-4", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-muted-foreground", children: "Something went wrong loading this page. Please try again." }) });
7478}
7479const BlogPostError = RouteError;
7480const routes = [
7481  {
7482    path: "/",
7483    element: /* @__PURE__ */ jsxRuntimeExports.jsx(HomePage, {})
7484  },
7485  {
7486    path: "/auth",
7487    element: /* @__PURE__ */ jsxRuntimeExports.jsx(AuthPage, {})
7488  },
7489  {
7490    path: "/auth/staff",
7491    element: /* @__PURE__ */ jsxRuntimeExports.jsx(StaffLogin, {})
7492  },
7493  {
7494    path: "/auth/reset-password",
7495    element: /* @__PURE__ */ jsxRuntimeExports.jsx(ResetPassword, {})
7496  },
7497  {
7498    path: "/auth/reset-password/confirm",
7499    element: /* @__PURE__ */ jsxRuntimeExports.jsx(ResetPasswordConfirm, {})
7500  },
7501  // ── Course category pages (static, cache-backed) ─────────────────────────
7502  // Each route has its own loader that reads from the in-memory category cache.
7503  // No per-request DB queries, no dynamic slug resolution, no soft 404 risk.
7504  {
7505    path: "/course-categories/ai",
7506    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$F, {}),
7507    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7508    loader: () => categoryPageLoader()
7509  },
7510  {
7511    path: "/course-categories/adobe",
7512    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$E, {}),
7513    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7514    loader: () => categoryPageLoader()
7515  },
7516  {
7517    path: "/course-categories/adobe/acrobat",
7518    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$D, {}),
7519    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7520    loader: () => categoryPageLoader()
7521  },
7522  {
7523    path: "/course-categories/adobe/illustrator",
7524    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$C, {}),
7525    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7526    loader: () => categoryPageLoader()
7527  },
7528  {
7529    path: "/course-categories/adobe/indesign",
7530    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$B, {}),
7531    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7532    loader: () => categoryPageLoader()
7533  },
7534  {
7535    path: "/course-categories/adobe/photoshop",
7536    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$A, {}),
7537    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7538    loader: () => categoryPageLoader()
7539  },
7540  {
7541    path: "/course-categories/business-skills",
7542    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$z, {}),
7543    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7544    loader: () => categoryPageLoader()
7545  },
7546  {
7547    path: "/course-categories/business-skills/communication-skills",
7548    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$y, {}),
7549    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7550    loader: () => categoryPageLoader()
7551  },
7552  {
7553    path: "/course-categories/business-skills/customer-service",
7554    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$x, {}),
7555    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7556    loader: () => categoryPageLoader()
7557  },
7558  {
7559    path: "/course-categories/business-skills/presentation-skills",
7560    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$w, {}),
7561    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7562    loader: () => categoryPageLoader()
7563  },
7564  {
7565    path: "/course-categories/business-skills/time-management",
7566    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$v, {}),
7567    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7568    loader: () => categoryPageLoader()
7569  },
7570  {
7571    path: "/course-categories/crystal-reports",
7572    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$u, {}),
7573    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7574    loader: () => categoryPageLoader()
7575  },
7576  {
7577    path: "/course-categories/crystal-reports/introduction",
7578    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$t, {}),
7579    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7580    loader: () => categoryPageLoader()
7581  },
7582  {
7583    path: "/course-categories/crystal-reports/intermediate",
7584    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$s, {}),
7585    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7586    loader: () => categoryPageLoader()
7587  },
7588  {
7589    path: "/course-categories/microsoft",
7590    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$r, {}),
7591    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7592    loader: () => categoryPageLoader()
7593  },
7594  {
7595    path: "/course-categories/microsoft/excel",
7596    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$q, {}),
7597    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7598    loader: () => categoryPageLoader()
7599  },
7600  {
7601    path: "/course-categories/microsoft/word",
7602    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$p, {}),
7603    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7604    loader: () => categoryPageLoader()
7605  },
7606  {
7607    path: "/course-categories/microsoft/powerpoint",
7608    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$o, {}),
7609    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7610    loader: () => categoryPageLoader()
7611  },
7612  {
7613    path: "/course-categories/microsoft/access",
7614    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$n, {}),
7615    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7616    loader: () => categoryPageLoader()
7617  },
7618  {
7619    path: "/course-categories/microsoft/outlook",
7620    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$m, {}),
7621    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7622    loader: () => categoryPageLoader()
7623  },
7624  {
7625    path: "/course-categories/microsoft/project",
7626    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$l, {}),
7627    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7628    loader: () => categoryPageLoader()
7629  },
7630  {
7631    path: "/course-categories/microsoft/sharepoint",
7632    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$k, {}),
7633    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7634    loader: () => categoryPageLoader()
7635  },
7636  {
7637    path: "/course-categories/microsoft/power-bi",
7638    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$j, {}),
7639    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7640    loader: () => categoryPageLoader()
7641  },
7642  {
7643    path: "/course-categories/microsoft/copilot",
7644    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$i, {}),
7645    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7646    loader: () => categoryPageLoader()
7647  },
7648  {
7649    path: "/course-categories/microsoft/teams",
7650    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$h, {}),
7651    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7652    loader: () => categoryPageLoader()
7653  },
7654  {
7655    path: "/course-categories/microsoft-technical",
7656    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$g, {}),
7657    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7658    loader: () => categoryPageLoader()
7659  },
7660  {
7661    path: "/course-categories/microsoft-technical/azure",
7662    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$f, {}),
7663    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7664    loader: () => categoryPageLoader()
7665  },
7666  {
7667    path: "/course-categories/microsoft-technical/powershell",
7668    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$e, {}),
7669    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7670    loader: () => categoryPageLoader()
7671  },
7672  {
7673    path: "/course-categories/microsoft-technical/microsoft-365",
7674    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$d, {}),
7675    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7676    loader: () => categoryPageLoader()
7677  },
7678  {
7679    path: "/course-categories/microsoft-technical/power-apps",
7680    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$c, {}),
7681    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7682    loader: () => categoryPageLoader()
7683  },
7684  {
7685    path: "/course-categories/microsoft-technical/power-automate",
7686    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$b, {}),
7687    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7688    loader: () => categoryPageLoader()
7689  },
7690  {
7691    path: "/course-categories/microsoft-technical/security",
7692    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$a, {}),
7693    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7694    loader: () => categoryPageLoader()
7695  },
7696  {
7697    path: "/course-categories/project-management",
7698    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$9, {}),
7699    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7700    loader: () => categoryPageLoader()
7701  },
7702  {
7703    path: "/course-categories/project-management/agile-and-scrum",
7704    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$8, {}),
7705    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7706    loader: () => categoryPageLoader()
7707  },
7708  {
7709    path: "/course-categories/project-management/project-management-training",
7710    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$7, {}),
7711    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7712    loader: () => categoryPageLoader()
7713  },
7714  {
7715    path: "/course-categories/sql",
7716    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$6, {}),
7717    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7718    loader: () => categoryPageLoader()
7719  },
7720  {
7721    path: "/course-categories/sql/sql-introduction",
7722    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$5, {}),
7723    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7724    loader: () => categoryPageLoader()
7725  },
7726  {
7727    path: "/course-categories/sql/sql-advanced",
7728    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$4, {}),
7729    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7730    loader: () => categoryPageLoader()
7731  },
7732  {
7733    path: "/course-categories/sql/introduction-to-sql-databases",
7734    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$3, {}),
7735    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7736    loader: () => categoryPageLoader()
7737  },
7738  {
7739    path: "/course-categories/tableau",
7740    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$2, {}),
7741    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7742    loader: () => categoryPageLoader()
7743  },
7744  {
7745    path: "/course-categories/tableau/tableau-introduction",
7746    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage$1, {}),
7747    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7748    loader: () => categoryPageLoader()
7749  },
7750  {
7751    path: "/course-categories/tableau/tableau-intermediate",
7752    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CategoryPage, {}),
7753    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {}),
7754    loader: () => categoryPageLoader()
7755  },
7756  {
7757    path: "/courses",
7758    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CoursesPage, {}),
7759    loader: coursesLoader,
7760    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {})
7761  },
7762  {
7763    path: "/about",
7764    element: /* @__PURE__ */ jsxRuntimeExports.jsx(AboutPage, {})
7765  },
7766  {
7767    path: "/contact-us",
7768    element: /* @__PURE__ */ jsxRuntimeExports.jsx(ContactUsPage, {})
7769  },
7770  {
7771    path: "/privacy-policy",
7772    element: /* @__PURE__ */ jsxRuntimeExports.jsx(PrivacyPolicyPage, {})
7773  },
7774  {
7775    path: "/careers",
7776    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CareersPage, {})
7777  },
7778  {
7779    path: "/instructor-led-online-class-faqs",
7780    element: /* @__PURE__ */ jsxRuntimeExports.jsx(FaqPage, {})
7781  },
7782  {
7783    path: "/unsubscribe",
7784    element: /* @__PURE__ */ jsxRuntimeExports.jsx(UnsubscribePage, {})
7785  },
7786  {
7787    path: "/about/testimonials",
7788    element: /* @__PURE__ */ jsxRuntimeExports.jsx(TestimonialsPage, {})
7789  },
7790  {
7791    path: "/clients",
7792    element: /* @__PURE__ */ jsxRuntimeExports.jsx(ClientsPage, {})
7793  },
7794  {
7795    path: "/skillforge-blog",
7796    element: /* @__PURE__ */ jsxRuntimeExports.jsx(BlogPage, {}),
7797    loader: blogListLoader,
7798    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {})
7799  },
7800  {
7801    path: "/skillforge-blog/:slug",
7802    element: /* @__PURE__ */ jsxRuntimeExports.jsx(BlogPostPage, {}),
7803    loader: blogPostLoader,
7804    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(BlogPostError, {})
7805  },
7806  {
7807    path: "/:slug",
7808    element: /* @__PURE__ */ jsxRuntimeExports.jsx(BlogPostPage, {}),
7809    loader: blogPostLoader,
7810    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(BlogPostError, {})
7811  },
7812  {
7813    path: "/courses/:slug",
7814    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CourseDetailPage, {}),
7815    loader: courseLoader,
7816    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {})
7817  },
7818  {
7819    path: "/powerpivot-book",
7820    element: /* @__PURE__ */ jsxRuntimeExports.jsx(PowerPivotBook, {}),
7821    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {})
7822  },
7823  {
7824    path: "/copilot-excel-book",
7825    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CopilotExcelBook, {}),
7826    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {})
7827  },
7828  {
7829    path: "/manuals/:id/view",
7830    element: /* @__PURE__ */ jsxRuntimeExports.jsx(ManualViewer, {}),
7831    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {})
7832  },
7833  {
7834    path: "/student",
7835    element: /* @__PURE__ */ jsxRuntimeExports.jsx(StudentDashboard, {}),
7836    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {})
7837  },
7838  {
7839    path: "/instructor",
7840    element: /* @__PURE__ */ jsxRuntimeExports.jsx(InstructorDashboard, {}),
7841    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {})
7842  },
7843  {
7844    path: "/instructor/blog",
7845    element: /* @__PURE__ */ jsxRuntimeExports.jsx(InstructorBlog, {}),
7846    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {})
7847  },
7848  {
7849    path: "/admin",
7850    element: /* @__PURE__ */ jsxRuntimeExports.jsx(AdminDashboard, {}),
7851    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {})
7852  },
7853  {
7854    path: "/checkout/success",
7855    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CheckoutSuccess, {})
7856  },
7857  {
7858    path: "/checkout/cancel",
7859    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CheckoutCancel, {})
7860  },
7861  {
7862    path: "/checkout/invoice-confirmation",
7863    element: /* @__PURE__ */ jsxRuntimeExports.jsx(InvoiceConfirmation, {})
7864  },
7865  {
7866    path: "/invoice-payment-success",
7867    element: /* @__PURE__ */ jsxRuntimeExports.jsx(InvoicePaymentSuccess, {})
7868  },
7869  {
7870    path: "/test-enrollment",
7871    element: /* @__PURE__ */ jsxRuntimeExports.jsx(TestEnrollment, {})
7872  },
7873  {
7874    path: "/test-magic-link",
7875    element: /* @__PURE__ */ jsxRuntimeExports.jsx(TestMagicLink, {})
7876  },
7877  {
7878    path: "/dev-reset-password",
7879    element: /* @__PURE__ */ jsxRuntimeExports.jsx(DevResetPassword, {})
7880  },
7881  {
7882    path: "/survey/:token",
7883    element: /* @__PURE__ */ jsxRuntimeExports.jsx(SurveyPage, {})
7884  },
7885  {
7886    // ── SSR landing pages — specific slugs registered before the generic catch-all ──
7887    // The generic /lp/:slug route uses lp/index.tsx which resolves components via
7888    // an eager glob at module-load time. On the server that glob resolves to an
7889    // empty object (no window, module state never populated), so SSR always hits
7890    // the "page not found" branch and renders <Navigate to="/" replace />.
7891    // Registering specific slugs as direct routes with their own SSR loaders
7892    // bypasses lp/index.tsx entirely and gives crawlers fully-rendered HTML.
7893    path: "/lp/copilot-excel-awareness",
7894    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CopilotExcelAwarenessPage, {}),
7895    loader: copilotExcelAwarenessLoader,
7896    errorElement: /* @__PURE__ */ jsxRuntimeExports.jsx(RouteError, {})
7897  },
7898  {
7899    path: "/lp/:slug",
7900    element: /* @__PURE__ */ jsxRuntimeExports.jsx(LandingPage, {})
7901  },
7902  {
7903    path: "*",
7904    element: /* @__PURE__ */ jsxRuntimeExports.jsx(NotFoundPage, {})
7905  }
7906];
7907const Toaster = ({
7908  ...props
7909}) => {
7910  return /* @__PURE__ */ jsxRuntimeExports.jsx(Toaster$1, { theme: "system", className: "toaster group", toastOptions: {
7911    classNames: {
7912      toast: "group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",
7913      description: "group-[.toast]:text-muted-foreground",
7914      actionButton: "group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",
7915      cancelButton: "group-[.toast]:bg-muted group-[.toast]:text-muted-foreground"
7916    }
7917  }, ...props });
7918};
7919function lazyWithReload(factory) {
7920  return reactExports.lazy(() => factory().catch((err) => {
7921    const msg = err instanceof Error ? err.message : String(err);
7922    const isChunkError = msg.includes("dynamically imported module") || msg.includes("Failed to fetch dynamically imported module") || msg.includes("Importing a module script failed") || msg.includes("error loading dynamically imported module");
7923    if (isChunkError && typeof window !== "undefined") {
7924      const key = `chunk_reload_${window.location.pathname}`;
7925      if (!sessionStorage.getItem(key)) {
7926        sessionStorage.setItem(key, "1");
7927        window.location.reload();
7928        return new Promise(() => {
7929        });
7930      }
7931    }
7932    throw err;
7933  }));
7934}
7935const SignPage = lazyWithReload(() => __vitePreload(() => import("./_slug_-CNFgW9eQ.js"), true ? __vite__mapDeps([27,1,2]) : void 0));
7936const SignDonePage = lazyWithReload(() => __vitePreload(() => import("./done-D8SGsd7a.js"), true ? __vite__mapDeps([28,1,2]) : void 0));
7937const SpinnerFallback = () => /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex justify-center py-8 h-screen items-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Spinner, {}) });
7938const router = createBrowserRouter([
7939  // Standalone routes — no RootLayout, no header/footer
7940  {
7941    path: "/sign/:slug",
7942    element: /* @__PURE__ */ jsxRuntimeExports.jsx(reactExports.Suspense, { fallback: /* @__PURE__ */ jsxRuntimeExports.jsx(SpinnerFallback, {}), children: /* @__PURE__ */ jsxRuntimeExports.jsx(SignPage, {}) })
7943  },
7944  {
7945    path: "/sign/:slug/done",
7946    element: /* @__PURE__ */ jsxRuntimeExports.jsx(reactExports.Suspense, { fallback: /* @__PURE__ */ jsxRuntimeExports.jsx(SpinnerFallback, {}), children: /* @__PURE__ */ jsxRuntimeExports.jsx(SignDonePage, {}) })
7947  },
7948  // Main layout routes — wrapped in RootLayout
7949  {
7950    path: "/",
7951    element: /* @__PURE__ */ jsxRuntimeExports.jsx(CartProvider, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(reactExports.Suspense, { fallback: /* @__PURE__ */ jsxRuntimeExports.jsx(SpinnerFallback, {}), children: /* @__PURE__ */ jsxRuntimeExports.jsx(RootLayout, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
7952      /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollToTop, {}),
7953      /* @__PURE__ */ jsxRuntimeExports.jsx(Outlet, {})
7954    ] }) }) }) }),
7955    children: routes
7956  }
7957]);
7958function App() {
7959  return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
7960    /* @__PURE__ */ jsxRuntimeExports.jsx(RouterProvider$1, { router }),
7961    /* @__PURE__ */ jsxRuntimeExports.jsx(Toaster, {}),
7962    /* @__PURE__ */ jsxRuntimeExports.jsx(HybridChatWidget, {})
7963  ] });
7964}
7965const queryClient = new QueryClient({
7966  defaultOptions: {
7967    queries: {
7968      staleTime: 1e3 * 60 * 5,
7969      // 5 minutes
7970      gcTime: 1e3 * 60 * 10,
7971      // 10 minutes (formerly cacheTime)
7972      retry: 1,
7973      refetchOnWindowFocus: false
7974    },
7975    mutations: {
7976      retry: 0
7977    }
7978  }
7979});
7980const rootElement = document.getElementById("app");
7981if (!rootElement) throw new Error("Root element not found");
7982const root = ReactDOM.createRoot(rootElement);
7983root.render(/* @__PURE__ */ jsxRuntimeExports.jsx(React.StrictMode, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(HelmetProvider, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(QueryClientProvider, { client: queryClient, children: /* @__PURE__ */ jsxRuntimeExports.jsx(App, {}) }) }) }));
7984export {
7985  SheetContent as A,
7986  Button as B,
7987  Card as C,
7988  Dialog as D,
7989  SheetHeader as E,
7990  SheetTitle as F,
7991  SheetDescription as G,
7992  signOut as H,
7993  Input as I,
7994  buttonVariants as J,
7995  signIn as K,
7996  Label as L,
7997  sendMagicLink as M,
7998  RadioGroup as R,
7999  Select as S,
8000  Textarea as T,
8001  CardHeader as a,
8002  CardTitle as b,
8003  CardDescription as c,
8004  CardContent as d,
8005  useCart as e,
8006  Badge as f,
8007  getUserWithRole as g,
8008  formatSessionDate$1 as h,
8009  cn as i,
8010  SelectTrigger as j,
8011  SelectValue as k,
8012  SelectContent as l,
8013  manual_viewer as m,
8014  SelectItem as n,
8015  DialogContent as o,
8016  DialogHeader as p,
8017  DialogTitle as q,
8018  DialogDescription as r,
8019  sanitizeBlogContent as s,
8020  htmlToPlainFaq as t,
8021  useSession as u,
8022  videoCss as v,
8023  DialogFooter as w,
8024  RadioGroupItem as x,
8025  DialogTrigger as y,
8026  Sheet as z
8027};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.