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.