PageSourceSearch

https://clinicaltrac.com/assets/js/routes-77ruG2ON.js

js clinicaltrac.com collected 2026-10-02 00:28:41 UTC 32,052 bytes, 920 lines download raw bytes

1import {
2  r as e,
3  t
4} from "./js/jsx-runtime-DGeXAQPT.js";
5import {
6  t as n
7} from "./js/react-vt4WmSOl.js";
8import {
9  t as r
10} from "./js/TestimonialsCarousel-B02gQlkH.js";
11import {
12  n as i,
13  s as a,
14  t as o
15} from "./js/button-md8kAJR5.js";
16import {
17  a as s,
18  c,
19  i as l,
20  l as u,
21  n as d,
22  r as f,
23  s as ee,
24  t as te
25} from "./js/features-DG0FtYAX.js";
26import {
27  t as p
28} from "./js/arrow-right-DbbR7p1Z.js";
29import {
30  n as ne,
31  t as re
32} from "./js/respiratory-clinical-BwaAkW7J.js";
33import {
34  A as m,
35  D as ie,
36  E as ae,
37  F as h,
38  M as g,
39  T as _,
40  a as v,
41  b as oe,
42  c as se,
43  h as ce,
44  i as y,
45  k as le,
46  l as b,
47  nt as x,
48  o as ue,
49  r as de,
50  s as fe
51} from "./js/index-BQcSxFrH.js";
52import {
53  t as pe
54} from "./js/CtaBand-q3aZHXAi.js";
55import {
56  t as me
57} from "./js/students-collaborating-Bbg7k4FI.js";
58import {
59  n as he,
60  t as ge
61} from "./js/analytics-dashboard-BY8ip8g0.js";
62import {
63  t as _e
64} from "./js/FeatureGrid-CxjCl82R.js";
65import {
66  t as ve
67} from "./js/radiology-suite-BAzAqinE.js";
68var ye = a(`circle-play`, [
69    [`path`, {
70      d: `M9 9.003a1 1 0 0 1 1.517-.859l4.997 2.997a1 1 0 0 1 0 1.718l-4.997 2.997A1 1 0 0 1 9 14.996z`,
71      key: `kmsa83`
72    }],
73    [`circle`, {
74      cx: `12`,
75      cy: `12`,
76      r: `10`,
77      key: `1mglay`
78    }]
79  ]),
80  be = a(`scale`, [
81    [`path`, {
82      d: `M12 3v18`,
83      key: `108xh3`
84    }],
85    [`path`, {
86      d: `m19 8 3 8a5 5 0 0 1-6 0zV7`,
87      key: `zcdpyk`
88    }],
89    [`path`, {
90      d: `M3 7h1a17 17 0 0 0 8-2 17 17 0 0 0 8 2h1`,
91      key: `1yorad`
92    }],
93    [`path`, {
94      d: `m5 8 3 8a5 5 0 0 1-6 0zV7`,
95      key: `eua70x`
96    }],
97    [`path`, {
98      d: `M7 21h10`,
99      key: `1b0cd5`
100    }]
101  ]),
102  xe = a(`triangle-alert`, [
103    [`path`, {
104      d: `m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,
105      key: `wmoenq`
106    }],
107    [`path`, {
108      d: `M12 9v4`,
109      key: `juzpu7`
110    }],
111    [`path`, {
112      d: `M12 17h.01`,
113      key: `p32p05`
114    }]
115  ]),
116  S = e(n(), 1),
117  Se = `/assets/hero-instructor-mentor-D-MLvWiw.jpg`,
118  C = `/assets/hero-students-clinical-C_d_EFH3.jpg`,
119  w = `/assets/faculty-mentor-BbVWNO48.jpg`,
120  he = `/assets/Student using the ClinicalTrac mobile app in a hospital hallway 1600x1200.jpg`,	
121  T = t(),
122  E = [{
123    src: Se,
124    alt: `Allied health students collaborating in a hospital corridor`,
125    caption: `Allied health students, in real clinical settings.`
126  }, {
127    src: he,
128    alt: `Faculty reviewing student clinical progress on a laptop`,
129    caption: `Faculty see student progress across every site - in real time.`
130  }, {
131    src: C,
132    alt: `Clinical instructor mentoring a student at the bedside`,
133    caption: `Preceptors mentor at the bedside; documentation stays in one place.`
134  }, {
135    src: w,
136    alt: `Student using the Clinical Trac™ mobile app in a hospital hallway`,
137    caption: `A mobile app students actually adopt - iOS and Android.`
138  }];
139
140function D() {
141  let [e, t] = (0, S.useState)(0), [n, r] = (0, S.useState)(!1);
142  return (0, S.useEffect)(() => {
143    if (n) return;
144    let e = window.setInterval(() => t(e => (e + 1) % E.length), 5e3);
145    return () => window.clearInterval(e)
146  }, [n]), (0, T.jsxs)(`section`, {
147    className: `relative overflow-hidden bg-background`,
148    children: [(0, T.jsx)(`div`, {
149      "aria-hidden": !0,
150      className: `pointer-events-none absolute inset-x-0 -top-24 h-[520px] bg-[radial-gradient(60%_60%_at_50%_0%,color-mix(in_oklab,var(--color-primary)_18%,transparent),transparent_70%)]`
151    }), (0, T.jsxs)(`div`, {
152      className: `container-page relative grid gap-12 py-14 md:py-20 lg:grid-cols-2 lg:items-center lg:py-24`,
153      children: [(0, T.jsxs)(`div`, {
154        className: `animate-fade-up`,
155        children: [(0, T.jsxs)(`span`, {
156          className: `inline-flex items-center gap-2 rounded-full border border-border bg-surface-muted px-3 py-1 text-xs font-medium text-muted-foreground`,
157          children: [(0, T.jsx)(ne, {
158            className: `h-3.5 w-3.5 text-primary`
159          }), `Purpose-built for Allied Health Education`]
160        }), (0, T.jsxs)(`h1`, {
161          className: `mt-5 font-display text-3xl font-bold leading-[1.08] tracking-tight text-foreground sm:text-4xl md:text-5xl lg:text-6xl`,
162          children: [`The Modern Clinical Management Platform for`, ` `, (0, T.jsx)(`span`, {
163            className: `text-primary`,
164            children: `Allied Health Education`
165          }), `.`]
166        }), (0, T.jsx)(`p`, {
167          className: `mt-5 max-w-xl text-base text-muted-foreground sm:text-lg`,
168          children: `Clinical Trac™ helps allied health programs streamline clinical education, improve student accountability, simplify accreditation reporting, and strengthen collaboration between faculty, students, and clinical sites.`
169        }), (0, T.jsxs)(`div`, {
170          className: `mt-8 flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center`,
171          children: [(0, T.jsx)(`a`, {
172            href: v.calendlyUrl,
173            target: `_blank`,
174            rel: `noopener noreferrer`,
175            className: `w-full sm:w-auto`,
176            children: (0, T.jsxs)(o, {
177              size: `lg`,
178              className: `h-12 w-full bg-primary px-6 hover:bg-primary/90 sm:w-auto`,
179              children: [`Book a Free Demo`, (0, T.jsx)(p, {
180                className: `ml-1 h-4 w-4`
181              })]
182            })
183          }), (0, T.jsx)(`a`, {
184            href: `#watch`,
185            className: `inline-flex w-full sm:w-auto`,
186            children: (0, T.jsxs)(o, {
187              size: `lg`,
188              variant: `outline`,
189              className: `h-12 w-full px-5 sm:w-auto`,
190              children: [(0, T.jsx)(ye, {
191                className: `mr-2 h-4 w-4`
192              }), `Watch 3-min overview`]
193            })
194          })]
195        }), (0, T.jsxs)(`div`, {
196          className: `mt-8 flex flex-wrap gap-x-6 gap-y-2 text-sm text-muted-foreground`,
197          children: [(0, T.jsx)(`span`, {
198            children: `✓ Accreditation-ready reporting`
199          }), (0, T.jsx)(`span`, {
200            children: `✓ GPS attendance`
201          }), (0, T.jsx)(`span`, {
202            children: `✓ Mobile-first`
203          }), (0, T.jsx)(`span`, {
204            children: `✓ Named specialist support`
205          })]
206        })]
207      }), (0, T.jsxs)(`div`, {
208        className: `relative animate-fade-up [animation-delay:120ms]`,
209        onMouseEnter: () => r(!0),
210        onMouseLeave: () => r(!1),
211        children: [(0, T.jsx)(`div`, {
212          className: `absolute -inset-6 -z-10 rounded-[2rem] bg-gradient-to-tr from-primary-soft to-transparent blur-2xl`
213        }), (0, T.jsx)(`div`, {
214          className: `relative overflow-hidden rounded-2xl border border-border bg-surface-muted shadow-lift`,
215          children: (0, T.jsxs)(`div`, {
216            className: `relative aspect-[5/4] w-full sm:aspect-[4/3]`,
217            children: [E.map((t, n) => (0, T.jsx)(`img`, {
218              src: t.src,
219              alt: t.alt,
220              width: 1600,
221              height: 1200,
222              loading: n === 0 ? `eager` : `lazy`,
223              className: i(`absolute inset-0 h-full w-full object-cover object-center transition-opacity duration-700`, n === e ? `opacity-100 animate-ken-burns` : `opacity-0`)
224            }, t.src)), (0, T.jsx)(`div`, {
225              "aria-hidden": !0,
226              className: `pointer-events-none absolute inset-x-0 bottom-0 bg-gradient-to-t from-black/60 via-black/20 to-transparent p-4 pt-16`,
227              children: (0, T.jsx)(`p`, {
228                className: `text-sm font-medium text-white drop-shadow`,
229                children: E[e].caption
230              })
231            })]
232          })
233        }), (0, T.jsx)(`div`, {
234          className: `mt-4 flex items-center justify-center gap-2`,
235          children: E.map((n, r) => (0, T.jsx)(`button`, {
236            type: `button`,
237            onClick: () => t(r),
238            "aria-label": `Show slide ${r+1}`,
239            className: i(`h-2 rounded-full transition-all`, r === e ? `w-8 bg-primary` : `w-2 bg-border hover:bg-primary/50`)
240          }, r))
241        })]
242      })]
243    })]
244  })
245}
246
247function O() {
248  let e = [...y, ...y, ...y];
249  return (0, T.jsxs)(`section`, {
250    className: `border-y border-border bg-surface-muted py-10`,
251    children: [(0, T.jsxs)(`div`, {
252      className: `container-page`,
253      children: [(0, T.jsx)(`p`, {
254        className: `text-center text-xs font-medium uppercase tracking-widest text-muted-foreground`,
255        children: `Trusted by allied health programs nationwide & worldwide`
256      }), (0, T.jsx)(`div`, {
257        className: `trust-marquee mt-6 w-full overflow-hidden [mask-image:linear-gradient(to_right,transparent,black_8%,black_92%,transparent)]`,
258        children: (0, T.jsx)(`div`, {
259          className: `trust-track flex w-max items-center gap-10 sm:gap-14`,
260          children: e.map((e, t) => (0, T.jsx)(`div`, {
261            className: `flex h-12 w-[140px] shrink-0 items-center justify-center sm:w-[160px]`,
262            children: (0, T.jsx)(`img`, {
263              src: e.logo,
264              alt: e.name,
265              loading: `lazy`,
266              className: `max-h-12 w-auto max-w-full object-contain opacity-70 grayscale transition duration-300 hover:opacity-100 hover:grayscale-0`
267            })
268          }, `${e.name}-${t}`))
269        })
270      })]
271    }), (0, T.jsx)(`style`, {
272      children: `
273        @keyframes trust-scroll { from { transform: translate3d(0,0,0) } to { transform: translate3d(-33.3333%,0,0) } }
274        .trust-track {
275          animation: trust-scroll 35s linear infinite;
276          will-change: transform;
277        }
278        @media (min-width: 768px) { .trust-track { animation-duration: 55s; } }
279        .trust-marquee:hover .trust-track { animation-play-state: paused; }
280        @media (prefers-reduced-motion: reduce) { .trust-track { animation: none; } }
281      `
282    })]
283  })
284}
285
286function k(e, t = 1600) {
287  let [n, r] = (0, S.useState)(0), i = (0, S.useRef)(!1), a = (0, S.useRef)(null);
288  return (0, S.useEffect)(() => {
289    if (!a.current) return;
290    let n = new IntersectionObserver(n => {
291      n.forEach(n => {
292        if (n.isIntersecting && !i.current) {
293          i.current = !0;
294          let n = performance.now(),
295            a = i => {
296              let o = Math.min(1, (i - n) / t),
297                s = 1 - (1 - o) ** 3;
298              r(Math.round(e * s)), o < 1 && requestAnimationFrame(a)
299            };
300          requestAnimationFrame(a)
301        }
302      })
303    }, {
304      threshold: .4
305    });
306    return n.observe(a.current), () => n.disconnect()
307  }, [e, t]), {
308    ref: a,
309    val: n
310  }
311}
312
313function A({
314  value: e,
315  label: t,
316  suffix: n
317}) {
318  let {
319    ref: r,
320    val: i
321  } = k(e);
322  return (0, T.jsxs)(`div`, {
323    ref: r,
324    className: `rounded-2xl border border-border bg-background p-6 shadow-soft`,
325    children: [(0, T.jsxs)(`p`, {
326      className: `font-display text-3xl font-bold text-primary sm:text-4xl`,
327      children: [i >= 1e6 ? `${(i/1e6).toFixed(1)}M` : i >= 1e3 ? `${Math.round(i/100)/10}K` : i.toString(), (0, T.jsx)(`span`, {
328        className: `text-foreground`,
329        children: n
330      })]
331    }), (0, T.jsx)(`p`, {
332      className: `mt-2 text-sm text-muted-foreground`,
333      children: t
334    })]
335  })
336}
337
338function j() {
339  return (0, T.jsx)(`section`, {
340    className: `container-page py-12`,
341    children: (0, T.jsx)(`div`, {
342      className: `grid gap-4 md:grid-cols-2 lg:grid-cols-4`,
343      children: ue.map(e => (0, T.jsx)(A, {
344        value: e.value,
345        label: e.label,
346        suffix: e.suffix
347      }, e.label))
348    })
349  })
350}
351var M = `Tabs`,
352  [Ce, we] = le(M, [b]),
353  N = b(),
354  [Te, P] = Ce(M),
355  F = S.forwardRef((e, t) => {
356    let {
357      __scopeTabs: n,
358      value: r,
359      onValueChange: i,
360      defaultValue: a,
361      orientation: o = `horizontal`,
362      dir: s,
363      activationMode: c = `automatic`,
364      ...l
365    } = e, u = ce(s), [d, f] = ae({
366      prop: r,
367      onChange: i,
368      defaultProp: a ? ? ``,
369      caller: M
370    });
vendor: 5,670 bytes, lines 371-564
371    return (0, T.jsx)(Te, {
372      scope: n,
373      baseId: ie(),
374      value: d,
375      onValueChange: f,
376      orientation: o,
377      dir: u,
378      activationMode: c,
379      children: (0, T.jsx)(_.div, {
380        dir: u,
381        "data-orientation": o,
382        ...l,
383        ref: t
384      })
385    })
386  });
387F.displayName = M;
388var I = `TabsList`,
389  L = S.forwardRef((e, t) => {
390    let {
391      __scopeTabs: n,
392      loop: r = !0,
393      ...i
394    } = e, a = P(I, n), o = N(n);
395    return (0, T.jsx)(se, {
396      asChild: !0,
397      ...o,
398      orientation: a.orientation,
399      dir: a.dir,
400      loop: r,
401      children: (0, T.jsx)(_.div, {
402        role: `tablist`,
403        "aria-orientation": a.orientation,
404        ...i,
405        ref: t
406      })
407    })
408  });
409L.displayName = I;
410var R = `TabsTrigger`,
411  z = S.forwardRef((e, t) => {
412    let {
413      __scopeTabs: n,
414      value: r,
415      disabled: i = !1,
416      ...a
417    } = e, o = P(R, n), s = N(n), c = H(o.baseId, r), l = U(o.baseId, r), u = r === o.value;
418    return (0, T.jsx)(fe, {
419      asChild: !0,
420      ...s,
421      focusable: !i,
422      active: u,
423      children: (0, T.jsx)(_.button, {
424        type: `button`,
425        role: `tab`,
426        "aria-selected": u,
427        "aria-controls": l,
428        "data-state": u ? `active` : `inactive`,
429        "data-disabled": i ? `` : void 0,
430        disabled: i,
431        id: c,
432        ...a,
433        ref: t,
434        onMouseDown: m(e.onMouseDown, e => {
435          !i && e.button === 0 && e.ctrlKey === !1 ? o.onValueChange(r) : e.preventDefault()
436        }),
437        onKeyDown: m(e.onKeyDown, e => {
438          [` `, `Enter`].includes(e.key) && o.onValueChange(r)
439        }),
440        onFocus: m(e.onFocus, () => {
441          let e = o.activationMode !== `manual`;
442          !u && !i && e && o.onValueChange(r)
443        })
444      })
445    })
446  });
447z.displayName = R;
448var B = `TabsContent`,
449  V = S.forwardRef((e, t) => {
450    let {
451      __scopeTabs: n,
452      value: r,
453      forceMount: i,
454      children: a,
455      ...o
456    } = e, s = P(B, n), c = H(s.baseId, r), l = U(s.baseId, r), u = r === s.value, d = S.useRef(u);
457    return S.useEffect(() => {
458      let e = requestAnimationFrame(() => d.current = !1);
459      return () => cancelAnimationFrame(e)
460    }, []), (0, T.jsx)(oe, {
461      present: i || u,
462      children: ({
463        present: n
464      }) => (0, T.jsx)(_.div, {
465        "data-state": u ? `active` : `inactive`,
466        "data-orientation": s.orientation,
467        role: `tabpanel`,
468        "aria-labelledby": c,
469        hidden: !n,
470        id: l,
471        tabIndex: 0,
472        ...o,
473        ref: t,
474        style: {
475          ...e.style,
476          animationDuration: d.current ? `0s` : void 0
477        },
478        children: n && a
479      })
480    })
481  });
482V.displayName = B;
483
484function H(e, t) {
485  return `${e}-trigger-${t}`
486}
487
488function U(e, t) {
489  return `${e}-content-${t}`
490}
491var Ee = F,
492  W = L,
493  G = z,
494  K = V,
495  De = Ee,
496  q = S.forwardRef(({
497    className: e,
498    ...t
499  }, n) => (0, T.jsx)(W, {
500    ref: n,
501    className: i(`inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground`, e),
502    ...t
503  }));
504q.displayName = W.displayName;
505var J = S.forwardRef(({
506  className: e,
507  ...t
508}, n) => (0, T.jsx)(G, {
509  ref: n,
510  className: i(`inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background cursor-pointer transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow`, e),
511  ...t
512}));
513J.displayName = G.displayName;
514var Y = S.forwardRef(({
515  className: e,
516  ...t
517}, n) => (0, T.jsx)(K, {
518  ref: n,
519  className: i(`mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2`, e),
520  ...t
521}));
522Y.displayName = K.displayName;
523
524function X({
525  features: e,
526  href: t,
527  label: n,
528  image: r,
529  alt: i
530}) {
531  return (0, T.jsxs)(`div`, {
532    className: `grid gap-6 md:grid-cols-2 md:items-start`,
533    children: [(0, T.jsx)(`div`, {
534      className: `grid grid-cols-1 gap-3 sm:grid-cols-2`,
535      children: e.map(e => (0, T.jsxs)(`div`, {
536        className: `rounded-xl border border-border p-4 transition-colors hover:border-primary/40`,
537        children: [(0, T.jsx)(`span`, {
538          className: `inline-flex h-9 w-9 items-center justify-center rounded-lg bg-primary-soft text-primary`,
539          children: (0, T.jsx)(e.icon, {
540            className: `h-4 w-4`
541          })
542        }), (0, T.jsx)(`p`, {
543          className: `mt-3 font-display text-sm font-semibold`,
544          children: e.title
545        }), (0, T.jsx)(`p`, {
546          className: `mt-1 text-xs text-muted-foreground`,
547          children: e.desc
548        })]
549      }, e.title))
550    }), (0, T.jsxs)(`div`, {
551      className: `overflow-hidden rounded-2xl border border-border bg-primary-soft shadow-soft`,
552      children: [(0, T.jsx)(`img`, {
553        src: r,
554        width: 1600,
555        height: 1100,
556        alt: i,
557        loading: `lazy`,
558        className: `h-56 w-full object-cover object-top sm:h-64`
559      }), (0, T.jsxs)(`div`, {
560        className: `p-8`,
561        children: [(0, T.jsxs)(`h3`, {
562          className: `font-display text-2xl font-bold`,
563          children: [`Purpose-built for `, n]
564        }), (0, T.jsxs)(`p`, {
565          className: `mt-3 text-sm text-foreground/80`,
566          children: [`Two modalities are available today, with more in development. Every modality is thoughtfully designed around its unique clinical workflow, with tailored app features that improve the experience for students and faculty.`]
567        }), (0, T.jsx)(x, {
568          to: t,
569          className: `mt-5 inline-block`,
570          children: (0, T.jsxs)(o, {
571            className: `bg-primary hover:bg-primary/90`,
572            children: [`Explore `, n, (0, T.jsx)(p, {
573              className: `ml-1 h-4 w-4`
574            })]
575          })
576        })]
577      })]
578    })]
579  })
580}
581
582function Oe() {
583  return (0, T.jsxs)(`section`, {
584    className: `container-page section-y`,
585    children: [(0, T.jsxs)(`div`, {
586      className: `mx-auto max-w-2xl text-center`,
587      children: [(0, T.jsx)(`p`, {
588        className: `text-xs font-semibold uppercase tracking-widest text-primary`,
589        children: `By modality`
590      }), (0, T.jsx)(`h2`, {
591        className: `mt-2 font-display text-3xl font-bold sm:text-4xl`,
592        children: `Built by specialists, for specialists.`
593      }), (0, T.jsx)(`p`, {
594        className: `mt-3 text-muted-foreground`,
595        children: `Created for the unique needs of Respiratory Therapy education, helping programs save time, simplify compliance, and improve the clinical experience for students and faculty.`
596      })]
597    }), (0, T.jsxs)(De, {
598      defaultValue: `rt`,
599      className: `mt-10`,
600      children: [(0, T.jsxs)(q, {
601        className: `mx-auto grid w-full max-w-md grid-cols-2`,
602        children: [(0, T.jsx)(J, {
603          value: `rt`,
604          children: `Respiratory Therapy`
605        }), (0, T.jsx)(J, {
606          value: `rad`,
607          children: `Radiography`
608        })]
609      }), (0, T.jsx)(Y, {
610        value: `rt`,
611        className: `mt-8`,
612        children: (0, T.jsx)(X, {
613          features: f,
614          href: `/respiratory`,
615          label: `Respiratory Therapy`,
616          image: re,
617          alt: `Respiratory therapist working with a ventilator in the ICU`
618        })
619      }), (0, T.jsx)(Y, {
620        value: `rad`,
621        className: `mt-8`,
622        children: (0, T.jsx)(X, {
623          features: d,
624          href: `/radiology`,
625          label: `Radiography`,
626          image: ve,
627          alt: `Radiologic technologist in a modern imaging suite`
628        })
629      })]
630    })]
631  })
632}
633var ke = {
634    asset_id: `aa444489-7011-43d9-92d1-81722d805c4c`,
635    content_type: `image/png`,
636    created_at: `2026-07-10T12:41:57Z`,
637    original_filename: `mobile-app-1.png`,
638    project_id: `a9cac9cd-58d5-4d4b-ba01-f3e7fd29e6ef`,
639    r2_key: `/assets/mobile-app-1.png`,
640    size: 482381,
641    url: `/assets/mobile-app-1.png`,
642    version: 1
643  },
644  Ae = {
645    asset_id: `cff9809b-af36-46ad-b1cc-8bcf5f99bec6`,
646    content_type: `image/png`,
647    created_at: `2026-07-10T12:42:00Z`,
648    original_filename: `mobile-app-2.png`,
649    project_id: `a9cac9cd-58d5-4d4b-ba01-f3e7fd29e6ef`,
650    r2_key: `/assets/mobile-app-2.png`,
651    size: 873019,
652    url: `/assets/mobile-app-2.png`,
653    version: 1
654  },
655  je = [{
656    icon: l,
657    label: `Doctor Interaction`
658  }, {
659    icon: s,
660    label: `Daily Journal · VTT`
661  }, {
662    icon: h,
663    label: `Attendance · GPS`
664  }, {
665    icon: ee,
666    label: `PEF Check-Off`
667  }, {
668    icon: u,
669    label: `Clinical Evaluations`
670  }, {
671    icon: c,
672    label: `Clinical Assessments`
673  }],
674  Z = [{
675    src: ke.url,
676    alt: `Clinical Trac mobile app home dashboard`
677  }, {
678    src: Ae.url,
679    alt: `Clinical Trac mobile app rotation details`
680  }];
681
682function Q() {
683  let [e, t] = (0, S.useState)(0);
684  return (0, S.useEffect)(() => {
685    let e = setInterval(() => t(e => (e + 1) % Z.length), 4500);
686    return () => clearInterval(e)
687  }, []), (0, T.jsx)(`section`, {
688    className: `bg-surface-muted section-y`,
689    children: (0, T.jsxs)(`div`, {
690      className: `container-page grid gap-12 lg:grid-cols-2 lg:items-center`,
691      children: [(0, T.jsxs)(`div`, {
692        children: [(0, T.jsx)(`p`, {
693          className: `text-xs font-semibold uppercase tracking-widest text-primary`,
694          children: `Mobile app`
695        }), (0, T.jsx)(`h2`, {
696          className: `mt-2 font-display text-3xl font-bold sm:text-4xl`,
697          children: `A Student/Instructor Mobile Experience.`
698        }), (0, T.jsx)(`p`, {
699          className: `mt-3 max-w-lg text-muted-foreground`,
700          children: `Voice-to-text journaling, GPS clock in, SMS Check-off, Clinical Evaluations and Assessments - in the pocket of every Student/Instructor, on iOS and Android.`
701        }), (0, T.jsx)(`div`, {
702          className: `mt-6 grid grid-cols-2 gap-3 sm:grid-cols-3`,
703          children: je.map(e => (0, T.jsxs)(`div`, {
704            className: `flex items-center gap-2 rounded-lg border border-border bg-background px-3 py-2 text-sm`,
705            children: [(0, T.jsx)(e.icon, {
706              className: `h-4 w-4 text-primary`
707            }), e.label]
708          }, e.label))
709        }), (0, T.jsx)(`div`, {
710          className: `mt-8`,
711          children: (0, T.jsx)(de, {})
712        })]
713      }), (0, T.jsx)(`div`, {
714        className: `relative`,
715        children: (0, T.jsxs)(`div`, {
716          className: `relative mx-auto w-full max-w-[520px]`,
717          children: [(0, T.jsx)(`div`, {
718            className: `relative aspect-[3/4]`,
719            children: Z.map((t, n) => (0, T.jsx)(`img`, {
720              src: t.src,
721              alt: t.alt,
722              loading: `lazy`,
723              className: i(`absolute inset-0 mx-auto h-full w-full object-contain transition-opacity duration-700`, n === e ? `opacity-100` : `opacity-0`)
724            }, t.src))
725          }), (0, T.jsx)(`div`, {
726            className: `mt-4 flex justify-center gap-2`,
727            children: Z.map((n, r) => (0, T.jsx)(`button`, {
728              type: `button`,
729              "aria-label": `Show slide ${r+1}`,
730              onClick: () => t(r),
731              className: i(`h-2 rounded-full transition-all`, r === e ? `w-6 bg-primary` : `w-2 bg-border`)
732            }, r))
733          })]
734        })
735      })]
736    })
737  })
738}
739
740function $({
741  children: e,
742  className: t,
743  delay: n = 0,
744  as: r = `div`
745}) {
746  let a = (0, S.useRef)(null),
747    [o, s] = (0, S.useState)(!1);
748  return (0, S.useEffect)(() => {
749    let e = a.current;
750    if (!e) return;
751    let t = new IntersectionObserver(e => {
752      e.forEach(e => {
753        e.isIntersecting && (s(!0), t.disconnect())
754      })
755    }, {
756      threshold: .12,
757      rootMargin: `0px 0px -40px 0px`
758    });
759    return t.observe(e), () => t.disconnect()
760  }, []), (0, T.jsx)(r, {
761    ref: a,
762    style: {
763      transitionDelay: `${n}ms`
764    },
765    className: i(`reveal-anim`, o ? `reveal-shown` : `reveal-hidden`, t),
766    children: e
767  })
768}
769
770function Me() {
771  return (0, T.jsx)(`section`, {
772    className: `container-page section-y`,
773    children: (0, T.jsxs)(`div`, {
774      className: `relative grid gap-0 overflow-hidden rounded-3xl border border-border bg-background shadow-soft lg:grid-cols-[1.1fr_1fr]`,
775      children: [(0, T.jsxs)(`div`, {
776        className: `p-10`,
777        children: [(0, T.jsxs)(`span`, {
778          className: `inline-flex items-center gap-2 rounded-full bg-primary-soft px-3 py-1 text-xs font-medium text-primary`,
779          children: [(0, T.jsx)(be, {
780            className: `h-3.5 w-3.5`
781          }), `Head-to-head`]
782        }), (0, T.jsx)(`h2`, {
783          className: `mt-3 font-display text-3xl font-bold sm:text-4xl`,
784          children: `How Clinical Trac™ compares to our Competitors.`
785        }), (0, T.jsx)(`p`, {
786          className: `mt-3 max-w-2xl text-muted-foreground`,
787          children: `Compare the features that matter most. Explore key capabilities designed specifically for RT and Rad programs, including CoARC reporting, GPS attendance, voice-to-text documentation, and dedicated customer support.`
788        }), (0, T.jsx)(x, {
789          to: `/compare`,
790          className: `mt-6 inline-block`,
791          children: (0, T.jsxs)(o, {
792            size: `lg`,
793            className: `bg-primary hover:bg-primary/90`,
794            children: [`See the comparison`, (0, T.jsx)(p, {
795              className: `ml-1 h-4 w-4`
796            })]
797          })
798        })]
799      }), (0, T.jsx)(`div`, {
800        className: `relative min-h-[240px] lg:min-h-full`,
801        children: (0, T.jsx)(`img`, {
802          src: ge,
803          width: 1600,
804          height: 1100,
805          alt: `ClinicalTrac analytics dashboard preview`,
806          loading: `lazy`,
807          className: `absolute inset-0 h-full w-full object-cover object-top`
808        })
809      })]
810    })
811  })
812}
813
814function Ne() {
815  return (0, T.jsxs)(T.Fragment, {
816    children: [(0, T.jsx)(D, {}), (0, T.jsx)(O, {}), (0, T.jsx)(j, {}), (0, T.jsx)(`section`, {
817      className: `container-page section-y`,
818      children: (0, T.jsxs)(`div`, {
819        className: `grid gap-6 lg:grid-cols-[1.2fr_1fr]`,
820        children: [(0, T.jsx)($, {
821          className: `relative overflow-hidden rounded-3xl border border-border shadow-lift`,
822          children: (0, T.jsx)(`img`, {
823            src: me,
824            width: 1600,
825            height: 1100,
826            alt: `Allied health students collaborating around a laptop`,
827            loading: `lazy`,
828            className: `h-full w-full object-cover object-top`
829          })
830        }), (0, T.jsxs)(`div`, {
831          className: `grid gap-6`,
832          children: [(0, T.jsxs)($, {
833            delay: 80,
834            className: `rounded-2xl border border-border bg-surface-muted p-6`,
835            children: [(0, T.jsx)(`span`, {
836              className: `inline-flex h-10 w-10 items-center justify-center rounded-xl bg-background text-destructive`,
837              children: (0, T.jsx)(xe, {
838                className: `h-5 w-5`
839              })
840            }), (0, T.jsx)(`h3`, {
841              className: `mt-3 font-display text-lg font-semibold`,
842              children: `The Legacy Approach`
843            }), (0, T.jsxs)(`ul`, {
844              className: `mt-2 space-y-1.5 text-sm text-muted-foreground`,
845              children: [(0, T.jsx)(`li`, {
846                children: `• Manual tracking with paper logs and spreadsheets`
847              }), (0, T.jsx)(`li`, {
848                children: `• Outdated software designed for yesterday's challenges`
849              }), (0, T.jsx)(`li`, {
850                children: `• Waiting in ticket queues instead of getting immediate help`
851              })]
852            })]
853          }), (0, T.jsxs)($, {
854            delay: 160,
855            className: `rounded-2xl border border-primary/20 bg-primary-soft p-6`,
856            children: [(0, T.jsx)(`span`, {
857              className: `inline-flex h-10 w-10 items-center justify-center rounded-xl bg-primary text-primary-foreground`,
858              children: (0, T.jsx)(g, {
859                className: `h-5 w-5`
860              })
861            }), (0, T.jsx)(`h3`, {
862              className: `mt-3 font-display text-lg font-semibold`,
863              children: `The Clinical Trac™ Approach`
864            }), (0, T.jsxs)(`ul`, {
865              className: `mt-2 space-y-1.5 text-sm text-foreground/85`,
866              children: [(0, T.jsx)(`li`, {
867                children: `• Real-time visibility across your entire operation`
868              }), (0, T.jsx)(`li`, {
869                children: `• Intuitive mobile app with voice-to-text accessibility`
870              }), (0, T.jsx)(`li`, {
871                children: `• A dedicated specialist who knows your organization`
872              })]
873            })]
874          })]
875        })]
876      })
877    }), (0, T.jsx)(_e, {
878      features: te,
879      eyebrow: `Platform`,
880      title: `Everything Your Clinical Program Needs.`,
881      sub: `Tailored specifically for RT and Radiologic Sciences with streamlined workflows that keep students, faculty, and hospital sites connected.`
882    }), (0, T.jsx)(Oe, {}), (0, T.jsx)(Q, {}), (0, T.jsx)(Me, {}), (0, T.jsx)(r, {}), (0, T.jsxs)(`section`, {
883      id: `watch`,
884      className: `container-page section-y`,
885      children: [(0, T.jsxs)(`div`, {
886        className: `mx-auto max-w-3xl text-center`,
887        children: [(0, T.jsx)(`p`, {
888          className: `text-xs font-semibold uppercase tracking-widest text-primary`,
889          children: `Product overview`
890        }), (0, T.jsx)(`h2`, {
891          className: `mt-2 font-display text-3xl font-bold sm:text-4xl`,
892          children: `Three minutes, whole platform explained`
893        })]
894      }), (0, T.jsx)(`div`, {
895        className: `mx-auto mt-8 max-w-4xl overflow-hidden rounded-2xl border border-border bg-surface-muted shadow-soft`,
896        children: (0, T.jsx)(`div`, {
897          className: `relative aspect-video`,
898          children: v.productVideoUrl.startsWith(`http`) ? (0, T.jsx)(`iframe`, {
899            src: v.productVideoUrl,
900            title: `ClinicalTrac product overview`,
901            allow: `accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture`,
902            allowFullScreen: !0,
903            className: `h-full w-full`
904          }) : (0, T.jsxs)(`div`, {
905            className: `flex h-full flex-col items-center justify-center gap-3 text-muted-foreground`,
906            children: [(0, T.jsx)(p, {
907              className: `h-6 w-6`
908            }), (0, T.jsx)(`p`, {
909              className: `text-sm`,
910              children: `Video embed placeholder - client to provide URL.`
911            })]
912          })
913        })
914      })]
915    }), (0, T.jsx)(pe, {})]
916  })
917}
918export {
919  Ne as component
920};

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.