1function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } 2// components.jsx â Ruvos website React components 3 4const { 5 useState, 6 useEffect, 7 useRef 8} = React; 9 10// ââââââââââââââââââââââââââââââââââââââââââââââââââ 11// Navigation 12// ââââââââââââââââââââââââââââââââââââââââââââââââââ 13function Nav({ 14 activePage 15} = {}) { 16 const [menuOpen, setMenuOpen] = useState(false); 17 function scrollToSection(id, e) { 18 const el = document.getElementById(id); 19 if (el) { 20 e.preventDefault(); 21 setMenuOpen(false); 22 el.scrollIntoView({ 23 behavior: 'smooth' 24 }); 25 } 26 } 27 function closeMenu() { 28 setMenuOpen(false); 29 } 30 return /*#__PURE__*/React.createElement("div", { 31 className: "nav-wrap" 32 }, /*#__PURE__*/React.createElement("nav", { 33 className: `nav${menuOpen ? ' nav--open' : ''}` 34 }, /*#__PURE__*/React.createElement("a", { 35 href: "index.html", 36 className: "nav__logo-link", 37 "aria-label": "Ruvos home" 38 }, /*#__PURE__*/React.createElement("img", { 39 src: "assets/ruvos-wordmark-red.png", 40 alt: "Ruvos", 41 className: "nav__logo" 42 })), /*#__PURE__*/React.createElement("div", { 43 className: "nav__links" 44 }, /*#__PURE__*/React.createElement("a", { 45 className: `nav__link${activePage === 'solutions' ? ' is-active' : ''}`, 46 href: "index.html#products", 47 onClick: e => scrollToSection('products', e) 48 }, "SOLUTIONS"), /*#__PURE__*/React.createElement("a", { 49 className: `nav__link${activePage === 'services' ? ' is-active' : ''}`, 50 href: "index.html#services", 51 onClick: e => scrollToSection('services', e) 52 }, "SERVICES"), /*#__PURE__*/React.createElement("a", { 53 className: `nav__link${activePage === 'about' ? ' is-active' : ''}`, 54 href: "about.html", 55 onClick: closeMenu 56 }, "ABOUT"), /*#__PURE__*/React.createElement("a", { 57 className: `nav__link${activePage === 'team' ? ' is-active' : ''}`, 58 href: "team.html", 59 onClick: closeMenu 60 }, "TEAM"), /*#__PURE__*/React.createElement("a", { 61 className: `nav__link${activePage === 'careers' ? ' is-active' : ''}`, 62 href: "careers.html", 63 onClick: closeMenu 64 }, "CAREERS")), /*#__PURE__*/React.createElement("a", { 65 href: "mailto:[email protected]", 66 className: "nav__cta" 67 }, "Get in Touch"), /*#__PURE__*/React.createElement("button", { 68 className: "nav__burger", 69 "aria-label": menuOpen ? 'Close menu' : 'Open menu', 70 "aria-expanded": menuOpen, 71 onClick: () => setMenuOpen(o => !o) 72 }, /*#__PURE__*/React.createElement("span", null), /*#__PURE__*/React.createElement("span", null), /*#__PURE__*/React.createElement("span", null)))); 73} 74 75// ââââââââââââââââââââââââââââââââââââââââââââââââââ 76// Hero 77// ââââââââââââââââââââââââââââââââââââââââââââââââââ 78function Hero() { 79 return /*#__PURE__*/React.createElement("section", { 80 className: "hero" 81 }, /*#__PURE__*/React.createElement(DnaHelix, { 82 className: "hero__helix" 83 }), /*#__PURE__*/React.createElement("h1", { 84 className: "hero__title" 85 }, "Finding the ", /*#__PURE__*/React.createElement("span", { 86 className: "accent" 87 }, "signal"), " and building what comes next"), /*#__PURE__*/React.createElement("p", { 88 className: "hero__sub" 89 }, "Connecting technology and people so healthcare organizations can turn data into decisions that matter."), /*#__PURE__*/React.createElement("div", { 90 className: "hero__ctas" 91 }, /*#__PURE__*/React.createElement("a", { 92 href: "#contact", 93 className: "btn btn--primary" 94 }, "Work with us", /*#__PURE__*/React.createElement("svg", { 95 className: "btn__arrow", 96 width: "16", 97 height: "16",
98 viewBox: "0 0 16 16", 99 fill: "none" 100 }, /*#__PURE__*/React.createElement("path", { 101 d: "M3 8h10M9 4l4 4-4 4", 102 stroke: "currentColor", 103 strokeWidth: "1.5", 104 strokeLinecap: "round", 105 strokeLinejoin: "round" 106 }))), /*#__PURE__*/React.createElement("a", { 107 href: "about.html", 108 className: "btn btn--ghost" 109 }, "Get to know us"))); 110} 111 112// ââââââââââââââââââââââââââââââââââââââââââââââââââ 113// Logo marquee â scrolls leftâright 114// ââââââââââââââââââââââââââââââââââââââââââââââââââ 115const LOGOS = [{ 116 kind: 'img', 117 src: 'assets/logo-johns-hopkins.png', 118 alt: 'Johns Hopkins University', 119 h: 52 120}, { 121 kind: 'img', 122 src: 'assets/logo-aws.png', 123 alt: 'AWS', 124 h: 37 125}, { 126 kind: 'img', 127 src: 'assets/logo-aphl.png', 128 alt: 'APHL', 129 h: 46 130}, { 131 kind: 'img', 132 src: 'assets/logo-florida-health.png', 133 alt: 'Florida Health', 134 h: 52 135}, { 136 kind: 'img', 137 src: 'assets/logo-cdc.png', 138 alt: 'CDC', 139 h: 60 140}, { 141 kind: 'img', 142 src: 'assets/logo-naphsis-real.png', 143 alt: 'Naphsis', 144 h: 32 145}, { 146 kind: 'img', 147 src: 'assets/logo-pricing-group.png', 148 alt: 'The Pricing Group', 149 h: 56 150}, { 151 kind: 'img', 152 src: 'assets/logo-artia.png', 153 alt: 'Artia Solutions', 154 h: 50 155}, { 156 kind: 'img', 157 src: 'assets/logo-rat.png', 158 alt: 'Radiology Associates of Tallahassee', 159 h: 44, 160 badge: true 161}, { 162 kind: 'img', 163 src: 'assets/GPH.png', 164 alt: 'Georgia Department of Public Health', 165 h: 46 166}]; 167function LogoMarquee() { 168 // duplicate list to create seamless loop 169 const track = [...LOGOS, ...LOGOS]; 170 return /*#__PURE__*/React.createElement("div", { 171 className: "logos" 172 }, /*#__PURE__*/React.createElement("div", { 173 className: "logos__track" 174 }, track.map((l, i) => { 175 if (l.kind === 'img') { 176 return /*#__PURE__*/React.createElement("div", { 177 key: i, 178 className: `logos__item${l.badge ? ' logos__item--badge' : ''}` 179 }, /*#__PURE__*/React.createElement("img", { 180 src: l.src, 181 alt: l.alt, 182 style: { 183 height: l.h || 52 184 } 185 })); 186 } 187 if (l.kind === 'naphsis') { 188 return /*#__PURE__*/React.createElement("div", { 189 key: i, 190 className: "logos__item logos__item--naphsis" 191 }, l.label); 192 } 193 return /*#__PURE__*/React.createElement("div", { 194 key: i, 195 className: `logos__item logos__item--word ${l.cls}` 196 }, l.label); 197 }))); 198} 199 200// ââââââââââââââââââââââââââââââââââââââââââââââââââ 201// Products section 202// ââââââââââââââââââââââââââââââââââââââââââââââââââ 203const PRODUCTS = [{ 204 title: 'AIMS', 205 logo: /*#__PURE__*/React.createElement(AimsLogo, null), 206 desc: "Created in partnership with APHL, what started as a pilot to help labs share critical health data is now the backbone of public health data exchange for the entire country.", 207 tags: ['National Backbone', 'Crisis Tested', 'TEFCA Enabled'], 208 brandA: '#2AB5BA', 209 brandB: '#1A1F2E', 210 href: 'https://aphl.org/focus-areas/informatics/aims-platform/overview', 211 external: true 212}, { 213 title: 'HCAP', 214 logo: /*#__PURE__*/React.createElement(HcapLogo, null), 215 desc: "Healthcare Capacity is a decision-support platform that turns fragmented public health and healthcare data into a clear, actionable picture of community need.", 216 tags: ['Global Data', 'Decision Support', 'Progress Tracking'], 217 brandA: '#DD1A3C', 218 brandB: '#1F2A5A', 219 href: 'hcap.html' 220}, { 221 title: 'Integrity', 222 logo: /*#__PURE__*/React.createElement(IntegrityLogo, null), 223 desc: "Built with Florida Department of Health to improve data quality, forecasting, and decision-making, Integrity automates quality checks to ensure accuracy and reliability across health data sources.", 224 tags: ['Data Quality', 'Real-time Intelligence', 'Analytics'], 225 brandA: '#1947E5', 226 brandB: '#2A2A2E', 227 href: 'integrity.html' 228}, { 229 title: 'WellGS', 230 logo: /*#__PURE__*/React.createElement(WellGsLogo, null), 231 desc: "WellGS unites the disparate systems a bioinformatics lab runs on â accessioning, plate maps, sample sheets, instrument runs, cloud analysis, and reporting â into one continuous path, so results come back where the sample already lives.", 232 tags: ['Bioinformatics Lab', 'AWS HealthOmics', 'LIMS Integration'], 233 brandA: '#4A7CD6', 234 brandB: '#0B195C', 235 href: 'wellgs.html' 236}, { 237 title: 'Global Mosaic', 238 logo: /*#__PURE__*/React.createElement(GloMoLogo, null),
239 desc: "GloMo is an end-to-end geospatial analytics project that lets users explore administrative boundaries, draw polygons, and query population and demographic mosaics.", 240 tags: ['Custom Polygons', 'Pixel Data', 'AI Enabled Insights'], 241 brandA: '#1B6B6B', 242 brandB: '#C44B2B' 243}, 244// BioDB hidden 245// { 246// title: 'BioDB', 247// logo: <BioDbLogo />, 248// desc: "The BPHL Bioinformatics Database is a comprehensive genomics database application designed to manage the complete lifecycle of laboratory samples, from accession through sequencing and analysis.", 249// tags: ['Genomics', 'Genome Data Exchange', 'Analytics'], 250// brandA: '#7FAE5A', brandB: '#4A7038', 251// href: 'biodb.html', 252// }, 253{ 254 title: 'Global Pandemic Simulator', 255 logo: /*#__PURE__*/React.createElement(PandemicLogo, null), 256 desc: "Partnering with WHO and Johns Hopkins University to advance pandemic preparedness, our tool simulates outbreaks to test response strategies, resource allocation, and seasonal planning.", 257 tags: ['Outbreak Models', 'AI-Enabled Insights', 'Pandemic Passport'], 258 brandA: '#0093D0', 259 brandB: '#0E1E37' 260}, { 261 title: 'WellConnector', 262 logo: /*#__PURE__*/React.createElement(WellConnectorLogo, null), 263 desc: "WellConnector is helping to kill the clipboard, creating \u201Ca pre-check for patient health,\u201D designing a platform that will allow patients to securely and easily share health history with providers, making new visits more efficient and ensuring accurate medical information is readily available to better inform healthcare decisions.", 264 tags: ['Encrypted', 'Instant Transfer', 'Health Passport'], 265 brandA: '#2479F2', 266 brandB: '#13218B', 267 href: 'https://www.wellconnector.com/', 268 external: true 269}, { 270 title: 'TLH NavCare', 271 logo: /*#__PURE__*/React.createElement(TlhNavCareLogo, null), 272 desc: "The Tallahassee Healthcare Navigation Portal is a free, community-centered resource designed to help people navigate the local healthcare landscape. It is not a diagnostic tool, a patient portal, or a telemedicine service. Its purpose is simple: help you find the right place to get care.", 273 tags: ['Tallahassee Health', 'Community-Driven'], 274 brandA: '#0E8C8C', 275 brandB: '#0A5A5A', 276 href: 'https://tlhnavcare.com/', 277 external: true 278}, { 279 title: 'Capital Region Business Concierge', 280 logo: /*#__PURE__*/React.createElement(CapitalRegionLogo, null), 281 desc: "A platform connecting businesses, entrepreneurs, talent, investors, and community organizations across Florida's Capital Region.", 282 tags: ['Business Network', 'Regional Platform', 'Community Resources'], 283 brandA: '#003366', 284 brandB: '#C6942A', 285 href: 'https://capitalregion.biz/', 286 external: true 287}]; 288 289// Brand-mark components (simple SVG/type marks) 290function AimsLogo() { 291 return /*#__PURE__*/React.createElement("img", { 292 src: "assets/logo-aims.png", 293 alt: "AIMS", 294 style: { 295 height: 96, 296 width: 'auto', 297 objectFit: 'contain' 298 } 299 }); 300} 301function HcapLogo() { 302 return /*#__PURE__*/React.createElement("img", { 303 src: "assets/logo-hcap.png", 304 alt: "HCAP", 305 style: { 306 height: 56, 307 width: 'auto', 308 objectFit: 'contain' 309 } 310 }); 311} 312function IntegrityLogo() { 313 return /*#__PURE__*/React.createElement("img", { 314 src: "assets/logo-integrity.png", 315 alt: "Integrity", 316 style: { 317 height: 110, 318 width: 'auto', 319 objectFit: 'contain' 320 } 321 }); 322} 323function GloMoLogo() { 324 return /*#__PURE__*/React.createElement("img", { 325 src: "assets/GlobalMosaic_Wordmark_Light.png", 326 alt: "Global Mosaic", 327 style: { 328 height: 80, 329 width: 'auto', 330 objectFit: 'contain' 331 } 332 }); 333} 334function WellGsLogo() { 335 return /*#__PURE__*/React.createElement("img", { 336 src: "assets/logo-wellgs.png", 337 alt: "WellGS", 338 style: { 339 width: 330, 340 height: 'auto', 341 display: 'block' 342 } 343 }); 344} 345function BioDbLogo() { 346 return /*#__PURE__*/React.createElement("img", { 347 src: "assets/logo-biodb.png", 348 alt: "BioDB", 349 style: { 350 height: 140, 351 width: 'auto', 352 objectFit: 'contain' 353 } 354 }); 355} 356function PandemicLogo() { 357 return /*#__PURE__*/React.createElement("img", { 358 src: "assets/WHO_PanSim.png", 359 alt: "WHO Pandemic Simulator", 360 style: { 361 maxHeight: 100, 362 width: '92%', 363 maxWidth: 340, 364 objectFit: 'contain' 365 } 366 }); 367} 368function TlhNavCareLogo() { 369 return /*#__PURE__*/React.createElement("img", { 370 src: "assets/logo-tlhnavcare.png", 371 alt: "TLH NavCare", 372 style: { 373 height: 88, 374 width: 'auto', 375 objectFit: 'contain' 376 } 377 }); 378} 379function CapitalRegionLogo() { 380 return /*#__PURE__*/React.createElement("div", { 381 style: { 382 display: 'flex', 383 flexDirection: 'column', 384 alignItems: 'center', 385 gap: 5 386 } 387 }, /*#__PURE__*/React.createElement("span", { 388 style: { 389 fontFamily: 'var(--font-display)', 390 fontWeight: 700, 391 fontSize: 41, 392 letterSpacing: '-0.02em', 393 color: '#003366' 394 } 395 }, "Capital Region"), /*#__PURE__*/React.createElement("span", { 396 style: { 397 fontFamily: 'var(--font-display)', 398 fontWeight: 600, 399 fontSize: 22, 400 letterSpacing: '0.14em', 401 textTransform: 'uppercase', 402 color: '#C6942A' 403 } 404 }, "Business Concierge")); 405} 406function WellConnectorLogo() { 407 return /*#__PURE__*/React.createElement("img", { 408 src: "assets/logo-wellconnector.png?v=1", 409 alt: "WellConnector", 410 style: { 411 width: 330, 412 height: 'auto', 413 display: 'block' 414 } 415 }); 416} 417function Products() { 418 return /*#__PURE__*/React.createElement("section", { 419 className: "section", 420 id: "products" 421 }, /*#__PURE__*/React.createElement("div", { 422 className: "section__inner" 423 }, /*#__PURE__*/React.createElement("div", { 424 className: "section__head" 425 }, /*#__PURE__*/React.createElement("h2", { 426 className: "section__title" 427 }, "We don\u2019t just consult. ", /*#__PURE__*/React.createElement("b", null, "We build.")), /*#__PURE__*/React.createElement("p", { 428 className: "section__sub" 429 }, "From strategy and roadmapping through implementation, operations, and long-term support, we stay with our partners for the full journey."), /*#__PURE__*/React.createElement("div", { 430 style: { 431 marginTop: 28 432 } 433 }, /*#__PURE__*/React.createElement("span", { 434 className: "section__eyebrow" 435 }, /*#__PURE__*/React.createElement("svg", { 436 width: "14", 437 height: "14",
438 viewBox: "0 0 24 24", 439 fill: "none", 440 stroke: "currentColor", 441 strokeWidth: "1.8", 442 strokeLinecap: "round", 443 strokeLinejoin: "round", 444 "aria-hidden": "true" 445 }, /*#__PURE__*/React.createElement("rect", { 446 width: "20", 447 height: "14", 448 x: "2", 449 y: "7", 450 rx: "2" 451 }), /*#__PURE__*/React.createElement("path", { 452 d: "M6 3h12" 453 }), /*#__PURE__*/React.createElement("path", { 454 d: "M2 11h20" 455 })), "Solutions"))), /*#__PURE__*/React.createElement("div", { 456 className: "products" 457 }, PRODUCTS.map((p, i) => /*#__PURE__*/React.createElement("article", { 458 key: i, 459 className: `pcard${p.comingSoon ? ' pcard--soon' : ''}${p.href ? ' pcard--link' : ''}`, 460 style: { 461 '--brandA': p.brandA, 462 '--brandB': p.brandB 463 } 464 }, p.href ? /*#__PURE__*/React.createElement("a", _extends({ 465 href: p.href, 466 className: "pcard__media-link", 467 "aria-label": `Learn more about ${p.title}` 468 }, p.external ? { 469 target: '_blank', 470 rel: 'noopener noreferrer' 471 } : {}), /*#__PURE__*/React.createElement("div", { 472 className: "pcard__media" 473 }, p.logo, p.comingSoon && /*#__PURE__*/React.createElement("span", { 474 className: "pcard__badge" 475 }, "Coming soon"))) : /*#__PURE__*/React.createElement("div", { 476 className: "pcard__media" 477 }, p.logo, p.comingSoon && /*#__PURE__*/React.createElement("span", { 478 className: "pcard__badge" 479 }, "Coming soon")), /*#__PURE__*/React.createElement("div", { 480 className: "pcard__body" 481 }, /*#__PURE__*/React.createElement("h3", { 482 className: "pcard__title" 483 }, p.title), /*#__PURE__*/React.createElement("p", { 484 className: "pcard__desc" 485 }, p.desc), /*#__PURE__*/React.createElement("div", { 486 className: "pcard__tags" 487 }, p.tags.map((t, j) => /*#__PURE__*/React.createElement("span", { 488 key: j, 489 className: "tag" 490 }, t))))))))); 491} 492 493// ââââââââââââââââââââââââââââââââââââââââââââââââââ 494// Services 495// ââââââââââââââââââââââââââââââââââââââââââââââââââ 496const SERVICES = [{ 497 img: 'assets/service-interop.gif', 498 title: 'Interoperability', 499 desc: "We connect fragmented systems and make data flow securely and meaningfully between organizations, platforms, and stakeholders. This is where Ruvos began, and it remains foundational to everything else." 500}, { 501 img: 'assets/service-analytics.gif', 502 title: 'Advanced Analytics', 503 desc: "We turn connected data into insight: forecasting, anomaly detection, visualization, and increasingly, AI and machine learning applications that help people see what they couldn't see before." 504}, { 505 img: 'assets/service-modernization.gif', 506 title: 'Modernization', 507 desc: "We help organizations move from outdated, legacy infrastructure to modern, scalable systems, without disrupting the work that depends on them." 508}]; 509function Services() { 510 return /*#__PURE__*/React.createElement("section", { 511 className: "section", 512 id: "services", 513 style: { 514 background: 'transparent', 515 borderTop: '1px solid var(--border)', 516 borderBottom: '1px solid var(--border)' 517 } 518 }, /*#__PURE__*/React.createElement("div", { 519 className: "section__inner" 520 }, /*#__PURE__*/React.createElement("div", { 521 className: "section__head" 522 }, /*#__PURE__*/React.createElement("h2", { 523 className: "section__title" 524 }, /*#__PURE__*/React.createElement("b", null, "We translate"), " across disciplines"), /*#__PURE__*/React.createElement("p", { 525 className: "section__sub" 526 }, "Our team brings together data engineering, public health, epidemiology, clinical practice, and strategy."), /*#__PURE__*/React.createElement("div", { 527 style: { 528 marginTop: 28 529 } 530 }, /*#__PURE__*/React.createElement("span", { 531 className: "section__eyebrow" 532 }, /*#__PURE__*/React.createElement("svg", { 533 width: "14", 534 height: "14", 535 viewBox: "0 0 24 24", 536 fill: "none", 537 stroke: "currentColor", 538 strokeWidth: "1.8", 539 strokeLinecap: "round", 540 strokeLinejoin: "round", 541 "aria-hidden": "true" 542 }, /*#__PURE__*/React.createElement("path", { 543 d: "M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z" 544 })), "Our Services"))), /*#__PURE__*/React.createElement("div", { 545 className: "services" 546 }, SERVICES.map((s, i) => /*#__PURE__*/React.createElement("article", { 547 key: i, 548 className: "scard" 549 }, /*#__PURE__*/React.createElement("div", { 550 className: "scard__visual" 551 }, /*#__PURE__*/React.createElement("img", { 552 src: s.img, 553 alt: s.title 554 })), /*#__PURE__*/React.createElement("h3", { 555 className: "scard__title" 556 }, s.title), /*#__PURE__*/React.createElement("p", { 557 className: "scard__desc" 558 }, s.desc)))))); 559} 560 561// ââââââââââââââââââââââââââââââââââââââââââââââââââ 562// Contact CTA 563// ââââââââââââââââââââââââââââââââââââââââââââââââââ 564function Typewriter({ 565 words, 566 typeSpeed = 110, 567 deleteSpeed = 55, 568 holdMs = 1100 569}) { 570 const [wi, setWi] = useState(0); 571 const [text, setText] = useState(''); 572 const [phase, setPhase] = useState('typing'); // typing | holding | deleting 573 574 useEffect(() => { 575 const word = words[wi % words.length]; 576 let t; 577 if (phase === 'typing') { 578 if (text.length < word.length) { 579 t = setTimeout(() => setText(word.slice(0, text.length + 1)), typeSpeed); 580 } else { 581 t = setTimeout(() => setPhase('deleting'), holdMs); 582 } 583 } else if (phase === 'deleting') { 584 if (text.length > 0) { 585 t = setTimeout(() => setText(word.slice(0, text.length - 1)), deleteSpeed); 586 } else { 587 setPhase('typing'); 588 setWi(i => (i + 1) % words.length); 589 } 590 } 591 return () => clearTimeout(t); 592 }, [text, phase, wi, words, typeSpeed, deleteSpeed, holdMs]); 593 return /*#__PURE__*/React.createElement("span", { 594 className: "contact__typed" 595 }, /*#__PURE__*/React.createElement("span", { 596 className: "contact__l" 597 }, text), /*#__PURE__*/React.createElement("span", { 598 className: "contact__cursor" 599 }, "_")); 600} 601function Contact() { 602 return /*#__PURE__*/React.createElement("section", { 603 className: "contact", 604 id: "contact" 605 }, /*#__PURE__*/React.createElement("div", { 606 className: "contact__inner" 607 }, /*#__PURE__*/React.createElement("h2", { 608 className: "contact__title" 609 }, /*#__PURE__*/React.createElement("span", { 610 className: "contact__line contact__line--1" 611 }, "We speak your"), /*#__PURE__*/React.createElement("span", { 612 className: "contact__line contact__line--2" 613 }, /*#__PURE__*/React.createElement(Typewriter, { 614 words: ["System", "LIMS", "EHR", "Data", "Cloud"] 615 }), " language.")), /*#__PURE__*/React.createElement("p", { 616 className: "contact__sub" 617 }, "Let\u2019s get the conversation started."), /*#__PURE__*/React.createElement("a", { 618 href: "mailto:[email protected]", 619 className: "btn btn--primary" 620 }, "Contact us"))); 621} 622 623// ââââââââââââââââââââââââââââââââââââââââââââââââââ 624// Interest form â Netlify Forms 625// ââââââââââââââââââââââââââââââââââââââââââââââââââ 626// Netlify detects forms by parsing the STATIC HTML at deploy time. These pages 627// render through React, so the form does not exist in the deployed markup and 628// would never be detected. Each page that uses this component therefore carries 629// a matching hidden <form> in its .html file â same `name`, same field names â 630// which is what Netlify registers. This component posts to it by form-name. 631//
632// Submitting over fetch rather than a native POST keeps the visitor on the page 633// and lets the section swap to an inline thank-you instead of bouncing to 634// Netlify's generic success page. 635function InterestForm({ 636 formName, 637 onDark, 638 submitLabel = 'Send' 639}) { 640 const [status, setStatus] = useState('idle'); // idle | sending | done | error 641 642 function handleSubmit(e) { 643 e.preventDefault(); 644 const body = new URLSearchParams(new FormData(e.target)).toString(); 645 setStatus('sending'); 646 fetch('/', { 647 method: 'POST', 648 headers: { 649 'Content-Type': 'application/x-www-form-urlencoded' 650 }, 651 body 652 }).then(res => { 653 if (!res.ok) throw new Error(`Netlify returned ${res.status}`); 654 setStatus('done'); 655 }).catch(() => setStatus('error')); 656 } 657 const cls = `cform${onDark ? ' cform--on-dark' : ''}`; 658 if (status === 'done') { 659 return /*#__PURE__*/React.createElement("div", { 660 className: `${cls} cform__thanks`, 661 role: "status" 662 }, /*#__PURE__*/React.createElement("h3", { 663 className: "cform__thanks-title" 664 }, "Thanks \u2014 we\u2019ve got it."), /*#__PURE__*/React.createElement("p", { 665 className: "cform__thanks-body" 666 }, "Someone from our team will follow up at the address you gave us.")); 667 } 668 return /*#__PURE__*/React.createElement("form", { 669 className: cls, 670 name: formName, 671 method: "POST", 672 "data-netlify": "true", 673 "data-netlify-honeypot": "bot-field", 674 onSubmit: handleSubmit 675 }, /*#__PURE__*/React.createElement("input", { 676 type: "hidden", 677 name: "form-name", 678 value: formName 679 }), /*#__PURE__*/React.createElement("p", { 680 className: "cform__hp" 681 }, /*#__PURE__*/React.createElement("label", null, "Leave this field empty", /*#__PURE__*/React.createElement("input", { 682 name: "bot-field", 683 tabIndex: "-1", 684 autoComplete: "off" 685 }))), /*#__PURE__*/React.createElement("div", { 686 className: "cform__row" 687 }, /*#__PURE__*/React.createElement("label", { 688 className: "cform__field" 689 }, /*#__PURE__*/React.createElement("span", { 690 className: "cform__label" 691 }, "Name"), /*#__PURE__*/React.createElement("input", { 692 className: "cform__input", 693 type: "text", 694 name: "name", 695 required: true, 696 autoComplete: "name" 697 })), /*#__PURE__*/React.createElement("label", { 698 className: "cform__field" 699 }, /*#__PURE__*/React.createElement("span", { 700 className: "cform__label" 701 }, "Organization"), /*#__PURE__*/React.createElement("input", { 702 className: "cform__input", 703 type: "text", 704 name: "organization", 705 required: true, 706 autoComplete: "organization" 707 }))), /*#__PURE__*/React.createElement("label", { 708 className: "cform__field" 709 }, /*#__PURE__*/React.createElement("span", { 710 className: "cform__label" 711 }, "Email address"), /*#__PURE__*/React.createElement("input", { 712 className: "cform__input", 713 type: "email", 714 name: "email", 715 required: true, 716 autoComplete: "email" 717 })), /*#__PURE__*/React.createElement("div", { 718 className: "cform__actions" 719 }, /*#__PURE__*/React.createElement("button", { 720 type: "submit", 721 className: "btn btn--primary", 722 disabled: status === 'sending' 723 }, status === 'sending' ? 'Sendingâ¦' : submitLabel, /*#__PURE__*/React.createElement("svg", { 724 className: "btn__arrow", 725 width: "16", 726 height: "16", 727 viewBox: "0 0 16 16", 728 fill: "none" 729 }, /*#__PURE__*/React.createElement("path", { 730 d: "M3 8h10M9 4l4 4-4 4", 731 stroke: "currentColor", 732 strokeWidth: "1.5", 733 strokeLinecap: "round", 734 strokeLinejoin: "round" 735 }))), /*#__PURE__*/React.createElement("p", { 736 className: "cform__alt" 737 }, "Prefer email? ", /*#__PURE__*/React.createElement("a", { 738 href: "mailto:[email protected]" 739 }, "[email protected]"))), status === 'error' && /*#__PURE__*/React.createElement("p", { 740 className: "cform__error", 741 role: "alert" 742 }, "Something went wrong sending that. Please email us at", ' ', /*#__PURE__*/React.createElement("a", { 743 href: "mailto:[email protected]" 744 }, "[email protected]"), " and we\u2019ll pick it up from there.")); 745} 746 747// ââââââââââââââââââââââââââââââââââââââââââââââââââ 748// Footer 749// ââââââââââââââââââââââââââââââââââââââââââââââââââ 750function Footer() { 751 return /*#__PURE__*/React.createElement("footer", { 752 className: "footer" 753 }, /*#__PURE__*/React.createElement("div", { 754 className: "footer__inner" 755 }, /*#__PURE__*/React.createElement("div", { 756 className: "footer__logo" 757 }, /*#__PURE__*/React.createElement("img", { 758 src: "assets/ruvos-logo-footer.png", 759 alt: "Ruvos" 760 })), /*#__PURE__*/React.createElement("div", {
761 className: "footer__col" 762 }, /*#__PURE__*/React.createElement("h4", { 763 className: "footer__col-title" 764 }, "Location"), /*#__PURE__*/React.createElement("p", null, "Ruvos HQ"), /*#__PURE__*/React.createElement("p", null, "2324 Killearn Center Blvd #100"), /*#__PURE__*/React.createElement("p", null, "Tallahassee, FL 32309")), /*#__PURE__*/React.createElement("div", { 765 className: "footer__col" 766 }, /*#__PURE__*/React.createElement("h4", { 767 className: "footer__col-title" 768 }, "Contact"), /*#__PURE__*/React.createElement("p", null, "We\u2019d love to hear from you!"), /*#__PURE__*/React.createElement("a", { 769 href: "mailto:[email protected]" 770 }, "Reach out at [email protected]"), /*#__PURE__*/React.createElement("a", { 771 href: "tel:+18502547270" 772 }, "+1 850-254-7270")), /*#__PURE__*/React.createElement("div", { 773 className: "footer__col" 774 }, /*#__PURE__*/React.createElement("h4", { 775 className: "footer__col-title" 776 }, "Company"), /*#__PURE__*/React.createElement("a", { 777 href: "about.html" 778 }, "About"), /*#__PURE__*/React.createElement("a", { 779 href: "team.html" 780 }, "Team"), /*#__PURE__*/React.createElement("a", { 781 href: "careers.html" 782 }, "Careers"), /*#__PURE__*/React.createElement("a", { 783 href: "https://drive.google.com/file/d/1l51USAv7q9LHJfRvG9Tm2TrvQy7XaPzC/view", 784 target: "_blank", 785 rel: "noopener noreferrer" 786 }, "Master Services Agreement"))), /*#__PURE__*/React.createElement("div", { 787 className: "footer__bottom" 788 }, /*#__PURE__*/React.createElement("span", null, "\xA9 2026 Ruvos. All rights reserved."), /*#__PURE__*/React.createElement("div", { 789 className: "footer__social", 790 "aria-label": "Social media" 791 }, /*#__PURE__*/React.createElement("a", { 792 href: "https://x.com/thisisruvos", 793 target: "_blank", 794 rel: "noopener noreferrer", 795 "aria-label": "X" 796 }, /*#__PURE__*/React.createElement("svg", { 797 width: "14", 798 height: "14", 799 viewBox: "0 0 16 16", 800 fill: "currentColor" 801 }, /*#__PURE__*/React.createElement("path", { 802 d: "M12.1 1.5h2.3l-5 5.7L15.3 15h-4.6l-3.6-4.7L2.9 15H.6l5.4-6.1L.4 1.5h4.7L8.4 5.8l3.7-4.3Zm-.8 12.1h1.3L4.8 2.8H3.4l7.9 10.8Z" 803 }))), /*#__PURE__*/React.createElement("a", { 804 href: "https://www.linkedin.com/company/werruvos/", 805 target: "_blank", 806 rel: "noopener noreferrer", 807 "aria-label": "LinkedIn" 808 }, /*#__PURE__*/React.createElement("svg", { 809 width: "14", 810 height: "14", 811 viewBox: "0 0 16 16", 812 fill: "currentColor" 813 }, /*#__PURE__*/React.createElement("path", { 814 d: "M3.4 14V5.3H.5V14h2.9ZM2 4.1c1 0 1.6-.7 1.6-1.5S3 1 2 1C1 1 .3 1.7.3 2.6c0 .8.6 1.5 1.6 1.5Zm4.3 9.9h2.8V9.1c0-.2 0-.5.1-.7.2-.5.7-1.1 1.5-1.1 1 0 1.5.8 1.5 1.9V14H15V8.8c0-2.6-1.4-3.8-3.3-3.8-1.5 0-2.2.9-2.6 1.5v-1.3H6.3c0 .8 0 8.8 0 8.8Z" 815 }))), /*#__PURE__*/React.createElement("a", { 816 href: "https://www.youtube.com/channel/UCLJNt4ocvElZw3-WBJgGtQw", 817 target: "_blank", 818 rel: "noopener noreferrer", 819 "aria-label": "YouTube" 820 }, /*#__PURE__*/React.createElement("svg", { 821 width: "16", 822 height: "14", 823 viewBox: "0 0 16 14", 824 fill: "currentColor" 825 }, /*#__PURE__*/React.createElement("path", { 826 d: "M15.6 2.2c-.2-.7-.7-1.2-1.4-1.4C13 .5 8 .5 8 .5s-5 0-6.2.3C1.1 1 .6 1.5.4 2.2 0 3.4 0 7 0 7s0 3.6.4 4.8c.2.7.7 1.2 1.4 1.4 1.2.3 6.2.3 6.2.3s5 0 6.2-.3c.7-.2 1.2-.7 1.4-1.4.4-1.2.4-4.8.4-4.8s0-3.6-.4-4.8ZM6.4 9.3V4.7L10.6 7l-4.2 2.3Z" 827 }))), /*#__PURE__*/React.createElement("a", { 828 href: "https://www.facebook.com/ThisIsRuvos/", 829 target: "_blank", 830 rel: "noopener noreferrer", 831 "aria-label": "Facebook" 832 }, /*#__PURE__*/React.createElement("svg", { 833 width: "14", 834 height: "14", 835 viewBox: "0 0 16 16", 836 fill: "currentColor" 837 }, /*#__PURE__*/React.createElement("path", { 838 d: "M9.3 16V8.8h2.4l.4-2.8H9.3V4.2c0-.8.2-1.4 1.4-1.4h1.5V.3C11.9.3 11 .2 9.9.2 7.7.2 6.3 1.5 6.3 4v2H4v2.8h2.3V16h3Z" 839 })))))); 840} 841 842// ââââââââââââââââââââââââââââââââââââââââââââââââââ 843// App 844// ââââââââââââââââââââââââââââââââââââââââââââââââââ 845function App() { 846 useEffect(() => { 847 if (!window.location.hash) return; 848 const el = document.querySelector(window.location.hash); 849 if (el) el.scrollIntoView({ 850 behavior: 'smooth' 851 }); 852 }, []); 853 return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Nav, null), /*#__PURE__*/React.createElement(Hero, null), /*#__PURE__*/React.createElement(LogoMarquee, null), /*#__PURE__*/React.createElement(Products, null), /*#__PURE__*/React.createElement(Services, null), /*#__PURE__*/React.createElement(Contact, null), /*#__PURE__*/React.createElement(Footer, null)); 854} 855Object.assign(window, { 856 App, 857 Nav, 858 Hero, 859 LogoMarquee, 860 Products, 861 Services, 862 Contact, 863 InterestForm, 864 Footer 865});
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.