{"id":695,"date":"2026-09-09T07:15:35","date_gmt":"2026-09-09T07:15:35","guid":{"rendered":"https:\/\/ale.fr\/produits\/tetes-impression\/"},"modified":"2026-10-28T11:06:52","modified_gmt":"2026-10-28T11:06:52","slug":"print-heads","status":"publish","type":"page","link":"https:\/\/ale.fr\/en\/products\/print-heads\/","title":{"rendered":"Printheads"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"695\" class=\"elementor elementor-695\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b8a0998 e-con e-atomic-element e-flexbox-base e-default-div e-b8a0998-ac6e3d6 \" data-id=\"b8a0998\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"b8a0998\">\n    <div class=\"elementor-element elementor-element-d7b0bd3 e-con e-atomic-element e-flexbox-base e-default-div e-d7b0bd3-99d49e6 \" data-id=\"d7b0bd3\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"d7b0bd3\">\n    \t\t<div class=\"elementor-element elementor-element-e89f7ce elementor-widget elementor-widget-heading\" data-id=\"e89f7ce\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">A printhead for every orientation and substrate<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c9501b7 elementor-widget elementor-widget-text-editor\" data-id=\"c9501b7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">ALE develops high-resolution printheads for side and omnidirectional printing, on both porous and non-porous substrates.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7de4154 elementor-widget elementor-widget-html\" data-id=\"7de4154\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div class=\"ale-head-cta-wrap\">\n  <a\n    href=\"\/en\/contact-us\/\"\n    class=\"ale-head-cta\"\n    aria-label=\"Identify the right printhead and ink\"\n  >\n    <span class=\"ale-head-cta__label\">\n      Identify the right printhead and ink\n    <\/span>\n\n    <span class=\"ale-head-cta__matrix\" aria-hidden=\"true\">\n      <i><\/i><i><\/i><i><\/i>\n      <i><\/i><i><\/i><i><\/i>\n      <i><\/i><i><\/i><i><\/i>\n\n      <svg viewBox=\"0 0 24 24\">\n        <path d=\"M4 12H19\"><\/path>\n        <path d=\"M14 6L20 12L14 18\"><\/path>\n      <\/svg>\n    <\/span>\n  <\/a>\n<\/div>\n\n<style>\n.ale-head-cta-wrap{\n  display:flex;\n  width:100%;\n}\n\n.ale-head-cta,\n.ale-head-cta:hover,\n.ale-head-cta:focus,\n.ale-head-cta:active,\n.ale-head-cta:visited{\n  --ale-gray:#58656A;\n  --ale-red:#C5003C;\n  display:inline-flex;\n  align-items:stretch;\n  min-height:60px;\n  max-width:100%;\n  margin:0;\n  padding:0!important;\n  overflow:hidden;\n  border:0!important;\n  border-radius:14px;\n  outline:none;\n  background:var(--ale-gray)!important;\n  color:#FFFFFF!important;\n  text-decoration:none!important;\n  font-family:\"Sora\",Arial,sans-serif;\n  font-size:17px;\n  line-height:1.2;\n  font-weight:650;\n  box-shadow:0 10px 22px rgba(88,101,106,.20);\n  -webkit-tap-highlight-color:transparent;\n  transition:transform .25s ease,background .25s ease,box-shadow .25s ease;\n}\n\n.ale-head-cta__label{\n  display:flex;\n  align-items:center;\n  min-width:0;\n  padding:14px 24px;\n}\n\n.ale-head-cta__matrix{\n  position:relative;\n  width:62px;\n  min-width:62px;\n  border-left:1px solid rgba(255,255,255,.24);\n  background:rgba(23,36,42,.09);\n}\n\n.ale-head-cta__matrix i{\n  position:absolute;\n  width:5px;\n  height:5px;\n  border-radius:1px;\n  background:#FFFFFF;\n  transform:translate(-50%,-50%);\n  transition:opacity .20s ease,transform .30s cubic-bezier(.22,.61,.36,1);\n}\n\n.ale-head-cta__matrix i:nth-child(1){left:calc(50% - 9px);top:calc(50% - 9px)}\n.ale-head-cta__matrix i:nth-child(2){left:50%;top:calc(50% - 9px)}\n.ale-head-cta__matrix i:nth-child(3){left:calc(50% + 9px);top:calc(50% - 9px)}\n.ale-head-cta__matrix i:nth-child(4){left:calc(50% - 9px);top:50%}\n.ale-head-cta__matrix i:nth-child(5){left:50%;top:50%}\n.ale-head-cta__matrix i:nth-child(6){left:calc(50% + 9px);top:50%}\n.ale-head-cta__matrix i:nth-child(7){left:calc(50% - 9px);top:calc(50% + 9px)}\n.ale-head-cta__matrix i:nth-child(8){left:50%;top:calc(50% + 9px)}\n.ale-head-cta__matrix i:nth-child(9){left:calc(50% + 9px);top:calc(50% + 9px)}\n\n.ale-head-cta__matrix svg{\n  position:absolute;\n  top:50%;\n  left:50%;\n  width:28px;\n  height:28px;\n  fill:none;\n  stroke:#FFFFFF;\n  stroke-width:1.9;\n  stroke-linecap:round;\n  stroke-linejoin:round;\n  opacity:0;\n  transform:translate(-62%,-50%) scale(.72);\n  transition:opacity .22s ease,transform .34s cubic-bezier(.22,.61,.36,1);\n}\n\n.ale-head-cta:is(:hover,:focus-visible){\n  transform:translateY(-2px);\n  background:var(--ale-red)!important;\n  box-shadow:0 14px 28px rgba(197,0,60,.20);\n}\n\n.ale-head-cta:is(:hover,:focus-visible) .ale-head-cta__matrix i{\n  opacity:0;\n  transform:translate(-50%,-50%) scale(.25);\n}\n\n.ale-head-cta:is(:hover,:focus-visible) .ale-head-cta__matrix svg{\n  opacity:1;\n  transform:translate(-50%,-50%) scale(1);\n}\n\n@media(max-width:600px){\n  .ale-head-cta{\n    width:100%;\n    min-height:60px;\n    font-size:15px;\n  }\n\n  .ale-head-cta__label{\n    flex:1;\n    padding:13px 17px;\n  }\n\n  .ale-head-cta__matrix{\n    width:58px;\n    min-width:58px;\n  }\n}\n\n@media(prefers-reduced-motion:reduce){\n  .ale-head-cta,\n  .ale-head-cta__matrix i,\n  .ale-head-cta__matrix svg{\n    transition:none;\n  }\n}\n<\/style>\t\t\t\t<\/div>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-f293664 e-con e-atomic-element e-flexbox-base e-default-div e-f293664-fd677a1 \" data-id=\"f293664\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"f293664\">\n    \t\t<div class=\"elementor-element elementor-element-b25c6d9 elementor-widget elementor-widget-image\" data-id=\"b25c6d9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1672\" height=\"941\" src=\"https:\/\/ale.fr\/wp-content\/uploads\/2026\/10\/PROD-TI-N2.webp\" class=\"attachment-full size-full wp-image-1238\" alt=\"\" srcset=\"https:\/\/ale.fr\/wp-content\/uploads\/2026\/10\/PROD-TI-N2.webp 1672w, https:\/\/ale.fr\/wp-content\/uploads\/2026\/10\/PROD-TI-N2-300x169.webp 300w, https:\/\/ale.fr\/wp-content\/uploads\/2026\/10\/PROD-TI-N2-1024x576.webp 1024w, https:\/\/ale.fr\/wp-content\/uploads\/2026\/10\/PROD-TI-N2-768x432.webp 768w, https:\/\/ale.fr\/wp-content\/uploads\/2026\/10\/PROD-TI-N2-1536x864.webp 1536w\" sizes=\"(max-width: 1672px) 100vw, 1672px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\n<\/div>\n\n<\/div>\n<div class=\"elementor-element elementor-element-4e94e7b e-con e-atomic-element e-flexbox-base e-default-div e-4e94e7b-319be0c \" data-id=\"4e94e7b\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"4e94e7b\">\n    \t\t<div class=\"elementor-element elementor-element-9de7971 elementor-widget elementor-widget-html\" data-id=\"9de7971\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div class=\"ale-reassurance\">\n\n  <div class=\"ale-reassurance__track\">\n\n    <div class=\"ale-reassurance__group\">\n\n      <span class=\"ale-reassurance__item\">\n        Designed and manufactured in France\n      <\/span>\n\n      <span class=\"ale-reassurance__separator\">\n        <img decoding=\"async\"\n          src=\"https:\/\/ale.fr\/wp-content\/uploads\/2026\/08\/cropped-logo-ale.png\"\n          alt=\"\"\n        >\n      <\/span>\n\n      <span class=\"ale-reassurance__item\">\n        Technology expertise since 2001\n      <\/span>\n\n      <span class=\"ale-reassurance__separator\">\n        <img decoding=\"async\"\n          src=\"https:\/\/ale.fr\/wp-content\/uploads\/2026\/08\/cropped-logo-ale.png\"\n          alt=\"\"\n        >\n      <\/span>\n\n      <span class=\"ale-reassurance__item\">\n        Solutions installed in more than 35 countries\n      <\/span>\n\n      <span class=\"ale-reassurance__separator\">\n        <img decoding=\"async\"\n          src=\"https:\/\/ale.fr\/wp-content\/uploads\/2026\/08\/cropped-logo-ale.png\"\n          alt=\"\"\n        >\n      <\/span>\n\n      <span class=\"ale-reassurance__item\">\n        Responsive technical support\n      <\/span>\n\n      <span class=\"ale-reassurance__separator\">\n        <img decoding=\"async\"\n          src=\"https:\/\/ale.fr\/wp-content\/uploads\/2026\/08\/cropped-logo-ale.png\"\n          alt=\"\"\n        >\n      <\/span>\n\n      <span class=\"ale-reassurance__item\">\n        Equipment designed to last\n      <\/span>\n\n      <span class=\"ale-reassurance__separator\">\n        <img decoding=\"async\"\n          src=\"https:\/\/ale.fr\/wp-content\/uploads\/2026\/08\/cropped-logo-ale.png\"\n          alt=\"\"\n        >\n      <\/span>\n\n    <\/div>\n\n\n    <div\n      class=\"ale-reassurance__group\"\n      aria-hidden=\"true\"\n    >\n\n      <span class=\"ale-reassurance__item\">\n        Designed and manufactured in France\n      <\/span>\n\n      <span class=\"ale-reassurance__separator\">\n        <img decoding=\"async\"\n          src=\"https:\/\/ale.fr\/wp-content\/uploads\/2026\/08\/cropped-logo-ale.png\"\n          alt=\"\"\n        >\n      <\/span>\n\n      <span class=\"ale-reassurance__item\">\n        Technology expertise since 2001\n      <\/span>\n\n      <span class=\"ale-reassurance__separator\">\n        <img decoding=\"async\"\n          src=\"https:\/\/ale.fr\/wp-content\/uploads\/2026\/08\/cropped-logo-ale.png\"\n          alt=\"\"\n        >\n      <\/span>\n\n      <span class=\"ale-reassurance__item\">\n        Solutions installed in more than 35 countries\n      <\/span>\n\n      <span class=\"ale-reassurance__separator\">\n        <img decoding=\"async\"\n          src=\"https:\/\/ale.fr\/wp-content\/uploads\/2026\/08\/cropped-logo-ale.png\"\n          alt=\"\"\n        >\n      <\/span>\n\n      <span class=\"ale-reassurance__item\">\n        Responsive technical support\n      <\/span>\n\n      <span class=\"ale-reassurance__separator\">\n        <img decoding=\"async\"\n          src=\"https:\/\/ale.fr\/wp-content\/uploads\/2026\/08\/cropped-logo-ale.png\"\n          alt=\"\"\n        >\n      <\/span>\n\n      <span class=\"ale-reassurance__item\">\n        Equipment designed to last\n      <\/span>\n\n      <span class=\"ale-reassurance__separator\">\n        <img decoding=\"async\"\n          src=\"https:\/\/ale.fr\/wp-content\/uploads\/2026\/08\/cropped-logo-ale.png\"\n          alt=\"\"\n        >\n      <\/span>\n\n    <\/div>\n\n  <\/div>\n\n<\/div>\n\n\n<style>\n\n.ale-reassurance{\n  width:100%;\n\n  overflow:hidden;\n\n  padding:28px 0;\n\n  background:#58656A;\n\n  font-family:\"Inter\",Arial,sans-serif;\n}\n\n\n.ale-reassurance *,\n.ale-reassurance *::before,\n.ale-reassurance *::after{\n  box-sizing:border-box;\n}\n\n\n.ale-reassurance__track{\n  width:max-content;\n\n  display:flex;\n\n  align-items:center;\n\n  animation:\n    aleReassuranceScroll\n    38s linear infinite;\n\n  will-change:transform;\n}\n\n\n.ale-reassurance:hover\n.ale-reassurance__track{\n  animation-play-state:paused;\n}\n\n\n.ale-reassurance__group{\n  flex:none;\n\n  display:flex;\n\n  align-items:center;\n\n  gap:26px;\n\n  padding-right:26px;\n}\n\n\n.ale-reassurance__item{\n  display:block;\n\n  color:#FFFFFF;\n\n  font-family:\"Sora\",Arial,sans-serif;\n\n  font-size:14px;\n\n  line-height:1.2;\n\n  font-weight:600;\n\n  white-space:nowrap;\n}\n\n\n.ale-reassurance__separator{\n  width:27px;\n\n  height:27px;\n\n  flex:0 0 27px;\n\n  display:flex;\n\n  align-items:center;\n\n  justify-content:center;\n\n  overflow:hidden;\n\n  padding:4px;\n\n  border-radius:6px;\n\n  background:rgba(255,255,255,.88);\n}\n\n\n.ale-reassurance__separator img{\n  display:block;\n\n  width:100%;\n\n  height:100%;\n\n  object-fit:contain;\n}\n\n\n@keyframes aleReassuranceScroll{\n\n  from{\n    transform:translate3d(0,0,0);\n  }\n\n  to{\n    transform:translate3d(-50%,0,0);\n  }\n\n}\n\n\n@media(max-width:600px){\n\n  .ale-reassurance{\n    padding:14px 0;\n  }\n\n\n  .ale-reassurance__group{\n    gap:20px;\n\n    padding-right:20px;\n  }\n\n\n  .ale-reassurance__item{\n    font-size:13px;\n  }\n\n\n  .ale-reassurance__separator{\n    width:24px;\n    height:24px;\n\n    flex-basis:24px;\n  }\n\n}\n\n\n@media(prefers-reduced-motion:reduce){\n\n  .ale-reassurance__track{\n    width:100%;\n\n    overflow-x:auto;\n\n    animation:none;\n  }\n\n\n  .ale-reassurance__group[aria-hidden=\"true\"]{\n    display:none;\n  }\n\n}\n\n<\/style>\t\t\t\t<\/div>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-f08a829 e-con e-atomic-element e-flexbox-base e-default-div e-f08a829-dbd113c \" data-id=\"f08a829\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"f08a829\">\n    \t\t<div class=\"elementor-element elementor-element-3d77223 elementor-widget elementor-widget-html\" data-id=\"3d77223\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section\n  class=\"ale-heads-slider\"\n  data-ale-heads-slider\n  role=\"region\"\n  aria-roledescription=\"carousel\"\n  aria-label=\"ALE printhead ranges\"\n>\n  <div class=\"ale-heads-slider__stage\">\n\n    <!-- EASY-SERIES -->\n    <article\n      class=\"ale-heads-slider__slide is-active\"\n      data-slide=\"0\"\n      data-name=\"Easy-Series\"\n      role=\"tabpanel\"\n      aria-hidden=\"false\"\n    >\n      <div class=\"ale-heads-slider__media\">\n        <img\n          src=\"https:\/\/ale.fr\/wp-content\/uploads\/2026\/09\/tetes-impression-easy-series-marquage-lateral-ale.webp\"\n          alt=\"ALE Easy-Series printheads for side marking\"\n          width=\"2560\"\n          height=\"1700\"\n          loading=\"eager\"\n          decoding=\"async\"\n        >\n      <\/div>\n\n      <div class=\"ale-heads-slider__content\">\n        <span class=\"ale-heads-slider__category\">\n          Easy-Series\n        <\/span>\n\n        <h2>\n          Robust printheads for side marking\n        <\/h2>\n\n        <div class=\"ale-heads-slider__intro\">\n          <p>\n            The Easy range is designed for side-marking applications requiring\n            a compact, reliable solution that is easy to integrate.\n          <\/p>\n\n          <p>\n            It can print text, logos, 1D and 2D barcodes as well as variable\n            data such as dates, batch numbers and counters.\n          <\/p>\n        <\/div>\n\n        <div class=\"ale-heads-slider__details\">\n          <details open>\n            <summary>Available models<\/summary>\n\n            <div class=\"ale-heads-slider__details-body\">\n              <div class=\"ale-heads-slider__models\">\n                <div class=\"ale-heads-slider__model\">\n                  <strong>Easy18<\/strong>\n                  <p>Print height up to 18 mm.<\/p>\n                <\/div>\n\n                <div class=\"ale-heads-slider__model\">\n                  <strong>Easy72<\/strong>\n                  <p>Print height up to 72 mm.<\/p>\n                <\/div>\n\n                <div class=\"ale-heads-slider__model\">\n                  <strong>Easy144<\/strong>\n                  <p>Print height up to 144 mm.<\/p>\n                <\/div>\n              <\/div>\n            <\/div>\n          <\/details>\n\n          <details>\n            <summary>Easy-Series advantages<\/summary>\n\n            <div class=\"ale-heads-slider__details-body\">\n              <ul class=\"ale-heads-slider__features\">\n                <li>Robust and compact design<\/li>\n                <li>Plug &amp; Play integration<\/li>\n                <li>Reduced maintenance<\/li>\n                <li>Ink system designed to minimise leakage risk<\/li>\n                <li>Low ink level alarm<\/li>\n                <li>Refilling designed to minimise interruptions<\/li>\n                <li>Suitable for porous and non-porous substrates<\/li>\n                <li>Speeds up to 60 m\/min depending on model and configuration<\/li>\n              <\/ul>\n            <\/div>\n          <\/details>\n        <\/div>\n      <\/div>\n    <\/article>\n\n    <!-- FLEX-SERIES -->\n    <article\n      class=\"ale-heads-slider__slide\"\n      data-slide=\"1\"\n      data-name=\"FleX-Series\"\n      role=\"tabpanel\"\n      aria-hidden=\"true\"\n      hidden\n    >\n      <div class=\"ale-heads-slider__media\">\n        <img loading=\"lazy\"\n          src=\"https:\/\/ale.fr\/wp-content\/uploads\/2026\/09\/tetes-impression-flex-series-omnidirectionnelles-ale.webp\"\n          alt=\"ALE FleX-Series omnidirectional printhead on an industrial production line\"\n          width=\"2560\"\n          height=\"1700\"\n          loading=\"lazy\"\n          decoding=\"async\"\n        >\n      <\/div>\n\n      <div class=\"ale-heads-slider__content\">\n        <span class=\"ale-heads-slider__category\">\n          FleX-Series\n        <\/span>\n\n        <h2>\n          Print in the direction required by your line\n        <\/h2>\n\n        <div class=\"ale-heads-slider__intro\">\n          <p>\n            FleX-Series was designed for installations where printhead\n            orientation is a major constraint.\n          <\/p>\n\n          <p>\n            The printhead can be positioned for different printing directions,\n            making integration easier on existing lines or for specific\n            applications.\n          <\/p>\n        <\/div>\n\n        <div class=\"ale-heads-slider__details\">\n          <details open>\n            <summary>Available models<\/summary>\n\n            <div class=\"ale-heads-slider__details-body\">\n              <div class=\"ale-heads-slider__models\">\n                <div class=\"ale-heads-slider__model\">\n                  <strong>FleX18<\/strong>\n                  <p>Print height up to 18 mm.<\/p>\n                <\/div>\n\n                <div class=\"ale-heads-slider__model\">\n                  <strong>FleX34<\/strong>\n                  <p>Print height up to 34 mm.<\/p>\n                <\/div>\n\n                <div class=\"ale-heads-slider__model\">\n                  <strong>FleX72<\/strong>\n                  <p>Print height up to 72 mm.<\/p>\n                <\/div>\n              <\/div>\n            <\/div>\n          <\/details>\n\n          <details>\n            <summary>FleX-Series advantages<\/summary>\n\n            <div class=\"ale-heads-slider__details-body\">\n              <ul class=\"ale-heads-slider__features\">\n                <li>Omnidirectional printing<\/li>\n                <li>Compact format<\/li>\n                <li>Plug &amp; Play integration<\/li>\n                <li>Reduced maintenance<\/li>\n                <li>Reliability suited to industrial environments<\/li>\n                <li>Printing of text, logos and codes<\/li>\n                <li>Variable data management<\/li>\n                <li>Systems for porous and non-porous surfaces<\/li>\n              <\/ul>\n            <\/div>\n          <\/details>\n        <\/div>\n      <\/div>\n    <\/article>\n\n    <!-- FLEXUV-SERIES -->\n    <article\n      class=\"ale-heads-slider__slide\"\n      data-slide=\"2\"\n      data-name=\"FleXUV-Series\"\n      role=\"tabpanel\"\n      aria-hidden=\"true\"\n      hidden\n    >\n      <div class=\"ale-heads-slider__media\">\n        <img loading=\"lazy\"\n          src=\"https:\/\/ale.fr\/wp-content\/uploads\/2026\/10\/PROD-TI-UV-N2.webp\"\n          alt=\"ALE FleXUV-Series printing solution with UV light curing\"\n          width=\"1335\"\n          height=\"1178\"\n          loading=\"lazy\"\n          decoding=\"async\"\n        >\n      <\/div>\n\n      <div class=\"ale-heads-slider__content\">\n        <span class=\"ale-heads-slider__category\">\n          FleXUV-Series\n        <\/span>\n\n        <h2>\n          Mark a wide range of substrates with UV curing\n        <\/h2>\n\n        <div class=\"ale-heads-slider__intro\">\n          <p>\n            FleXUV-Series combines a printhead with a UV light curing system.\n          <\/p>\n\n          <p>\n            Ink is deposited onto the substrate and then cured by exposure to\n            UV light, enabling applications on a wide variety of materials.\n          <\/p>\n        <\/div>\n\n        <div class=\"ale-heads-slider__details\">\n          <details open>\n            <summary>Printing capabilities<\/summary>\n\n            <div class=\"ale-heads-slider__details-body\">\n              <ul class=\"ale-heads-slider__features\">\n                <li>Text<\/li>\n                <li>Logos<\/li>\n                <li>1D and 2D barcodes<\/li>\n                <li>Dates<\/li>\n                <li>Batch numbers<\/li>\n                <li>Counters<\/li>\n                <li>Variable data<\/li>\n                <li>Print height up to 72 mm<\/li>\n                <li>Speeds up to 60 m\/min depending on the configuration<\/li>\n              <\/ul>\n            <\/div>\n          <\/details>\n\n          <details>\n            <summary>FleXUV advantages<\/summary>\n\n            <div class=\"ale-heads-slider__details-body\">\n              <ul class=\"ale-heads-slider__features\">\n                <li>Printing on a wide variety of substrates<\/li>\n                <li>UV light curing<\/li>\n                <li>Flexible omnidirectional solution<\/li>\n                <li>Reduced maintenance<\/li>\n                <li>Temperature safety control<\/li>\n                <li>Inputs and outputs for integration<\/li>\n                <li>Connectivity and monitoring options<\/li>\n              <\/ul>\n            <\/div>\n          <\/details>\n        <\/div>\n      <\/div>\n    <\/article>\n\n  <\/div>\n\n  <!-- DESKTOP NAVIGATION -->\n  <div\n    class=\"ale-heads-slider__rail\"\n    role=\"tablist\"\n    aria-label=\"Choose a printhead range\"\n  >\n    <button\n      type=\"button\"\n      class=\"ale-heads-slider__tab is-active\"\n      data-target=\"0\"\n      role=\"tab\"\n      aria-selected=\"true\"\n    >\n      Easy-Series\n    <\/button>\n\n    <button\n      type=\"button\"\n      class=\"ale-heads-slider__tab\"\n      data-target=\"1\"\n      role=\"tab\"\n      aria-selected=\"false\"\n      tabindex=\"-1\"\n    >\n      FleX-Series\n    <\/button>\n\n    <button\n      type=\"button\"\n      class=\"ale-heads-slider__tab\"\n      data-target=\"2\"\n      role=\"tab\"\n      aria-selected=\"false\"\n      tabindex=\"-1\"\n    >\n      FleXUV-Series\n    <\/button>\n  <\/div>\n\n  <!-- TABLET NAVIGATION (ARROWS) -->\n  <div class=\"ale-heads-slider__mobile-nav\">\n    <button\n      type=\"button\"\n      class=\"ale-heads-slider__arrow ale-heads-slider__arrow--prev\"\n      aria-label=\"Previous range\"\n    >\n      <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n        <path d=\"M15 5L8 12L15 19\"><\/path>\n        <path d=\"M9 12H20\"><\/path>\n      <\/svg>\n    <\/button>\n\n    <span class=\"ale-heads-slider__current\" aria-live=\"polite\">\n      Easy-Series\n    <\/span>\n\n    <button\n      type=\"button\"\n      class=\"ale-heads-slider__arrow ale-heads-slider__arrow--next\"\n      aria-label=\"Next range\"\n    >\n      <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n        <path d=\"M9 5L16 12L9 19\"><\/path>\n        <path d=\"M4 12H15\"><\/path>\n      <\/svg>\n    <\/button>\n  <\/div>\n\n  <!-- MOBILE NAVIGATION (CHOICE GRID) -->\n  <div class=\"ale-heads-slider__mobile-choice-nav\" aria-label=\"Choose a printhead range\">\n    <button type=\"button\" class=\"ale-heads-slider__mobile-choice is-active\" data-target=\"0\" aria-pressed=\"true\">Easy-Series<\/button>\n    <button type=\"button\" class=\"ale-heads-slider__mobile-choice\" data-target=\"1\" aria-pressed=\"false\">FleX-Series<\/button>\n    <button type=\"button\" class=\"ale-heads-slider__mobile-choice\" data-target=\"2\" aria-pressed=\"false\">FleXUV-Series<\/button>\n  <\/div>\n<\/section>\n\n<style>\n.ale-heads-slider{\n  --ale-red:#C5003C;\n  --ale-red-dark:#9E0030;\n  --ale-dark:#17242A;\n  --ale-gray:#58656A;\n  --ale-border:#ECE6E1;\n  --ale-soft:#FDF0F3;\n  width:100%;\n  margin:0;\n  padding:0;\n  outline:none;\n  font-family:\"Inter\",Arial,sans-serif;\n}\n\n.ale-heads-slider *,\n.ale-heads-slider *::before,\n.ale-heads-slider *::after{\n  box-sizing:border-box;\n}\n\n.ale-heads-slider__stage{\n  width:100%;\n  touch-action:pan-y;\n}\n\n.ale-heads-slider__slide[hidden]{\n  display:none!important;\n}\n\n.ale-heads-slider__slide{\n  display:none;\n  grid-template-columns:minmax(360px,43%) minmax(0,1fr);\n  overflow:hidden;\n  border:1px solid var(--ale-border);\n  border-radius:22px;\n  background:#FFFFFF;\n  box-shadow:0 18px 44px rgba(23,36,42,.07);\n}\n\n.ale-heads-slider__slide.is-active{\n  display:grid;\n  animation:aleHeadsSlideIn .36s ease;\n}\n\n@keyframes aleHeadsSlideIn{\n  from{opacity:0;transform:translateY(7px)}\n  to{opacity:1;transform:translateY(0)}\n}\n\n.ale-heads-slider__media{\n  position:relative;\n  min-height:100%;\n  display:flex;\n  align-items:center;\n  justify-content:center;\n  overflow:hidden;\n  padding:clamp(17px,2.2vw,32px);\n  background:#F1F3F3;\n}\n\n.ale-heads-slider__media::after{\n  content:\"\";\n  position:absolute;\n  left:0;\n  right:0;\n  bottom:0;\n  height:5px;\n  background:var(--ale-red);\n}\n\n.ale-heads-slider__media img{\n  display:block;\n  width:100%;\n  height:auto;\n  aspect-ratio:2560\/1700;\n  object-fit:cover;\n  object-position:center;\n  border-radius:15px;\n  box-shadow:0 16px 34px rgba(23,36,42,.10);\n  transition:transform .65s cubic-bezier(.22,.61,.36,1);\n}\n\n.ale-heads-slider__slide:hover .ale-heads-slider__media img{\n  transform:scale(1.015);\n}\n\n.ale-heads-slider__content{\n  min-width:0;\n  display:flex;\n  flex-direction:column;\n  justify-content:center;\n  padding:clamp(34px,4vw,58px);\n}\n\n.ale-heads-slider__category{\n  display:block;\n  margin:0 0 14px;\n  color:var(--ale-red-dark);\n  font-family:\"Sora\",Arial,sans-serif;\n  font-size:13px;\n  line-height:1.2;\n  font-weight:750;\n  letter-spacing:.08em;\n  text-transform:uppercase;\n}\n\n.ale-heads-slider__content h2{\n  margin:0 0 19px;\n  padding:0;\n  color:var(--ale-dark);\n  font-family:\"Sora\",Arial,sans-serif;\n  font-size:clamp(29px,2.5vw,40px);\n  line-height:1.13;\n  font-weight:650;\n  letter-spacing:-.025em;\n}\n\n.ale-heads-slider__intro p{\n  margin:0 0 10px;\n  color:var(--ale-gray);\n  font-size:15px;\n  line-height:1.62;\n}\n\n.ale-heads-slider__intro p:last-child{\n  margin-bottom:0;\n}\n\n.ale-heads-slider__details{\n  width:100%;\n  margin-top:25px;\n  border-top:1px solid var(--ale-border);\n}\n\n.ale-heads-slider__details details{\n  margin:0;\n  border-bottom:1px solid var(--ale-border);\n}\n\n.ale-heads-slider__details summary{\n  position:relative;\n  min-height:54px;\n  display:flex;\n  align-items:center;\n  margin:0;\n  padding:13px 38px 13px 0;\n  color:var(--ale-dark);\n  font-family:\"Sora\",Arial,sans-serif;\n  font-size:16px;\n  line-height:1.35;\n  font-weight:650;\n  list-style:none;\n  cursor:pointer;\n  transition:color .2s ease;\n}\n\n.ale-heads-slider__details summary::-webkit-details-marker{\n  display:none;\n}\n\n.ale-heads-slider__details summary::before,\n.ale-heads-slider__details summary::after{\n  content:\"\";\n  position:absolute;\n  top:50%;\n  right:5px;\n  width:15px;\n  height:2px;\n  border-radius:10px;\n  background:var(--ale-red);\n  transform:translateY(-50%);\n  transition:transform .22s ease;\n}\n\n.ale-heads-slider__details summary::after{\n  transform:translateY(-50%) rotate(90deg);\n}\n\n.ale-heads-slider__details details[open] summary{\n  color:var(--ale-red-dark);\n}\n\n.ale-heads-slider__details details[open] summary::after{\n  transform:translateY(-50%) rotate(0deg);\n}\n\n.ale-heads-slider__details-body{\n  padding:2px 28px 19px 0;\n  color:var(--ale-gray);\n  animation:aleHeadsDetailsIn .22s ease;\n}\n\n@keyframes aleHeadsDetailsIn{\n  from{opacity:0;transform:translateY(-3px)}\n  to{opacity:1;transform:translateY(0)}\n}\n\n.ale-heads-slider__models{\n  display:grid;\n  grid-template-columns:repeat(3,minmax(0,1fr));\n  gap:10px;\n}\n\n.ale-heads-slider__model{\n  min-width:0;\n  padding:15px 15px 16px;\n  border:1px solid var(--ale-border);\n  border-top:3px solid var(--ale-red);\n  border-radius:10px;\n  background:#FFFFFF;\n}\n\n.ale-heads-slider__model strong{\n  display:block;\n  margin-bottom:6px;\n  color:var(--ale-dark);\n  font-family:\"Sora\",Arial,sans-serif;\n  font-size:14px;\n  line-height:1.25;\n  font-weight:700;\n}\n\n.ale-heads-slider__model p{\n  margin:0;\n  color:var(--ale-gray);\n  font-size:12.5px;\n  line-height:1.45;\n}\n\n.ale-heads-slider__features{\n  display:grid;\n  grid-template-columns:repeat(2,minmax(0,1fr));\n  gap:10px 24px;\n  margin:0;\n  padding:0;\n  list-style:none;\n}\n\n.ale-heads-slider__features li{\n  position:relative;\n  margin:0;\n  padding:0 0 0 17px;\n  color:var(--ale-gray);\n  font-size:13.5px;\n  line-height:1.48;\n}\n\n.ale-heads-slider__features li::before{\n  content:\"\";\n  position:absolute;\n  top:.53em;\n  left:0;\n  width:6px;\n  height:6px;\n  border-radius:1px;\n  background:var(--ale-red);\n}\n\n.ale-heads-slider__rail{\n  display:grid;\n  grid-template-columns:repeat(3,minmax(0,1fr));\n  margin-top:14px;\n  overflow:hidden;\n  border:1px solid var(--ale-border);\n  border-radius:16px;\n  background:#FFFFFF;\n}\n\nhtml body .ale-heads-slider button.ale-heads-slider__tab,\nhtml body .ale-heads-slider button.ale-heads-slider__tab:hover,\nhtml body .ale-heads-slider button.ale-heads-slider__tab:focus,\nhtml body .ale-heads-slider button.ale-heads-slider__tab:active{\n  appearance:none!important;\n  min-width:0;\n  min-height:76px;\n  margin:0!important;\n  padding:18px 22px!important;\n  border:0!important;\n  border-right:1px solid var(--ale-border)!important;\n  border-radius:0!important;\n  outline:none!important;\n  background:#FFFFFF!important;\n  color:var(--ale-dark)!important;\n  font-family:\"Sora\",Arial,sans-serif!important;\n  font-size:15px;\n  line-height:1.25;\n  font-weight:650;\n  text-align:center;\n  box-shadow:none!important;\n  cursor:pointer;\n  transition:color .2s ease,background .2s ease,box-shadow .2s ease;\n}\n\nhtml body .ale-heads-slider button.ale-heads-slider__tab:last-child{\n  border-right:0!important;\n}\n\nhtml body .ale-heads-slider button.ale-heads-slider__tab:not(.is-active):hover{\n  background:var(--ale-soft)!important;\n  color:var(--ale-red-dark)!important;\n}\n\nhtml body .ale-heads-slider button.ale-heads-slider__tab.is-active,\nhtml body .ale-heads-slider button.ale-heads-slider__tab.is-active:hover,\nhtml body .ale-heads-slider button.ale-heads-slider__tab.is-active:focus,\nhtml body .ale-heads-slider button.ale-heads-slider__tab.is-active:active{\n  background:var(--ale-soft)!important;\n  color:var(--ale-red-dark)!important;\n  box-shadow:inset 0 -3px 0 var(--ale-red)!important;\n}\n\n.ale-heads-slider__mobile-nav{\n  display:none;\n  align-items:center;\n  justify-content:space-between;\n  gap:14px;\n  margin-top:14px;\n  padding:10px;\n  border:1px solid var(--ale-border);\n  border-radius:16px;\n  background:#FFFFFF;\n}\n\n.ale-heads-slider__current{\n  min-width:0;\n  color:var(--ale-dark);\n  font-family:\"Sora\",Arial,sans-serif;\n  font-size:14px;\n  line-height:1.2;\n  font-weight:650;\n  text-align:center;\n}\n\nhtml body .ale-heads-slider button.ale-heads-slider__arrow,\nhtml body .ale-heads-slider button.ale-heads-slider__arrow:hover,\nhtml body .ale-heads-slider button.ale-heads-slider__arrow:focus,\nhtml body .ale-heads-slider button.ale-heads-slider__arrow:active{\n  appearance:none!important;\n  width:50px;\n  height:50px;\n  flex:0 0 50px;\n  display:flex;\n  align-items:center;\n  justify-content:center;\n  margin:0!important;\n  padding:0!important;\n  border:1px solid rgba(197,0,60,.42)!important;\n  border-radius:12px!important;\n  outline:none!important;\n  background:#FFFFFF!important;\n  color:var(--ale-red-dark)!important;\n  box-shadow:none!important;\n  cursor:pointer;\n  transition:background .2s ease,color .2s ease,border-color .2s ease;\n}\n\nhtml body .ale-heads-slider button.ale-heads-slider__arrow:hover,\nhtml body .ale-heads-slider button.ale-heads-slider__arrow:focus-visible{\n  border-color:var(--ale-red)!important;\n  background:var(--ale-red)!important;\n  color:#FFFFFF!important;\n}\n\n.ale-heads-slider__arrow svg{\n  width:24px;\n  height:24px;\n  fill:none;\n  stroke:currentColor;\n  stroke-width:1.8;\n  stroke-linecap:round;\n  stroke-linejoin:round;\n}\n\n.ale-heads-slider button:focus-visible,\n.ale-heads-slider summary:focus-visible{\n  outline:3px solid rgba(197,0,60,.32)!important;\n  outline-offset:3px;\n}\n\n.ale-heads-slider__mobile-choice-nav{\n  display:none;\n}\n\n@media(max-width:1100px){\n  .ale-heads-slider__slide{\n    grid-template-columns:minmax(310px,40%) minmax(0,1fr);\n  }\n\n  .ale-heads-slider__content{\n    padding:34px;\n  }\n\n  .ale-heads-slider__features{\n    grid-template-columns:1fr;\n  }\n\n  .ale-heads-slider__rail{\n    display:none;\n  }\n\n  .ale-heads-slider__mobile-nav{\n    display:flex;\n  }\n}\n\n@media(max-width:820px){\n  .ale-heads-slider__slide,\n  .ale-heads-slider__slide.is-active{\n    grid-template-columns:1fr;\n  }\n\n  .ale-heads-slider__media{\n    min-height:0;\n    padding:14px;\n  }\n\n  .ale-heads-slider__media img{\n    aspect-ratio:3\/2;\n    border-radius:12px;\n  }\n\n  .ale-heads-slider__content{\n    padding:30px 26px 34px;\n  }\n}\n\n@media(max-width:600px){\n  .ale-heads-slider__slide{\n    border-radius:17px;\n  }\n\n  .ale-heads-slider__media{\n    padding:11px;\n  }\n\n  .ale-heads-slider__content{\n    padding:27px 20px 30px;\n  }\n\n  .ale-heads-slider__category{\n    margin-bottom:10px;\n    font-size:11.5px;\n  }\n\n  .ale-heads-slider__content h2{\n    margin-bottom:16px;\n    font-size:clamp(25px,7vw,31px);\n  }\n\n  .ale-heads-slider__intro p{\n    font-size:14px;\n    line-height:1.57;\n  }\n\n  .ale-heads-slider__details{\n    margin-top:21px;\n  }\n\n  .ale-heads-slider__details summary{\n    min-height:52px;\n    padding-right:32px;\n    font-size:14px;\n  }\n\n  .ale-heads-slider__details-body{\n    padding-right:4px;\n  }\n\n  .ale-heads-slider__models{\n    grid-template-columns:1fr;\n  }\n\n  .ale-heads-slider__model{\n    padding:13px 14px 14px;\n  }\n\n  .ale-heads-slider__features{\n    gap:9px;\n  }\n\n  .ale-heads-slider__features li{\n    font-size:13px;\n  }\n\n  \/* Arrows replaced by the choice grid *\/\n\n  .ale-heads-slider__mobile-nav{\n    display:none;\n  }\n\n  .ale-heads-slider__mobile-choice-nav{\n    display:grid;\n    grid-template-columns:repeat(2,minmax(0,1fr));\n    gap:8px;\n    margin-top:13px;\n  }\n\n  html body .ale-heads-slider button.ale-heads-slider__mobile-choice{\n    appearance:none!important;\n    width:100%!important;\n    min-width:0!important;\n    min-height:58px!important;\n    display:flex!important;\n    align-items:center!important;\n    justify-content:flex-start!important;\n    margin:0!important;\n    padding:12px 14px!important;\n    border:1px solid var(--ale-border)!important;\n    border-radius:12px!important;\n    outline:none!important;\n    background:#FFFFFF!important;\n    color:var(--ale-dark)!important;\n    box-shadow:none!important;\n    font-family:\"Sora\",Arial,sans-serif!important;\n    font-size:clamp(12.5px,4vw,14px)!important;\n    line-height:1.2!important;\n    font-weight:650!important;\n    text-align:left!important;\n    white-space:normal!important;\n    overflow-wrap:anywhere;\n    cursor:pointer;\n    transition:background .2s ease,color .2s ease,border-color .2s ease;\n  }\n\n  html body .ale-heads-slider button.ale-heads-slider__mobile-choice:last-child{\n    grid-column:1 \/ -1;\n  }\n\n  html body .ale-heads-slider button.ale-heads-slider__mobile-choice.is-active,\n  html body .ale-heads-slider button.ale-heads-slider__mobile-choice:focus-visible{\n    border-color:var(--ale-red)!important;\n    background:var(--ale-red)!important;\n    color:#FFFFFF!important;\n  }\n}\n\n@media(max-width:390px){\n  .ale-heads-slider__content{\n    padding:25px 17px 27px;\n  }\n\n  .ale-heads-slider__current{\n    font-size:13px;\n  }\n\n  html body .ale-heads-slider button.ale-heads-slider__arrow{\n    width:46px;\n    height:46px;\n    flex-basis:46px;\n  }\n}\n\n@media(prefers-reduced-motion:reduce){\n  .ale-heads-slider__slide.is-active,\n  .ale-heads-slider__details-body{\n    animation:none;\n  }\n\n  .ale-heads-slider *,\n  .ale-heads-slider *::before,\n  .ale-heads-slider *::after{\n    scroll-behavior:auto!important;\n    transition-duration:.01ms!important;\n    animation-duration:.01ms!important;\n    animation-iteration-count:1!important;\n  }\n}\n<\/style>\n\n<script>\n(() => {\n  document.querySelectorAll('[data-ale-heads-slider]').forEach((slider, sliderIndex) => {\n    if (slider.dataset.ready === '1') return;\n    slider.dataset.ready = '1';\n\n    const slides = [...slider.querySelectorAll('.ale-heads-slider__slide')];\n    const tabs = [...slider.querySelectorAll('.ale-heads-slider__tab')];\n    const mobileTabs = [...slider.querySelectorAll('.ale-heads-slider__mobile-choice')];\n    const previous = slider.querySelector('.ale-heads-slider__arrow--prev');\n    const next = slider.querySelector('.ale-heads-slider__arrow--next');\n    const current = slider.querySelector('.ale-heads-slider__current');\n    const stage = slider.querySelector('.ale-heads-slider__stage');\n    let active = 0;\n    const uid = `ale-heads-${sliderIndex + 1}-${Math.random().toString(36).slice(2, 7)}`;\n\n    if (!slides.length || slides.length !== tabs.length) return;\n\n    slides.forEach((slide, slideIndex) => {\n      const panelId = `${uid}-panel-${slideIndex}`;\n      const tabId = `${uid}-tab-${slideIndex}`;\n\n      slide.id = panelId;\n      slide.setAttribute('aria-labelledby', tabId);\n      tabs[slideIndex].id = tabId;\n      tabs[slideIndex].setAttribute('aria-controls', panelId);\n    });\n\n    const showSlide = (index, options = {}) => {\n      active = (index + slides.length) % slides.length;\n\n      slides.forEach((slide, slideIndex) => {\n        const selected = slideIndex === active;\n        slide.hidden = !selected;\n        slide.classList.toggle('is-active', selected);\n        slide.setAttribute('aria-hidden', selected ? 'false' : 'true');\n      });\n\n      tabs.forEach((tab, tabIndex) => {\n        const selected = tabIndex === active;\n        tab.classList.toggle('is-active', selected);\n        tab.setAttribute('aria-selected', selected ? 'true' : 'false');\n        tab.tabIndex = selected ? 0 : -1;\n      });\n\n      mobileTabs.forEach((tab, tabIndex) => {\n        const selected = tabIndex === active;\n        tab.classList.toggle('is-active', selected);\n        tab.setAttribute('aria-pressed', selected ? 'true' : 'false');\n      });\n\n      if (current) {\n        current.textContent = slides[active].dataset.name || '';\n      }\n\n      if (options.focusTab) {\n        try {\n          tabs[active].focus({preventScroll:true});\n        } catch (error) {\n          tabs[active].focus();\n        }\n      }\n    };\n\n    tabs.forEach((tab) => {\n      tab.addEventListener('click', () => {\n        showSlide(Number(tab.dataset.target));\n      });\n\n      tab.addEventListener('keydown', (event) => {\n        if (event.key === 'ArrowRight') {\n          event.preventDefault();\n          showSlide(active + 1, {focusTab:true});\n        }\n\n        if (event.key === 'ArrowLeft') {\n          event.preventDefault();\n          showSlide(active - 1, {focusTab:true});\n        }\n\n        if (event.key === 'Home') {\n          event.preventDefault();\n          showSlide(0, {focusTab:true});\n        }\n\n        if (event.key === 'End') {\n          event.preventDefault();\n          showSlide(slides.length - 1, {focusTab:true});\n        }\n      });\n    });\n\n    mobileTabs.forEach((tab, index) => {\n      tab.addEventListener('click', () => {\n        showSlide(index);\n      });\n    });\n\n    previous?.addEventListener('click', () => showSlide(active - 1));\n    next?.addEventListener('click', () => showSlide(active + 1));\n\n    slides.forEach((slide) => {\n      const detailItems = [...slide.querySelectorAll('details')];\n\n      detailItems.forEach((item) => {\n        item.addEventListener('toggle', () => {\n          if (!item.open) return;\n\n          detailItems.forEach((otherItem) => {\n            if (otherItem !== item) otherItem.open = false;\n          });\n        });\n      });\n    });\n\n    let touchX = 0;\n    let touchY = 0;\n\n    stage?.addEventListener('touchstart', (event) => {\n      touchX = event.changedTouches[0].clientX;\n      touchY = event.changedTouches[0].clientY;\n    }, {passive:true});\n\n    stage?.addEventListener('touchend', (event) => {\n      const deltaX = event.changedTouches[0].clientX - touchX;\n      const deltaY = event.changedTouches[0].clientY - touchY;\n\n      if (\n        Math.abs(deltaX) > 55 &&\n        Math.abs(deltaX) > Math.abs(deltaY)\n      ) {\n        showSlide(active + (deltaX < 0 ? 1 : -1));\n      }\n    }, {passive:true});\n\n    showSlide(0);\n  });\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-aad6175 e-con e-atomic-element e-flexbox-base e-default-div e-aad6175-04d8cd0 \" data-id=\"aad6175\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"aad6175\">\n    <div class=\"elementor-element elementor-element-d8e8394 e-con e-atomic-element e-flexbox-base e-default-div e-d8e8394-494162a \" data-id=\"d8e8394\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"d8e8394\">\n    \t\t<div class=\"elementor-element elementor-element-f89d5ee elementor-widget elementor-widget-heading\" data-id=\"f89d5ee\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Which printhead should you choose?<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-73c5520 elementor-widget elementor-widget-text-editor\" data-id=\"73c5520\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"text-decoration: underline;\"><b>Side marking :<\/b><\/span><b> <\/b><span style=\"font-weight: 400;\">The Easy range is suitable for installations requiring a compact printhead positioned on the side of the product.<\/span><\/p>\n<p><span style=\"text-decoration: underline;\"><b>Specific orientation :<\/b><\/span><b> <\/b><span style=\"font-weight: 400;\">The FleX range is ideal for configurations requiring printing from the top, bottom, side or at a specific angle.<\/span><\/p>\n<p><span style=\"text-decoration: underline;\"><b>Complex substrates : <\/b><\/span><span style=\"font-weight: 400;\">FleXUV-Series can be considered for materials requiring UV curing.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-54b471e elementor-widget elementor-widget-html\" data-id=\"54b471e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Barlow+Semi+Condensed:wght@600&family=IBM+Plex+Mono:wght@500&family=Inter:wght@400;500;600&family=Sora:wght@600;700&display=swap\">\n\n<section class=\"ale-bench\" id=\"aleb-root\" aria-label=\"Inkjet marking simulation\">\n  <header class=\"aleb-intro\">\n  <\/header>\n\n  <div class=\"aleb-stage\" id=\"aleb-stage\" aria-label=\"Conveyor line\">\n    <svg class=\"aleb-scene\" id=\"aleb-scene\" viewBox=\"0 0 1280 600\" role=\"img\" aria-labelledby=\"aleb-sceneTitle aleb-sceneDesc\">\n      <title id=\"aleb-sceneTitle\">Carton conveyor and print head<\/title>\n      <desc id=\"aleb-sceneDesc\">Three-quarter view: cartons move from left to right on the conveyor, pass the photocell, then the print head beside the belt prints the message on their side.<\/desc>\n      <defs id=\"aleb-defs\">\n        <linearGradient id=\"aleb-kraftGrad\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n          <stop offset=\"0\" class=\"k1\"\/>\n          <stop offset=\"1\" class=\"k2\"\/>\n        <\/linearGradient>\n      <\/defs>\n      <rect class=\"stage-bg\" x=\"0\" y=\"0\" width=\"1280\" height=\"600\"\/>\n      <g id=\"aleb-line\"><\/g>\n      <g id=\"aleb-cartons\"><\/g>\n      <g id=\"aleb-front\"><\/g>\n      <g id=\"aleb-headAsm\"><\/g>\n      <g id=\"aleb-labels\"><\/g>\n    <\/svg>\n    <div class=\"aleb-zoom\">\n      <output id=\"aleb-zoomTxt\" for=\"aleb-zoom\">1,0\u00d7<\/output>\n      <span class=\"aleb-zl\" aria-hidden=\"true\">+<\/span>\n      <input type=\"range\" id=\"aleb-zoom\" min=\"0\" max=\"100\" step=\"1\" value=\"0\" aria-label=\"Zoom on the print head\" title=\"Zoom on the print head (or Ctrl + scroll wheel on the line)\">\n      <span class=\"aleb-zl\" aria-hidden=\"true\">\u2212<\/span>\n    <\/div>\n    <div class=\"aleb-speedbar\">\n      <button type=\"button\" class=\"aleb-play\" id=\"aleb-playBtn\" aria-label=\"Pause\"><\/button>\n      <input type=\"range\" id=\"aleb-speed\" min=\"0\" max=\"800\" step=\"10\" value=\"250\" aria-label=\"Conveyor speed\" title=\"Conveyor speed\">\n    <\/div>\n  <\/div>\n\n  <details class=\"aleb-settings\" id=\"aleb-settings\">\n    <summary>Settings<\/summary>\n    <div class=\"aleb-panel\">\n      <div class=\"aleb-card\">\n        <h3>Print head<\/h3>\n        <div class=\"aleb-seg\" id=\"aleb-heads\" role=\"group\" aria-label=\"Head size\">\n          <button type=\"button\" data-i=\"0\" aria-pressed=\"false\">18 mm<small>128 px<\/small><\/button>\n          <button type=\"button\" data-i=\"1\" aria-pressed=\"false\">34 mm<small>240 px<\/small><\/button>\n          <button type=\"button\" data-i=\"2\" aria-pressed=\"true\">72 mm<small>510 px<\/small><\/button>\n          <button type=\"button\" data-i=\"3\" aria-pressed=\"false\">144 mm<small>1008 px<\/small><\/button>\n        <\/div>\n      <\/div>\n\n      <div class=\"aleb-card\">\n        <h3>Message<\/h3>\n        <div class=\"aleb-field\">\n          <label for=\"aleb-msg\">Text, one line per printed line (6 max)<\/label>\n          <textarea id=\"aleb-msg\" rows=\"4\" spellcheck=\"false\">LOT A26-1042\nMFD 19\/10\/26\nEXP 04\/28<\/textarea>\n        <\/div>\n        <div class=\"aleb-field\">\n          <span class=\"aleb-label\" id=\"aleb-codeLbl\">Code<\/span>\n          <div class=\"aleb-seg aleb-seg--three\" id=\"aleb-codes\" role=\"group\" aria-labelledby=\"aleb-codeLbl\">\n            <button type=\"button\" data-code=\"none\" aria-pressed=\"false\">None<\/button>\n            <button type=\"button\" data-code=\"ean\" aria-pressed=\"true\">EAN-13<\/button>\n            <button type=\"button\" data-code=\"qr\" aria-pressed=\"false\">QR code<\/button>\n          <\/div>\n        <\/div>\n        <div class=\"aleb-field\" id=\"aleb-eanField\">\n          <label for=\"aleb-ean\">EAN-13 digits<\/label>\n          <input type=\"text\" id=\"aleb-ean\" inputmode=\"numeric\" autocomplete=\"off\" maxlength=\"16\" value=\"376001234567\" aria-describedby=\"aleb-eanHint\">\n          <p class=\"aleb-hint\" id=\"aleb-eanHint\">12 digits: the check digit is computed.<\/p>\n        <\/div>\n        <div class=\"aleb-field\" id=\"aleb-qrField\" hidden>\n          <label for=\"aleb-qr\">QR code content<\/label>\n          <input type=\"text\" id=\"aleb-qr\" autocomplete=\"off\" maxlength=\"200\" value=\"https:\/\/www.ale.fr\" aria-describedby=\"aleb-qrHint\">\n          <p class=\"aleb-hint\" id=\"aleb-qrHint\">Text or URL.<\/p>\n        <\/div>\n        <ul class=\"aleb-warns\" id=\"aleb-warns\" hidden><\/ul>\n        <dl class=\"aleb-facts\">\n          <dt>Printed length<\/dt><dd id=\"aleb-lenTxt\">\u2014<\/dd>\n          <dt>Code module<\/dt><dd id=\"aleb-modTxt\">\u2014<\/dd>\n        <\/dl>\n      <\/div>\n    <\/div>\n  <\/details>\n<\/section>\n\n<style>\n.ale-bench{\n  --aleb-panel:#F7F9FA;\n  --aleb-fg:#111827;\n  --aleb-muted:#56616B;\n  --aleb-line:#D3DBDF;\n  --aleb-accent:#C5003C;\n  --aleb-gray:#58656A;\n  --aleb-stage:#E6EBEE;\n  --aleb-shadow:rgba(25,32,38,.10);\n  --aleb-edge:rgba(20,26,31,.22);\n  --aleb-metal-top:#CDD4D9;\n  --aleb-metal-front:#B3BBC2;\n  --aleb-metal-side:#959FA7;\n  --aleb-metal-deep:#6B757D;\n  --aleb-belt:#2A2E32;\n  --aleb-kraft:#C99B63;\n  --aleb-kraft-light:#D8AD77;\n  --aleb-kraft-top:#DFB881;\n  --aleb-kraft-side:#B4864F;\n  --aleb-kraft-edge:#8A6033;\n  --aleb-tape:rgba(150,104,52,.45);\n  --aleb-ink:#14161A;\n  --aleb-led-off:#3A4248;\n  --aleb-led-on:#FFB23E;\n  --aleb-nozzle-on:#3FA9F5;\n  --aleb-warn:#B3261E;\n  --aleb-warn-soft:#FBE4E2;\n  --aleb-font-display:\"Sora\",Arial,sans-serif;\n  --aleb-font-print:\"Barlow Semi Condensed\",\"Arial Narrow\",sans-serif;\n  --aleb-font-body:\"Inter\",Arial,sans-serif;\n  --aleb-font-mono:\"IBM Plex Mono\",ui-monospace,monospace;\n\n  color-scheme:light;\n  width:100%;\n  max-width:1180px;\n  margin:0 auto;\n  padding:3rem 0;\n  display:grid;\n  gap:22px;\n  color:var(--aleb-fg);\n  font-family:var(--aleb-font-body);\n  font-size:15px;\n  line-height:1.5;\n  text-align:left;\n}\n\n.ale-bench *,\n.ale-bench *::before,\n.ale-bench *::after{\n  box-sizing:border-box;\n}\n\n.ale-bench [hidden]{\n  display:none!important;\n}\n\n\/* En-t\u00eate *\/\n.ale-bench .aleb-intro{\n  display:grid;\n  gap:6px;\n  max-width:68ch;\n}\n\n.ale-bench .aleb-eyebrow{\n  margin:0!important;\n  color:var(--aleb-accent);\n  font-family:var(--aleb-font-body);\n  font-size:12px;\n  line-height:1.4;\n  font-weight:600;\n  letter-spacing:.08em;\n  text-transform:uppercase;\n}\n\n.ale-bench .aleb-title{\n  margin:0!important;\n  padding:0!important;\n  color:var(--aleb-fg)!important;\n  font-family:var(--aleb-font-display)!important;\n  font-size:clamp(28px,4vw,40px)!important;\n  line-height:1.05!important;\n  font-weight:700!important;\n  letter-spacing:0!important;\n  text-transform:none!important;\n}\n\n\/* Machine *\/\n.ale-bench .aleb-stage{\n  display:grid;\n  grid-template-columns:minmax(0,1fr) auto;\n  overflow:hidden;\n  border:1px solid var(--aleb-line);\n  border-radius:12px;\n  background:var(--aleb-stage);\n}\n\n.ale-bench .aleb-scene{\n  --z:1;\n  display:block;\n  width:100%;\n  max-width:none;\n  height:auto;\n}\n\n.ale-bench .aleb-zoom{\n  min-width:46px;\n  display:flex;\n  flex-direction:column;\n  align-items:center;\n  gap:4px;\n  padding:10px 6px;\n  border-left:1px solid var(--aleb-line);\n  background:var(--aleb-panel);\n}\n\n.ale-bench .aleb-zoom output{\n  font-size:12px;\n}\n\n.ale-bench .aleb-zl{\n  color:var(--aleb-muted);\n  font-family:var(--aleb-font-mono);\n  font-size:15px;\n  line-height:1;\n}\n\n.ale-bench input[type=\"range\"]{\n  width:100%;\n  margin:2px 0;\n  padding:0;\n  border:0;\n  background:transparent;\n  box-shadow:none;\n  accent-color:var(--aleb-accent);\n}\n\n.ale-bench .aleb-zoom input[type=\"range\"]{\n  flex:1 1 0;\n  width:22px;\n  min-height:0;\n  margin:0;\n  writing-mode:vertical-lr;\n  direction:rtl;\n}\n\n.ale-bench .aleb-speedbar{\n  grid-column:1 \/ -1;\n  display:flex;\n  align-items:center;\n  gap:12px;\n  padding:8px 18px 8px 10px;\n  border-top:1px solid var(--aleb-line);\n  background:var(--aleb-panel);\n}\n\n.ale-bench .aleb-speedbar input{\n  flex:1 1 auto;\n  min-width:0;\n  margin:0;\n}\n\n\/* Boutons : prot\u00e9g\u00e9s contre les styles du th\u00e8me et d'Elementor *\/\nhtml body .ale-bench button{\n  appearance:none!important;\n  display:inline-flex!important;\n  align-items:center!important;\n  justify-content:center!important;\n  margin:0!important;\n  padding:6px 12px!important;\n  border:1px solid var(--aleb-line)!important;\n  border-radius:8px!important;\n  background:#FFFFFF!important;\n  color:var(--aleb-fg)!important;\n  box-shadow:none!important;\n  font-family:var(--aleb-font-body)!important;\n  font-size:14px!important;\n  line-height:1.3!important;\n  font-weight:500!important;\n  letter-spacing:0!important;\n  text-transform:none!important;\n  text-decoration:none!important;\n  white-space:normal!important;\n  cursor:pointer;\n  transition:background .2s ease,border-color .2s ease,color .2s ease;\n}\n\nhtml body .ale-bench button:hover{\n  border-color:var(--aleb-accent)!important;\n  background:#FFFFFF!important;\n  color:var(--aleb-fg)!important;\n}\n\nhtml body .ale-bench button[aria-pressed=\"true\"],\nhtml body .ale-bench button[aria-pressed=\"true\"]:hover{\n  border-color:var(--aleb-gray)!important;\n  background:var(--aleb-gray)!important;\n  color:#FFFFFF!important;\n}\n\nhtml body .ale-bench button.aleb-play{\n  flex:none;\n  width:34px!important;\n  height:34px!important;\n  min-width:34px!important;\n  padding:0!important;\n  border-color:var(--aleb-gray)!important;\n  border-radius:50%!important;\n  background:var(--aleb-gray)!important;\n  color:#FFFFFF!important;\n}\n\nhtml body .ale-bench button.aleb-play:hover{\n  border-color:var(--aleb-accent)!important;\n  background:var(--aleb-accent)!important;\n  color:#FFFFFF!important;\n}\n\n.ale-bench .aleb-play svg{\n  width:13px;\n  height:13px;\n  fill:currentColor;\n}\n\n.ale-bench :focus-visible{\n  outline:2px solid var(--aleb-accent)!important;\n  outline-offset:2px;\n}\n\n\/* Param\u00e8tres *\/\n.ale-bench .aleb-settings{\n  display:block;\n  margin:0;\n}\n\n.ale-bench .aleb-settings > summary{\n  display:flex;\n  align-items:center;\n  justify-content:space-between;\n  gap:12px;\n  padding:12px 18px;\n  border:1px solid var(--aleb-line);\n  border-radius:12px;\n  background:var(--aleb-panel);\n  color:var(--aleb-fg);\n  font-family:var(--aleb-font-display);\n  font-size:21px;\n  line-height:1.2;\n  font-weight:600;\n  list-style:none;\n  cursor:pointer;\n  transition:border-color .2s ease;\n}\n\n.ale-bench .aleb-settings > summary::-webkit-details-marker{\n  display:none;\n}\n\n.ale-bench .aleb-settings > summary::after{\n  content:\"\";\n  width:9px;\n  height:9px;\n  margin-right:4px;\n  border-right:2px solid var(--aleb-accent);\n  border-bottom:2px solid var(--aleb-accent);\n  transform:translateY(-3px) rotate(45deg);\n}\n\n.ale-bench .aleb-settings[open] > summary::after{\n  transform:translateY(2px) rotate(-135deg);\n}\n\n.ale-bench .aleb-settings[open] > summary{\n  margin-bottom:16px;\n}\n\n.ale-bench .aleb-settings > summary:hover{\n  border-color:var(--aleb-accent);\n}\n\n.ale-bench .aleb-panel{\n  display:grid;\n  grid-template-columns:minmax(0,1fr) minmax(0,2fr);\n  gap:16px;\n  align-items:start;\n}\n\n.ale-bench .aleb-card{\n  min-width:0;\n  display:grid;\n  gap:14px;\n  align-content:start;\n  padding:16px 18px 18px;\n  border:1px solid var(--aleb-line);\n  border-radius:12px;\n  background:var(--aleb-panel);\n}\n\n.ale-bench .aleb-card h3{\n  margin:0!important;\n  padding:0!important;\n  color:var(--aleb-fg)!important;\n  font-family:var(--aleb-font-display)!important;\n  font-size:19px!important;\n  line-height:1.2!important;\n  font-weight:600!important;\n  letter-spacing:0!important;\n  text-transform:none!important;\n}\n\n.ale-bench .aleb-field{\n  min-width:0;\n  display:grid;\n  gap:6px;\n}\n\n.ale-bench label,\n.ale-bench .aleb-label{\n  display:block;\n  margin:0;\n  color:var(--aleb-fg);\n  font-size:14px;\n  line-height:1.3;\n  font-weight:600;\n}\n\n.ale-bench output{\n  color:var(--aleb-fg);\n  font-family:var(--aleb-font-mono);\n  font-size:14px;\n  font-variant-numeric:tabular-nums;\n}\n\n.ale-bench .aleb-seg{\n  display:grid;\n  grid-template-columns:repeat(4,minmax(0,1fr));\n  gap:6px;\n}\n\n.ale-bench .aleb-seg--three{\n  grid-template-columns:repeat(3,minmax(0,1fr));\n}\n\nhtml body .ale-bench .aleb-seg button{\n  flex-direction:column!important;\n  padding:6px 4px!important;\n}\n\n.ale-bench .aleb-seg small{\n  font-family:var(--aleb-font-mono);\n  font-size:12px;\n  font-weight:400;\n  opacity:.8;\n}\n\nhtml body .ale-bench textarea,\nhtml body .ale-bench input[type=\"text\"]{\n  width:100%!important;\n  margin:0!important;\n  padding:8px 10px!important;\n  border:1px solid var(--aleb-line)!important;\n  border-radius:8px!important;\n  outline:none;\n  background:#FFFFFF!important;\n  color:var(--aleb-fg)!important;\n  box-shadow:none!important;\n  font-family:var(--aleb-font-mono)!important;\n  font-size:14px!important;\n  line-height:1.45!important;\n}\n\nhtml body .ale-bench textarea:focus,\nhtml body .ale-bench input[type=\"text\"]:focus{\n  border-color:var(--aleb-accent)!important;\n}\n\nhtml body .ale-bench textarea{\n  min-height:96px;\n  resize:vertical;\n}\n\nhtml body .ale-bench input[aria-invalid=\"true\"]{\n  border-color:var(--aleb-warn)!important;\n}\n\n.ale-bench .aleb-hint{\n  margin:0!important;\n  color:var(--aleb-muted);\n  font-family:var(--aleb-font-mono);\n  font-size:13px;\n  line-height:1.4;\n  overflow-wrap:anywhere;\n}\n\n.ale-bench .aleb-hint.is-err{\n  color:var(--aleb-warn);\n}\n\n.ale-bench .aleb-facts{\n  display:grid;\n  grid-template-columns:auto 1fr;\n  gap:4px 14px;\n  margin:0!important;\n  font-size:13.5px;\n}\n\n.ale-bench .aleb-facts dt{\n  margin:0;\n  color:var(--aleb-muted);\n  font-weight:400;\n}\n\n.ale-bench .aleb-facts dd{\n  margin:0!important;\n  font-family:var(--aleb-font-mono);\n  font-variant-numeric:tabular-nums;\n  text-align:right;\n}\n\n.ale-bench .aleb-warns{\n  display:grid;\n  gap:4px;\n  margin:0!important;\n  padding:8px 12px!important;\n  list-style:none!important;\n  border-radius:8px;\n  background:var(--aleb-warn-soft);\n  color:var(--aleb-warn);\n  font-size:13.5px;\n}\n\n.ale-bench .aleb-warns li{\n  margin:0;\n  padding:0;\n}\n\n\/* Sc\u00e8ne SVG : dessus le plus clair, face avant interm\u00e9diaire, c\u00f4t\u00e9 droit le plus sombre *\/\n.ale-bench .stage-bg{fill:var(--aleb-stage)}\n.ale-bench .shadow{fill:var(--aleb-shadow)}\n.ale-bench .aleb-scene polygon{stroke:var(--aleb-edge);stroke-width:calc(1px \/ var(--z));stroke-linejoin:round}\n.ale-bench .aleb-scene .shadow{stroke:none}\n.ale-bench .steel.f-top,.ale-bench .stand.f-top{fill:var(--aleb-metal-top)}\n.ale-bench .steel.f-front,.ale-bench .stand.f-front{fill:var(--aleb-metal-front)}\n.ale-bench .steel.f-side,.ale-bench .stand.f-side{fill:var(--aleb-metal-side)}\n.ale-bench .belt-rib{stroke:#000000;stroke-opacity:.26;stroke-width:2.5}\n.ale-bench .belt-rib-hi{stroke:#FFFFFF;stroke-opacity:.10;stroke-width:1.5}\n.ale-bench .enc-body{fill:var(--aleb-belt);stroke:var(--aleb-metal-deep);stroke-width:calc(1.5px \/ var(--z))}\n.ale-bench .enc-tick{stroke:var(--aleb-led-on);stroke-width:2.5;stroke-linecap:round}\n.ale-bench .enc-wheel{fill:#2B2F33;stroke:var(--aleb-metal-deep);stroke-width:calc(1.5px \/ var(--z))}\n.ale-bench .enc-spoke{fill:none;stroke:#59616A;stroke-width:3;stroke-linecap:round}\n.ale-bench .enc-hub{fill:var(--aleb-metal-front)}\n.ale-bench .enc-arm{fill:none;stroke:var(--aleb-metal-front);stroke-width:8;stroke-linecap:round}\n.ale-bench .k1{stop-color:var(--aleb-kraft-light)}\n.ale-bench .k2{stop-color:var(--aleb-kraft)}\n.ale-bench .kraft{fill:url(#aleb-kraftGrad)}\n.ale-bench .aleb-scene .kraft-top{fill:var(--aleb-kraft-top);stroke:var(--aleb-kraft-edge)}\n.ale-bench .aleb-scene .kraft-side{fill:var(--aleb-kraft-side);stroke:var(--aleb-kraft-edge)}\n.ale-bench .kraft-edge{fill:none;stroke:var(--aleb-kraft-edge);stroke-width:calc(1.5px \/ var(--z))}\n.ale-bench .kraft-line{stroke:var(--aleb-kraft-edge);stroke-width:calc(1px \/ var(--z));opacity:.5}\n.ale-bench .tape{fill:var(--aleb-tape)}\n.ale-bench .glyph{fill:none;stroke:var(--aleb-kraft-edge);stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}\n.ale-bench .ink{fill:var(--aleb-ink)}\n.ale-bench .pfont{font-family:var(--aleb-font-print);font-weight:600}\n.ale-bench .dfont{font-family:var(--aleb-font-mono);font-weight:500}\n.ale-bench .led-ov{fill:transparent}\n.ale-bench .led-ov.on{fill:var(--aleb-nozzle-on)}\n.ale-bench .led-ov.pec.on{fill:var(--aleb-led-on)}\n.ale-bench .lbl{fill:var(--aleb-muted);font-family:var(--aleb-font-mono);font-size:14px}\n.ale-bench .speed-lbl{fill:var(--aleb-fg);font-family:var(--aleb-font-mono);font-size:18px;font-weight:500;font-variant-numeric:tabular-nums}\n.ale-bench .dim{fill:none;stroke:var(--aleb-muted);stroke-width:1.2}\n\n@media(max-width:900px){\n  .ale-bench .aleb-panel{\n    grid-template-columns:minmax(0,1fr);\n  }\n}\n\n@media(max-width:600px){\n  .ale-bench .aleb-zl{\n    display:none;\n  }\n\n  .ale-bench .aleb-settings > summary{\n    font-size:19px;\n  }\n}\n\n@media(max-width:420px){\n  .ale-bench .aleb-seg{\n    grid-template-columns:repeat(2,minmax(0,1fr));\n  }\n\n  .ale-bench .aleb-seg--three{\n    grid-template-columns:repeat(3,minmax(0,1fr));\n  }\n}\n<\/style>\n\n<script>\n\/* QR Code Generator for JavaScript 1.4.4 \u00b7 Copyright (c) 2009 Kazuhiko Arase \u00b7 MIT license \u00b7 https:\/\/github.com\/kazuhikoarase\/qrcode-generator *\/\nvar qrcode=function(){function i(t,r){function a(t,r){g=function(t){for(var r=new Array(t),e=0;e<t;e+=1){r[e]=new Array(t);for(var n=0;n<t;n+=1)r[e][n]=null}return r}(l=4*u+17),e(0,0),e(l-7,0),e(0,l-7),i(),o(),v(t,r),7<=u&&h(t),null==n&&(n=w(u,f,c)),d(n,r)}var u=t,f=y[r],g=null,l=0,n=null,c=[],s={},e=function(t,r){for(var e=-1;e<=7;e+=1)if(!(t+e<=-1||l<=t+e))for(var n=-1;n<=7;n+=1)r+n<=-1||l<=r+n||(g[t+e][r+n]=0<=e&&e<=6&&(0==n||6==n)||0<=n&&n<=6&&(0==e||6==e)||2<=e&&e<=4&&2<=n&&n<=4)},o=function(){for(var t=8;t<l-8;t+=1)null==g[t][6]&&(g[t][6]=t%2==0);for(var r=8;r<l-8;r+=1)null==g[6][r]&&(g[6][r]=r%2==0)},i=function(){for(var t=B.getPatternPosition(u),r=0;r<t.length;r+=1)for(var e=0;e<t.length;e+=1){var n=t[r],o=t[e];if(null==g[n][o])for(var i=-2;i<=2;i+=1)for(var a=-2;a<=2;a+=1)g[n+i][o+a]=-2==i||2==i||-2==a||2==a||0==i&&0==a}},h=function(t){for(var r=B.getBCHTypeNumber(u),e=0;e<18;e+=1){var n=!t&&1==(r>>e&1);g[Math.floor(e\/3)][e%3+l-8-3]=n}for(e=0;e<18;e+=1){n=!t&&1==(r>>e&1);g[e%3+l-8-3][Math.floor(e\/3)]=n}},v=function(t,r){for(var e=f<<3|r,n=B.getBCHTypeInfo(e),o=0;o<15;o+=1){var i=!t&&1==(n>>o&1);o<6?g[o][8]=i:o<8?g[o+1][8]=i:g[l-15+o][8]=i}for(o=0;o<15;o+=1){i=!t&&1==(n>>o&1);o<8?g[8][l-o-1]=i:o<9?g[8][15-o-1+1]=i:g[8][15-o-1]=i}g[l-8][8]=!t},d=function(t,r){for(var e=-1,n=l-1,o=7,i=0,a=B.getMaskFunction(r),u=l-1;0<u;u-=2)for(6==u&&(u-=1);;){for(var f=0;f<2;f+=1)if(null==g[n][u-f]){var c=!1;i<t.length&&(c=1==(t[i]>>>o&1)),a(n,u-f)&&(c=!c),g[n][u-f]=c,-1==(o-=1)&&(i+=1,o=7)}if((n+=e)<0||l<=n){n-=e,e=-e;break}}},w=function(t,r,e){for(var n=b.getRSBlocks(t,r),o=M(),i=0;i<e.length;i+=1){var a=e[i];o.put(a.getMode(),4),o.put(a.getLength(),B.getLengthInBits(a.getMode(),t)),a.write(o)}var u=0;for(i=0;i<n.length;i+=1)u+=n[i].dataCount;if(o.getLengthInBits()>8*u)throw\"code length overflow. (\"+o.getLengthInBits()+\">\"+8*u+\")\";for(o.getLengthInBits()+4<=8*u&&o.put(0,4);o.getLengthInBits()%8!=0;)o.putBit(!1);for(;!(o.getLengthInBits()>=8*u||(o.put(236,8),o.getLengthInBits()>=8*u));)o.put(17,8);return function(t,r){for(var e=0,n=0,o=0,i=new Array(r.length),a=new Array(r.length),u=0;u<r.length;u+=1){var f=r[u].dataCount,c=r[u].totalCount-f;n=Math.max(n,f),o=Math.max(o,c),i[u]=new Array(f);for(var g=0;g<i[u].length;g+=1)i[u][g]=255&t.getBuffer()[g+e];e+=f;var l=B.getErrorCorrectPolynomial(c),h=C(i[u],l.getLength()-1).mod(l);a[u]=new Array(l.getLength()-1);for(g=0;g<a[u].length;g+=1){var s=g+h.getLength()-a[u].length;a[u][g]=0<=s?h.getAt(s):0}}var v=0;for(g=0;g<r.length;g+=1)v+=r[g].totalCount;var d=new Array(v),w=0;for(g=0;g<n;g+=1)for(u=0;u<r.length;u+=1)g<i[u].length&&(d[w]=i[u][g],w+=1);for(g=0;g<o;g+=1)for(u=0;u<r.length;u+=1)g<a[u].length&&(d[w]=a[u][g],w+=1);return d}(o,n)};s.addData=function(t,r){var e=null;switch(r=r||\"Byte\"){case\"Numeric\":e=x(t);break;case\"Alphanumeric\":e=m(t);break;case\"Byte\":e=L(t);break;case\"Kanji\":e=D(t);break;default:throw\"mode:\"+r}c.push(e),n=null},s.isDark=function(t,r){if(t<0||l<=t||r<0||l<=r)throw t+\",\"+r;return g[t][r]},s.getModuleCount=function(){return l},s.make=function(){if(u<1){for(var t=1;t<40;t++){for(var r=b.getRSBlocks(t,f),e=M(),n=0;n<c.length;n++){var o=c[n];e.put(o.getMode(),4),e.put(o.getLength(),B.getLengthInBits(o.getMode(),t)),o.write(e)}var i=0;for(n=0;n<r.length;n++)i+=r[n].dataCount;if(e.getLengthInBits()<=8*i)break}u=t}a(!1,function(){for(var t=0,r=0,e=0;e<8;e+=1){a(!0,e);var n=B.getLostPoint(s);(0==e||n<t)&&(t=n,r=e)}return r}())},s.createTableTag=function(t,r){t=t||2;var e=\"\";e+='<table style=\"',e+=\" border-width: 0px; border-style: none;\",e+=\" border-collapse: collapse;\",e+=\" padding: 0px; margin: \"+(r=void 0===r?4*t:r)+\"px;\",e+='\">',e+=\"<tbody>\";for(var n=0;n<s.getModuleCount();n+=1){e+=\"<tr>\";for(var o=0;o<s.getModuleCount();o+=1)e+='<td style=\"',e+=\" border-width: 0px; border-style: none;\",e+=\" border-collapse: collapse;\",e+=\" padding: 0px; margin: 0px;\",e+=\" width: \"+t+\"px;\",e+=\" height: \"+t+\"px;\",e+=\" background-color: \",e+=s.isDark(n,o)?\"#000000\":\"#ffffff\",e+=\";\",e+='\"\/>';e+=\"<\/tr>\"}return e+=\"<\/tbody>\",e+=\"<\/table>\"},s.createSvgTag=function(t,r,e,n){var o={};\"object\"==typeof t&&(t=(o=t).cellSize,r=o.margin,e=o.alt,n=o.title),t=t||2,r=void 0===r?4*t:r,(e=\"string\"==typeof e?{text:e}:e||{}).text=e.text||null,e.id=e.text?e.id||\"qrcode-description\":null,(n=\"string\"==typeof n?{text:n}:n||{}).text=n.text||null,n.id=n.text?n.id||\"qrcode-title\":null;var i,a,u,f,c=s.getModuleCount()*t+2*r,g=\"\";for(f=\"l\"+t+\",0 0,\"+t+\" -\"+t+\",0 0,-\"+t+\"z \",g+='<svg version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"',g+=o.scalable?\"\":' width=\"'+c+'px\" height=\"'+c+'px\"',g+=' viewBox=\"0 0 '+c+\" \"+c+'\" ',g+=' preserveAspectRatio=\"xMinYMin meet\"',g+=n.text||e.text?' role=\"img\" aria-labelledby=\"'+p([n.id,e.id].join(\" \").trim())+'\"':\"\",g+=\">\",g+=n.text?'<title id=\"'+p(n.id)+'\">'+p(n.text)+\"<\/title>\":\"\",g+=e.text?'<description id=\"'+p(e.id)+'\">'+p(e.text)+\"<\/description>\":\"\",g+='<rect width=\"100%\" height=\"100%\" fill=\"white\" cx=\"0\" cy=\"0\"\/>',g+='<path d=\"',a=0;a<s.getModuleCount();a+=1)for(u=a*t+r,i=0;i<s.getModuleCount();i+=1)s.isDark(a,i)&&(g+=\"M\"+(i*t+r)+\",\"+u+f);return g+='\" stroke=\"transparent\" fill=\"black\"\/>',g+=\"<\/svg>\"},s.createDataURL=function(o,t){o=o||2,t=void 0===t?4*o:t;var r=s.getModuleCount()*o+2*t,i=t,a=r-t;return I(r,r,function(t,r){if(i<=t&&t<a&&i<=r&&r<a){var e=Math.floor((t-i)\/o),n=Math.floor((r-i)\/o);return s.isDark(n,e)?0:1}return 1})},s.createImgTag=function(t,r,e){t=t||2,r=void 0===r?4*t:r;var n=s.getModuleCount()*t+2*r,o=\"\";return o+=\"<img\",o+=' src=\"',o+=s.createDataURL(t,r),o+='\"',o+=' width=\"',o+=n,o+='\"',o+=' height=\"',o+=n,o+='\"',e&&(o+=' alt=\"',o+=p(e),o+='\"'),o+=\"\/>\"};var p=function(t){for(var r=\"\",e=0;e<t.length;e+=1){var n=t.charAt(e);switch(n){case\"<\":r+=\"&lt;\";break;case\">\":r+=\"&gt;\";break;case\"&\":r+=\"&amp;\";break;case'\"':r+=\"&quot;\";break;default:r+=n}}return r};return s.createASCII=function(t,r){if((t=t||1)<2)return function(t){t=void 0===t?2:t;var r,e,n,o,i,a=1*s.getModuleCount()+2*t,u=t,f=a-t,c={\"\u2588\u2588\":\"\u2588\",\"\u2588 \":\"\u2580\",\" \u2588\":\"\u2584\",\"  \":\" \"},g={\"\u2588\u2588\":\"\u2580\",\"\u2588 \":\"\u2580\",\" \u2588\":\" \",\"  \":\" \"},l=\"\";for(r=0;r<a;r+=2){for(n=Math.floor((r-u)\/1),o=Math.floor((r+1-u)\/1),e=0;e<a;e+=1)i=\"\u2588\",u<=e&&e<f&&u<=r&&r<f&&s.isDark(n,Math.floor((e-u)\/1))&&(i=\" \"),u<=e&&e<f&&u<=r+1&&r+1<f&&s.isDark(o,Math.floor((e-u)\/1))?i+=\" \":i+=\"\u2588\",l+=t<1&&f<=r+1?g[i]:c[i];l+=\"\\n\"}return a%2&&0<t?l.substring(0,l.length-a-1)+Array(1+a).join(\"\u2580\"):l.substring(0,l.length-1)}(r);t-=1,r=void 0===r?2*t:r;var e,n,o,i,a=s.getModuleCount()*t+2*r,u=r,f=a-r,c=Array(t+1).join(\"\u2588\u2588\"),g=Array(t+1).join(\"  \"),l=\"\",h=\"\";for(e=0;e<a;e+=1){for(o=Math.floor((e-u)\/t),h=\"\",n=0;n<a;n+=1)i=1,u<=n&&n<f&&u<=e&&e<f&&s.isDark(o,Math.floor((n-u)\/t))&&(i=0),h+=i?c:g;for(o=0;o<t;o+=1)l+=h+\"\\n\"}return l.substring(0,l.length-1)},s.renderTo2dContext=function(t,r){r=r||2;for(var e=s.getModuleCount(),n=0;n<e;n++)for(var o=0;o<e;o++)t.fillStyle=s.isDark(n,o)?\"black\":\"white\",t.fillRect(n*r,o*r,r,r)},s}i.stringToBytes=(i.stringToBytesFuncs={default:function(t){for(var r=[],e=0;e<t.length;e+=1){var n=t.charCodeAt(e);r.push(255&n)}return r}}).default,i.createStringToBytes=function(u,f){var i=function(){function t(){var t=r.read();if(-1==t)throw\"eof\";return t}for(var r=S(u),e=0,n={};;){var o=r.read();if(-1==o)break;var i=t(),a=t()<<8|t();n[String.fromCharCode(o<<8|i)]=a,e+=1}if(e!=f)throw e+\" != \"+f;return n}(),a=\"?\".charCodeAt(0);return function(t){for(var r=[],e=0;e<t.length;e+=1){var n=t.charCodeAt(e);if(n<128)r.push(n);else{var o=i[t.charAt(e)];\"number\"==typeof o?(255&o)==o?r.push(o):(r.push(o>>>8),r.push(255&o)):r.push(a)}}return r}};var r,t,a=1,u=2,o=4,f=8,y={L:1,M:0,Q:3,H:2},e=0,n=1,c=2,g=3,l=4,h=5,s=6,v=7,B=(r=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],(t={}).getBCHTypeInfo=function(t){for(var r=t<<10;0<=d(r)-d(1335);)r^=1335<<d(r)-d(1335);return 21522^(t<<10|r)},t.getBCHTypeNumber=function(t){for(var r=t<<12;0<=d(r)-d(7973);)r^=7973<<d(r)-d(7973);return t<<12|r},t.getPatternPosition=function(t){return r[t-1]},t.getMaskFunction=function(t){switch(t){case e:return function(t,r){return(t+r)%2==0};case n:return function(t,r){return t%2==0};case c:return function(t,r){return r%3==0};case g:return function(t,r){return(t+r)%3==0};case l:return function(t,r){return(Math.floor(t\/2)+Math.floor(r\/3))%2==0};case h:return function(t,r){return t*r%2+t*r%3==0};case s:return function(t,r){return(t*r%2+t*r%3)%2==0};case v:return function(t,r){return(t*r%3+(t+r)%2)%2==0};default:throw\"bad maskPattern:\"+t}},t.getErrorCorrectPolynomial=function(t){for(var r=C([1],0),e=0;e<t;e+=1)r=r.multiply(C([1,w.gexp(e)],0));return r},t.getLengthInBits=function(t,r){if(1<=r&&r<10)switch(t){case a:return 10;case u:return 9;case o:case f:return 8;default:throw\"mode:\"+t}else if(r<27)switch(t){case a:return 12;case u:return 11;case o:return 16;case f:return 10;default:throw\"mode:\"+t}else{if(!(r<41))throw\"type:\"+r;switch(t){case a:return 14;case u:return 13;case o:return 16;case f:return 12;default:throw\"mode:\"+t}}},t.getLostPoint=function(t){for(var r=t.getModuleCount(),e=0,n=0;n<r;n+=1)for(var o=0;o<r;o+=1){for(var i=0,a=t.isDark(n,o),u=-1;u<=1;u+=1)if(!(n+u<0||r<=n+u))for(var f=-1;f<=1;f+=1)o+f<0||r<=o+f||0==u&&0==f||a==t.isDark(n+u,o+f)&&(i+=1);5<i&&(e+=3+i-5)}for(n=0;n<r-1;n+=1)for(o=0;o<r-1;o+=1){var c=0;t.isDark(n,o)&&(c+=1),t.isDark(n+1,o)&&(c+=1),t.isDark(n,o+1)&&(c+=1),t.isDark(n+1,o+1)&&(c+=1),0!=c&&4!=c||(e+=3)}for(n=0;n<r;n+=1)for(o=0;o<r-6;o+=1)t.isDark(n,o)&&!t.isDark(n,o+1)&&t.isDark(n,o+2)&&t.isDark(n,o+3)&&t.isDark(n,o+4)&&!t.isDark(n,o+5)&&t.isDark(n,o+6)&&(e+=40);for(o=0;o<r;o+=1)for(n=0;n<r-6;n+=1)t.isDark(n,o)&&!t.isDark(n+1,o)&&t.isDark(n+2,o)&&t.isDark(n+3,o)&&t.isDark(n+4,o)&&!t.isDark(n+5,o)&&t.isDark(n+6,o)&&(e+=40);var g=0;for(o=0;o<r;o+=1)for(n=0;n<r;n+=1)t.isDark(n,o)&&(g+=1);return e+=Math.abs(100*g\/r\/r-50)\/5*10},t);function d(t){for(var r=0;0!=t;)r+=1,t>>>=1;return r}var w=function(){for(var r=new Array(256),e=new Array(256),t=0;t<8;t+=1)r[t]=1<<t;for(t=8;t<256;t+=1)r[t]=r[t-4]^r[t-5]^r[t-6]^r[t-8];for(t=0;t<255;t+=1)e[r[t]]=t;var n={glog:function(t){if(t<1)throw\"glog(\"+t+\")\";return e[t]},gexp:function(t){for(;t<0;)t+=255;for(;256<=t;)t-=255;return r[t]}};return n}();function C(n,o){if(void 0===n.length)throw n.length+\"\/\"+o;var r=function(){for(var t=0;t<n.length&&0==n[t];)t+=1;for(var r=new Array(n.length-t+o),e=0;e<n.length-t;e+=1)r[e]=n[e+t];return r}(),i={getAt:function(t){return r[t]},getLength:function(){return r.length},multiply:function(t){for(var r=new Array(i.getLength()+t.getLength()-1),e=0;e<i.getLength();e+=1)for(var n=0;n<t.getLength();n+=1)r[e+n]^=w.gexp(w.glog(i.getAt(e))+w.glog(t.getAt(n)));return C(r,0)},mod:function(t){if(i.getLength()-t.getLength()<0)return i;for(var r=w.glog(i.getAt(0))-w.glog(t.getAt(0)),e=new Array(i.getLength()),n=0;n<i.getLength();n+=1)e[n]=i.getAt(n);for(n=0;n<t.getLength();n+=1)e[n]^=w.gexp(w.glog(t.getAt(n))+r);return C(e,0).mod(t)}};return i}function p(){var e=[],o={writeByte:function(t){e.push(255&t)},writeShort:function(t){o.writeByte(t),o.writeByte(t>>>8)},writeBytes:function(t,r,e){r=r||0,e=e||t.length;for(var n=0;n<e;n+=1)o.writeByte(t[n+r])},writeString:function(t){for(var r=0;r<t.length;r+=1)o.writeByte(t.charCodeAt(r))},toByteArray:function(){return e},toString:function(){var t=\"\";t+=\"[\";for(var r=0;r<e.length;r+=1)0<r&&(t+=\",\"),t+=e[r];return t+=\"]\"}};return o}var k,A,b=(k=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12,7,37,13],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]],(A={}).getRSBlocks=function(t,r){var e=function(t,r){switch(r){case y.L:return k[4*(t-1)+0];case y.M:return k[4*(t-1)+1];case y.Q:return k[4*(t-1)+2];case y.H:return k[4*(t-1)+3];default:return}}(t,r);if(void 0===e)throw\"bad rs block @ typeNumber:\"+t+\"\/errorCorrectionLevel:\"+r;for(var n,o,i=e.length\/3,a=[],u=0;u<i;u+=1)for(var f=e[3*u+0],c=e[3*u+1],g=e[3*u+2],l=0;l<f;l+=1)a.push((n=g,o=void 0,(o={}).totalCount=c,o.dataCount=n,o));return a},A),M=function(){var e=[],n=0,o={getBuffer:function(){return e},getAt:function(t){var r=Math.floor(t\/8);return 1==(e[r]>>>7-t%8&1)},put:function(t,r){for(var e=0;e<r;e+=1)o.putBit(1==(t>>>r-e-1&1))},getLengthInBits:function(){return n},putBit:function(t){var r=Math.floor(n\/8);e.length<=r&&e.push(0),t&&(e[r]|=128>>>n%8),n+=1}};return o},x=function(t){var r=a,n=t,e={getMode:function(){return r},getLength:function(t){return n.length},write:function(t){for(var r=n,e=0;e+2<r.length;)t.put(o(r.substring(e,e+3)),10),e+=3;e<r.length&&(r.length-e==1?t.put(o(r.substring(e,e+1)),4):r.length-e==2&&t.put(o(r.substring(e,e+2)),7))}},o=function(t){for(var r=0,e=0;e<t.length;e+=1)r=10*r+i(t.charAt(e));return r},i=function(t){if(\"0\"<=t&&t<=\"9\")return t.charCodeAt(0)-\"0\".charCodeAt(0);throw\"illegal char :\"+t};return e},m=function(t){var r=u,n=t,e={getMode:function(){return r},getLength:function(t){return n.length},write:function(t){for(var r=n,e=0;e+1<r.length;)t.put(45*o(r.charAt(e))+o(r.charAt(e+1)),11),e+=2;e<r.length&&t.put(o(r.charAt(e)),6)}},o=function(t){if(\"0\"<=t&&t<=\"9\")return t.charCodeAt(0)-\"0\".charCodeAt(0);if(\"A\"<=t&&t<=\"Z\")return t.charCodeAt(0)-\"A\".charCodeAt(0)+10;switch(t){case\" \":return 36;case\"$\":return 37;case\"%\":return 38;case\"*\":return 39;case\"+\":return 40;case\"-\":return 41;case\".\":return 42;case\"\/\":return 43;case\":\":return 44;default:throw\"illegal char :\"+t}};return e},L=function(t){var r=o,e=i.stringToBytes(t),n={getMode:function(){return r},getLength:function(t){return e.length},write:function(t){for(var r=0;r<e.length;r+=1)t.put(e[r],8)}};return n},D=function(t){var r=f,e=i.stringToBytesFuncs.SJIS;if(!e)throw\"sjis not supported.\";!function(){var t=e(\"\u53cb\");if(2!=t.length||38726!=(t[0]<<8|t[1]))throw\"sjis not supported.\"}();var o=e(t),n={getMode:function(){return r},getLength:function(t){return~~(o.length\/2)},write:function(t){for(var r=o,e=0;e+1<r.length;){var n=(255&r[e])<<8|255&r[e+1];if(33088<=n&&n<=40956)n-=33088;else{if(!(57408<=n&&n<=60351))throw\"illegal char at \"+(e+1)+\"\/\"+n;n-=49472}n=192*(n>>>8&255)+(255&n),t.put(n,13),e+=2}if(e<r.length)throw\"illegal char at \"+(e+1)}};return n},S=function(t){var e=t,n=0,o=0,i=0,r={read:function(){for(;i<8;){if(n>=e.length){if(0==i)return-1;throw\"unexpected end of file.\/\"+i}var t=e.charAt(n);if(n+=1,\"=\"==t)return i=0,-1;t.match(\/^\\s$\/)||(o=o<<6|a(t.charCodeAt(0)),i+=6)}var r=o>>>i-8&255;return i-=8,r}},a=function(t){if(65<=t&&t<=90)return t-65;if(97<=t&&t<=122)return t-97+26;if(48<=t&&t<=57)return t-48+52;if(43==t)return 62;if(47==t)return 63;throw\"c:\"+t};return r},I=function(t,r,e){for(var n=function(t,r){var n=t,o=r,l=new Array(t*r),e={setPixel:function(t,r,e){l[r*n+t]=e},write:function(t){t.writeString(\"GIF87a\"),t.writeShort(n),t.writeShort(o),t.writeByte(128),t.writeByte(0),t.writeByte(0),t.writeByte(0),t.writeByte(0),t.writeByte(0),t.writeByte(255),t.writeByte(255),t.writeByte(255),t.writeString(\",\"),t.writeShort(0),t.writeShort(0),t.writeShort(n),t.writeShort(o),t.writeByte(0);var r=i(2);t.writeByte(2);for(var e=0;255<r.length-e;)t.writeByte(255),t.writeBytes(r,e,255),e+=255;t.writeByte(r.length-e),t.writeBytes(r,e,r.length-e),t.writeByte(0),t.writeString(\";\")}},i=function(t){for(var r=1<<t,e=1+(1<<t),n=t+1,o=h(),i=0;i<r;i+=1)o.add(String.fromCharCode(i));o.add(String.fromCharCode(r)),o.add(String.fromCharCode(e));var a=p(),u=function(t){var e=t,n=0,o=0,r={write:function(t,r){if(t>>>r!=0)throw\"length over\";for(;8<=n+r;)e.writeByte(255&(t<<n|o)),r-=8-n,t>>>=8-n,n=o=0;o|=t<<n,n+=r},flush:function(){0<n&&e.writeByte(o)}};return r}(a);u.write(r,n);var f=0,c=String.fromCharCode(l[f]);for(f+=1;f<l.length;){var g=String.fromCharCode(l[f]);f+=1,o.contains(c+g)?c+=g:(u.write(o.indexOf(c),n),o.size()<4095&&(o.size()==1<<n&&(n+=1),o.add(c+g)),c=g)}return u.write(o.indexOf(c),n),u.write(e,n),u.flush(),a.toByteArray()},h=function(){var r={},e=0,n={add:function(t){if(n.contains(t))throw\"dup key:\"+t;r[t]=e,e+=1},size:function(){return e},indexOf:function(t){return r[t]},contains:function(t){return void 0!==r[t]}};return n};return e}(t,r),o=0;o<r;o+=1)for(var i=0;i<t;i+=1)n.setPixel(i,o,e(i,o));var a=p();n.write(a);for(var u=function(){function e(t){a+=String.fromCharCode(r(63&t))}var n=0,o=0,i=0,a=\"\",t={},r=function(t){if(t<0);else{if(t<26)return 65+t;if(t<52)return t-26+97;if(t<62)return t-52+48;if(62==t)return 43;if(63==t)return 47}throw\"n:\"+t};return t.writeByte=function(t){for(n=n<<8|255&t,o+=8,i+=1;6<=o;)e(n>>>o-6),o-=6},t.flush=function(){if(0<o&&(e(n<<6-o),o=n=0),i%3!=0)for(var t=3-i%3,r=0;r<t;r+=1)a+=\"=\"},t.toString=function(){return a},t}(),f=a.toByteArray(),c=0;c<f.length;c+=1)u.writeByte(f[c]);return u.flush(),\"data:image\/gif;base64,\"+u};return i}();qrcode.stringToBytesFuncs[\"UTF-8\"]=function(t){return function(t){for(var r=[],e=0;e<t.length;e++){var n=t.charCodeAt(e);n<128?r.push(n):n<2048?r.push(192|n>>6,128|63&n):n<55296||57344<=n?r.push(224|n>>12,128|n>>6&63,128|63&n):(e++,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),r.push(240|n>>18,128|n>>12&63,128|n>>6&63,128|63&n))}return r}(t)},function(t){\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports&&(module.exports=t())}(function(){return qrcode});\n<\/script>\n\n<script>\n(function(){\n  \"use strict\";\n\n  \/\/ ---------- R\u00e9glages propres au site ----------\n  const CFG = {\n    prefix: 'aleb-',\n    storageKey: 'aleBench.settingsOpen',\n    locale: 'en-GB',\n    img: '\/wp-content\/uploads\/2026\/10\/',\n    logo: { w: 536, h: 128 },\n    t: {\n      pause: 'Pause',\n      resume: 'Resume',\n      times: 'times',\n      photocell: 'Photocell',\n      encoder: 'Encoder',\n      travel: 'Direction of travel',\n      eanEmpty: 'Enter 12 digits: the check digit is computed.',\n      eanDigits: 'Digits only.',\n      eanWrong: c => `Wrong check digit: the 13th digit should be ${c}.`,\n      eanCount: n => `${n} digits entered: 12 (check digit computed) or 13 are needed.`,\n      eanComputed: (d, c) => `Check digit computed: ${d} \u2192 ${c}`,\n      eanOk: c => `Check digit correct: ${c}`,\n      tooManyLines: n => `${n} lines entered: only the first 6 are printed.`,\n      lineCut: 'Lines are cut at 40 characters.',\n      qrTooBig: 'Too much data for a QR code.',\n      qrEmpty: 'Enter the text or URL to encode.',\n      qrInfo: (v, n) => `Version ${v} \u00b7 ${n} \u00d7 ${n} modules`,\n      qrDense: 'QR code too dense for this head: its modules are under 2 px. Shorten the content.',\n      overrun: (len, room) => `The message is ${len} mm long: it overruns the carton face (${room} mm usable) and will be cut.`\n    }\n  };\n\n  \/\/ Logo ALE trac\u00e9 d'apr\u00e8s le bitmap monochrome livr\u00e9 avec l'imprimante (536 x 128 unit\u00e9s), imprim\u00e9 \u00e0 l'encre noire.\n  const LOGO_D = 'M361 127.25C361.01 126.84 362.32 123.12 363.93 119L366.85 111.5L373.69 111.22C382.21 110.87 384.97 112.37 383.48 116.54C382.13 120.31 376.68 123 370.37 123C365.71 123 365.16 123.24 364.59 125.5C364.04 127.71 360.99 129.19 361 127.25ZM45.22 121.44C43.08 119.94 43 119.3 43 103.64C43 92.34 43.37 87.03 44.2 86.2C45.03 85.37 50.34 85 61.64 85C82.17 85 81 83.87 81 103.77C81 117.64 80.92 118.17 78.55 120.55C76.17 122.92 75.64 123 61.77 123C50.42 123 46.98 122.68 45.22 121.44ZM89 122.34C85.46 120.99 85 118.82 85 103.38C85 90.86 85.28 87.86 86.57 86.57C88.89 84.25 119.11 84.25 121.43 86.57C123.62 88.76 123.75 117.59 121.58 120.56C120.3 122.31 118.73 122.52 105.33 122.71C97.17 122.82 89.83 122.66 89 122.34ZM129.17 122.25C129.36 121.84 131.21 118.24 133.27 114.25C138.11 104.91 139.97 104.66 142.5 113C143.5 116.3 144.54 119 144.82 119C145.1 119 148.37 116.3 152.08 113C158.1 107.64 161.98 105.6 162.01 107.75C162.02 108.16 161.26 111.76 160.33 115.75C159.19 120.61 158.16 123 157.19 123C156.12 123 155.91 122.24 156.38 120C158.58 109.43 159.12 109.79 151.53 116.75C147.78 120.19 144.15 123 143.47 123C142.78 123 141.93 121.54 141.57 119.75C141.21 117.96 140.33 115.15 139.61 113.5L138.32 110.5L135.14 116.75C133.28 120.41 131.32 123 130.4 123C129.54 123 128.99 122.66 129.17 122.25ZM168.24 122.39C167.54 122.08 166.52 120.96 165.95 119.91C163.69 115.68 169.6 111 177.23 111C189.97 111 188.09 122.02 175.24 122.66C172.08 122.82 168.93 122.7 168.24 122.39ZM191.18 117.17L193.28 111.33L198.14 111.22C200.81 111.16 203 111.54 203 112.06C203 112.58 201.95 113 200.67 113C198 113 194.61 116.25 193.09 120.25C192.52 121.76 191.38 123 190.57 123C189.32 123 189.42 122.05 191.18 117.17ZM205.17 121.4C202.05 119.22 202.72 116.09 206.9 113.28C212.57 109.47 222.97 110.58 220.4 114.72C219.65 115.93 217.16 116.82 212.59 117.5C207.23 118.3 206.14 118.75 207.15 119.75C207.84 120.44 210.59 121 213.26 121C216.24 121 217.88 121.39 217.5 122C216.51 123.6 207.69 123.17 205.17 121.4ZM235.36 121.49C234.78 119.99 235.09 118.16 236.49 114.75C237 113.51 236.75 113 235.61 113C234.72 113 234 112.55 234 112C234 111.45 234.87 111 235.94 111C237.01 111 238.16 110.55 238.5 110C238.84 109.45 239.79 109 240.62 109C241.44 109 241.84 109.45 241.5 110C241.14 110.58 242.18 111 244 111C245.82 111 246.86 111.42 246.5 112C246.16 112.55 244.6 113 243.04 113C240.75 113 239.98 113.61 239.1 116.15C237.6 120.46 237.7 121 240 121C241.1 121 242 121.45 242 122C242 123.63 236 123.17 235.36 121.49ZM247.17 122.22C247.35 121.79 248.8 117.97 250.38 113.72C252.59 107.81 253.71 106 255.17 106C256.74 106 256.89 106.34 256.04 107.93C254.37 111.05 254.79 111.62 258.5 111.19C263.28 110.63 267 111.71 267 113.65C267 117.61 264.63 123 262.89 123C261.24 123 261.21 122.74 262.55 119.53C264.74 114.29 264.44 113 261.05 113C256.28 113 253.23 114.97 251.56 119.14C250.67 121.35 249.34 123 248.42 123C247.55 123 246.98 122.65 247.17 122.22ZM273.05 121.56C269.14 116.85 276.94 111 287.12 111L292.81 111L290.76 117C289.61 120.38 288.12 123 287.36 123C286.61 123 286 122.53 286 121.96C286 121.25 285.4 121.25 284.07 121.96C281.22 123.49 274.44 123.23 273.05 121.56ZM296 122.25C296 121.84 296.86 119.25 297.9 116.5L299.8 111.5L306.75 111.22C315.46 110.86 316.71 111.91 314.87 118.03C313.74 121.8 311.68 124.01 310.44 122.78C310.19 122.52 310.67 120.64 311.52 118.61C313.4 114.1 312.84 113 308.66 113C304.39 113 301.41 115.24 300 119.5C299.36 121.43 298.2 123 297.42 123C296.64 123 296 122.66 296 122.25ZM331.05 121.56C327.15 116.86 334.94 111 345.06 111L350.7 111L348.6 117C347.45 120.3 345.94 123 345.25 123C344.56 123 344 122.53 344 121.96C344 121.25 343.4 121.25 342.07 121.96C339.22 123.49 332.44 123.23 331.05 121.56ZM387.5 121.25C387.89 120.29 388.86 117.66 389.64 115.42C391.05 111.41 391.16 111.34 396.06 111.23C398.96 111.16 400.8 111.51 400.47 112.06C400.14 112.58 399.12 113.01 398.19 113.03C395.57 113.08 393.17 115.35 391.5 119.35C390.65 121.39 389.27 123 388.38 123C387.26 123 387 122.48 387.5 121.25ZM403.29 117.07C404.79 112.96 406.04 111 407.17 111C408.66 111 408.6 111.61 406.61 116.75C405.32 120.06 403.69 122.63 402.74 122.81C401.29 123.09 401.35 122.41 403.29 117.07ZM412 122.25C412 121.84 412.86 119.25 413.9 116.5L415.8 111.5L422.75 111.22C431.46 110.86 432.71 111.91 430.87 118.03C429.74 121.8 427.68 124.01 426.44 122.78C426.19 122.52 426.67 120.64 427.52 118.61C429.4 114.1 428.84 113 424.66 113C420.39 113 417.41 115.24 416 119.5C415.36 121.43 414.2 123 413.42 123C412.64 123 412 122.66 412 122.25ZM438.41 121.62C438.11 120.86 438.56 118.61 439.39 116.62C440.69 113.49 440.7 113 439.45 113C438.65 113 438 112.55 438 112C438 111.45 438.9 111 440 111C441.1 111 442 110.55 442 110C442 109.45 442.68 109 443.5 109C444.32 109 445 109.45 445 110C445 110.55 446.12 111 447.5 111C451.12 111 450.58 112.82 446.84 113.19C444.2 113.45 443.48 114.11 442.4 117.25C441.2 120.72 441.25 121 442.99 121C444.03 121 445.16 121.45 445.5 122C445.87 122.6 444.67 123 442.53 123C440.39 123 438.72 122.44 438.41 121.62ZM452.75 121.94C450.24 120.45 450.59 116.73 453.49 114.01C456.82 110.88 465.88 109.94 468 112.5C469.25 114 469.2 114.38 467.64 115.52C466.67 116.23 463.2 117.13 459.93 117.51C456.67 117.89 454 118.57 454 119.03C454 120.3 457.64 121.18 461.5 120.85C463.41 120.69 464.98 120.99 464.99 121.53C465.03 122.88 454.89 123.22 452.75 121.94ZM473.18 117.17L475.28 111.33L480.14 111.22C482.81 111.16 485 111.54 485 112.06C485 112.58 483.95 113 482.67 113C480 113 476.61 116.25 475.09 120.25C474.52 121.76 473.38 123 472.57 123C471.32 123 471.42 122.05 473.18 117.17ZM493.18 119.66L496.86 116.41L493.68 113.76L490.5 111.11L495.06 111.05C498.81 111.01 500.11 111.51 502.36 113.85L505.1 116.71L501.51 119.85C498.68 122.34 497.05 122.99 493.72 122.96L489.5 122.92L493.18 119.66ZM522 122.44C522 122.12 523.41 120.69 525.13 119.24L528.25 116.61L525.63 114.35C524.18 113.11 523 111.85 523 111.55C523 111.25 524.72 111 526.81 111C529.7 111 531.29 111.69 533.36 113.85L536.1 116.71L532.51 119.85C529.97 122.09 527.93 123 525.47 123C523.56 123 522 122.75 522 122.44ZM1.65 120.17C0.27 118.64 -0 115.9 -0 103.33C0 90.05 0.21 88.12 1.83 86.65C4.48 84.26 34.04 84.19 36.43 86.57C37.72 87.86 38 90.84 38 103.14C38 111.56 37.55 118.98 36.96 120.07C36.01 121.86 34.72 122 19.62 122C5.09 122 3.13 121.8 1.65 120.17ZM509.92 119.11L513.34 116.27L510.67 114.52C509.2 113.56 508 112.46 508 112.09C508 110.61 515.63 112.34 517.76 114.3L520.02 116.37L517.32 119.18C515.22 121.38 513.73 121.99 510.56 121.97L506.5 121.95L509.92 119.11ZM180.66 118.61C183.05 116.56 183.25 116.01 182.1 114.61C179.19 111.12 169 113.67 169 117.89C169 120.46 169.88 121 174.11 121C176.65 121 178.8 120.22 180.66 118.61ZM284.61 119.1C286.32 118.06 287.96 116.26 288.26 115.1C288.75 113.25 288.38 113 285.16 113C279.2 113.01 273.08 117.74 275.67 120.33C276.94 121.61 281.52 120.98 284.61 119.1ZM341.85 119.57C343.37 118.79 345.14 116.99 345.78 115.57C346.93 113.06 346.87 113 343.23 113C337.21 113.01 331.06 117.73 333.67 120.33C334.79 121.46 338.96 121.07 341.85 119.57ZM376.93 119.54C379.85 118.03 381.43 115.5 380.44 113.91C380.13 113.41 378.09 113 375.9 113C371.66 113 367 116.38 367 119.45C367 121.49 373.06 121.54 376.93 119.54ZM214.88 115.38C216.59 115.03 218 114.36 218 113.88C218 112.44 211.53 112.89 209.44 114.47C207.54 115.91 207.54 115.94 209.62 115.97C210.79 115.99 213.16 115.72 214.88 115.38ZM462.75 115.37C465.96 114.51 465.53 113 462.08 113C458.57 113 456 113.89 456 115.11C456 116.13 459.43 116.26 462.75 115.37ZM406.69 109.36C405.76 108.43 406.89 107 408.56 107C409.35 107 410 107.67 410 108.5C410 110.01 407.89 110.56 406.69 109.36ZM132 48.65C132 10.44 132.01 10.28 134.27 6.9C138.96 -0.13 137.85 0 192.78 0C246.76 -0 246.25 -0.05 251.3 5.94L254 9.15L254 48.08L254 87L241.02 87L228.05 87L227.77 69.75L227.5 52.5L203.75 52.23L180 51.96L180 43.5L180 35.04L203.75 34.77L227.5 34.5L227.8 27.66C227.98 23.48 227.64 20.27 226.93 19.41C225.96 18.25 220.1 18 193.96 18C176.47 18 161.45 18.27 160.58 18.61C159.18 19.14 159 23.12 159 53.11L159 87L145.5 87L132 87L132 48.65ZM266.78 84.95C264.74 83.87 262.6 82.12 262.03 81.06C261.37 79.83 261 64.82 261 39.57L261 0L274 0L287 0L287 34.5L287 69L340.5 69L394 69L394 78L394 87L332.25 86.96C272.85 86.91 270.36 86.84 266.78 84.95ZM400.5 60.5L400.5 34L453.75 34L507 34L507 43L507 52L467.5 52L428 52L428 60L428 68L482 68L536 68L536 77.5L536 87L468.25 87L400.5 87L400.5 60.5ZM2 78C0.18 76.18 0 74.67 -0 61.15C-0 48.04 0.21 46.12 1.83 44.65C3.37 43.26 6.18 43 19.79 43C34.72 43 36.01 43.14 36.96 44.93C37.54 46.01 38 53.31 38 61.43C38 80.9 38.92 80 19 80C5.33 80 3.82 79.82 2 78ZM44.57 78.43C43.27 77.13 43 74.08 43 60.99C43 40.91 41.94 42 61.5 42C81.11 42 80 40.83 80 61.52C80 76.72 79.86 78.01 78.07 78.96C76.98 79.55 69.56 80 61.14 80C48.84 80 45.86 79.72 44.57 78.43ZM86.65 78.17C85.26 76.63 85 73.85 85 60.73C85 40.89 83.86 42 104.22 42C123.97 42 123 41 123 61.35C123 74.94 122.79 76.88 121.17 78.35C119.63 79.74 116.86 80 103.83 80C90.06 80 88.12 79.79 86.65 78.17ZM87.22 36.44C85.08 34.95 85 34.28 85 19.01C85 5.92 85.27 2.87 86.57 1.57C87.86 0.28 90.84 -0 103.14 0C111.56 0 118.98 0.45 120.07 1.04C121.86 1.99 122 3.28 122 18.48C122 39.17 123.11 38 103.5 38C92.4 38 88.98 37.67 87.22 36.44ZM1.65 35.17C0.27 33.64 -0 30.92 0 18.67C0 -0.96 -1 -0 19.44 0C39.08 0 38 -1.11 38 19.15C38 31.19 37.71 34.14 36.43 35.43C35.13 36.72 32.09 37 19.08 37C5.07 37 3.13 36.8 1.65 35.17ZM44.04 35.07C43.45 33.98 43 26.59 43 18.22C43 5.05 43.21 3.12 44.83 1.65C47.47 -0.74 76.05 -0.81 78.43 1.57C79.72 2.87 80 5.91 80 18.87C80 29.77 79.63 34.97 78.8 35.8C77.97 36.63 72.65 37 61.34 37C46.28 37 44.99 36.86 44.04 35.07ZM400.92 17.59C400.69 17.36 400.65 13.31 400.82 8.59L401.15 0L466.57 0L532 0L532 9L532 18L466.67 18C430.73 18 401.15 17.81 400.92 17.59Z';\n\n  const $ = id => document.getElementById(CFG.prefix + id);\n  const root = $('root');\n  if (!root || root.dataset.benchReady === '1' || typeof qrcode === 'undefined') return;\n  root.dataset.benchReady = '1';\n\n  \/\/ Tailles de t\u00eate propos\u00e9es et bo\u00eetier utilis\u00e9 (mm, relev\u00e9s sur les rendus CAO) : 18, 34 et 72 mm partagent le\n  \/\/ bo\u00eetier Easy 72, seule la hauteur d'impression change.\n  const EASY72_BODY = { w: 67.5, l: 205, h: 132, img: 'e72' };\n  const HEADS = [\n    { mm: 18, px: 128, ...EASY72_BODY },\n    { mm: 34, px: 240, ...EASY72_BODY },\n    { mm: 72, px: 510, ...EASY72_BODY },\n    { mm: 144, px: 1008, w: 69, l: 263, h: 188, img: 'e144' }\n  ];\n  const PRINT_FONT = '\"Barlow Semi Condensed\", \"Arial Narrow\", sans-serif';\n  const DIGIT_FONT = '\"IBM Plex Mono\", ui-monospace, monospace';\n  const NS = 'http:\/\/www.w3.org\/2000\/svg';\n\n  \/\/ ---------- G\u00e9om\u00e9trie de la sc\u00e8ne 3D ----------\n  \/\/ Axes en mm : x dans le sens de d\u00e9filement, y \u00e0 travers le tapis vers l'observateur (0 = face imprim\u00e9e du carton),\n  \/\/ z vers le haut. Projection axonom\u00e9trique vue de l'avant droit, l\u00e9g\u00e8rement au-dessus, aux angles des rendus CAO.\n  const SCENE_W = 1280, SCENE_H = 600, ZOOM_MAX = 20;\n  const AX = Math.atan(0.1151), AY = 30.8 * Math.PI \/ 180, KY = 0.55;\n  const EX = [Math.cos(AX), Math.sin(AX)], EY = [-KY * Math.cos(AY), KY * Math.sin(AY)];\n  const HEAD_X = 600, HEAD_Y0 = 3, HEAD_Z0 = 25, STAND_Y = 126, PRINT_Z0 = 45, IMG_MARGIN = 30;\n  const ANCHOR_X = HEAD_X + 45;\n  const OX = SCENE_W \/ 2 - ANCHOR_X * EX[0], OY = 332;\n  const FLOOR_Z = -92, LEGS = [110, 1020], BELT_NEAR = 34, PEC_X = HEAD_X - 182, ENC_X = 1060, ENC_R = 22;\n  const CARTON_W = 420, CARTON_H = 230, CARTON_D = 220, CARTON_GAP = 220, PITCH = CARTON_W + CARTON_GAP, SPAWN = 340;\n\n  \/\/ Rendus CAO des t\u00eates (images de la m\u00e9diath\u00e8que) : ref = coin avant bas c\u00f4t\u00e9 droit (px), leds = voyants (px),\n  \/\/ scale = mm par px.\n  const RENDERS = {\n    e72: { src: CFG.img + 'anim-tete-easy72.webp', w: 384, h: 453, ref: [379.5, 320], leds: [[191, 86]], scale: 132 \/ 301 },\n    e144: { src: CFG.img + 'anim-tete-easy144.webp', w: 524, h: 726, ref: [517.5, 526], leds: [[267.1, 94.7], [332.2, 102.2]], scale: 132 \/ 301 \/ 1.17 }\n  };\n\n  const L = ['0001101','0011001','0010011','0111101','0100011','0110001','0101111','0111011','0110111','0001011'];\n  const G = ['0100111','0110011','0011011','0100001','0011101','0111001','0000101','0010001','0001001','0010111'];\n  const R = ['1110010','1100110','1101100','1000010','1011100','1001110','1010000','1000100','1001000','1110100'];\n  const PARITY = ['LLLLLL','LLGLGG','LLGGLG','LLGGGL','LGLLGG','LGGLLG','LGGGLL','LGLGLG','LGLGGL','LGGLGL'];\n\n  qrcode.stringToBytes = qrcode.stringToBytesFuncs['UTF-8'];\n\n  const f = v => String(Math.round(v * 100) \/ 100);\n  const n4 = v => String(Math.round(v * 1e4) \/ 1e4);\n  const esc = s => s.replace(\/&\/g, '&amp;').replace(\/<\/g, '&lt;').replace(\/>\/g, '&gt;');\n  const nf0 = new Intl.NumberFormat(CFG.locale, { maximumFractionDigits: 0 });\n  const nf1 = new Intl.NumberFormat(CFG.locale, { minimumFractionDigits: 1, maximumFractionDigits: 1 });\n  const nf2 = new Intl.NumberFormat(CFG.locale, { minimumFractionDigits: 2, maximumFractionDigits: 2 });\n  const el = (tag, attrs) => { const n = document.createElementNS(NS, tag); for (const k in attrs) n.setAttribute(k, attrs[k]); return n; };\n\n  \/\/ Projection et dessin\n  const P = (x, y, z) => [OX + x * EX[0] + y * EY[0], OY + x * EX[1] + y * EY[1] - z];\n  const poly = (cls, ...q) => `<polygon class=\"${cls}\" points=\"${q.map(p => { const s = P(...p); return f(s[0]) + ',' + f(s[1]); }).join(' ')}\"\/>`;\n  const mat = (a, b, c, d, o) => `matrix(${n4(a)} ${n4(b)} ${n4(c)} ${n4(d)} ${f(o[0])} ${f(o[1])})`;\n  const frontM = (y, z0) => mat(EX[0], EX[1], 0, 1, P(0, y, z0));\n  const topM = z => mat(EX[0], EX[1], EY[0], EY[1], P(0, 0, z));\n  const box = (x0, x1, y0, y1, z0, z1, m) =>\n    poly(m + ' f-side', [x1, y1, z1], [x1, y0, z1], [x1, y0, z0], [x1, y1, z0]) +\n    poly(m + ' f-front', [x0, y1, z1], [x1, y1, z1], [x1, y1, z0], [x0, y1, z0]) +\n    poly(m + ' f-top', [x0, y0, z1], [x1, y0, z1], [x1, y1, z1], [x0, y1, z1]);\n\n  \/\/ Convoyeur : rendu CAO prolong\u00e9 des deux c\u00f4t\u00e9s par un tron\u00e7on droit r\u00e9p\u00e9t\u00e9.\n  const CONV_IMG = {\n    h: 240, m: 0.1151, c: 81.38, depth: 139.8, pec: 220, pecLed: [229.5, 92], pecFoot: 186,\n    main: { x: 150, w: 550, src: CFG.img + 'anim-convoyeur.webp' },\n    slice: { x: 400, w: 300, src: CFG.img + 'anim-convoyeur-troncon.webp' },\n    pecBox: [195, 85, 48, 105], pecSrc: CFG.img + 'anim-photocellule.webp'\n  };\n  const CONV_K = 1.06;\n  const worldX = (xs, y) => (xs - OX - y * EY[0]) \/ EX[0];\n  const convTx = P(PEC_X, BELT_NEAR, 0)[0] - CONV_K * CONV_IMG.pec;\n  const convTy = P(worldX(convTx, BELT_NEAR), BELT_NEAR, 0)[1] - CONV_K * CONV_IMG.c;\n  const imgS = (px, py) => [convTx + CONV_K * px, convTy + CONV_K * py];\n  const BELT_W = CONV_IMG.depth * CONV_K \/ KY, BELT_FAR = BELT_NEAR - BELT_W;\n  const BELT_X0 = -400, BELT_X1 = 1700, PROFILE_Z = -30 * CONV_K;\n\n  const reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n  const state = { speed: 250, T: 0, paused: reduce, code: 'ean' };\n  let head = HEADS[2], DPMM = head.px \/ head.mm;\n  let msg = null;\n  const cartons = new Map();\n  const shown = { pec: null, print: null };\n\n  \/\/ ---------- Convoyeur, pieds, tapis, photocellule, l\u00e9gendes ----------\n  function buildLine() {\n    const x0 = BELT_X0, x1 = BELT_X1, yF = BELT_FAR, yN = BELT_NEAR;\n    let s = poly('shadow', [x0, yF - 10, FLOOR_Z], [x1, yF - 10, FLOOR_Z], [x1, yN + 30, FLOOR_Z], [x0, yN + 30, FLOOR_Z]);\n    for (const x of LEGS) {\n      s += box(x - 18, x + 18, yN - 22, yN + 14, FLOOR_Z, FLOOR_Z + 5, 'steel');\n      s += box(x - 7, x + 7, yN - 14, yN, FLOOR_Z + 5, PROFILE_Z, 'steel');\n    }\n    const piece = (pc, dx) => `<image href=\"${pc.src}\" x=\"${f(convTx + CONV_K * (pc.x + dx))}\" y=\"${f(convTy + CONV_K * CONV_IMG.m * dx)}\" width=\"${f(pc.w * CONV_K + 0.6)}\" height=\"${f(CONV_IMG.h * CONV_K)}\" preserveAspectRatio=\"none\"\/>`;\n    const { main, slice } = CONV_IMG;\n    for (let k = 2; k >= 1; k--) s += piece(slice, main.x - k * slice.w - slice.x);\n    s += piece(main, 0);\n    for (let k = 1; k <= 3; k++) s += piece(slice, main.x + main.w + (k - 1) * slice.w - slice.x);\n    let tex = '';\n    for (let u = x0 - 48; u <= x1 + 48; u += 48) {\n      tex += `<line class=\"belt-rib\" x1=\"${f(u)}\" y1=\"${f(yF)}\" x2=\"${f(u)}\" y2=\"${yN}\"\/><line class=\"belt-rib-hi\" x1=\"${f(u + 2.5)}\" y1=\"${f(yF)}\" x2=\"${f(u + 2.5)}\" y2=\"${yN}\"\/>`;\n    }\n    s += `<g clip-path=\"url(#${CFG.prefix}beltClip)\"><g transform=\"${topM(0)}\"><g id=\"${CFG.prefix}slats\">${tex}<\/g><\/g><\/g>`;\n    $('line').innerHTML = s;\n\n    const clip = el('clipPath', { id: CFG.prefix + 'beltClip' });\n    clip.innerHTML = poly('', [x0, yF, 0], [x1, yF, 0], [x1, yN, 0], [x0, yN, 0]);\n    $('defs').append(clip);\n\n    const [bx, by, bw, bh] = CONV_IMG.pecBox, b0 = imgS(bx, by), led = imgS(...CONV_IMG.pecLed);\n    $('front').innerHTML =\n      `<image href=\"${CONV_IMG.pecSrc}\" x=\"${f(b0[0])}\" y=\"${f(b0[1])}\" width=\"${f(bw * CONV_K)}\" height=\"${f(bh * CONV_K)}\" preserveAspectRatio=\"none\"\/>` +\n      `<ellipse id=\"${CFG.prefix}pecLed\" class=\"led-ov pec\" cx=\"${f(led[0])}\" cy=\"${f(led[1])}\" rx=\"2.2\" ry=\"1.8\"\/>` +\n      `<g transform=\"${frontM(18, 0)}\"><g transform=\"translate(${ENC_X} ${-ENC_R})\"><circle class=\"enc-wheel\" r=\"${ENC_R}\"\/>` +\n      `<g id=\"${CFG.prefix}encTick\"><path class=\"enc-spoke\" d=\"M0 -16V16M-13.9 -8L13.9 8M-13.9 8L13.9 -8\"\/><line class=\"enc-tick\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"-17\"\/><\/g>` +\n      `<circle class=\"enc-hub\" r=\"5\"\/><\/g><\/g>` +\n      `<g transform=\"${frontM(BELT_NEAR + 8, 0)}\"><path class=\"enc-arm\" d=\"M${ENC_X} ${-ENC_R}L${ENC_X + 34} 14\"\/>` +\n      `<circle class=\"enc-body\" cx=\"${ENC_X}\" cy=\"${-ENC_R}\" r=\"9\"\/><circle class=\"enc-hub\" cx=\"${ENC_X}\" cy=\"${-ENC_R}\" r=\"3\"\/><\/g>`;\n\n    const pf = imgS(CONV_IMG.pec, CONV_IMG.pecFoot), ec = P(ENC_X + 17, BELT_NEAR + 8, PROFILE_Z);\n    const ax = 40, ay = SCENE_H - 90, len = 150;\n    const tip = [ax + len * EX[0], ay + 14 + len * EX[1]], nx = -EX[1], ny = EX[0];\n    const back = [tip[0] - 10 * EX[0], tip[1] - 10 * EX[1]];\n    $('labels').innerHTML =\n      `<text class=\"lbl\" x=\"${f(pf[0])}\" y=\"${f(pf[1] + 22)}\" text-anchor=\"middle\">${CFG.t.photocell}<\/text>` +\n      `<text class=\"lbl\" x=\"${f(ec[0])}\" y=\"${f(ec[1] + 34)}\" text-anchor=\"middle\">${CFG.t.encoder}<\/text>` +\n      `<text class=\"lbl\" x=\"${ax}\" y=\"${ay}\">${CFG.t.travel}<\/text>` +\n      `<path class=\"dim\" d=\"M${ax} ${ay + 14}L${f(tip[0])} ${f(tip[1])}M${f(back[0] + 6 * nx)} ${f(back[1] + 6 * ny)}L${f(tip[0])} ${f(tip[1])}L${f(back[0] - 6 * nx)} ${f(back[1] - 6 * ny)}\"\/>` +\n      `<text id=\"${CFG.prefix}speedTxt\" class=\"speed-lbl\" x=\"${ax}\" y=\"${ay + 56}\">250 mm\/s<\/text>`;\n  }\n\n  \/\/ ---------- T\u00eate d'impression (reconstruite \u00e0 chaque changement de taille) ----------\n  function buildHead(h) {\n    const Rd = RENDERS[h.img];\n    const x1 = HEAD_X + h.w \/ 2, y0 = HEAD_Y0, z0 = HEAD_Z0, py = STAND_Y;\n    let s = poly('shadow', [HEAD_X - 45, y0 + 20, FLOOR_Z], [HEAD_X + 75, y0 + 20, FLOOR_Z], [HEAD_X + 75, STAND_Y + 190, FLOOR_Z], [HEAD_X - 45, STAND_Y + 190, FLOOR_Z]);\n    s += box(HEAD_X - 55, HEAD_X + 55, py - 55, py + 55, FLOOR_Z, FLOOR_Z + 6, 'stand');\n    s += box(HEAD_X - 17, HEAD_X + 17, py - 17, py + 17, FLOOR_Z + 6, z0, 'stand');\n    const k = Rd.scale, r = P(x1, y0, z0);\n    const ix = r[0] - Rd.ref[0] * k, iy = r[1] - Rd.ref[1] * k;\n    s += `<image href=\"${Rd.src}\" x=\"${f(ix)}\" y=\"${f(iy)}\" width=\"${f(Rd.w * k)}\" height=\"${f(Rd.h * k)}\" preserveAspectRatio=\"none\"\/>`;\n    for (const [lx, ly] of Rd.leds) s += `<ellipse class=\"led-ov head-led\" cx=\"${f(ix + lx * k)}\" cy=\"${f(iy + ly * k)}\" rx=\"2.2\" ry=\"1.4\"\/>`;\n    $('headAsm').innerHTML = s;\n    shown.print = null;\n  }\n\n  \/\/ ---------- EAN-13 ----------\n  function eanCheck(d12) {\n    let s = 0;\n    for (let i = 0; i < 12; i++) s += (+d12[i]) * (i % 2 === 0 ? 1 : 3);\n    return (10 - (s % 10)) % 10;\n  }\n  function parseEan(raw) {\n    const v = raw.replace(\/\\s+\/g, '');\n    if (!v) return { ok: false, err: CFG.t.eanEmpty };\n    if (!\/^\\d+$\/.test(v)) return { ok: false, err: CFG.t.eanDigits };\n    if (v.length === 12) return { ok: true, code: v + eanCheck(v), computed: true };\n    if (v.length === 13) {\n      const c = eanCheck(v.slice(0, 12));\n      if (c !== +v[12]) return { ok: false, err: CFG.t.eanWrong(c) };\n      return { ok: true, code: v, computed: false };\n    }\n    return { ok: false, err: CFG.t.eanCount(v.length) };\n  }\n  function eanModules(code) {\n    const par = PARITY[+code[0]];\n    let s = '101';\n    for (let i = 1; i <= 6; i++) s += par[i - 1] === 'L' ? L[+code[i]] : G[+code[i]];\n    s += '01010';\n    for (let i = 7; i <= 12; i++) s += R[+code[i]];\n    return s + '101';\n  }\n\n  \/\/ ---------- QR code ----------\n  function makeQr(text) {\n    try {\n      const q = qrcode(0, 'M');\n      q.addData(text, 'Byte');\n      q.make();\n      return q;\n    } catch (e) {\n      return null;\n    }\n  }\n\n  \/\/ ---------- Message : dessin vectoriel en pixels de t\u00eate ----------\n  \/\/ Logo en haut \u00e0 gauche, lignes de texte dessous, code \u00e0 droite sur toute la hauteur.\n  const measure = document.createElement('canvas').getContext('2d');\n  function buildMessage(lines, hPx, code) {\n    const parts = [];\n    const logoH = Math.round(hPx * 0.3);\n    const logoW = Math.round(logoH * CFG.logo.w \/ CFG.logo.h);\n    const textTop = logoH + Math.round(hPx * 0.07);\n    let textW = 0;\n    if (lines.length) {\n      const lineH = (hPx - textTop) \/ lines.length, fontPx = lineH * 0.94;\n      measure.font = `600 ${fontPx}px ${PRINT_FONT}`;\n      const widths = lines.map(l => measure.measureText(l).width);\n      textW = Math.ceil(Math.max(0, ...widths));\n      lines.forEach((l, i) => {\n        const y = textTop + i * lineH + lineH * 0.8;\n        if (!widths[i]) return;\n        parts.push(`<text class=\"pfont\" x=\"0\" y=\"${f(y)}\" font-size=\"${f(fontPx)}\" textLength=\"${f(widths[i])}\" lengthAdjust=\"spacingAndGlyphs\">${esc(l)}<\/text>`);\n      });\n    }\n    parts.push(`<path fill-rule=\"evenodd\" transform=\"scale(${+(logoH \/ CFG.logo.h).toFixed(4)})\" d=\"${LOGO_D}\"\/>`);\n\n    const leftW = Math.max(logoW, textW);\n    const bx = leftW && code ? leftW + Math.round(hPx * 0.06) : leftW;\n    let codeW = 0, module = 0;\n    if (code && code.type === 'ean') {\n      module = Math.max(2, Math.round(1.12 * hPx \/ 95));\n      codeW = (11 + 95) * module;\n      const ean = code.value, ox = bx + 11 * module;\n      const digitPx = Math.max(10, Math.round(hPx * 0.15));\n      const barsH = hPx - digitPx * 1.1, guardH = Math.min(hPx, barsH + digitPx * 0.55);\n      const mods = eanModules(ean);\n      for (let i = 0; i < 95;) {\n        if (mods[i] !== '1') { i++; continue; }\n        let j = i;\n        while (j < 95 && mods[j] === '1') j++;\n        const guard = i < 3 || (i >= 45 && i < 50) || i >= 92;\n        parts.push(`<rect x=\"${ox + i * module}\" y=\"0\" width=\"${(j - i) * module}\" height=\"${f(guard ? guardH : barsH)}\"\/>`);\n        i = j;\n      }\n      const by = hPx - digitPx * 0.12;\n      const put = (ch, x, anchor) => parts.push(`<text class=\"dfont\" x=\"${f(x)}\" y=\"${f(by)}\" font-size=\"${digitPx}\" text-anchor=\"${anchor}\">${ch}<\/text>`);\n      put(ean[0], ox - 2 * module, 'end');\n      for (let k = 0; k < 6; k++) put(ean[1 + k], ox + (3 + 7 * k + 3.5) * module, 'middle');\n      for (let k = 0; k < 6; k++) put(ean[7 + k], ox + (50 + 7 * k + 3.5) * module, 'middle');\n    } else if (code && code.type === 'qr') {\n      const q = code.q, n = q.getModuleCount();\n      const m = module = Math.max(1, Math.floor(hPx \/ n));\n      codeW = (4 + n) * m;\n      const qx = bx + 4 * m, qy = hPx - n * m;\n      let d = '';\n      for (let r = 0; r < n; r++) {\n        for (let c = 0; c < n;) {\n          if (!q.isDark(r, c)) { c++; continue; }\n          let e = c;\n          while (e < n && q.isDark(r, e)) e++;\n          d += `M${qx + c * m} ${qy + r * m}h${(e - c) * m}v${m}h${-(e - c) * m}z`;\n          c = e;\n        }\n      }\n      parts.push(`<path d=\"${d}\"\/>`);\n    }\n    const W = Math.max(1, Math.ceil(code ? bx + codeW : leftW));\n    return { wPx: W, hPx, wMM: W \/ DPMM, hMM: hPx \/ DPMM, svg: parts.join(''), module, code };\n  }\n\n  \/\/ ---------- Saisies ----------\n  function setHint(id, text, err) {\n    const hint = $(id + 'Hint'), input = $(id);\n    hint.textContent = text;\n    hint.classList.toggle('is-err', err);\n    if (err) input.setAttribute('aria-invalid', 'true'); else input.removeAttribute('aria-invalid');\n  }\n\n  function readInputs() {\n    const warns = [];\n    let lines = $('msg').value.replace(\/\\r\/g, '').split('\\n').map(s => s.replace(\/\\s+$\/, '')).filter(s => s.length);\n    if (lines.length > 6) { warns.push(CFG.t.tooManyLines(lines.length)); lines = lines.slice(0, 6); }\n    if (lines.some(l => l.length > 40)) { warns.push(CFG.t.lineCut); lines = lines.map(l => l.slice(0, 40)); }\n    $('eanField').hidden = state.code !== 'ean';\n    $('qrField').hidden = state.code !== 'qr';\n    let code = null;\n    if (state.code === 'ean') {\n      const p = parseEan($('ean').value);\n      if (p.ok) {\n        code = { type: 'ean', value: p.code };\n        setHint('ean', p.computed ? CFG.t.eanComputed(p.code[12], p.code) : CFG.t.eanOk(p.code), false);\n      } else {\n        setHint('ean', p.err, true);\n      }\n    } else if (state.code === 'qr') {\n      const t = $('qr').value.trim();\n      const q = t ? makeQr(t) : null;\n      if (q) code = { type: 'qr', q };\n      else setHint('qr', t ? CFG.t.qrTooBig : CFG.t.qrEmpty, true);\n    }\n    return { lines, code, warns };\n  }\n\n  function rebuild() {\n    const inp = readInputs();\n    msg = buildMessage(inp.lines, head.px, inp.code);\n    if (inp.code && inp.code.type === 'qr') {\n      const n = inp.code.q.getModuleCount();\n      setHint('qr', CFG.t.qrInfo((n - 17) \/ 4, n), false);\n      if (msg.module < 2) inp.warns.push(CFG.t.qrDense);\n    }\n    const room = CARTON_W - IMG_MARGIN - 10;\n    if (msg.wMM > room) inp.warns.push(CFG.t.overrun(nf0.format(msg.wMM), room));\n    const w = $('warns');\n    w.replaceChildren(...inp.warns.map(t => { const li = document.createElement('li'); li.textContent = t; return li; }));\n    w.hidden = !inp.warns.length;\n    $('lenTxt').textContent = `${nf0.format(msg.wMM)} mm \u00b7 ${nf0.format(msg.wPx)} px`;\n    $('modTxt').textContent = msg.code ? `${msg.module} px (${nf2.format(msg.module \/ DPMM)} mm)` : '\u2014';\n    for (const c of cartons.values()) if (c.msg && HEAD_X - c.x >= CARTON_W - IMG_MARGIN) attachPrint(c, msg);\n  }\n\n  let pending = 0;\n  const schedule = () => { if (!pending) pending = requestAnimationFrame(() => { pending = 0; rebuild(); }); };\n\n  \/\/ ---------- Cartons ----------\n  function makeCarton(k) {\n    const W = CARTON_W, H = CARTON_H, D = CARTON_D;\n    const g = el('g', {});\n    g.innerHTML =\n      poly('kraft-side', [W, 0, H], [W, -D, H], [W, -D, 0], [W, 0, 0]) +\n      poly('kraft-top', [0, -D, H], [W, -D, H], [W, 0, H], [0, 0, H]) +\n      `<g transform=\"${topM(H)}\"><rect class=\"tape\" x=\"0\" y=\"${-D \/ 2 - 24}\" width=\"${W}\" height=\"48\"\/>` +\n      `<line class=\"kraft-line\" x1=\"0\" y1=\"${-D \/ 2}\" x2=\"${W}\" y2=\"${-D \/ 2}\"\/><\/g>`;\n    const face = el('g', { transform: frontM(0, H) });\n    face.innerHTML =\n      `<rect class=\"kraft\" x=\"0\" y=\"0\" width=\"${W}\" height=\"${H}\"\/>` +\n      `<line class=\"kraft-line\" x1=\"0\" y1=\"18\" x2=\"${W}\" y2=\"18\"\/>` +\n      `<line class=\"kraft-line\" x1=\"0\" y1=\"${H - 18}\" x2=\"${W}\" y2=\"${H - 18}\"\/>` +\n      `<path class=\"glyph\" transform=\"translate(4 1.8) scale(.6)\" d=\"M18 54V34M12 40L18 32L24 40M32 54V34M26 40L32 32L38 40M10 60H40\"\/>` +\n      `<rect class=\"kraft-edge\" x=\"0.75\" y=\"0.75\" width=\"${W - 1.5}\" height=\"${H - 1.5}\"\/>`;\n    const clip = el('clipPath', { id: CFG.prefix + 'clip' + k, clipPathUnits: 'userSpaceOnUse' });\n    const cr = el('rect', { x: 0, y: 0, width: 0, height: H });\n    clip.append(cr); $('defs').append(clip);\n    const pw = el('g', { 'clip-path': `url(#${CFG.prefix}clip${k})` });\n    face.append(pw);\n    g.append(face);\n    $('cartons').append(g);\n    return { g, cr, pw, clip, msg: null };\n  }\n  function attachPrint(c, m) {\n    c.msg = m;\n    const imgL = CARTON_W - IMG_MARGIN - m.wMM, top = CARTON_H - PRINT_Z0 - m.hMM;\n    c.pw.innerHTML = `<g class=\"ink\" transform=\"translate(${f(imgL)} ${f(top)}) scale(${1 \/ DPMM})\">${m.svg}<\/g>`;\n  }\n\n  \/\/ ---------- Image par image ----------\n  let slats = null, encTick = null;\n\n  function render() {\n    const T = state.T;\n    slats.setAttribute('transform', `translate(${f(T % 48)} 0)`);\n    encTick.setAttribute('transform', `rotate(${f(-((T \/ ENC_R) * 180 \/ Math.PI) % 360)})`);\n\n    const xMin = (-20 - OX + CARTON_D * EY[0]) \/ EX[0] - CARTON_W;\n    const xMax = (SCENE_W + 20 - OX) \/ EX[0];\n    const lo = Math.floor((T - SPAWN - xMax) \/ PITCH) + 1;\n    const hi = Math.ceil((T - SPAWN - xMin) \/ PITCH) - 1;\n    for (const [k, c] of cartons) if (k < lo || k > hi) { c.g.remove(); c.clip.remove(); cartons.delete(k); }\n\n    let pec = false, printing = false;\n    for (let k = lo; k <= hi; k++) {\n      let c = cartons.get(k);\n      if (!c) { c = makeCarton(k); cartons.set(k, c); }\n      const x = T - SPAWN - k * PITCH;\n      c.x = x;\n      c.g.setAttribute('transform', `translate(${f(x * EX[0])} ${f(x * EX[1])})`);\n      if (x <= PEC_X && x + CARTON_W >= PEC_X) pec = true;\n      if (!c.msg && x + CARTON_W >= PEC_X) attachPrint(c, msg);\n      if (!c.msg) continue;\n      const imgR = CARTON_W - IMG_MARGIN, imgL = imgR - c.msg.wMM, hl = HEAD_X - x;\n      const revL = Math.max(0, Math.min(Math.max(hl, imgL), imgR));\n      c.cr.setAttribute('x', f(revL));\n      c.cr.setAttribute('width', f(Math.max(0, imgR - revL)));\n      if (hl < imgR && hl > imgL) printing = true;\n    }\n    if (shown.pec !== pec) { shown.pec = pec; $('pecLed').classList.toggle('on', pec); }\n    if (shown.print !== printing) { shown.print = printing; root.querySelectorAll('.head-led').forEach(e => e.classList.toggle('on', printing)); }\n  }\n\n  function updateSpeed() {\n    state.speed = +$('speed').value;\n    const txt = `${nf0.format(state.speed)} mm\/s`;\n    $('speedTxt').textContent = txt;\n    $('speed').setAttribute('aria-valuetext', txt);\n  }\n  const PLAY_ICON = '<svg viewBox=\"0 0 14 14\" aria-hidden=\"true\"><path d=\"M3 1.5v11l9.5-5.5z\"\/><\/svg>';\n  const PAUSE_ICON = '<svg viewBox=\"0 0 14 14\" aria-hidden=\"true\"><path d=\"M2.5 1.5h3.2v11H2.5zM8.3 1.5h3.2v11H8.3z\"\/><\/svg>';\n  function updatePlay() {\n    const b = $('playBtn');\n    b.innerHTML = state.paused ? PLAY_ICON : PAUSE_ICON;\n    b.setAttribute('aria-label', state.paused ? CFG.t.resume : CFG.t.pause);\n  }\n\n  \/\/ Vue de d\u00e9part : un carton \u00e0 moiti\u00e9 imprim\u00e9, le pr\u00e9c\u00e9dent termin\u00e9, le suivant qui arrive.\n  function resetLine() {\n    for (const c of cartons.values()) { c.g.remove(); c.clip.remove(); }\n    cartons.clear();\n    const x1 = HEAD_X - (CARTON_W - IMG_MARGIN - msg.wMM * 0.45);\n    state.T = x1 + SPAWN + PITCH;\n    render();\n  }\n\n  function setHead(i) {\n    head = HEADS[i];\n    DPMM = head.px \/ head.mm;\n    root.querySelectorAll('#' + CFG.prefix + 'heads button').forEach(b => b.setAttribute('aria-pressed', String(+b.dataset.i === i)));\n    buildHead(head);\n    applyZoom();\n    rebuild();\n  }\n\n  \/\/ ---------- Zoom ----------\n  let zoom = 1;\n  const clamp = (v, lo, hi) => Math.min(hi, Math.max(lo, v));\n  function applyZoom() {\n    const a = P(ANCHOR_X, 0, PRINT_Z0 + head.mm \/ 2);\n    const k = 1 - 1 \/ zoom, kMax = 1 - 1 \/ ZOOM_MAX;\n    const px = (a[0] - SCENE_W \/ 2 \/ ZOOM_MAX) \/ kMax;\n    const py = (a[1] - SCENE_H \/ 2 \/ ZOOM_MAX) \/ kMax;\n    const x0 = px * k, y0 = py * k, w = SCENE_W \/ zoom, h = SCENE_H \/ zoom;\n    $('scene').setAttribute('viewBox', `${f(x0)} ${f(y0)} ${f(w)} ${f(h)}`);\n    $('scene').style.setProperty('--z', zoom.toFixed(3));\n    $('zoomTxt').textContent = `${nf1.format(zoom)}\u00d7`;\n    $('zoom').setAttribute('aria-valuetext', `${nf1.format(zoom)} ${CFG.t.times}`);\n  }\n  function setZoom(z) {\n    zoom = clamp(z, 1, ZOOM_MAX);\n    $('zoom').value = String(Math.log(zoom) \/ Math.log(ZOOM_MAX) * 100);\n    applyZoom();\n  }\n\n  function setCode(code) {\n    state.code = code;\n    root.querySelectorAll('#' + CFG.prefix + 'codes button').forEach(b => b.setAttribute('aria-pressed', String(b.dataset.code === code)));\n    rebuild();\n  }\n\n  \/\/ La boucle ne tourne que lorsque l'animation est visible \u00e0 l'\u00e9cran.\n  let last = 0, running = false, visible = true;\n  function loop(now) {\n    if (!visible) { running = false; return; }\n    const dt = Math.min(0.05, Math.max(0, (now - last) \/ 1000));\n    last = now;\n    if (!state.paused) state.T += state.speed * dt;\n    render();\n    requestAnimationFrame(loop);\n  }\n  function startLoop() {\n    if (running) return;\n    running = true;\n    requestAnimationFrame(t => { last = t; requestAnimationFrame(loop); });\n  }\n\n  \/\/ ---------- Branchements ----------\n  $('speed').addEventListener('input', updateSpeed);\n  $('msg').addEventListener('input', schedule);\n  $('ean').addEventListener('input', schedule);\n  $('qr').addEventListener('input', schedule);\n  root.querySelectorAll('#' + CFG.prefix + 'heads button').forEach(b => b.addEventListener('click', () => setHead(+b.dataset.i)));\n  root.querySelectorAll('#' + CFG.prefix + 'codes button').forEach(b => b.addEventListener('click', () => setCode(b.dataset.code)));\n  $('playBtn').addEventListener('click', () => { state.paused = !state.paused; updatePlay(); });\n  $('zoom').addEventListener('input', () => { zoom = Math.pow(ZOOM_MAX, +$('zoom').value \/ 100); applyZoom(); });\n  \/\/ Sur le site, la molette fait d\u00e9filer la page normalement : le zoom \u00e0 la molette demande Ctrl (ou le pincement du pav\u00e9 tactile).\n  $('stage').addEventListener('wheel', e => {\n    if (!e.ctrlKey && !e.metaKey) return;\n    e.preventDefault();\n    const dy = e.deltaY * (e.deltaMode === 1 ? 16 : e.deltaMode === 2 ? 400 : 1);\n    const next = clamp(zoom * Math.exp(-dy * 0.002), 1, ZOOM_MAX);\n    if (next !== zoom) setZoom(next);\n  }, { passive: false });\n\n  const settings = $('settings');\n  try { settings.open = localStorage.getItem(CFG.storageKey) === '1'; } catch (e) {}\n  settings.addEventListener('toggle', () => { try { localStorage.setItem(CFG.storageKey, settings.open ? '1' : '0'); } catch (e) {} });\n\n  buildLine();\n  slats = $('slats');\n  encTick = $('encTick');\n\n  function start() {\n    updatePlay();\n    updateSpeed();\n    setHead(2);\n    resetLine();\n    if ('IntersectionObserver' in window) {\n      new IntersectionObserver(entries => {\n        visible = entries[0].isIntersecting;\n        if (visible) startLoop();\n      }, { rootMargin: '100px' }).observe(root);\n    }\n    startLoop();\n  }\n  const fontsReady = document.fonts ? Promise.all([\n    document.fonts.load(`600 40px ${PRINT_FONT}`),\n    document.fonts.load(`500 20px ${DIGIT_FONT}`)\n  ]) : Promise.resolve();\n  Promise.race([fontsReady, new Promise(r => setTimeout(r, 1500))]).catch(() => {}).then(start);\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\n<\/div>\n\n<\/div>\n<div class=\"elementor-element elementor-element-70637c11 e-con e-atomic-element e-flexbox-base e-default-div e-70637c11-0ac37a6 \" data-id=\"70637c11\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"70637c11\">\n    <div class=\"elementor-element elementor-element-711e201b e-con e-atomic-element e-flexbox-base e-default-div e-711e201b-c1e3c99 \" data-id=\"711e201b\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"711e201b\">\n    \t\t<div class=\"elementor-element elementor-element-5ce47f7c elementor-widget elementor-widget-heading\" data-id=\"5ce47f7c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Let\u2019s test your substrate<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4e08e5cb elementor-widget elementor-widget-text-editor\" data-id=\"4e08e5cb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">The choice of printhead depends on the material, ink, speed, print distance and production environment.<\/span><\/p>\n<p>\u00a0<\/p>\n<p><span style=\"font-weight: 400;\">Send us a sample or the characteristics of your product so we can assess the most suitable solution.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-988f738 e-grid e-con-boxed e-con e-parent\" data-id=\"988f738\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3eb2e337 elementor-widget elementor-widget-html\" data-id=\"3eb2e337\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<a class=\"ale-gray-button\" href=\"tel:+33437900199\">\n  <span class=\"ale-gray-button__label\">+33 437 900 199<\/span>\n  <span class=\"ale-gray-button__icon\" aria-hidden=\"true\">\n    <i><\/i><i><\/i><i><\/i><i><\/i><i><\/i><i><\/i><i><\/i><i><\/i><i><\/i>\n    <svg viewBox=\"0 0 24 24\">\n      <path d=\"M7.2 3.5l2.1-.5 2.1 5-1.8 1.2c1 2.1 2.7 3.8 4.8 4.8l1.2-1.8 5 2.1-.5 2.1c-.4 1.8-2 3.1-3.9 3.1C9.8 19.5 4.5 14.2 4.5 7.4c0-1.9 1-3.5 2.7-3.9z\"><\/path>\n    <\/svg>\n  <\/span>\n<\/a>\n\n<style>\n.ale-gray-button,\n.ale-gray-button:visited{\n  --ale-gray:#58656A;\n  --ale-red:#C5003C;\n  min-height:54px;\n  display:inline-flex;\n  align-items:stretch;\n  overflow:hidden;\n  padding:0!important;\n  border:0;\n  border-radius:12px;\n  background:var(--ale-gray)!important;\n  color:#fff!important;\n  text-decoration:none!important;\n  font-family:\"Sora\",Arial,sans-serif;\n  box-shadow:0 9px 22px rgba(88,101,106,.20);\n  transition:background .25s ease,transform .25s ease,box-shadow .25s ease;\n}\n\n.ale-gray-button__label{\n  display:flex;\n  align-items:center;\n  padding:0 18px;\n  font-size:14px;\n  line-height:1.2;\n  font-weight:650;\n  white-space:nowrap;\n}\n\n.ale-gray-button__icon{\n  position:relative;\n  width:54px;\n  min-width:54px;\n  border-left:1px solid rgba(255,255,255,.22);\n  background:rgba(255,255,255,.08);\n}\n\n.ale-gray-button__icon i{\n  position:absolute;\n  width:5px;\n  height:5px;\n  border-radius:1px;\n  background:#fff;\n  transform:translate(-50%,-50%);\n  transition:opacity .2s ease,transform .25s ease;\n}\n\n.ale-gray-button__icon i:nth-child(1){left:calc(50% - 9px);top:calc(50% - 9px)}\n.ale-gray-button__icon i:nth-child(2){left:50%;top:calc(50% - 9px)}\n.ale-gray-button__icon i:nth-child(3){left:calc(50% + 9px);top:calc(50% - 9px)}\n.ale-gray-button__icon i:nth-child(4){left:calc(50% - 9px);top:50%}\n.ale-gray-button__icon i:nth-child(5){left:50%;top:50%}\n.ale-gray-button__icon i:nth-child(6){left:calc(50% + 9px);top:50%}\n.ale-gray-button__icon i:nth-child(7){left:calc(50% - 9px);top:calc(50% + 9px)}\n.ale-gray-button__icon i:nth-child(8){left:50%;top:calc(50% + 9px)}\n.ale-gray-button__icon i:nth-child(9){left:calc(50% + 9px);top:calc(50% + 9px)}\n\n.ale-gray-button__icon svg{\n  position:absolute;\n  left:50%;\n  top:50%;\n  width:23px;\n  height:23px;\n  opacity:0;\n  fill:none;\n  stroke:#fff;\n  stroke-width:1.8;\n  stroke-linecap:round;\n  stroke-linejoin:round;\n  transform:translate(-58%,-50%) translateX(-6px);\n  transition:opacity .22s ease,transform .3s cubic-bezier(.22,.61,.36,1);\n}\n\n.ale-gray-button:hover{\n  background:var(--ale-red)!important;\n  color:#fff!important;\n  transform:translateY(-2px);\n  box-shadow:0 13px 28px rgba(197,0,60,.20);\n}\n\n.ale-gray-button:hover .ale-gray-button__icon i{\n  opacity:0;\n  transform:translate(-50%,-50%) scale(.25);\n}\n\n.ale-gray-button:hover .ale-gray-button__icon svg{\n  opacity:1;\n  transform:translate(-50%,-50%);\n}\n\n@media(max-width:600px){\n  .ale-gray-button{width:100%;justify-content:space-between}\n}\n\n@media(prefers-reduced-motion:reduce){\n  .ale-gray-button,\n  .ale-gray-button__icon i,\n  .ale-gray-button__icon svg{transition:none}\n}\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2eb9e148 elementor-widget elementor-widget-html\" data-id=\"2eb9e148\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<a class=\"ale-gray-button\" href=\"mailto:contact@ale.fr\">\n  <span class=\"ale-gray-button__label\">contact@ale.fr<\/span>\n  <span class=\"ale-gray-button__icon\" aria-hidden=\"true\">\n    <i><\/i><i><\/i><i><\/i><i><\/i><i><\/i><i><\/i><i><\/i><i><\/i><i><\/i>\n    <svg viewBox=\"0 0 24 24\">\n      <rect x=\"3.5\" y=\"5\" width=\"17\" height=\"14\" rx=\"2\"><\/rect>\n      <path d=\"M4.5 7l7.5 6 7.5-6\"><\/path>\n    <\/svg>\n  <\/span>\n<\/a>\n\n<style>\n.ale-gray-button,\n.ale-gray-button:visited{\n  --ale-gray:#58656A;\n  --ale-red:#C5003C;\n  min-height:54px;\n  display:inline-flex;\n  align-items:stretch;\n  overflow:hidden;\n  padding:0!important;\n  border:0;\n  border-radius:12px;\n  background:var(--ale-gray)!important;\n  color:#fff!important;\n  text-decoration:none!important;\n  font-family:\"Sora\",Arial,sans-serif;\n  box-shadow:0 9px 22px rgba(88,101,106,.20);\n  transition:background .25s ease,transform .25s ease,box-shadow .25s ease;\n}\n\n.ale-gray-button__label{\n  display:flex;\n  align-items:center;\n  padding:0 18px;\n  font-size:14px;\n  line-height:1.2;\n  font-weight:650;\n  white-space:nowrap;\n}\n\n.ale-gray-button__icon{\n  position:relative;\n  width:54px;\n  min-width:54px;\n  border-left:1px solid rgba(255,255,255,.22);\n  background:rgba(255,255,255,.08);\n}\n\n.ale-gray-button__icon i{\n  position:absolute;\n  width:5px;\n  height:5px;\n  border-radius:1px;\n  background:#fff;\n  transform:translate(-50%,-50%);\n  transition:opacity .2s ease,transform .25s ease;\n}\n\n.ale-gray-button__icon i:nth-child(1){left:calc(50% - 9px);top:calc(50% - 9px)}\n.ale-gray-button__icon i:nth-child(2){left:50%;top:calc(50% - 9px)}\n.ale-gray-button__icon i:nth-child(3){left:calc(50% + 9px);top:calc(50% - 9px)}\n.ale-gray-button__icon i:nth-child(4){left:calc(50% - 9px);top:50%}\n.ale-gray-button__icon i:nth-child(5){left:50%;top:50%}\n.ale-gray-button__icon i:nth-child(6){left:calc(50% + 9px);top:50%}\n.ale-gray-button__icon i:nth-child(7){left:calc(50% - 9px);top:calc(50% + 9px)}\n.ale-gray-button__icon i:nth-child(8){left:50%;top:calc(50% + 9px)}\n.ale-gray-button__icon i:nth-child(9){left:calc(50% + 9px);top:calc(50% + 9px)}\n\n.ale-gray-button__icon svg{\n  position:absolute;\n  left:50%;\n  top:50%;\n  width:23px;\n  height:23px;\n  opacity:0;\n  fill:none;\n  stroke:#fff;\n  stroke-width:1.8;\n  stroke-linecap:round;\n  stroke-linejoin:round;\n  transform:translate(-58%,-50%) translateX(-6px);\n  transition:opacity .22s ease,transform .3s cubic-bezier(.22,.61,.36,1);\n}\n\n.ale-gray-button:hover{\n  background:var(--ale-red)!important;\n  color:#fff!important;\n  transform:translateY(-2px);\n  box-shadow:0 13px 28px rgba(197,0,60,.20);\n}\n\n.ale-gray-button:hover .ale-gray-button__icon i{\n  opacity:0;\n  transform:translate(-50%,-50%) scale(.25);\n}\n\n.ale-gray-button:hover .ale-gray-button__icon svg{\n  opacity:1;\n  transform:translate(-50%,-50%);\n}\n\n@media(max-width:600px){\n  .ale-gray-button{width:100%;justify-content:space-between}\n}\n\n@media(prefers-reduced-motion:reduce){\n  .ale-gray-button,\n  .ale-gray-button__icon i,\n  .ale-gray-button__icon svg{transition:none}\n}\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-47ce6bd4 e-con e-atomic-element e-flexbox-base e-default-div e-47ce6bd4-23ed6d1 \" data-id=\"47ce6bd4\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"47ce6bd4\">\n    \t\t<div class=\"elementor-element elementor-element-1d941884 elementor-widget elementor-widget-shortcode\" data-id=\"1d941884\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><div class='fluentform ff-default fluentform_wrapper_3 ffs_default_wrap'><form data-form_id=\"3\" id=\"fluentform_3\" class=\"frm-fluent-form fluent_form_3 ff-el-form-top ff_form_instance_3_1 ff-form-loading ffs_default\" data-form_instance=\"ff_form_instance_3_1\" method=\"POST\" ><fieldset  style=\"border: none!important;margin: 0!important;padding: 0!important;background-color: transparent!important;box-shadow: none!important;outline: none!important; min-inline-size: 100%;\">\n                    <legend class=\"ff_screen_reader_title\" style=\"display: block; margin: 0!important;padding: 0!important;height: 0!important;text-indent: -999999px;width: 0!important;overflow:hidden;\">Contact Form - EN<\/legend><input type='hidden' name='__fluent_form_embded_post_id' value='695' \/><input type=\"hidden\" id=\"_fluentform_3_fluentformnonce\" name=\"_fluentform_3_fluentformnonce\" value=\"4acd229743\" \/><input type=\"hidden\" name=\"_wp_http_referer\" value=\"\/en\/wp-json\/wp\/v2\/pages\/695\" \/><div data-type=\"name-element\" data-name=\"names\" class=\" ff-field_container ff-name-field-wrapper\" ><div class='ff-t-container'><div class='ff-t-cell '><div class='ff-el-group'><div class=\"ff-el-input--label ff-el-is-required asterisk-right\"><label for='ff_3_names_first_name_' id='label_ff_3_names_first_name_'>Your Company Name<\/label><\/div><div class='ff-el-input--content'><input type=\"text\" name=\"names[first_name]\" id=\"ff_3_names_first_name_\" class=\"ff-el-form-control\" aria-invalid=\"false\" aria-required=true><\/div><\/div><\/div><div class='ff-t-cell '><div class='ff-el-group'><div class=\"ff-el-input--label ff-el-is-required asterisk-right\"><label for='ff_3_names_last_name_' id='label_ff_3_names_last_name_'>Your Name<\/label><\/div><div class='ff-el-input--content'><input type=\"text\" name=\"names[last_name]\" id=\"ff_3_names_last_name_\" class=\"ff-el-form-control\" aria-invalid=\"false\" aria-required=true><\/div><\/div><\/div><\/div><\/div><div class='ff-el-group'><div class=\"ff-el-input--label ff-el-is-required asterisk-right\"><label for='ff_3_email' id='label_ff_3_email'>Email address<\/label><\/div><div class='ff-el-input--content'><input type=\"email\" name=\"email\" id=\"ff_3_email\" class=\"ff-el-form-control\" data-name=\"email\"  aria-invalid=\"false\" aria-required=true><\/div><\/div><div class='ff-el-group'><div class=\"ff-el-input--label ff-el-is-required asterisk-right\"><label for='ff_3_subject' id='label_ff_3_subject'>Phone number<\/label><\/div><div class='ff-el-input--content'><input type=\"text\" name=\"subject\" class=\"ff-el-form-control\" data-name=\"subject\" id=\"ff_3_subject\"  aria-invalid=\"false\" aria-required=true><\/div><\/div><div class='ff-el-group'><div class=\"ff-el-input--label ff-el-is-required asterisk-right\"><label for='ff_3_message' id='label_ff_3_message'>Your needs<\/label><\/div><div class='ff-el-input--content'><textarea aria-required=\"true\" aria-labelledby=\"label_ff_3_message\" name=\"message\" id=\"ff_3_message\" class=\"ff-el-form-control\" rows=\"4\" cols=\"2\" data-name=\"message\" ><\/textarea><\/div><\/div><div class='ff-form-inline-style' hidden><style>form.fluent_form_3 .wpf_has_custom_css.ff-btn-submit { background-color:rgba(88, 101, 106, 1);border-color:rgba(88, 101, 106, 1);color:#ffffff; }form.fluent_form_3 .wpf_has_custom_css.ff-btn-submit:hover { background-color:rgba(197, 0, 60, 1);border-color:rgba(197, 0, 60, 1);color:rgba(255, 255, 255, 1); } <\/style><\/div><div class='ff-el-group ff-text-left ff_submit_btn_wrapper'><button type=\"submit\" class=\"ff-btn ff-btn-submit ff-btn-md ff_btn_style wpf_has_custom_css\"  aria-label=\"SUBMIT MY REQUEST\">SUBMIT MY REQUEST<\/button><\/div><\/fieldset><\/form><div id='fluentform_3_errors' class='ff-errors-in-stack ff_form_instance_3_1 ff-form-loading_errors ff_form_instance_3_1_errors'><\/div><\/div>            <script type=\"text\/javascript\">\n                window.fluent_form_ff_form_instance_3_1 = {\"id\":\"3\",\"ajaxUrl\":\"https:\\\/\\\/ale.fr\\\/wp-admin\\\/admin-ajax.php\",\"settings\":{\"layout\":{\"labelPlacement\":\"top\",\"helpMessagePlacement\":\"with_label\",\"errorMessagePlacement\":\"inline\",\"cssClassName\":\"\",\"asteriskPlacement\":\"asterisk-right\"},\"restrictions\":{\"denyEmptySubmission\":{\"enabled\":false}}},\"form_instance\":\"ff_form_instance_3_1\",\"form_id_selector\":\"fluentform_3\",\"rules\":{\"names[first_name]\":{\"required\":{\"value\":true,\"message\":\"This information is required.\",\"global\":false,\"global_message\":\"Ce champ est obligatoire\"}},\"names[middle_name]\":{\"required\":{\"value\":false,\"message\":\"This field is required\",\"global\":false,\"global_message\":\"Ce champ est obligatoire\"}},\"names[last_name]\":{\"required\":{\"value\":true,\"message\":\"This information is required.\",\"global\":false,\"global_message\":\"Ce champ est obligatoire\"}},\"email\":{\"required\":{\"value\":true,\"message\":\"This information is required.\",\"global\":false,\"global_message\":\"Ce champ est obligatoire\"},\"email\":{\"value\":true,\"message\":\"Please enter a valid email address.\",\"global\":false,\"global_message\":\"Ce champ doit contenir un e-mail valide\"}},\"subject\":{\"required\":{\"value\":true,\"message\":\"This information is required.\",\"global\":false,\"global_message\":\"Ce champ est obligatoire\"}},\"message\":{\"required\":{\"value\":true,\"message\":\"This information is required.\",\"global\":false,\"global_message\":\"Ce champ est obligatoire\"}}},\"debounce_time\":300,\"file_upload_settings\":[]};\n                            <\/script>\n            <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\n<\/div>\n\n<\/div>\n\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>A printhead for every orientation and substrate ALE develops high-resolution printheads for side and omnidirectional printing, on both porous and non-porous substrates. Identify the right printhead and ink Designed and manufactured in France Technology expertise since 2001 Solutions installed in more than 35 countries Responsive technical support Equipment designed to last Designed and manufactured in [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":683,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-695","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/ale.fr\/en\/wp-json\/wp\/v2\/pages\/695","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ale.fr\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ale.fr\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ale.fr\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ale.fr\/en\/wp-json\/wp\/v2\/comments?post=695"}],"version-history":[{"count":17,"href":"https:\/\/ale.fr\/en\/wp-json\/wp\/v2\/pages\/695\/revisions"}],"predecessor-version":[{"id":1472,"href":"https:\/\/ale.fr\/en\/wp-json\/wp\/v2\/pages\/695\/revisions\/1472"}],"up":[{"embeddable":true,"href":"https:\/\/ale.fr\/en\/wp-json\/wp\/v2\/pages\/683"}],"wp:attachment":[{"href":"https:\/\/ale.fr\/en\/wp-json\/wp\/v2\/media?parent=695"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}