{"id":250,"date":"2026-05-31T22:04:36","date_gmt":"2026-05-31T20:04:36","guid":{"rendered":"https:\/\/gaelo-h5s7cqtzmf.live-website.com\/?page_id=250"},"modified":"2026-06-19T15:34:29","modified_gmt":"2026-06-19T13:34:29","slug":"dicom-viewer","status":"publish","type":"page","link":"https:\/\/gaelo.fr\/en\/dicom-viewer\/","title":{"rendered":"Viewer"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"250\" class=\"elementor elementor-250\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5e4b444 e-con-full e-flex e-con e-parent\" data-id=\"5e4b444\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a92f0ae elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"a92f0ae\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!--\n================================================================\nGaelO Flow \u2014 PAGE PRODUIT \u2014 EN \u2014 Medical Imaging Data Orchestration\nURL : \/en\/software\/dicom-data-orchestration\/\nFor Elementor Pro HTML widget \u2014 Full Width container\nBrand : Pixilib \/ GaelO Flow\n================================================================\n\nSEO :\n  Title (60c) : GaelO Flow \u2014 Medical Imaging Data Orchestration\n  Meta Desc (155c) : Automate DICOM workflows, integrate AI pipelines and\n    unlock high-level data analytics in clinical research with GaelO Flow,\n    a research-grade PACS for Real World Evidence studies.\n\nStyle : \"Elementor Pro premium\" \u2014 same architecture as GaelO page.\n  Accent color shifted from teal to INDIGO (#353275) for brand consistency\n  with the GaelO Flow product within the Pixilib ecosystem.\n  Hero stays dark on desktop, light glacier-blue on mobile (\u2264900px).\n\nStructure (1 H1 \/ 8 H2 \/ N H3) :\n  H1  : Advanced Medical Imaging Data Orchestration: GaelO Flow   [hero]\n  H2  : Beyond Storage: A New Era for Real World Evidence\u2026        [intro sticky + checklist]\n  H2  : Why GaelO Flow is built for research data orchestration   [counters + tabs]\n        [TABS] 4\u00d7 H3 : Orchestrate \/ Store \/ Deidentification \/ Interoperability\n  H2  : Empowering Data Analytics in Clinical Research            [6 icon boxes]\n  H2  : GaelO Flow Features                                       [12 icon boxes]\n  H2  : Deploy your way \u2014 On-premise or Cloud                     [2 deployment cards]\n  H2  : Supported imaging modalities                              [5 image boxes \/ photos]\n  H2  : The GaelO Ecosystem                                       [3 product image-boxes]\n  H2  : Ready to orchestrate\u2026                                     [final CTA]\n\nMaillage interne :\n  - \"GaelO platform\" (H3 Orchestrate)             \u2192 \/en\/software\/clinical-trial-imaging-platform\/\n  - \"data analytics in clinical research\" (sub)   \u2192 \/en\/algorithms\/medical-imaging-segmentation\/\n  - GaelO (eco card)                              \u2192 \/en\/software\/clinical-trial-imaging-platform\/\n  - AI Segmentation (eco + callout)               \u2192 \/en\/algorithms\/medical-imaging-segmentation\/\n  - DICOM Viewer (Integrated Viewer feature)      \u2192 \/en\/software\/dicom-viewer\/\n\nLiens externes (Wikipedia \/ NEMA) :\n  target=\"_blank\" rel=\"noopener nofollow\"  \u2014 pas de transmission de jus SEO\n\nNotes :\n  - Le H1 est inclus \u2192 d\u00e9sactiver tout H1 d'Elementor\n  - CTA \"Talk to Our Team\" et \"Request a Demo\" \u2192 #contact (\u00e0 remplacer)\n  - JS minimal natif (no jQuery) : tabs, counters, reveal, scroll progress, lightbox\n  - Mobile First, ARIA, prefers-reduced-motion respect\u00e9\n================================================================\n-->\n\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Maven+Pro:wght@400;500;600;700;800&family=Roboto+Mono:wght@400;500;600&display=swap\" rel=\"stylesheet\">\n\n<style>\n\/* ============================================================\n   GaelO PRODUCT PAGE \u2014 Scoped Styles\n   All rules namespaced under .gaelo-product to avoid leaks.\n   ============================================================ *\/\n.gaelo-product{\n  \/* GaelO Flow palette : indigo is the dominant accent (was teal on GaelO).\n     We override --teal* to point to indigo values so every component\n     (buttons, eyebrows, hovers, eco cards, etc.) inherits the right brand\n     color without rewriting all selectors. Teal stays available via\n     --teal-real* for the few spots where the GaelO teal is still useful\n     (e.g. the hero title gradient that pairs nicely with indigo). *\/\n  --teal:#353275;\n  --teal-bright:#7773C8;\n  --teal-dark:#2a2860;\n  --teal-soft:rgba(53,50,117,.10);\n  \/* the original GaelO teal, kept for ponctual use *\/\n  --teal-real:#0495A0;\n  --teal-real-bright:#5DD0DA;\n  --teal-real-soft:rgba(4,149,160,.12);\n  --orange:#FFBA4D;\n  --orange-soft:rgba(255,186,77,.14);\n  --indigo:#353275;\n  --indigo-bright:#5B57B8;\n  --indigo-soft:rgba(53,50,117,.12);\n  --green:#78E08F;\n  --green-soft:rgba(120,224,143,.14);\n  --slate:#314053;\n  --bg:#F8FAFB;\n  --bg-soft:#F1F4F7;\n  --bg-dark:#0d1b2a;\n  --bg-darker:#081421;\n  --white:#FFFFFF;\n  --text:#1A2332;\n  --muted:#6B7A8F;\n  --border:rgba(49,64,83,.10);\n  --border-strong:rgba(49,64,83,.18);\n  --shadow-sm:0 2px 12px rgba(49,64,83,.06);\n  --shadow-md:0 8px 40px rgba(49,64,83,.12);\n  --shadow-lg:0 24px 80px rgba(49,64,83,.18);\n  --radius-sm:10px;\n  --radius-md:18px;\n  --radius-lg:28px;\n  --radius-xl:36px;\n  --ease:cubic-bezier(.16,1,.3,1);\n  --max-width:1200px;\n  --font-display:'Maven Pro','Helvetica Neue',Arial,sans-serif;\n  --font-mono:'Roboto Mono','SF Mono','Menlo',monospace;\n  font-family:var(--font-display);\n  color:var(--text);\n  line-height:1.65;\n  font-size:17px;\n  -webkit-font-smoothing:antialiased;\n  -moz-osx-font-smoothing:grayscale;\n  \/* contain the full-bleed breakouts (hero \/ final CTA) so they never\n     create a horizontal overflow inside Elementor's HTML widget.\n     overflow-x:clip (not hidden) keeps position:sticky working. *\/\n  overflow-x:clip;\n  max-width:100%;\n}\n.gaelo-product *,\n.gaelo-product *::before,\n.gaelo-product *::after{box-sizing:border-box}\n.gaelo-product .container{\n  max-width:var(--max-width);\n  margin:0 auto;\n  padding:0 clamp(20px,4vw,40px);\n  position:relative;\n}\n\n\/* ============================================================\n   SCROLL PROGRESS BAR\n   ============================================================ *\/\n.gaelo-product .scroll-progress{\n  position:fixed;top:0;left:0;\n  height:2px;width:0%;\n  background:linear-gradient(90deg,var(--teal),var(--indigo),var(--orange));\n  z-index:9999;\n  transition:width .1s linear;\n  pointer-events:none;\n}\n\n\/* ============================================================\n   HERO \u2014 full-width edge-to-edge dark gradient\n   ============================================================ *\/\n.gaelo-product .hero{\n  position:relative;\n  width:100%;\n  margin-left:0;\n  margin-right:0;\n  min-height:90vh;\n  display:flex;flex-direction:column;\n  align-items:center;justify-content:center;\n  text-align:center;\n  overflow:hidden;\n  padding:clamp(100px,12vw,160px) clamp(20px,5vw,80px) clamp(80px,10vw,120px);\n  background:linear-gradient(160deg,#1A3A52 0%,#205B6E 45%,#1E4C5E 75%,#1A4458 100%);\n}\n.gaelo-product .hero-canvas{position:absolute;inset:0;overflow:hidden;pointer-events:none}\n.gaelo-product .hero-orb{\n  position:absolute;border-radius:50%;\n  filter:blur(90px);opacity:.30;\n  animation:gp-drift 18s ease-in-out infinite alternate;\n}\n.gaelo-product .hero-orb.o1{width:620px;height:620px;background:radial-gradient(circle,var(--teal),transparent 70%);top:-180px;left:-160px}\n.gaelo-product .hero-orb.o2{width:520px;height:520px;background:radial-gradient(circle,var(--indigo),transparent 70%);bottom:-150px;right:-140px;animation-duration:22s;animation-delay:-5s}\n.gaelo-product .hero-orb.o3{width:280px;height:280px;background:radial-gradient(circle,var(--orange),transparent 70%);top:25%;right:18%;opacity:.16;animation-duration:14s;animation-delay:-9s}\n@keyframes gp-drift{from{transform:translate(0,0) scale(1)}to{transform:translate(50px,40px) scale(1.12)}}\n\n.gaelo-product .hero-grid{\n  position:absolute;inset:0;pointer-events:none;\n  background-image:\n    linear-gradient(rgba(4,149,160,.07) 1px,transparent 1px),\n    linear-gradient(90deg,rgba(4,149,160,.07) 1px,transparent 1px);\n  background-size:64px 64px;\n  -webkit-mask-image:radial-gradient(ellipse 80% 80% at 50% 50%,black,transparent);\n  mask-image:radial-gradient(ellipse 80% 80% at 50% 50%,black,transparent);\n}\n\n.gaelo-product .hero-content{\n  position:relative;z-index:2;\n  max-width:1080px;width:100%;\n  margin-left:auto;margin-right:auto;\n  box-sizing:border-box;\n  display:flex;flex-direction:column;align-items:center;\n}\n\n.gaelo-product .hero-badge{\n  display:inline-flex;align-items:center;gap:10px;\n  padding:7px 18px;border-radius:50px;\n  border:1px solid rgba(4,149,160,.4);\n  background:rgba(4,149,160,.12);\n  color:var(--teal-bright);\n  font-family:var(--font-mono);font-size:.72rem;font-weight:500;\n  letter-spacing:.18em;text-transform:uppercase;\n  margin-bottom:32px;\n  animation:gp-fadeUp .9s var(--ease) .2s both;\n}\n.gaelo-product .hero-badge-dot{\n  width:6px;height:6px;border-radius:50%;background:var(--teal);\n  box-shadow:0 0 12px var(--teal);border-radius:50%;background:#fff;\n  box-shadow:0 0 12px rgba(255,255,255,.6);\n  animation:gp-pulse 2s ease infinite;\n}\n@keyframes gp-pulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.6);opacity:.5}}\n\n.gaelo-product .hero-title{\n  font-size:clamp(2.2rem,6vw,4.8rem);\n  font-weight:800;\n  line-height:1.1;\n  letter-spacing:-.035em;\n  color:var(--white);\n  margin:0 0 24px;\n  max-width:1000px;\n  margin-left:auto;margin-right:auto;\n}\n.gaelo-product .hero-title .word{\n  display:inline-block;\n  opacity:0;transform:translateY(40px);\n  animation:gp-titleUp .9s var(--ease) forwards;\n}\n.gaelo-product .hero-title .word.w1{animation-delay:.35s}\n.gaelo-product .hero-title .word.w2{animation-delay:.45s}\n.gaelo-product .hero-title .word.w3{animation-delay:.55s}\n.gaelo-product .hero-title .word.w4{animation-delay:.65s}\n.gaelo-product .hero-title .word.w5{animation-delay:.75s}\n.gaelo-product .hero-title .word.w6{animation-delay:.85s}\n.gaelo-product .hero-title .word.w7{animation-delay:.95s}\n@keyframes gp-titleUp{to{opacity:1;transform:translateY(0)}}\n.gaelo-product .hero-title .accent{\n  background:linear-gradient(90deg,#5DD0DA,#78E08F);\n  -webkit-background-clip:text;-webkit-text-fill-color:transparent;\n  background-clip:text;color:transparent;\n}\n.gaelo-product .hero-title .accent-o{color:var(--orange)}\n\n.gaelo-product .hero-sub{\n  font-size:clamp(1.05rem,1.5vw,1.25rem);\n  font-weight:300;color:rgba(255,255,255,.7);\n  max-width:680px;margin:0 auto 48px;\n  animation:gp-fadeUp .9s var(--ease) 1.1s both;\n}\n.gaelo-product .hero-sub a{\n  color:#fff;\n  text-decoration:underline;\n  text-decoration-color:rgba(255,255,255,.4);\n  text-underline-offset:3px;\n  text-decoration-thickness:1px;\n  transition:text-decoration-color .2s var(--ease);\n}\n.gaelo-product .hero-sub a:hover{text-decoration-color:#fff}\n\n.gaelo-product .hero-actions{\n  display:flex;align-items:center;justify-content:center;\n  gap:14px;flex-wrap:wrap;margin-bottom:64px;\n  animation:gp-fadeUp .9s var(--ease) 1.3s both;\n}\n\n\/* hero mockup *\/\n.gaelo-product .hero-mockup{\n  position:relative;\n  max-width:920px;\n  width:100%;\n  margin:0 auto;\n  align-self:center;\n  border-radius:16px;\n  overflow:hidden;\n  box-shadow:0 40px 100px rgba(0,0,0,.5),0 0 0 1px rgba(255,255,255,.08);\n  animation:gp-mockup 1.2s var(--ease) 1.5s both;\n}\n@keyframes gp-mockup{from{opacity:0;transform:translateY(60px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}\n\/* Large screens : scale up the dashboard mockup so it doesn't look tiny on big monitors *\/\n@media (min-width:1900px){\n  .gaelo-product .hero-content{max-width:1400px}\n  .gaelo-product .hero-mockup{max-width:1280px}\n  .gaelo-product .hero-title{max-width:1200px;font-size:clamp(2.2rem,3.5vw,5.4rem)}\n  .gaelo-product .hero-sub{max-width:820px;font-size:1.35rem}\n}\n@media (min-width:2600px){\n  .gaelo-product .hero-content{max-width:1700px}\n  .gaelo-product .hero-mockup{max-width:1500px}\n  .gaelo-product .hero-title{max-width:1500px}\n}\n.gaelo-product .hero-mockup-bar{\n  display:flex;align-items:center;gap:8px;\n  padding:14px 18px;\n  background:#1a2332;\n  border-bottom:1px solid rgba(255,255,255,.06);\n}\n.gaelo-product .hero-mockup-bar span{\n  width:11px;height:11px;border-radius:50%;\n  background:rgba(255,255,255,.16);\n}\n.gaelo-product .hero-mockup-bar span:nth-child(1){background:#ff5f57}\n.gaelo-product .hero-mockup-bar span:nth-child(2){background:#febc2e}\n.gaelo-product .hero-mockup-bar span:nth-child(3){background:#28c840}\n.gaelo-product .hero-mockup-url{\n  margin-left:18px;\n  padding:5px 14px;\n  background:rgba(255,255,255,.05);\n  border-radius:6px;\n  font-family:var(--font-mono);font-size:.72rem;\n  color:rgba(255,255,255,.45);\n  flex:1;text-align:center;max-width:340px;\n}\n\/* Mobile : hide the URL text in the mockup bar to keep things clean on small screens *\/\n@media (max-width:680px){\n  .gaelo-product .hero-mockup-url{display:none}\n}\n.gaelo-product .hero-mockup img{\n  display:block;width:100%;height:auto;\n}\n\n.gaelo-product .hero-scroll{\n  \/* In normal flow inside .hero-content : guarantees same horizontal center axis\n     as every other hero element (badge, h1, mockup) without scrollbar bugs *\/\n  margin:clamp(36px,5vw,64px) auto 0;\n  display:flex;flex-direction:column;align-items:center;gap:10px;\n  color:rgba(255,255,255,.4);font-family:var(--font-mono);\n  font-size:.65rem;letter-spacing:.18em;text-transform:uppercase;\n  z-index:2;\n  animation:gp-fadeUp 1s var(--ease) 1.8s both;\n}\n.gaelo-product .hero-scroll-dot{\n  width:22px;height:34px;\n  border:1.5px solid rgba(255,255,255,.25);\n  border-radius:20px;position:relative;\n}\n.gaelo-product .hero-scroll-dot::after{\n  content:'';position:absolute;top:6px;left:50%;\n  transform:translateX(-50%);\n  width:4px;height:4px;border-radius:50%;\n  background:var(--teal-real-bright);\n  animation:gp-scrollDown 2s ease infinite;\n}\n@keyframes gp-scrollDown{0%{top:6px;opacity:1}80%{top:18px;opacity:0}100%{top:6px;opacity:0}}\n\n\/* ============================================================\n   BUTTONS\n   ============================================================ *\/\n.gaelo-product .btn{\n  display:inline-flex;align-items:center;gap:10px;\n  padding:14px 30px;border-radius:50px;\n  font-size:.95rem;font-weight:600;font-family:inherit;\n  text-decoration:none;cursor:pointer;border:none;\n  transition:all .25s var(--ease);\n  line-height:1;\n}\n.gaelo-product .btn:hover{text-decoration:none}\n.gaelo-product .btn svg{width:16px;height:16px;transition:transform .3s var(--ease);flex-shrink:0}\n.gaelo-product .btn:hover svg{transform:translateX(5px)}\n.gaelo-product .btn-primary-light{background:var(--white);color:var(--bg-dark)}\n.gaelo-product .btn-primary-light:hover{\n  background:var(--teal);color:var(--white);transform:translateY(-2px);\n  box-shadow:0 12px 30px rgba(4,149,160,.4);\n}\n.gaelo-product .btn-ghost-light{\n  background:rgba(255,255,255,.06);color:rgba(255,255,255,.92);\n  border:1px solid rgba(255,255,255,.18);backdrop-filter:blur(10px);\n}\n.gaelo-product .btn-ghost-light:hover{\n  background:rgba(255,255,255,.15);transform:translateY(-2px);color:var(--white);\n}\n.gaelo-product .btn-primary{background:var(--teal);color:var(--white)}\n.gaelo-product .btn-primary:hover{\n  background:var(--teal-dark);transform:translateY(-2px);\n  box-shadow:0 12px 30px rgba(4,149,160,.4);color:var(--white);\n}\n.gaelo-product .btn-secondary{\n  background:transparent;color:var(--text);\n  border:1.5px solid var(--border-strong);\n}\n.gaelo-product .btn-secondary:hover{\n  background:var(--text);color:var(--white);transform:translateY(-2px);border-color:var(--text);\n}\n\n\n\/* ============================================================\n   ELEMENTOR-PRO STYLE BODY \u2014 sections, icon boxes, counters,\n   image boxes, feature lists, shape dividers, CTA boxes.\n   Built on top of the existing hero + design tokens.\n   ============================================================ *\/\n\n\/* ---- Section scaffolding (Elementor \"section\" feel) ---- *\/\n.gaelo-product .ep-section{\n  position:relative;\n  padding:clamp(64px,8vw,110px) 0;\n}\n.gaelo-product .ep-section.bg-white{background:var(--white)}\n.gaelo-product .ep-section.bg-soft{background:var(--bg-soft)}\n.gaelo-product .ep-section.bg-tint{\n  background:linear-gradient(180deg,var(--bg-soft),var(--white));\n}\n.gaelo-product .ep-section.bg-dark{\n  background:linear-gradient(160deg,#0d1b2a 0%,#13283a 60%,#102433 100%);\n  color:var(--white);\n}\n.gaelo-product .ep-section.has-divider-top{padding-top:clamp(90px,10vw,140px)}\n.gaelo-product .ep-section.has-divider-bottom{padding-bottom:clamp(90px,10vw,140px)}\n\n\/* ---- Eyebrow \/ heading kit (Elementor heading widget look) ---- *\/\n.gaelo-product .ep-head{\n  max-width:760px;\n  margin-bottom:clamp(40px,5vw,60px);\n}\n.gaelo-product .ep-head.center{\n  margin-left:auto;margin-right:auto;text-align:center;\n}\n.gaelo-product .ep-eyebrow{\n  display:inline-flex;align-items:center;gap:10px;\n  font-family:var(--font-mono);\n  font-size:.74rem;font-weight:600;\n  letter-spacing:.16em;text-transform:uppercase;\n  color:var(--teal);\n  margin-bottom:16px;\n}\n.gaelo-product .ep-section.bg-dark .ep-eyebrow{color:var(--teal-bright)}\n.gaelo-product .ep-eyebrow::before{\n  content:'';width:28px;height:2px;border-radius:2px;background:currentColor;\n}\n.gaelo-product .ep-head.center .ep-eyebrow{justify-content:center}\n.gaelo-product .ep-head h2{\n  font-size:clamp(1.9rem,3.6vw,2.85rem);\n  font-weight:800;line-height:1.12;letter-spacing:-.025em;\n  margin:0 0 18px;\n}\n.gaelo-product .ep-section.bg-dark .ep-head h2{color:var(--white)}\n.gaelo-product .ep-head p{\n  font-size:1.06rem;line-height:1.65;color:var(--muted);margin:0;\n}\n.gaelo-product .ep-section.bg-dark .ep-head p{color:rgba(255,255,255,.7)}\n.gaelo-product .ep-head .accent{color:var(--teal)}\n\n\/* Inline text links (NEMA, DICOM viewer, ICH, Imaging CRO\u2026) \u2014 discreet *\/\n.gaelo-product .intro-text a,\n.gaelo-product .tabs-panel-text a,\n.gaelo-product .iconbox p a,\n.gaelo-product .persona p a{\n  color:var(--teal-dark);\n  text-decoration:underline;\n  text-decoration-color:rgba(3,122,131,.35);\n  text-underline-offset:2px;\n  text-decoration-thickness:1px;\n  transition:color .2s var(--ease),text-decoration-color .2s var(--ease);\n}\n.gaelo-product .intro-text a:hover,\n.gaelo-product .tabs-panel-text a:hover,\n.gaelo-product .iconbox p a:hover,\n.gaelo-product .persona p a:hover{\n  color:var(--teal);\n  text-decoration-color:var(--teal);\n}\n\n\/* ============================================================\n   INTRO \/ MANIFESTO \u2014 two-column with sticky media card\n   ============================================================ *\/\n.gaelo-product .intro-grid{\n  display:grid;\n  grid-template-columns:0.95fr 1.05fr;\n  gap:clamp(32px,5vw,72px);\n  align-items:start;\n}\n.gaelo-product .intro-sticky{position:sticky;top:90px}\n.gaelo-product .intro-card{\n  background:var(--white);\n  border:1px solid var(--border);\n  border-radius:var(--radius-lg);\n  padding:clamp(28px,3.5vw,44px);\n  box-shadow:var(--shadow-md);\n}\n.gaelo-product .intro-card .ep-eyebrow{margin-bottom:18px}\n.gaelo-product .intro-card h2{\n  font-size:clamp(1.7rem,3vw,2.4rem);\n  font-weight:800;line-height:1.15;letter-spacing:-.025em;\n  margin:0 0 22px;color:var(--text);\n}\n.gaelo-product .intro-quote{\n  margin:0;padding:22px 26px;\n  background:var(--teal-soft);\n  border-left:3px solid var(--teal);\n  border-radius:0 var(--radius-sm) var(--radius-sm) 0;\n  font-size:1rem;font-style:italic;color:var(--slate);line-height:1.6;\n}\n.gaelo-product .intro-text > p{\n  font-size:1.04rem;line-height:1.72;margin:0 0 18px;color:var(--slate);\n}\n.gaelo-product .intro-text > p:first-child{\n  font-size:1.16rem;color:var(--text);font-weight:500;\n}\n\/* feature list with checkmarks (Elementor icon-list) *\/\n.gaelo-product .ep-list{\n  list-style:none;padding:0;margin:28px 0 0;\n  display:grid;gap:14px;\n}\n.gaelo-product .ep-list li{\n  display:block;\n  padding:16px 18px 16px 20px;\n  background:var(--bg-soft);\n  border-radius:12px;\n  border-left:3px solid var(--teal);\n  font-size:.96rem;color:var(--text);line-height:1.55;\n  transition:background .25s var(--ease),box-shadow .25s var(--ease),transform .25s var(--ease),border-color .25s var(--ease);\n}\n.gaelo-product .ep-list li:hover{\n  background:var(--white);\n  box-shadow:0 4px 18px rgba(49,64,83,.08);\n  border-left-color:var(--teal-bright);\n  transform:translateX(2px);\n}\n\/* Terme en gras sur sa propre ligne, description dessous : alignement propre et homog\u00e8ne *\/\n.gaelo-product .ep-list li > strong:first-of-type{\n  display:block;\n  color:var(--slate);\n  font-weight:700;font-size:1.01rem;\n  margin-bottom:3px;letter-spacing:-.01em;\n}\n\/* L'ancienne pastille check n'est plus utilis\u00e9e dans ce design *\/\n.gaelo-product .ep-list-check{display:none}\n@media (max-width:860px){\n  .gaelo-product .intro-grid{grid-template-columns:1fr;gap:36px}\n  .gaelo-product .intro-sticky{position:static}\n}\n\n\/* ============================================================\n   COLLAPSIBLE \u2014 \"Read more\" toggle (mobile\/tablet only \u2264900px)\n   ============================================================ *\/\n\/* Collapse toggle button \u2014 visible on ALL screens BUT\n   intro toggles (no data-collapse-target) are hidden on desktop. *\/\n.gaelo-product .collapse-toggle{\n  display:inline-flex;align-items:center;gap:8px;\n  margin:14px auto 0;\n  padding:10px 20px;border-radius:50px;\n  background:transparent;border:1px solid var(--border-strong);\n  font-family:inherit;font-size:.9rem;font-weight:600;\n  color:var(--teal-dark);cursor:pointer;\n  transition:all .2s var(--ease);\n  -webkit-tap-highlight-color:transparent;\n}\n\/* hide intro toggles (not grid toggles) on desktop *\/\n.gaelo-product .collapse-toggle:not([data-collapse-target=\"grid\"]){display:none}\n@media (max-width:900px){\n  .gaelo-product .collapse-toggle:not([data-collapse-target=\"grid\"]){display:inline-flex}\n}\n.gaelo-product .collapse-toggle:hover,\n.gaelo-product .collapse-toggle:focus-visible{\n  background:var(--teal-soft);border-color:var(--teal);color:var(--teal-dark);\n  outline:none;\n}\n.gaelo-product .collapse-toggle svg{\n  width:14px;height:14px;\n  transition:transform .25s var(--ease);\n}\n.gaelo-product .collapse-toggle[aria-expanded=\"true\"] svg{transform:rotate(180deg)}\n.gaelo-product .collapsible{\n  max-height:9999px;opacity:1;\n  transition:max-height .45s var(--ease),opacity .3s var(--ease);\n}\n.gaelo-product .iconbox.is-extra{display:none}\n.gaelo-product .iconbox-grid[data-extended=\"true\"] .iconbox.is-extra,\n.gaelo-product .iconbox-grid[data-extended=\"true\"] .iconbox.is-extra-mobile{\n  display:flex;\n  animation:gp-fadeUp .4s var(--ease) both;\n}\n.gaelo-product .collapse-wrap{\n  display:flex;flex-direction:column;align-items:center;\n  margin-top:14px;\n}\n@media (max-width:900px){\n  .gaelo-product .iconbox.is-extra-mobile{display:none}\n  .gaelo-product .collapsible[data-collapsed=\"true\"]{\n    max-height:0;overflow:hidden;opacity:0;\n    margin-top:0;margin-bottom:0;\n    transition:max-height .35s var(--ease),opacity .25s var(--ease);\n  }\n}\n\n\/* ============================================================\n   COUNTERS strip (Elementor counter widgets)\n   ============================================================ *\/\n.gaelo-product .counters{\n  display:grid;\n  grid-template-columns:repeat(4,1fr);\n  gap:1px;\n  background:var(--border);\n  border:1px solid var(--border);\n  border-radius:var(--radius-lg);\n  overflow:hidden;\n}\n.gaelo-product .counter{\n  background:var(--white);\n  padding:clamp(26px,3vw,40px) clamp(20px,2.5vw,32px);\n  text-align:center;\n}\n.gaelo-product .ep-section.bg-dark .counters{background:rgba(255,255,255,.12);border-color:rgba(255,255,255,.14)}\n.gaelo-product .ep-section.bg-dark .counter{background:transparent}\n.gaelo-product .counter-num{\n  font-size:clamp(2.1rem,4vw,3rem);\n  font-weight:800;line-height:1;letter-spacing:-.03em;\n  color:var(--teal);\n  font-variant-numeric:tabular-nums;\n}\n.gaelo-product .ep-section.bg-dark .counter-num{color:var(--teal-bright)}\n.gaelo-product .counter-num .suffix{color:var(--orange)}\n.gaelo-product .counter-label{\n  margin-top:10px;\n  font-family:var(--font-mono);\n  font-size:.72rem;font-weight:500;\n  letter-spacing:.08em;text-transform:uppercase;\n  color:var(--muted);\n}\n.gaelo-product .ep-section.bg-dark .counter-label{color:rgba(255,255,255,.6)}\n@media (max-width:680px){\n  .gaelo-product .counters{grid-template-columns:repeat(2,1fr)}\n}\n\n\/* ============================================================\n   TABS (kept, restyled a touch toward Elementor tabs widget)\n   ============================================================ *\/\n.gaelo-product .tabs{margin-top:8px}\n.gaelo-product .tabs-nav{\n  display:flex;gap:6px;margin-bottom:28px;padding:6px;\n  background:var(--white);border-radius:50px;border:1px solid var(--border);\n  box-shadow:var(--shadow-sm);flex-wrap:wrap;\n  max-width:fit-content;margin-left:auto;margin-right:auto;\n}\n.gaelo-product .tabs-btn{\n  border:none;background:transparent;padding:12px 24px;border-radius:50px;\n  font-family:inherit;font-size:.92rem;font-weight:600;color:var(--muted);\n  cursor:pointer;transition:all .3s var(--ease);\n  display:inline-flex;align-items:center;gap:10px;white-space:nowrap;\n}\n.gaelo-product .tabs-btn:hover{color:var(--text)}\n.gaelo-product .tabs-btn[aria-selected=\"true\"]{\n  background:var(--teal);color:var(--white);box-shadow:0 4px 14px rgba(4,149,160,.3);\n}\n.gaelo-product .tabs-btn-num{font-family:var(--font-mono);font-size:.7rem;opacity:.7}\n.gaelo-product .tabs-panel{display:none;animation:gp-tabFade .5s var(--ease)}\n.gaelo-product .tabs-panel.is-active{display:block}\n@keyframes gp-tabFade{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}\n.gaelo-product .tabs-panel-inner{\n  display:flex;flex-direction:column;gap:clamp(20px,3vw,36px);\n  background:var(--white);border-radius:var(--radius-lg);\n  padding:clamp(26px,3.5vw,48px);box-shadow:var(--shadow-sm);border:1px solid var(--border);\n}\n.gaelo-product .tabs-panel-text{max-width:900px;margin:0 auto;width:100%;text-align:left}\n.gaelo-product .tabs-panel h3{font-size:clamp(1.35rem,2.4vw,1.8rem);margin-bottom:16px}\n.gaelo-product .tabs-panel-text p{font-size:.98rem;line-height:1.7}\n.gaelo-product .tabs-panel-text p + p{margin-top:14px}\n.gaelo-product .tabs-panel-visual{\n  position:relative;border-radius:var(--radius-md);overflow:hidden;\n  background:#0d1b2a;border:1px solid var(--border);\n  width:100%;\n}\n.gaelo-product .tabs-panel-visual img{\n  width:100%;height:auto;display:block;\n}\n@media (max-width:860px){\n  .gaelo-product .tabs-panel-inner{padding:24px}\n  .gaelo-product .tabs-nav{max-width:none;justify-content:flex-start;overflow-x:auto}\n  .gaelo-product .tabs-btn{flex-shrink:0}\n}\n\n\/* ============================================================\n   CRITERIA BLOCK + TABLE\n   ============================================================ *\/\n.gaelo-product .criteria-block{\n  margin-top:48px;padding:clamp(28px,4vw,48px);\n  background:var(--white);border-radius:var(--radius-lg);\n  border:1px solid var(--border);box-shadow:var(--shadow-sm);\n  scroll-margin-top:80px;\n}\n.gaelo-product .criteria-block-head{max-width:680px;margin-bottom:28px}\n.gaelo-product .criteria-block-title{\n  font-size:clamp(1.3rem,2.4vw,1.65rem);font-weight:700;letter-spacing:-.02em;\n  margin:8px 0 12px;color:var(--text);\n}\n.gaelo-product .criteria-block-sub{font-size:1rem;line-height:1.65;color:var(--muted);margin:0}\n.gaelo-product .criteria-table{\n  background:var(--white);border-radius:var(--radius-md);overflow:hidden;\n  border:1px solid var(--border);\n}\n.gaelo-product .criteria-table table{width:100%;border-collapse:collapse;font-size:.95rem}\n.gaelo-product .criteria-table thead th{\n  text-align:left;padding:16px 22px;\n  background:linear-gradient(135deg,var(--teal),var(--teal-dark));color:var(--white);\n  font-family:var(--font-mono);font-weight:600;font-size:.76rem;\n  letter-spacing:.1em;text-transform:uppercase;\n}\n.gaelo-product .criteria-table tbody td{padding:18px 22px;border-top:1px solid var(--border);vertical-align:top}\n.gaelo-product .criteria-table tbody tr:hover{background:rgba(4,149,160,.03)}\n.gaelo-product .criteria-table .topic{font-weight:700;color:var(--text);white-space:nowrap}\n.gaelo-product .criteria-list{display:flex;flex-wrap:wrap;gap:8px}\n.gaelo-product .criteria-link{\n  display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border-radius:50px;\n  background:var(--teal-soft);color:var(--teal-dark);font-size:.85rem;font-weight:600;\n  text-decoration:none;transition:all .25s var(--ease);border:1px solid transparent;\n}\n.gaelo-product .criteria-link:hover{\n  background:var(--teal);color:var(--white);text-decoration:none;\n  transform:translateY(-1px);box-shadow:0 6px 14px rgba(4,149,160,.3);\n}\n.gaelo-product .criteria-link svg{width:11px;height:11px;opacity:.7}\n@media (max-width:700px){\n  .gaelo-product .criteria-block{padding:22px 16px}\n  .gaelo-product .criteria-table{font-size:.88rem}\n  .gaelo-product .criteria-table thead th,\n  .gaelo-product .criteria-table tbody td{padding:13px 14px}\n  .gaelo-product .criteria-table .topic{white-space:normal}\n}\n\n\/* ============================================================\n   ICON BOXES grid (Elementor icon-box widget) \u2014 Core Features\n   ============================================================ *\/\n.gaelo-product .iconbox-grid{\n  display:grid;\n  grid-template-columns:repeat(3,1fr);\n  gap:24px;\n}\n.gaelo-product .iconbox{\n  background:var(--white);\n  border:1px solid var(--border);\n  border-radius:var(--radius-md);\n  padding:32px 28px;\n  transition:all .3s var(--ease);\n  position:relative;\n  display:flex;flex-direction:column;\n}\n.gaelo-product .iconbox:hover{\n  border-color:var(--teal);\n  box-shadow:var(--shadow-md);\n  transform:translateY(-4px);\n}\n.gaelo-product .iconbox-icon{\n  width:56px;height:56px;border-radius:14px;\n  background:var(--teal-soft);color:var(--teal);\n  display:flex;align-items:center;justify-content:center;\n  margin-bottom:20px;transition:all .3s var(--ease);\n}\n.gaelo-product .iconbox:hover .iconbox-icon{\n  background:var(--teal);color:var(--white);\n  transform:scale(1.05);\n}\n.gaelo-product .iconbox-icon svg{width:26px;height:26px}\n.gaelo-product .iconbox h3{\n  font-size:1.12rem;font-weight:700;letter-spacing:-.01em;\n  margin:0 0 12px;color:var(--text);\n}\n.gaelo-product .iconbox p{\n  font-size:.94rem;line-height:1.62;color:var(--muted);margin:0;\n}\n.gaelo-product .iconbox .ep-list{margin-top:16px;gap:9px}\n.gaelo-product .iconbox .ep-list li{font-size:.9rem;color:var(--slate);gap:10px}\n.gaelo-product .iconbox .ep-list-check{width:20px;height:20px}\n.gaelo-product .iconbox .ep-list-check svg{width:10px;height:10px}\n.gaelo-product .iconbox-media{\n  margin:18px -28px -32px;border-top:1px solid var(--border);\n  border-radius:0 0 var(--radius-md) var(--radius-md);overflow:hidden;\n}\n.gaelo-product .iconbox-media img{display:block;width:100%;height:auto}\n@media (max-width:920px){\n  .gaelo-product .iconbox-grid{grid-template-columns:repeat(2,1fr)}\n}\n@media (max-width:600px){\n  .gaelo-product .iconbox-grid{grid-template-columns:1fr}\n}\n\n\/* Empowering Data Analytics : 5 cards \u2192 3 + 2 centered last row *\/\n.gaelo-product .iconbox-grid.analytics-grid{\n  grid-template-columns:repeat(6,1fr);\n}\n.gaelo-product .iconbox-grid.analytics-grid .iconbox{grid-column:span 2}\n.gaelo-product .iconbox-grid.analytics-grid .iconbox:nth-child(4){grid-column:2 \/ span 2}\n.gaelo-product .iconbox-grid.analytics-grid .iconbox:nth-child(5){grid-column:4 \/ span 2}\n@media (max-width:920px){\n  .gaelo-product .iconbox-grid.analytics-grid{grid-template-columns:repeat(2,1fr)}\n  .gaelo-product .iconbox-grid.analytics-grid .iconbox,\n  .gaelo-product .iconbox-grid.analytics-grid .iconbox:nth-child(4),\n  .gaelo-product .iconbox-grid.analytics-grid .iconbox:nth-child(5){grid-column:auto}\n}\n@media (max-width:600px){\n  .gaelo-product .iconbox-grid.analytics-grid{grid-template-columns:1fr}\n}\n\n\/* ============================================================\n   MODALITIES \u2014 image boxes (photo cards)\n   ============================================================ *\/\n.gaelo-product .modalities-grid{\n  display:grid;grid-template-columns:repeat(6,1fr);\n  gap:26px;\n  max-width:1080px;margin-left:auto;margin-right:auto;\n}\n\/* 3 per row : each card spans 2 of the 6 columns *\/\n.gaelo-product .modalities-grid .mod-card{grid-column:span 2}\n\/* last row has 2 cards (4 & 5) \u2192 center them: card 4 starts col 2, card 5 starts col 4 *\/\n.gaelo-product .modalities-grid .mod-card:nth-child(4){grid-column:2 \/ span 2}\n.gaelo-product .modalities-grid .mod-card:nth-child(5){grid-column:4 \/ span 2}\n@media (max-width:860px){\n  .gaelo-product .modalities-grid{grid-template-columns:repeat(2,1fr);max-width:none}\n  .gaelo-product .modalities-grid .mod-card,\n  .gaelo-product .modalities-grid .mod-card:nth-child(4),\n  .gaelo-product .modalities-grid .mod-card:nth-child(5){grid-column:auto}\n}\n@media (max-width:560px){\n  .gaelo-product .modalities-grid{grid-template-columns:1fr}\n}\n.gaelo-product .mod-card{\n  background:var(--white);border:1px solid var(--border);border-radius:var(--radius-md);\n  transition:all .35s var(--ease);position:relative;overflow:hidden;\n  display:flex;flex-direction:column;\n}\n.gaelo-product .mod-card::after{\n  content:'';position:absolute;top:0;left:0;width:100%;height:3px;\n  background:linear-gradient(90deg,var(--teal),var(--teal-bright));\n  transform:scaleX(0);transform-origin:left;transition:transform .4s var(--ease);z-index:3;\n}\n.gaelo-product .mod-card:hover{border-color:var(--teal);transform:translateY(-4px);box-shadow:var(--shadow-md)}\n.gaelo-product .mod-card:hover::after{transform:scaleX(1)}\n.gaelo-product .mod-card-media{position:relative;aspect-ratio:16\/10;overflow:hidden;background:#0d1b2a}\n.gaelo-product .mod-card-media img{\n  width:100%;height:100%;object-fit:cover;display:block;\n  transition:transform .6s var(--ease),filter .4s var(--ease);filter:saturate(.95);\n}\n.gaelo-product .mod-card:hover .mod-card-media img{transform:scale(1.06);filter:saturate(1.1)}\n.gaelo-product .mod-card-media::after{\n  content:'';position:absolute;inset:0;pointer-events:none;\n  background:linear-gradient(180deg,transparent 55%,rgba(13,27,42,.35));\n}\n.gaelo-product .mod-card-body{padding:22px 24px 24px;flex:1;display:flex;flex-direction:column}\n.gaelo-product .mod-card h3{font-size:1.1rem;margin:0 0 8px;letter-spacing:-.01em;color:var(--text)}\n.gaelo-product .mod-card p{font-size:.92rem;line-height:1.55;color:var(--muted);margin:0}\n\n\/* ============================================================\n   PERSONAS \u2014 icon boxes with accent border\n   ============================================================ *\/\n.gaelo-product .personas-grid{\n  display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:22px;\n}\n.gaelo-product .persona{\n  position:relative;padding:30px 28px;border-radius:var(--radius-md);\n  background:var(--white);border:1px solid var(--border);\n  transition:all .35s var(--ease);overflow:hidden;\n}\n.gaelo-product .persona::before{\n  content:'';position:absolute;top:0;left:0;right:0;height:4px;\n  background:var(--accent,var(--teal));\n}\n.gaelo-product .persona:hover{transform:translateY(-5px);box-shadow:var(--shadow-md);border-color:var(--accent,var(--teal))}\n.gaelo-product .persona.pharma{--accent:var(--teal)}\n.gaelo-product .persona.medtech{--accent:var(--indigo)}\n.gaelo-product .persona.academic{--accent:var(--orange)}\n.gaelo-product .persona.cro{--accent:#3aa256}\n.gaelo-product .persona-icon{\n  width:50px;height:50px;border-radius:12px;background:var(--bg-soft);\n  border:1px solid var(--border);color:var(--accent,var(--teal));\n  display:flex;align-items:center;justify-content:center;margin-bottom:18px;\n}\n.gaelo-product .persona-icon svg{width:23px;height:23px}\n.gaelo-product .persona-label{\n  font-family:var(--font-mono);font-size:.68rem;font-weight:600;\n  color:var(--accent,var(--teal));letter-spacing:.14em;text-transform:uppercase;margin-bottom:8px;\n}\n.gaelo-product .persona h3{font-size:1.12rem;margin:0 0 10px;color:var(--text)}\n.gaelo-product .persona p{font-size:.93rem;line-height:1.6;color:var(--muted);margin:0}\n.gaelo-product .persona p a{color:var(--accent,var(--teal));font-weight:600;text-decoration:underline}\n\n\/* ============================================================\n   REASONS \u2014 \"Why choose GaelO Flow\" cards\n   Grid of 5 items : 3 on row 1, 2 centered on row 2\n   ============================================================ *\/\n.gaelo-product .reasons-grid{\n  display:grid;grid-template-columns:repeat(6,1fr);\n  gap:22px;max-width:1100px;margin:0 auto 48px;\n}\n.gaelo-product .reason-card{\n  grid-column:span 2;\n  background:var(--white);\n  border:1px solid var(--border);\n  border-radius:var(--radius-md);\n  padding:26px 26px 24px;\n  display:flex;flex-direction:column;gap:12px;\n  transition:all .3s var(--ease);\n  position:relative;overflow:hidden;\n}\n.gaelo-product .reason-card::before{\n  content:'';position:absolute;left:0;top:0;bottom:0;width:3px;\n  background:var(--teal);transform:scaleY(0);transform-origin:top;\n  transition:transform .35s var(--ease);\n}\n.gaelo-product .reason-card:hover{\n  transform:translateY(-3px);\n  box-shadow:var(--shadow-md);\n  border-color:var(--teal);\n}\n.gaelo-product .reason-card:hover::before{transform:scaleY(1)}\n.gaelo-product .reason-card-head{\n  display:flex;align-items:flex-start;gap:14px;\n}\n.gaelo-product .reason-card-check{\n  flex-shrink:0;width:30px;height:30px;border-radius:50%;\n  background:var(--teal);color:#fff;\n  display:flex;align-items:center;justify-content:center;\n  margin-top:2px;\n}\n.gaelo-product .reason-card-check svg{width:14px;height:14px}\n.gaelo-product .reason-card h3{\n  font-size:1.05rem;font-weight:700;letter-spacing:-.01em;\n  margin:0;color:var(--text);line-height:1.3;\n}\n.gaelo-product .reason-card p{\n  font-size:.94rem;line-height:1.6;color:var(--muted);margin:0;\n}\n\/* center the last 2 cards on the second row *\/\n.gaelo-product .reason-card:nth-child(4){grid-column:2 \/ span 2}\n.gaelo-product .reason-card:nth-child(5){grid-column:4 \/ span 2}\n@media (max-width:920px){\n  .gaelo-product .reasons-grid{grid-template-columns:repeat(2,1fr)}\n  .gaelo-product .reason-card,\n  .gaelo-product .reason-card:nth-child(4),\n  .gaelo-product .reason-card:nth-child(5){grid-column:auto}\n}\n@media (max-width:600px){\n  .gaelo-product .reasons-grid{grid-template-columns:1fr}\n}\n\n\/* ============================================================\n   DICOM VIEWER PAGE \u2014 Core Features rich rows\n   3 large H3 sections, alternating text\/image\n   ============================================================ *\/\n.gaelo-product .viewer-feature-grid{\n  display:flex;flex-direction:column;gap:clamp(28px,4vw,52px);\n  max-width:1180px;margin:0 auto;\n}\n.gaelo-product .viewer-feature{\n  background:var(--white);\n  border:1px solid var(--border);\n  border-radius:var(--radius-lg);\n  padding:clamp(32px,4vw,48px);\n  display:flex;flex-direction:column;gap:24px;\n  box-shadow:var(--shadow-sm);\n}\n.gaelo-product .viewer-feature.viewer-feature-image{\n  display:grid;grid-template-columns:1.1fr 1fr;gap:clamp(28px,3.5vw,44px);\n  align-items:center;\n}\n.gaelo-product .viewer-feature-text{display:flex;flex-direction:column;gap:14px}\n.gaelo-product .viewer-feature-num{\n  display:none;\n}\n.gaelo-product .viewer-feature h3{\n  font-size:clamp(1.35rem,2.2vw,1.7rem);font-weight:800;\n  letter-spacing:-.015em;color:var(--text);margin:0;line-height:1.2;\n}\n.gaelo-product .viewer-feature p{\n  font-size:.98rem;line-height:1.7;color:var(--muted);margin:0;\n}\n.gaelo-product .viewer-feature p + p{margin-top:6px}\n.gaelo-product .viewer-feature .ep-list{margin-top:6px;gap:10px}\n.gaelo-product .viewer-feature .ep-list li{font-size:.95rem;color:var(--slate)}\n.gaelo-product .viewer-feature-visual{\n  position:relative;border-radius:var(--radius-md);overflow:hidden;\n  background:#0d1b2a;border:1px solid var(--border);\n  aspect-ratio:4\/3;\n}\n.gaelo-product .viewer-feature-visual img{\n  width:100%;height:100%;object-fit:cover;display:block;\n  transition:transform .5s var(--ease);\n}\n.gaelo-product .viewer-feature-visual:hover img{transform:scale(1.03)}\n@media (max-width:860px){\n  .gaelo-product .viewer-feature.viewer-feature-image{grid-template-columns:1fr}\n}\n\n\/* ============================================================\n   INTEGRATION CARDS \u2014 Native integration in our products (3 cards)\n   ============================================================ *\/\n.gaelo-product .integration-grid{\n  display:grid;grid-template-columns:repeat(3,1fr);gap:24px;\n  max-width:1180px;margin:0 auto;\n}\n.gaelo-product .integration-card{\n  background:var(--white);\n  border:1px solid var(--border);\n  border-radius:var(--radius-md);\n  padding:clamp(26px,3vw,34px);\n  display:flex;flex-direction:column;gap:14px;\n  transition:transform .3s var(--ease),box-shadow .3s var(--ease),border-color .3s var(--ease);\n  position:relative;overflow:hidden;\n}\n.gaelo-product .integration-card::before{\n  content:'';position:absolute;left:0;top:0;bottom:0;width:3px;\n  background:var(--teal);transform:scaleY(0);transform-origin:top;\n  transition:transform .35s var(--ease);\n}\n.gaelo-product .integration-card:hover{\n  transform:translateY(-4px);\n  box-shadow:var(--shadow-md);\n  border-color:var(--teal);\n}\n.gaelo-product .integration-card:hover::before{transform:scaleY(1)}\n.gaelo-product .integration-card-head{display:flex;flex-direction:column;gap:10px;align-items:flex-start}\n.gaelo-product .integration-card-tag{\n  font-family:var(--font-mono);font-size:.65rem;font-weight:600;\n  letter-spacing:.16em;text-transform:uppercase;\n  padding:6px 12px;border-radius:50px;\n}\n.gaelo-product .integration-card h3{\n  font-size:1.35rem;font-weight:800;letter-spacing:-.015em;\n  color:var(--text);margin:0;line-height:1.2;\n}\n.gaelo-product .integration-card p{\n  font-size:.94rem;line-height:1.65;color:var(--muted);margin:0;\n}\n.gaelo-product .integration-card a{color:var(--teal-dark);font-weight:600;text-decoration:underline;text-decoration-color:rgba(4,149,160,.25);text-underline-offset:3px}\n.gaelo-product .integration-card a:hover{text-decoration-color:var(--teal-dark)}\n@media (max-width:920px){\n  .gaelo-product .integration-grid{grid-template-columns:1fr;max-width:640px}\n}\n\n\/* ============================================================\n   REASON CARD WIDE \u2014 \"Multiple Device Support\" with image below\n   Used on DICOM Viewer page : 2 cards on row 1, 1 wide card on row 2\n   ============================================================ *\/\n\/* When the grid has the .has-wide modifier, switch the layout :\n   the 2 normal cards span 3 (50% each) and the wide one spans 6 (100%) *\/\n.gaelo-product .reasons-grid.has-wide .reason-card{grid-column:span 3}\n.gaelo-product .reason-card-wide{\n  grid-column:1 \/ -1 !important;\n  display:flex;flex-direction:column;\n}\n.gaelo-product .reason-card-visual{\n  margin:18px -26px -24px;\n  border-top:1px solid var(--border);\n  border-radius:0 0 var(--radius-md) var(--radius-md);\n  overflow:hidden;\n  aspect-ratio:21\/9;\n  background:#0d1b2a;\n}\n.gaelo-product .reason-card-visual img{\n  width:100%;height:100%;object-fit:cover;display:block;\n  transition:transform .5s var(--ease);\n}\n.gaelo-product .reason-card-wide:hover .reason-card-visual img{transform:scale(1.03)}\n@media (max-width:920px){\n  .gaelo-product .reasons-grid.has-wide .reason-card,\n  .gaelo-product .reason-card-wide{grid-column:auto !important}\n  .gaelo-product .reason-card-visual{aspect-ratio:16\/9}\n}\n\n\/* ============================================================\n   DEPLOYMENT \u2014 on-premise vs cloud comparative cards\n   ============================================================ *\/\n.gaelo-product .deploy-grid{\n  display:grid;grid-template-columns:repeat(2,1fr);gap:26px;\n  max-width:1000px;margin:0 auto;\n}\n.gaelo-product .deploy-card{\n  position:relative;\n  display:flex;flex-direction:column;\n  padding:38px 34px 34px;\n  border-radius:var(--radius-lg);\n  background:var(--white);\n  border:1px solid var(--border);\n  transition:all .35s var(--ease);\n  overflow:hidden;\n}\n.gaelo-product .deploy-card::before{\n  content:'';position:absolute;top:0;left:0;right:0;height:4px;\n  background:var(--deploy-accent,var(--teal));\n}\n.gaelo-product .deploy-card:hover{\n  transform:translateY(-5px);\n  box-shadow:var(--shadow-lg);\n  border-color:var(--deploy-accent,var(--teal));\n}\n.gaelo-product .deploy-card.on-prem{--deploy-accent:var(--teal)}    \/* indigo on Flow (teal var = indigo) *\/\n.gaelo-product .deploy-card.cloud{--deploy-accent:var(--teal-real)} \/* the original teal for contrast *\/\n.gaelo-product .deploy-card-head{margin-bottom:24px}\n.gaelo-product .deploy-card-tag{\n  display:inline-block;\n  font-family:var(--font-mono);font-size:.68rem;font-weight:600;\n  color:var(--deploy-accent,var(--teal));\n  letter-spacing:.16em;text-transform:uppercase;\n  margin-bottom:14px;\n}\n.gaelo-product .deploy-card-icon{\n  width:56px;height:56px;border-radius:14px;\n  background:var(--bg-soft);\n  border:1px solid var(--border);\n  color:var(--deploy-accent,var(--teal));\n  display:flex;align-items:center;justify-content:center;\n  margin-bottom:18px;\n  transition:all .3s var(--ease);\n}\n.gaelo-product .deploy-card:hover .deploy-card-icon{\n  background:var(--deploy-accent,var(--teal));color:#fff;\n}\n.gaelo-product .deploy-card-icon svg{width:26px;height:26px}\n.gaelo-product .deploy-card h3{\n  font-size:1.3rem;font-weight:700;letter-spacing:-.015em;\n  margin:0 0 10px;color:var(--text);\n}\n.gaelo-product .deploy-card-head p{\n  font-size:.98rem;line-height:1.6;color:var(--muted);margin:0;\n}\n.gaelo-product .deploy-list{margin:0;gap:11px}\n.gaelo-product .deploy-list li{font-size:.94rem;color:var(--text);line-height:1.5}\n@media (max-width:760px){\n  .gaelo-product .deploy-grid{grid-template-columns:1fr}\n  .gaelo-product .deploy-card{padding:28px 22px 24px}\n}\n\n\/* ============================================================\n   ECOSYSTEM \u2014 product image-boxes\n   ============================================================ *\/\n.gaelo-product .eco-grid{\n  display:grid;grid-template-columns:repeat(3,1fr);gap:24px;\n}\n.gaelo-product .eco-card{\n  position:relative;display:flex;flex-direction:column;\n  background:var(--white);border:1px solid var(--border);border-radius:var(--radius-lg);\n  overflow:hidden;transition:all .4s var(--ease);\n}\n.gaelo-product .eco-card:hover{transform:translateY(-6px);box-shadow:var(--shadow-lg);border-color:var(--eco-accent,var(--teal))}\n.gaelo-product .eco-card.gaelo{--eco-accent:var(--teal);--eco-accent-soft:var(--teal-soft);--eco-deep:#037a83;--eco-grad:linear-gradient(150deg,#0495A0 0%,#037a83 55%,#02666d 100%)}\n.gaelo-product .eco-card.flow{--eco-accent:var(--indigo);--eco-accent-soft:var(--indigo-soft);--eco-deep:#2a2860;--eco-grad:linear-gradient(150deg,#3f3c86 0%,#353275 55%,#2a2860 100%)}\n.gaelo-product .eco-card.algo{--eco-accent:#cc8200;--eco-accent-soft:var(--orange-soft);--eco-deep:#b5760a;--eco-grad:linear-gradient(150deg,#FFBA4D 0%,#f0a52f 100%)}\n.gaelo-product .eco-visual{\n  position:relative;display:flex;align-items:center;justify-content:center;height:190px;\n  background:var(--eco-grad,linear-gradient(150deg,var(--teal),var(--teal-dark)));\n  overflow:hidden;\n}\n\/* subtle tech grid texture over the colored band \u2014 discreet, not kitsch *\/\n.gaelo-product .eco-visual::before{\n  content:'';position:absolute;inset:0;pointer-events:none;\n  background-image:\n    linear-gradient(rgba(255,255,255,.07) 1px,transparent 1px),\n    linear-gradient(90deg,rgba(255,255,255,.07) 1px,transparent 1px);\n  background-size:26px 26px;\n  -webkit-mask-image:radial-gradient(ellipse 75% 75% at 30% 25%,black,transparent 80%);\n  mask-image:radial-gradient(ellipse 75% 75% at 30% 25%,black,transparent 80%);\n}\n\/* soft light bloom in a corner for depth *\/\n.gaelo-product .eco-visual::after{\n  content:'';position:absolute;top:-40%;right:-20%;\n  width:70%;height:140%;border-radius:50%;pointer-events:none;\n  background:radial-gradient(circle,rgba(255,255,255,.18),transparent 65%);\n}\n.gaelo-product .eco-visual img{\n  position:relative;z-index:1;\n  max-width:80%;max-height:110px;width:auto;height:auto;object-fit:contain;\n  transition:transform .5s var(--ease);\n  \/* render brand logos in white over the colored band *\/\n  filter:brightness(0) invert(1);\n}\n.gaelo-product .eco-card:hover .eco-visual img{transform:scale(1.04)}\n\/* AI card keeps the real photo \u2014 colored veil from the charter (orange) for cohesion *\/\n.gaelo-product .eco-visual.cover{background:#0d1b2a}\n.gaelo-product .eco-visual.cover::before{display:none}\n.gaelo-product .eco-visual.cover::after{\n  content:'';position:absolute;inset:0;top:auto;right:auto;width:100%;height:100%;border-radius:0;\n  background:linear-gradient(180deg,rgba(255,186,77,.12) 0%,transparent 35%,rgba(13,27,42,.55) 100%);\n}\n.gaelo-product .eco-visual.cover img{\n  max-width:none;max-height:none;width:100%;height:100%;object-fit:cover;\n  object-position:top center;\n  filter:none;\n}\n.gaelo-product .eco-body{padding:26px 28px 28px;display:flex;flex-direction:column;flex:1}\n.gaelo-product .eco-tag{\n  display:inline-flex;align-items:center;gap:8px;font-family:var(--font-mono);\n  font-size:.68rem;font-weight:600;color:var(--eco-accent,var(--teal));\n  letter-spacing:.14em;text-transform:uppercase;margin-bottom:12px;\n}\n.gaelo-product .eco-tag::before{content:'';width:18px;height:2px;border-radius:2px;background:var(--eco-accent,var(--teal))}\n.gaelo-product .eco-card h3{font-size:1.2rem;margin:0 0 14px;letter-spacing:-.015em;color:var(--text)}\n.gaelo-product .eco-card p{font-size:.95rem;line-height:1.6;color:var(--muted);margin:0 0 22px;flex:1}\n.gaelo-product .eco-link{\n  display:inline-flex;align-items:center;gap:8px;align-self:flex-start;\n  padding:11px 20px;border-radius:50px;background:var(--eco-accent-soft,var(--teal-soft));\n  color:var(--eco-accent,var(--teal));font-size:.88rem;font-weight:600;\n  text-decoration:none;transition:all .25s var(--ease);border:1px solid transparent;\n}\n.gaelo-product .eco-link:hover{background:var(--eco-accent,var(--teal));color:var(--white);text-decoration:none;transform:translateX(3px)}\n.gaelo-product .eco-link svg{width:13px;height:13px;transition:transform .25s var(--ease)}\n.gaelo-product .eco-link:hover svg{transform:translateX(3px)}\n@media (max-width:920px){.gaelo-product .eco-grid{grid-template-columns:1fr;gap:18px}}\n\n\/* ============================================================\n   CALLOUT BOX (Elementor CTA box) \u2014 mid-page conversion\n   ============================================================ *\/\n.gaelo-product .callout{\n  display:grid;grid-template-columns:1.4fr 1fr;align-items:center;gap:clamp(28px,4vw,56px);\n  background:linear-gradient(135deg,var(--teal),var(--teal-dark));\n  border-radius:var(--radius-xl);padding:clamp(36px,5vw,64px);\n  color:var(--white);position:relative;overflow:hidden;\n}\n.gaelo-product .callout::before{\n  content:'';position:absolute;inset:0;pointer-events:none;\n  background:radial-gradient(ellipse 50% 80% at 100% 0%,rgba(255,255,255,.14),transparent);\n}\n.gaelo-product .callout-content{position:relative;z-index:1}\n.gaelo-product .callout h2{font-size:clamp(1.6rem,3vw,2.3rem);font-weight:800;color:var(--white);letter-spacing:-.025em;margin:0 0 14px;line-height:1.15}\n.gaelo-product .callout p{color:rgba(255,255,255,.85);font-size:1.02rem;line-height:1.6;margin:0}\n.gaelo-product .callout-actions{position:relative;z-index:1;display:flex;flex-direction:column;gap:12px}\n@media (max-width:820px){\n  .gaelo-product .callout{grid-template-columns:1fr;gap:24px}\n  .gaelo-product .callout-actions{flex-direction:row;flex-wrap:wrap}\n}\n\n\/* ============================================================\n   FINAL CTA \u2014 full-width edge-to-edge\n   ============================================================ *\/\n.gaelo-product .final-cta{\n  position:relative;overflow:hidden;width:100vw;\n  margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw);\n  padding:clamp(80px,10vw,130px) clamp(20px,5vw,80px);\n  background:linear-gradient(135deg,var(--indigo),#1d1a5e,#0d2a42);\n  text-align:center;color:var(--white);\n}\n.gaelo-product .final-cta-glow{position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse 60% 60% at 50% 100%,rgba(4,149,160,.28),transparent)}\n.gaelo-product .final-cta-grid-overlay{\n  position:absolute;inset:0;pointer-events:none;\n  background-image:linear-gradient(rgba(255,255,255,.04) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.04) 1px,transparent 1px);\n  background-size:50px 50px;\n  -webkit-mask-image:radial-gradient(ellipse 80% 80% at 50% 50%,black,transparent);\n  mask-image:radial-gradient(ellipse 80% 80% at 50% 50%,black,transparent);\n}\n.gaelo-product .final-cta-content{position:relative;z-index:1;max-width:680px;margin:0 auto}\n.gaelo-product .final-cta h2{font-size:clamp(2rem,4vw,3rem);font-weight:800;letter-spacing:-.03em;line-height:1.08;color:var(--white);margin-bottom:18px}\n.gaelo-product .final-cta-sub{color:rgba(255,255,255,.65);font-weight:300;font-size:1.05rem;margin-bottom:38px;max-width:520px;margin-left:auto;margin-right:auto}\n.gaelo-product .final-cta-actions{display:flex;gap:14px;justify-content:center;flex-wrap:wrap}\n\n\/* ============================================================\n   LIGHTBOX \u2014 click any image to enlarge (sober, not fullscreen)\n   ============================================================ *\/\n.gaelo-product .zoomable{\n  cursor:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='32' height='32' viewBox='0 0 32 32'%3E%3Cg fill='none' stroke='%23ffffff' stroke-width='2.5' stroke-linecap='round'%3E%3Ccircle cx='13' cy='13' r='8' fill='rgba(4,149,160,0.35)'\/%3E%3Cline x1='19' y1='19' x2='27' y2='27'\/%3E%3Cline x1='13' y1='10' x2='13' y2='16'\/%3E%3Cline x1='10' y1='13' x2='16' y2='13'\/%3E%3C\/g%3E%3C\/svg%3E\") 13 13, zoom-in;\n}\n.gp-lightbox{\n  position:fixed;inset:0;z-index:99999;\n  display:flex;align-items:center;justify-content:center;\n  padding:clamp(20px,5vw,64px);\n  background:rgba(13,27,42,.82);\n  -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);\n  opacity:0;visibility:hidden;\n  transition:opacity .3s cubic-bezier(.16,1,.3,1),visibility .3s;\n  cursor:zoom-out;\n}\n.gp-lightbox.is-open{opacity:1;visibility:visible}\n.gp-lightbox-img{\n  max-width:min(1100px,92vw);max-height:86vh;\n  width:auto;height:auto;\n  border-radius:10px;\n  box-shadow:0 30px 90px rgba(0,0,0,.5);\n  transform:scale(.96);\n  transition:transform .3s cubic-bezier(.16,1,.3,1);\n  background:#0d1b2a;\n  cursor:zoom-out;\n}\n@media (min-width:1900px){\n  .gp-lightbox-img{max-width:min(1600px,92vw);max-height:88vh}\n}\n@media (min-width:2600px){\n  .gp-lightbox-img{max-width:min(2200px,92vw);max-height:90vh}\n}\n.gp-lightbox.is-open .gp-lightbox-img{transform:scale(1)}\n.gp-lightbox-close{\n  position:absolute;top:clamp(16px,3vw,28px);right:clamp(16px,3vw,28px);\n  width:44px;height:44px;border-radius:50%;\n  border:1px solid rgba(255,255,255,.25);\n  background:rgba(255,255,255,.1);color:#fff;\n  display:flex;align-items:center;justify-content:center;cursor:pointer;\n  transition:all .2s ease;\n}\n.gp-lightbox-close:hover{background:rgba(255,255,255,.2);transform:rotate(90deg)}\n.gp-lightbox-close svg{width:20px;height:20px}\n.gp-lightbox-cap{\n  position:absolute;bottom:clamp(16px,3vw,28px);left:0;right:0;\n  text-align:center;color:rgba(255,255,255,.7);\n  font-family:var(--font-mono);font-size:.78rem;\n  padding:0 24px;pointer-events:none;\n}\n@media (prefers-reduced-motion:reduce){\n  .gp-lightbox,.gp-lightbox-img{transition:none}\n}\n\n\/* ============================================================\n   REVEAL ON SCROLL\n   ============================================================ *\/\n.gaelo-product .reveal{\n  opacity:0;transform:translateY(32px);\n  transition:opacity .9s var(--ease),transform .9s var(--ease);\n}\n.gaelo-product .reveal.is-visible{opacity:1;transform:none}\n.gaelo-product .reveal-d1{transition-delay:.08s}\n.gaelo-product .reveal-d2{transition-delay:.16s}\n.gaelo-product .reveal-d3{transition-delay:.24s}\n.gaelo-product .reveal-d4{transition-delay:.32s}\n\n@keyframes gp-fadeUp{from{opacity:0;transform:translateY(28px)}to{opacity:1;transform:translateY(0)}}\n\n\/* ============================================================\n   RESPONSIVE\n   ============================================================ *\/\n@media (max-width:900px){\n  .gaelo-product{font-size:16px}\n  .gaelo-product .hero{min-height:auto;padding:80px 20px 60px}\n  .gaelo-product .hero-scroll{display:none}\n  .gaelo-product .hero-mockup{margin-top:8px}\n  \/* hide the platform badge on mobile \u2014 leave more room for the H1 *\/\n  .gaelo-product .hero-badge{display:none}\n}\n@media (max-width:640px){\n  .gaelo-product .hero-actions{flex-direction:column;width:100%;align-items:stretch}\n  .gaelo-product .hero-actions .btn{justify-content:center;width:100%}\n  .gaelo-product .final-cta-actions{flex-direction:column;width:100%;align-items:stretch}\n  .gaelo-product .final-cta-actions .btn{justify-content:center}\n}\n@media (prefers-reduced-motion:reduce){\n  .gaelo-product *,\n  .gaelo-product *::before,\n  .gaelo-product *::after{\n    animation-duration:.01ms!important;\n    animation-iteration-count:1!important;\n    transition-duration:.01ms!important;\n  }\n}\n<\/style>\n\n<!-- ===== JSON-LD : SoftwareApplication + BreadcrumbList ===== -->\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@graph\": [\n    {\n      \"@type\": \"SoftwareApplication\",\n      \"@id\": \"\/en\/software\/dicom-data-orchestration\/#software\",\n      \"name\": \"GaelO Flow\",\n      \"applicationCategory\": \"MedicalApplication\",\n      \"operatingSystem\": \"Web-based, on-premise or cloud\",\n      \"url\": \"\/en\/software\/dicom-data-orchestration\/\",\n      \"description\": \"Research-grade PACS to orchestrate medical imaging data: DICOM query\/retrieve, batch de-identification, AI inference pipelines, integrated DICOM viewer and seamless data exports for Real World Evidence studies.\",\n      \"publisher\": {\n        \"@type\": \"Organization\",\n        \"name\": \"Pixilib\",\n        \"url\": \"\/\"\n      },\n      \"featureList\": [\n        \"Research PACS with unlimited DICOM storage\",\n        \"Auto-Retrieve from production PACS\",\n        \"Batch de-identification and anonymization\",\n        \"Integrated full-feature DICOM viewer\",\n        \"AI inference pipelines (FDG, PSMA, DOTATOC, CT)\",\n        \"Role-based access control with isolated datasets\",\n        \"RESTful API for full ecosystem integration\",\n        \"On-premise or cloud deployment\"\n      ]\n    },\n    {\n      \"@type\": \"BreadcrumbList\",\n      \"itemListElement\": [\n        { \"@type\": \"ListItem\", \"position\": 1, \"name\": \"Home\", \"item\": \"\/en\/\" },\n        { \"@type\": \"ListItem\", \"position\": 2, \"name\": \"Software\", \"item\": \"\/en\/software\/\" },\n        { \"@type\": \"ListItem\", \"position\": 3, \"name\": \"GaelO Flow \u2014 Medical Imaging Data Orchestration\", \"item\": \"\/en\/software\/dicom-data-orchestration\/\" }\n      ]\n    }\n  ]\n}\n<\/script>\n\n<article class=\"gaelo-product\" lang=\"en\">\n\n  <!-- Scroll progress bar -->\n  <div class=\"scroll-progress\" aria-hidden=\"true\"><\/div>\n\n  <!-- ============================================================\n       HERO\n       ============================================================ -->\n  <!-- ============================================================\n       HERO\n       ============================================================ -->\n  <header class=\"hero\" role=\"banner\">\n    <div class=\"hero-canvas\" aria-hidden=\"true\">\n      <div class=\"hero-orb o1\"><\/div>\n      <div class=\"hero-orb o2\"><\/div>\n      <div class=\"hero-orb o3\"><\/div>\n      <div class=\"hero-grid\"><\/div>\n    <\/div>\n\n    <div class=\"hero-content\">\n      <span class=\"hero-badge\">\n        <span class=\"hero-badge-dot\"><\/span>\n        Zero-footprint \u00b7 GPU-accelerated \u00b7 OHIF-based\n      <\/span>\n\n      <h1 class=\"hero-title\">\n        <span class=\"word w1\">Advanced<\/span>\n        <span class=\"word w2\">Web-Based<\/span>\n        <span class=\"word w3 accent\">DICOM Viewer<\/span>\n        <span class=\"word w5\">for<\/span>\n        <span class=\"word w6 accent-o\">Clinical<\/span>\n        <span class=\"word w7 accent-o\">Research<\/span>\n      <\/h1>\n\n      <p class=\"hero-sub\">Access, visualize and quantify medical images from any browser with our high-performance zero-footprint and full-featured <a href=\"\/en\/software\/dicom-viewer\/\">DICOM viewer<\/a>.<\/p>\n\n      <div class=\"hero-actions\">\n        <a href=\"\/en\/contact\/\" class=\"btn btn-primary-light\">\n          Request a Demo\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg>\n        <\/a>\n        <a href=\"#features\" class=\"btn btn-ghost-light\">Explore Features<\/a>\n      <\/div>\n\n      <figure class=\"hero-mockup\">\n        <div class=\"hero-mockup-bar\">\n          <span><\/span><span><\/span><span><\/span>\n          <div class=\"hero-mockup-url\">gaelo.fr \u00b7 dicom-viewer<\/div>\n        <\/div>\n        <img fetchpriority=\"high\"\n          src=\"\/wp-content\/uploads\/2026\/05\/PixiLearn-PET-medecine-nucleaire.jpg\"\n          alt=\"PET brain scan analysis displaying metabolic activity within the medical imaging interface.\"\n          loading=\"eager\"\n          decoding=\"async\"\n          width=\"1280\" height=\"720\">\n      <\/figure>\n\n    <div class=\"hero-scroll\" aria-hidden=\"true\">\n      <div class=\"hero-scroll-dot\"><\/div>\n      Scroll\n    <\/div>\n    <\/div>\n  <\/header>\n\n\n  <!-- ============================================================\n       SECTION \u2014 INTRO \/ MANIFESTO (sticky media + checklist)\n       H2 : Professional Imaging Visualization: The Pixilib DICOM Viewer\n       ============================================================ -->\n  <section class=\"ep-section bg-white\" aria-labelledby=\"intro-title\">\n    <div class=\"container\">\n      <div class=\"intro-grid\">\n\n        <div class=\"intro-sticky reveal\">\n          <div class=\"intro-card\">\n            <span class=\"ep-eyebrow\">Our Vision<\/span>\n            <h2 id=\"intro-title\">Professional Imaging Visualization: The Pixilib DICOM Viewer<\/h2>\n            <blockquote class=\"intro-quote\">\"In clinical trials and real-world evidence studies, the ability to access imaging data quickly and securely is paramount.\"<\/blockquote>\n          <\/div>\n          <button class=\"collapse-toggle\" type=\"button\" aria-expanded=\"false\" aria-controls=\"intro-more\" data-collapse-label-more=\"Read more\" data-collapse-label-less=\"Show less\">\n            <span class=\"collapse-label\">Read more<\/span>\n            <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><polyline points=\"6 9 12 15 18 9\"\/><\/svg>\n          <\/button>\n        <\/div>\n\n        <div class=\"intro-text reveal reveal-d1 collapsible\" id=\"intro-more\">\n          <p>Pixilib's DICOM viewer is a professional-grade, web-based solution designed to provide the capabilities of a high-end workstation directly within your browser.<\/p>\n          <p>As a <strong>zero-footprint DICOM viewer<\/strong>, it requires no local installation, ensuring seamless access for investigator sites, monitors, and central readers while maintaining the highest standards of data security and regulatory compliance.<\/p>\n          <p>From multi-modal DICOM rendering to integrated quantification and AI-assisted segmentation, the Pixilib viewer is the unified visualization layer that powers all our research platforms \u2014 letting researchers, radiologists and central readers focus on science, not on software.<\/p>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/section>\n\n\n  <!-- ============================================================\n       SECTION \u2014 CORE FEATURES (3 H3 with rich content)\n       H2 : Core Features for Expert Medical Review\n       ============================================================ -->\n  <section class=\"ep-section bg-soft\" id=\"features\" aria-labelledby=\"features-title\">\n    <div class=\"container\">\n      <div class=\"ep-head center reveal\">\n        <span class=\"ep-eyebrow\">Core Features<\/span>\n        <h2 id=\"features-title\">Core Features for Expert Medical Review<\/h2>\n        <p>Built for clinical-grade analysis: the speed of a local workstation, the convenience of a web app, and the precision required for research-grade quantification.<\/p>\n      <\/div>\n\n      <div class=\"viewer-feature-grid reveal reveal-d1\">\n\n        <article class=\"viewer-feature\">\n          <div class=\"viewer-feature-text\">\n            <span class=\"viewer-feature-num\">01<\/span>\n            <h3>Massive rendering performances<\/h3>\n            <p>Pixilib's viewer is based on the <a href=\"https:\/\/ohif.org\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">Open Health Imaging Foundation<\/a> framework, for which Pixilib is a major contributor. It belongs to a new generation of DICOM web-based viewers \u2014 its major innovation lies in its ability to use local hardware resources (including <a href=\"https:\/\/developer.nvidia.com\/rtx\/gpu-accelerated-applications\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">GPU acceleration<\/a>) to generate every visualization client-side.<\/p>\n            <p>While previous generations of web DICOM viewers were slow because of latency to retrieve each visualization from the server, our viewer is extremely smooth \u2014 even smoother than professional clinical-grade workstations.<\/p>\n            <p>At Pixilib that's our philosophy: <strong>no compromise.<\/strong> Research needs the best of image processing to unlock all the capabilities of medical imaging and build a new era of innovative uses. Many research platforms integrate \"basic\" viewers for basic and generic quantifications \u2014 we want to make the most of medical imaging.<\/p>\n          <\/div>\n        <\/article>\n\n        <article class=\"viewer-feature viewer-feature-image\">\n          <div class=\"viewer-feature-text\">\n            <span class=\"viewer-feature-num\">02<\/span>\n            <h3>Multi-Modal DICOM Viewer<\/h3>\n            <p>Our DICOM viewer supports the full spectrum of medical imaging modalities used in modern research:<\/p>\n            <ul class=\"ep-list\">\n              <li><span class=\"ep-list-check\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/span><strong>Radiology<\/strong> CT, MRI, Ultrasound and X-ray with advanced MPR (Multi-Planar Reconstruction) and MIP (Maximum Intensity Projection)<\/li>\n              <li><span class=\"ep-list-check\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/span><strong>Nuclear Medicine<\/strong> seamless PET\/CT and PET\/MRI fusion with dynamic image support and customizable colormaps<\/li>\n              <li><span class=\"ep-list-check\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/span><strong>Dynamic imaging<\/strong> 4D CT, MRI and PET\/CT supported with cinematic visualization<\/li>\n              <li><span class=\"ep-list-check\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/span><strong>Specialized data<\/strong> Video (Endoscopy), Digital Microscopy (WSI) and Radiotherapy objects (RTSTRUCT, RTDOSE)<\/li>\n            <\/ul>\n          <\/div>\n          <figure class=\"viewer-feature-visual\">\n            <img src=\"\/wp-content\/uploads\/2026\/05\/radiology-ct-scan-multiplanar-reconstruction.jpg\" alt=\"Multi-planar reconstruction (MPR) view of a CT scan with distance and angle measurements in the Pixilib DICOM viewer.\" loading=\"lazy\" decoding=\"async\">\n          <\/figure>\n        <\/article>\n\n        <article class=\"viewer-feature\">\n          <div class=\"viewer-feature-text\">\n            <span class=\"viewer-feature-num\">03<\/span>\n            <h3>Integrated Quantification &amp; Segmentation Tools<\/h3>\n            <p>Beyond simple visualization, the Pixilib DICOM viewer is a powerful analytical tool. It integrates advanced quantification features such as:<\/p>\n            <ul class=\"ep-list\">\n              <li><span class=\"ep-list-check\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/span><strong>Standardized measurements<\/strong> SUV (Standardized Uptake Value) for PET, Hounsfield Units (HU) for CT, distance and angle measurements<\/li>\n              <li><span class=\"ep-list-check\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/span><strong>AI-assisted segmentation<\/strong> integration of our AI algorithms for Total Metabolic Tumor Volume (TMTV) or organ segmentation directly within the viewer interface<\/li>\n              <li><span class=\"ep-list-check\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg><\/span><strong>Customizable eCRFs<\/strong> perform central review and fill out study-specific forms simultaneously in a unified workspace across <a href=\"\/en\/software\/\">GaelO<\/a> and <a href=\"\/en\/software\/dicom-data-orchestration\/\">GaelO-Flow<\/a><\/li>\n            <\/ul>\n          <\/div>\n        <\/article>\n\n      <\/div>\n    <\/div>\n  <\/section>\n\n\n  <!-- ============================================================\n       SECTION \u2014 NATIVE INTEGRATION\n       H2 : Native integration in our products\n       3 H3 : GaelO, GaelO-Flow, PixiLearn\n       ============================================================ -->\n  <section class=\"ep-section bg-white\" aria-labelledby=\"integration-title\">\n    <div class=\"container\">\n      <div class=\"ep-head center reveal\">\n        <span class=\"ep-eyebrow\">Built In, Not Bolted On<\/span>\n        <h2 id=\"integration-title\">Native integration in our products<\/h2>\n        <p>The Pixilib viewer isn't a separate tool you launch on the side \u2014 it is the visualization core embedded across the entire Pixilib ecosystem, giving every user the same powerful workspace.<\/p>\n      <\/div>\n\n      <div class=\"integration-grid reveal reveal-d1\">\n\n        <article class=\"integration-card\">\n          <div class=\"integration-card-head\">\n            <span class=\"integration-card-tag\" style=\"background:rgba(4,149,160,.12);color:var(--teal-dark)\">Clinical Trials<\/span>\n            <h3>GaelO<\/h3>\n          <\/div>\n          <p>In <a href=\"\/en\/software\/\">GaelO<\/a>, our viewer is natively integrated. When opening medical imaging for centralized interpretation, the context is passed from GaelO to the viewer and the physician can fill the personalized eCRF defined for the clinical trial.<\/p>\n          <p>Measurements and quantifications flow from the viewer to the eCRF \u2014 removing the need for manual copy of data, eliminating typing or rounding errors. Every reviewer uses the same viewer, ensuring standardization of workflow and feature availability for all users, anytime, anywhere.<\/p>\n        <\/article>\n\n        <article class=\"integration-card\">\n          <div class=\"integration-card-head\">\n            <span class=\"integration-card-tag\" style=\"background:rgba(53,50,117,.12);color:#353275\">Research PACS<\/span>\n            <h3>GaelO-Flow<\/h3>\n          <\/div>\n          <p><a href=\"\/en\/software\/dicom-data-orchestration\/\">GaelO-Flow<\/a> also integrates natively with our viewer. As with GaelO, we integrated customizable CRFs in GaelO-Flow to benefit from standardized data collection in retrospective studies \u2014 just like prospective clinical trials.<\/p>\n          <p>Researchers can navigate, segment and quantify directly within the same browser session that orchestrates DICOM data flows.<\/p>\n        <\/article>\n\n        <article class=\"integration-card\">\n          <div class=\"integration-card-head\">\n            <span class=\"integration-card-tag\" style=\"background:rgba(255,186,77,.18);color:#a06f1a\">Education<\/span>\n            <h3>PixiLearn<\/h3>\n          <\/div>\n          <p>Pixilib is also involved in education with its <a href=\"https:\/\/pixilearn.fr\/\" target=\"_blank\" rel=\"noopener noreferrer\">PixiLearn platform<\/a>. The viewer is integrated to deliver immersive teaching with hands-on clinical cases.<\/p>\n          <p>We built a remote control system allowing the teacher to highlight areas of interest in the image to participants \u2014 a great example of our development capabilities: we start from the use case and build the solution around it.<\/p>\n        <\/article>\n\n      <\/div>\n    <\/div>\n  <\/section>\n\n\n  <!-- ============================================================\n       SECTION \u2014 WHY ZERO-FOOTPRINT (3 H3 reasons)\n       H2 : Why Choose a Zero-Footprint DICOM Viewer?\n       ============================================================ -->\n  <section class=\"ep-section bg-soft\" aria-labelledby=\"why-zero-title\">\n    <div class=\"container\">\n      <div class=\"ep-head center reveal\">\n        <span class=\"ep-eyebrow\">Zero Friction<\/span>\n        <h2 id=\"why-zero-title\">Why Choose a Zero-Footprint DICOM Viewer?<\/h2>\n        <p>No installation, no IT bottleneck, no device lock-in \u2014 the freedom to focus on imaging research instead of software logistics.<\/p>\n      <\/div>\n\n      <div class=\"reasons-grid has-wide reveal reveal-d1\">\n\n        <article class=\"reason-card\">\n          <div class=\"reason-card-head\">\n            <span class=\"reason-card-check\" aria-hidden=\"true\">\n              <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg>\n            <\/span>\n            <h3>Access without prior Installation<\/h3>\n          <\/div>\n          <p>Because it is a zero-footprint DICOM viewer, Pixilib's viewer eliminates the technical barriers often found in multicenter studies. No IT department intervention, no software installation at the recruiting centers \u2014 a simple login provides instant access to clinical-grade imaging tools.<\/p>\n        <\/article>\n\n        <article class=\"reason-card\">\n          <div class=\"reason-card-head\">\n            <span class=\"reason-card-check\" aria-hidden=\"true\">\n              <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg>\n            <\/span>\n            <h3>Portability<\/h3>\n          <\/div>\n          <p>You can start to work on a device and continue later on another one. Our platforms and our viewer are accessible wherever you are \u2014 as long as you have a computer with internet access, our viewer will follow you and give maximum freedom to organize your research projects.<\/p>\n        <\/article>\n\n        <article class=\"reason-card reason-card-wide\">\n          <div class=\"reason-card-head\">\n            <span class=\"reason-card-check\" aria-hidden=\"true\">\n              <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"20 6 9 17 4 12\"\/><\/svg>\n            <\/span>\n            <h3>Multiple Device Support<\/h3>\n          <\/div>\n          <p>Pixilib's viewer can be used on various devices \u2014 desktop or laptop computers, tablets or smartphones. Choose your device, our viewer will follow your hardware choice.<\/p>\n          <figure class=\"reason-card-visual\">\n            <img src=\"\/wp-content\/uploads\/2026\/05\/gaelo-multiple-device-support-tablet-imaging.png.jpg\" alt=\"Close-up shot of a clinician's hands using a touch-screen tablet displaying a full-screen, high-definition medical scan with no software borders.\" loading=\"lazy\" decoding=\"async\">\n          <\/figure>\n        <\/article>\n\n      <\/div>\n    <\/div>\n  <\/section>\n\n\n  <!-- ============================================================\n       SECTION \u2014 ECOSYSTEM (cross-sell, identical to other pages)\n       ============================================================ -->\n  <section class=\"ep-section bg-white\" aria-labelledby=\"ecosystem-title\">\n    <div class=\"container\">\n      <div class=\"ep-head center reveal\">\n        <span class=\"ep-eyebrow\">The Pixilib Ecosystem<\/span>\n        <h2 id=\"ecosystem-title\">A unified infrastructure for medical imaging research<\/h2>\n        <p>From clinical trial centralization to research PACS and AI segmentation \u2014 three complementary products covering the full lifecycle of medical imaging in clinical research.<\/p>\n      <\/div>\n\n      <div class=\"eco-grid reveal reveal-d1\">\n\n        <article class=\"eco-card gaelo\">\n          <div class=\"eco-visual\"><img loading=\"lazy\" src=\"\/wp-content\/uploads\/2026\/03\/Logo-Gaelo-1-scaled.png\" alt=\"GaelO logo \u2014 clinical trial imaging platform\" loading=\"lazy\" decoding=\"async\" width=\"280\" height=\"88\"><\/div>\n          <div class=\"eco-body\">\n            <span class=\"eco-tag\">Clinical Trials<\/span>\n            <h3>GaelO<\/h3>\n            <p>Collection and centralized reading of clinical trials. From DICOM upload to Blind Independent Central Review with disease-specific criteria \u2014 GDPR\/HIPAA compliant, fully auditable.<\/p>\n            <a href=\"\/en\/software\/\" class=\"eco-link\">Discover GaelO<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><\/a>\n          <\/div>\n        <\/article>\n\n        <article class=\"eco-card flow\">\n          <div class=\"eco-visual\"><img loading=\"lazy\" src=\"\/wp-content\/uploads\/2026\/04\/Logo-gaelo-flow.png\" alt=\"GaelO Flow logo \u2014 research PACS for retrospective and Real World Evidence studies\" loading=\"lazy\" decoding=\"async\" width=\"280\" height=\"88\"><\/div>\n          <div class=\"eco-body\">\n            <span class=\"eco-tag\">Research PACS \u00b7 RWE<\/span>\n            <h3>GaelO Flow<\/h3>\n            <p>Research PACS for retrospective and Real World Evidence studies. Orchestrate <strong>medical imaging data<\/strong>: query\/retrieve, batch de-identification, AI inference pipelines and seamless export.<\/p>\n            <a href=\"\/en\/software\/dicom-data-orchestration\/\" class=\"eco-link\">Discover GaelO Flow<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><\/a>\n          <\/div>\n        <\/article>\n\n        <article class=\"eco-card algo\">\n          <div class=\"eco-visual cover\"><img loading=\"lazy\" src=\"\/wp-content\/uploads\/2026\/06\/wp-contentuploadsgaelo-sharedai-segmentation-card.jpg\" alt=\"AI segmentation algorithms \u2014 FDG, PSMA, DOTATOC tracers for medical imaging\" loading=\"lazy\" decoding=\"async\" width=\"600\" height=\"280\"><\/div>\n          <div class=\"eco-body\">\n            <span class=\"eco-tag\">AI \u00b7 Segmentation<\/span>\n            <h3>AI Segmentation Algorithms<\/h3>\n            <p>FDG, PSMA, DOTATOC. Automated PET segmentation to extract <strong>Total Metabolic Tumor Volume (TMTV)<\/strong> human-in-the-loop, 100% medically validated, regulatory-ready.<\/p>\n            <a href=\"\/en\/algorithms\/\" class=\"eco-link\">Explore AI algorithms<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg><\/a>\n          <\/div>\n        <\/article>\n\n      <\/div>\n    <\/div>\n  <\/section>\n\n\n  <!-- ============================================================\n       FINAL CTA\n       ============================================================ -->\n  <aside class=\"final-cta\" id=\"contact\" aria-labelledby=\"final-title\">\n    <div class=\"final-cta-glow\" aria-hidden=\"true\"><\/div>\n    <div class=\"final-cta-grid-overlay\" aria-hidden=\"true\"><\/div>\n    <div class=\"final-cta-content\">\n      <h2 id=\"final-title\">Ready to visualize your medical imaging research?<\/h2>\n      <p class=\"final-cta-sub\">From multicenter clinical trials to retrospective studies and AI-powered analytics \u2014 let's give your imaging research the viewer it deserves.<\/p>\n      <div class=\"final-cta-actions\">\n        <a href=\"\/en\/contact\/\" class=\"btn btn-primary-light\">\n          Request a Demo\n          <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"\/><polyline points=\"12 5 19 12 12 19\"\/><\/svg>\n        <\/a>\n        <a href=\"\/en\/contact\/\" class=\"btn btn-ghost-light\">Talk to Our Team<\/a>\n      <\/div>\n    <\/div>\n  <\/aside>\n\n<\/article>\n\n<!-- ============================================================\n     JS \u2014 reveal + scroll progress + smooth anchor scroll + collapse + lightbox\n     Pure vanilla, no dependencies.\n     ============================================================ -->\n<script>\n(function(){\n  var root=document.querySelector('.gaelo-product');\n  if(!root)return;\n\n  \/\/ \u2500\u2500\u2500 REVEAL ON SCROLL \u2500\u2500\u2500\n  if(typeof IntersectionObserver!=='undefined'){\n    var revealEls=root.querySelectorAll('.reveal');\n    var revealIO=new IntersectionObserver(function(entries){\n      entries.forEach(function(e){\n        if(e.isIntersecting){\n          e.target.classList.add('is-visible');\n          revealIO.unobserve(e.target);\n        }\n      });\n    },{rootMargin:'0px 0px -10% 0px',threshold:.1});\n    revealEls.forEach(function(el){revealIO.observe(el)});\n  }\n\n  \/\/ \u2500\u2500\u2500 SCROLL PROGRESS BAR \u2500\u2500\u2500\n  var bar=root.querySelector('.scroll-progress');\n  function updateProgress(){\n    if(!bar)return;\n    var max=document.documentElement.scrollHeight-window.innerHeight;\n    var p=max>0?(window.scrollY\/max)*100:0;\n    bar.style.width=p+'%';\n  }\n  window.addEventListener('scroll',updateProgress,{passive:true});\n  updateProgress();\n\n  \/\/ \u2500\u2500\u2500 TABS \u2500\u2500\u2500\n  var tabsContainer=root.querySelector('.tabs');\n  if(tabsContainer){\n    var tabBtns=tabsContainer.querySelectorAll('.tabs-btn');\n    var tabPanels=tabsContainer.querySelectorAll('.tabs-panel');\n\n    function activateTab(idx){\n      tabBtns.forEach(function(b,i){\n        var active=i===idx;\n        b.setAttribute('aria-selected',active?'true':'false');\n        b.setAttribute('tabindex',active?'0':'-1');\n      });\n      tabPanels.forEach(function(p,i){\n        var active=i===idx;\n        p.classList.toggle('is-active',active);\n        if(active){p.removeAttribute('hidden')}\n        else{p.setAttribute('hidden','')}\n      });\n    }\n\n    tabBtns.forEach(function(btn,idx){\n      btn.addEventListener('click',function(){activateTab(idx)});\n      btn.addEventListener('keydown',function(e){\n        var newIdx=null;\n        if(e.key==='ArrowRight'){newIdx=(idx+1)%tabBtns.length;e.preventDefault()}\n        else if(e.key==='ArrowLeft'){newIdx=(idx-1+tabBtns.length)%tabBtns.length;e.preventDefault()}\n        else if(e.key==='Home'){newIdx=0;e.preventDefault()}\n        else if(e.key==='End'){newIdx=tabBtns.length-1;e.preventDefault()}\n        if(newIdx!==null){activateTab(newIdx);tabBtns[newIdx].focus()}\n      });\n    });\n  }\n\n  \/\/ \u2500\u2500\u2500 COUNTERS (count-up on first view) \u2500\u2500\u2500\n  var counters=root.querySelectorAll('.counter-num');\n  if(counters.length && typeof IntersectionObserver!=='undefined'){\n    var cIO=new IntersectionObserver(function(entries){\n      entries.forEach(function(e){\n        if(!e.isIntersecting)return;\n        cIO.unobserve(e.target);\n        var el=e.target;\n        var full=el.textContent;\n        var m=full.match(\/(\\d+)\/);\n        if(!m){return}\n        var target=parseInt(m[1],10);\n        var prefix=full.slice(0,m.index);\n        var suffixSpan=el.querySelector('.suffix');\n        var suffix=suffixSpan?suffixSpan.outerHTML:full.slice(m.index+m[1].length);\n        var dur=1100,start=null;\n        function step(ts){\n          if(!start)start=ts;\n          var prog=Math.min(1,(ts-start)\/dur);\n          var eased=1-Math.pow(1-prog,3);\n          var val=Math.round(target*eased);\n          el.innerHTML=prefix+val+suffix;\n          if(prog<1){requestAnimationFrame(step)}\n        }\n        requestAnimationFrame(step);\n      });\n    },{threshold:.4});\n    counters.forEach(function(c){cIO.observe(c)});\n  }\n\n  \/\/ \u2500\u2500\u2500 COLLAPSE TOGGLES \u2014 \"Read more\" \/ \"Show less\" (mobile\/tablet only) \u2500\u2500\u2500\n  var toggles=root.querySelectorAll('.collapse-toggle');\n  var mql=window.matchMedia('(max-width:900px)');\n\n  function applyCollapsedState(toggle,target,collapsed){\n    toggle.setAttribute('aria-expanded',collapsed?'false':'true');\n    var label=toggle.querySelector('.collapse-label');\n    if(label){\n      label.textContent=collapsed\n        ?(toggle.dataset.collapseLabelMore||'Read more')\n        :(toggle.dataset.collapseLabelLess||'Show less');\n    }\n    if(toggle.dataset.collapseTarget==='grid'){\n      if(collapsed)target.removeAttribute('data-extended');\n      else target.setAttribute('data-extended','true');\n    } else {\n      target.setAttribute('data-collapsed',collapsed?'true':'false');\n    }\n  }\n  function syncToggle(toggle){\n    var id=toggle.getAttribute('aria-controls');\n    if(!id)return;\n    var target=document.getElementById(id);\n    if(!target)return;\n    \/\/ Grid toggle (features list) : always start collapsed\n    if(toggle.dataset.collapseTarget==='grid'){\n      applyCollapsedState(toggle,target,true);\n      return;\n    }\n    \/\/ Generic collapsible (intro text) : collapsed only on mobile\n    if(mql.matches){\n      applyCollapsedState(toggle,target,true);\n    } else {\n      applyCollapsedState(toggle,target,false);\n    }\n  }\n  toggles.forEach(function(toggle){\n    syncToggle(toggle);\n    toggle.addEventListener('click',function(){\n      var id=toggle.getAttribute('aria-controls');\n      var target=document.getElementById(id);\n      if(!target)return;\n      var currentlyCollapsed=toggle.getAttribute('aria-expanded')!=='true';\n      applyCollapsedState(toggle,target,!currentlyCollapsed);\n    });\n  });\n  if(mql.addEventListener)mql.addEventListener('change',function(){toggles.forEach(syncToggle)});\n  else if(mql.addListener)mql.addListener(function(){toggles.forEach(syncToggle)});\n\n  \/\/ \u2500\u2500\u2500 LIGHTBOX (click any content image to enlarge) \u2500\u2500\u2500\n  \/\/ Exclude brand logos (decorative) inside .eco-visual that are NOT cover photos.\n  var imgs=root.querySelectorAll('img');\n  var box=null,boxImg=null,boxCap=null,lastFocus=null;\n\n  function buildBox(){\n    box=document.createElement('div');\n    box.className='gp-lightbox';\n    box.setAttribute('role','dialog');\n    box.setAttribute('aria-modal','true');\n    box.setAttribute('aria-label','Image preview');\n    box.innerHTML=''\n      +'<button class=\"gp-lightbox-close\" type=\"button\" aria-label=\"Close image preview\">'\n      +'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"\/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"\/><\/svg>'\n      +'<\/button>'\n      +'<img class=\"gp-lightbox-img\" alt=\"\">'\n      +'<div class=\"gp-lightbox-cap\"><\/div>';\n    document.body.appendChild(box);\n    boxImg=box.querySelector('.gp-lightbox-img');\n    boxCap=box.querySelector('.gp-lightbox-cap');\n    box.addEventListener('click',function(e){\n      \/\/ clicking the backdrop, the close button, OR the image itself closes it\n      closeBox();\n    });\n  }\n  function openBox(src,alt){\n    if(!box)buildBox();\n    lastFocus=document.activeElement;\n    boxImg.src=src;boxImg.alt=alt||'';\n    boxCap.textContent=alt||'';\n    \/\/ force reflow then open for the transition\n    box.offsetHeight;\n    box.classList.add('is-open');\n    document.body.style.overflow='hidden';\n    box.querySelector('.gp-lightbox-close').focus();\n  }\n  function closeBox(){\n    if(!box)return;\n    box.classList.remove('is-open');\n    document.body.style.overflow='';\n    if(lastFocus&&lastFocus.focus)lastFocus.focus();\n  }\n  document.addEventListener('keydown',function(e){\n    if(e.key==='Escape'&&box&&box.classList.contains('is-open'))closeBox();\n  });\n\n  imgs.forEach(function(img){\n    var inLogo=img.closest('.eco-visual')&&!img.closest('.eco-visual.cover');\n    if(inLogo)return;                 \/\/ skip decorative brand logos\n    if(img.closest('.hero-mockup-bar'))return;\n    img.classList.add('zoomable');\n    img.setAttribute('tabindex','0');\n    img.setAttribute('role','button');\n    img.addEventListener('click',function(){openBox(img.currentSrc||img.src,img.alt)});\n    img.addEventListener('keydown',function(e){\n      if(e.key==='Enter'||e.key===' '){e.preventDefault();openBox(img.currentSrc||img.src,img.alt)}\n    });\n  });\n\n\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Zero-footprint \u00b7 GPU-accelerated \u00b7 OHIF-based Advanced Web-Based DICOM Viewer for Clinical Research Access, visualize and quantify medical images from any browser with our high-performance zero-footprint and full-featured DICOM viewer. Request a Demo Explore Features gaelo.fr \u00b7 dicom-viewer Scroll Our Vision Professional Imaging Visualization: The Pixilib DICOM Viewer &#8220;In clinical trials and real-world evidence studies, the [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-250","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/gaelo.fr\/en\/wp-json\/wp\/v2\/pages\/250","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gaelo.fr\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/gaelo.fr\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/gaelo.fr\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gaelo.fr\/en\/wp-json\/wp\/v2\/comments?post=250"}],"version-history":[{"count":23,"href":"https:\/\/gaelo.fr\/en\/wp-json\/wp\/v2\/pages\/250\/revisions"}],"predecessor-version":[{"id":788,"href":"https:\/\/gaelo.fr\/en\/wp-json\/wp\/v2\/pages\/250\/revisions\/788"}],"wp:attachment":[{"href":"https:\/\/gaelo.fr\/en\/wp-json\/wp\/v2\/media?parent=250"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}