{"product_id":"foneng-px132","title":"FONENG PX132 – Power Bank 20000mAh 65W avec câble USB-C intégré \u0026 écran TFT","description":"\u003cstyle\u003e\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Tajawal:wght@400;500;600;700\u0026display=swap');\n\n\/* =========================================================\n   FONE MARINA · TECH\n   TECH PRODUCTS · 1–8 IMAGES + 1 VIDEO\n========================================================= *\/\n\n.fone-marina,\n.fone-marina *{\n  box-sizing:border-box;\n}\n\n.fone-marina{\n  --fm-black:#111214;\n  --fm-text:#61656d;\n  --fm-muted:#969aa1;\n  --fm-line:#ececef;\n  --fm-soft:#f5f5f7;\n  --fm-orange:#ff6b00;\n\n  \/* صورة المنتج *\/\n  --fm-image-fit:contain;\n  --fm-image-position:center;\n\n  width:100%;\n  margin:0;\n  color:var(--fm-black);\n\n  font-family:\n    -apple-system,\n    BlinkMacSystemFont,\n    \"Segoe UI\",\n    Roboto,\n    Arial,\n    sans-serif;\n}\n\n.fone-marina button,\n.fone-marina summary{\n  -webkit-tap-highlight-color:transparent;\n}\n\n\n.fone-marina .fm-media-config{\n  display:none!important;\n}\n\n\/* =========================================================\n   LANGUAGE\n========================================================= *\/\n\n.fone-marina .fm-lang-radio{\n  position:absolute;\n  opacity:0;\n  pointer-events:none;\n}\n\n.fone-marina .fm-fr,\n.fone-marina .fm-ar{\n  display:none!important;\n}\n\n.fone-marina\n#fm-lang-fr:checked\n~ .fm-shell\n.fm-fr{\n  display:block!important;\n}\n\n.fone-marina\n#fm-lang-ar:checked\n~ .fm-shell\n.fm-ar{\n  display:block!important;\n}\n\n.fone-marina\n#fm-lang-fr:checked\n~ .fm-shell\nspan.fm-fr{\n  display:inline!important;\n}\n\n.fone-marina\n#fm-lang-ar:checked\n~ .fm-shell\nspan.fm-ar{\n  display:inline!important;\n}\n\n.fone-marina .fm-ar,\n.fone-marina .fm-ar *{\n  font-family:\n    \"Tajawal\",\n    Tahoma,\n    Arial,\n    sans-serif!important;\n\n  letter-spacing:0!important;\n}\n\n.fone-marina .fm-ar{\n  direction:rtl;\n  text-align:right;\n}\n\n\n\/* =========================================================\n   SHELL\n========================================================= *\/\n\n.fone-marina .fm-shell{\n  width:100%;\n  margin:0;\n  padding:0;\n}\n\n\n\/* =========================================================\n   TOP BAR\n========================================================= *\/\n\n.fone-marina .fm-top{\n  display:flex;\n  align-items:center;\n  justify-content:space-between;\n\n  gap:16px;\n\n  padding:5px 0 19px;\n}\n\n.fone-marina .fm-top-mark{\n  width:24px;\n  height:2px;\n\n  border-radius:999px;\n\n  background:var(--fm-orange);\n}\n\n.fone-marina .fm-lang-switch{\n  display:inline-flex;\n\n  gap:3px;\n\n  padding:3px;\n\n  border-radius:999px;\n\n  background:#f0f0f2;\n\n  direction:ltr;\n}\n\n.fone-marina .fm-lang-switch label{\n  min-width:43px;\n\n  padding:7px 11px;\n\n  border-radius:999px;\n\n  color:#92969d;\n\n  font-size:10px;\n  font-weight:720;\n\n  line-height:1;\n\n  text-align:center;\n\n  cursor:pointer;\n}\n\n.fone-marina\n#fm-lang-fr:checked\n~ .fm-shell\n.fm-lang-switch\nlabel[for=\"fm-lang-fr\"],\n\n.fone-marina\n#fm-lang-ar:checked\n~ .fm-shell\n.fm-lang-switch\nlabel[for=\"fm-lang-ar\"]{\n  color:#fff;\n  background:#111214;\n}\n\n\n\/* =========================================================\n   INTRO\n========================================================= *\/\n\n.fone-marina .fm-intro{\n  padding:\n    25px 0 34px;\n\n  border-top:\n    1px solid\n    var(--fm-line);\n}\n\n.fone-marina .fm-brand{\n  display:flex;\n  align-items:center;\n\n  gap:8px;\n\n  margin-bottom:11px;\n\n  color:#7d8188;\n\n  font-size:8px;\n  font-weight:760;\n\n  letter-spacing:.15em;\n  text-transform:uppercase;\n}\n\n.fone-marina .fm-brand::before{\n  content:\"\";\n\n  width:5px;\n  height:5px;\n\n  flex:0 0 5px;\n\n  border-radius:50%;\n\n  background:var(--fm-orange);\n}\n\n.fone-marina .fm-title{\n  max-width:760px;\n\n  margin:0;\n\n  color:var(--fm-black);\n\n  font-size:\n    clamp(\n      34px,\n      6vw,\n      58px\n    );\n\n  font-weight:730;\n\n  line-height:.98;\n  letter-spacing:-.045em;\n}\n\n.fone-marina .fm-subtitle{\n  margin-top:10px;\n\n  color:#a0a3a8;\n\n  font-size:8px;\n  font-weight:720;\n\n  line-height:1.5;\n  letter-spacing:.13em;\n\n  text-transform:uppercase;\n}\n\n.fone-marina .fm-description{\n  max-width:720px;\n\n  margin:\n    22px 0 0;\n\n  color:var(--fm-text);\n\n  font-size:12px;\n  line-height:1.82;\n}\n\n.fone-marina .fm-description strong{\n  color:#17181a;\n\n  font-weight:650;\n}\n\n.fone-marina .fm-intro-line{\n  width:34px;\n  height:3px;\n\n  margin-top:20px;\n\n  border-radius:999px;\n\n  background:var(--fm-orange);\n}\n\n\n\/* =========================================================\n   IMAGE GALLERY · 1 TO 8 IMAGES · OPTIONAL\n========================================================= *\/\n\n.fone-marina .fm-image-section{\n  display:none;\n\n  margin:\n    4px 0 24px;\n}\n\n.fone-marina .fm-image-section.is-ready{\n  display:block;\n}\n\n.fone-marina .fm-image-frame{\n  position:relative;\n\n  width:100%;\n  max-width:680px;\n\n  \/*\n     AUTO RATIO\n     يتم تغييره تلقائياً حسب أبعاد الصورة الفعلية.\n     fallback قبل تحميل الصورة = FONE MARINA portrait.\n  *\/\n  aspect-ratio:31 \/ 38;\n\n  margin:0 auto;\n\n  overflow:hidden;\n\n  border-radius:26px;\n\n  background:var(--fm-soft);\n\n  box-shadow:\n    0 14px 38px\n    rgba(17,18,20,.07);\n\n  transition:\n    aspect-ratio .26s ease,\n    height .26s ease;\n}\n\n\/* Orientation classes added automatically by JS *\/\n.fone-marina .fm-image-frame.is-landscape{\n  max-width:760px;\n}\n\n.fone-marina .fm-image-frame.is-square{\n  max-width:660px;\n}\n\n.fone-marina .fm-image-frame.is-portrait{\n  max-width:620px;\n}\n\n.fone-marina .fm-image-track{\n  display:flex;\n\n  width:100%;\n  height:100%;\n\n  overflow-x:auto;\n  overflow-y:hidden;\n\n  scroll-snap-type:x mandatory;\n  scroll-behavior:smooth;\n\n  overscroll-behavior-x:contain;\n\n  -webkit-overflow-scrolling:touch;\n\n  scrollbar-width:none;\n\n  direction:ltr;\n  touch-action:pan-x pan-y;\n}\n\n.fone-marina\n.fm-image-track::-webkit-scrollbar{\n  display:none;\n}\n\n.fone-marina .fm-image-slide{\n  position:relative;\n\n  flex:\n    0 0 100%;\n\n  width:100%;\n  min-width:100%;\n  height:100%;\n\n  margin:0;\n\n  scroll-snap-align:start;\n  scroll-snap-stop:always;\n\n  background:var(--fm-soft);\n}\n\n.fone-marina .fm-image-slide.is-hidden{\n  display:none;\n}\n\n.fone-marina .fm-image{\n  display:block;\n\n  width:100%;\n  height:100%;\n\n  margin:0;\n\n  \/* Never crop product images *\/\n  object-fit:contain;\n  object-position:center;\n\n  background:var(--fm-soft);\n\n  user-select:none;\n  -webkit-user-drag:none;\n}\n\n.fone-marina\n.fm-image[src*=\"COLLEZ-IMAGE-\"]{\n  visibility:hidden;\n}\n\n.fone-marina .fm-image-frame::after{\n  content:\"\";\n\n  position:absolute;\n\n  left:0;\n  right:0;\n  bottom:0;\n\n  z-index:4;\n\n  height:120px;\n\n  background:\n    linear-gradient(\n      to top,\n      rgba(10,10,11,.38) 0%,\n      rgba(10,10,11,.10) 48%,\n      rgba(10,10,11,0) 100%\n    );\n\n  pointer-events:none;\n}\n\n.fone-marina .fm-image-site{\n  position:absolute;\n\n  left:50%;\n  bottom:15px;\n\n  z-index:6;\n\n  transform:\n    translateX(-50%);\n\n  color:\n    rgba(255,255,255,.96);\n\n  white-space:nowrap;\n\n  font-size:7.5px;\n  font-weight:600;\n\n  letter-spacing:.15em;\n\n  text-shadow:\n    0 1px 4px rgba(0,0,0,.42),\n    0 2px 12px rgba(0,0,0,.22);\n\n  pointer-events:none;\n}\n\n\n\/* COUNTER *\/\n\n.fone-marina .fm-image-counter{\n  position:absolute;\n\n  top:13px;\n  right:13px;\n\n  z-index:7;\n\n  display:none;\n  align-items:center;\n\n  min-width:43px;\n\n  padding:\n    5px 8px;\n\n  border:\n    1px solid\n    rgba(255,255,255,.28);\n\n  border-radius:999px;\n\n  background:\n    rgba(18,19,21,.25);\n\n  color:\n    rgba(255,255,255,.94);\n\n  font-size:7.2px;\n  font-weight:700;\n\n  letter-spacing:.07em;\n\n  backdrop-filter:\n    blur(10px);\n\n  -webkit-backdrop-filter:\n    blur(10px);\n}\n\n.fone-marina\n.fm-image-section.has-multiple\n.fm-image-counter{\n  display:flex;\n}\n\n\n\/* SWIPE HINT *\/\n\n.fone-marina .fm-swipe-hint{\n  position:absolute;\n\n  left:13px;\n  top:13px;\n\n  z-index:7;\n\n  display:none;\n  align-items:center;\n\n  gap:6px;\n\n  padding:\n    5px 8px;\n\n  border:\n    1px solid\n    rgba(255,255,255,.26);\n\n  border-radius:999px;\n\n  background:\n    rgba(18,19,21,.21);\n\n  color:\n    rgba(255,255,255,.90);\n\n  font-size:5.8px;\n  font-weight:700;\n\n  letter-spacing:.10em;\n  text-transform:uppercase;\n\n  backdrop-filter:\n    blur(10px);\n\n  -webkit-backdrop-filter:\n    blur(10px);\n\n  pointer-events:none;\n\n  transition:\n    opacity .28s ease,\n    transform .28s ease;\n}\n\n.fone-marina\n.fm-image-section.has-multiple\n.fm-swipe-hint{\n  display:flex;\n}\n\n.fone-marina\n.fm-image-section.is-used\n.fm-swipe-hint{\n  opacity:0;\n  transform:translateY(-4px);\n}\n\n.fone-marina .fm-swipe-arrow{\n  font-size:11px;\n  line-height:1;\n}\n\n\n\/* DOTS BELOW IMAGE *\/\n\n.fone-marina .fm-image-dots{\n  display:none;\n  align-items:center;\n  justify-content:center;\n\n  gap:7px;\n\n  margin-top:13px;\n\n  direction:ltr;\n}\n\n.fone-marina\n.fm-image-section.has-multiple\n.fm-image-dots{\n  display:flex;\n}\n\n.fone-marina .fm-image-dot{\n  appearance:none;\n  -webkit-appearance:none;\n\n  width:28px;\n  height:4px;\n\n  margin:0;\n  padding:0;\n\n  border:0;\n  border-radius:999px;\n\n  background:#dbdcdf;\n\n  cursor:pointer;\n\n  transition:\n    width .25s ease,\n    background .25s ease;\n}\n\n.fone-marina .fm-image-dot.is-active{\n  width:39px;\n\n  background:\n    var(--fm-orange);\n}\n\n\n\/* =========================================================\n   TECH SNAPSHOT\n========================================================= *\/\n\n.fone-marina .fm-tech-snapshot{\n  margin:0 0 28px;\n  padding:18px;\n  border:1px solid var(--fm-line);\n  border-radius:22px;\n  background:#fafafa;\n}\n\n.fone-marina .fm-tech-snapshot-head{\n  display:flex;\n  align-items:center;\n  gap:8px;\n  margin-bottom:14px;\n  color:#858990;\n  font-size:7px;\n  font-weight:760;\n  letter-spacing:.14em;\n  text-transform:uppercase;\n}\n\n.fone-marina .fm-tech-snapshot-head::before{\n  content:\"\";\n  width:18px;\n  height:2px;\n  border-radius:999px;\n  background:var(--fm-orange);\n}\n\n.fone-marina .fm-tech-grid{\n  display:grid;\n  grid-template-columns:repeat(4,minmax(0,1fr));\n  gap:10px;\n}\n\n.fone-marina .fm-tech-card{\n  min-width:0;\n  min-height:112px;\n\n  display:flex;\n  flex-direction:column;\n  align-items:center;\n  justify-content:center;\n\n  padding:16px 10px;\n\n  border-radius:18px;\n  background:#fff;\n  border:1px solid #ededf0;\n\n  text-align:center;\n}\n\n.fone-marina .fm-tech-value{\n  display:flex;\n  align-items:baseline;\n  justify-content:center;\n  gap:3px;\n\n  color:var(--fm-black);\n\n  font-weight:760;\n  line-height:.95;\n  letter-spacing:-.045em;\n\n  white-space:nowrap;\n  word-break:normal;\n  overflow-wrap:normal;\n}\n\n.fone-marina .fm-tech-number{\n  font-size:clamp(23px,3.3vw,32px);\n}\n\n.fone-marina .fm-tech-value-unit{\n  color:#666a70;\n  font-size:10px;\n  font-weight:730;\n  letter-spacing:0;\n  text-transform:none;\n}\n\n.fone-marina .fm-tech-unit{\n  min-height:27px;\n\n  display:flex;\n  align-items:center;\n  justify-content:center;\n\n  margin-top:9px;\n\n  color:#95999f;\n\n  font-size:6.5px;\n  font-weight:780;\n\n  letter-spacing:.12em;\n  line-height:1.45;\n\n  text-align:center;\n  text-transform:uppercase;\n}\n\n\/* =========================================================\n   OPTIONAL COMPATIBILITY\n========================================================= *\/\n\n.fone-marina .fm-compat{\n  display:none;\n  margin:4px 0 30px;\n  padding:21px 22px;\n  border:1px solid var(--fm-line);\n  border-radius:20px;\n  background:#fff;\n}\n\n.fone-marina .fm-compat.is-ready{\n  display:block;\n}\n\n.fone-marina .fm-compat-label{\n  margin-bottom:8px;\n  color:var(--fm-orange);\n  font-size:7px;\n  font-weight:780;\n  letter-spacing:.14em;\n  text-transform:uppercase;\n}\n\n.fone-marina .fm-compat-title{\n  margin:0 0 8px;\n  color:var(--fm-black);\n  font-size:22px;\n  line-height:1.12;\n  letter-spacing:-.025em;\n}\n\n.fone-marina .fm-compat-text{\n  margin:0;\n  color:var(--fm-text);\n  font-size:10.8px;\n  line-height:1.7;\n}\n\n\/* =========================================================\n   EDITORIAL FEATURES · 3 KEY STORIES\n========================================================= *\/\n\n.fone-marina .fm-features{\n  margin:\n    2px 0 30px;\n}\n\n.fone-marina .fm-feature{\n  position:relative;\n\n  display:grid;\n\n  grid-template-columns:\n    minmax(112px,.58fr)\n    minmax(0,1.42fr);\n\n  gap:32px;\n\n  padding:\n    21px 0 23px;\n\n  border-top:\n    1px solid\n    var(--fm-line);\n}\n\n.fone-marina .fm-feature:first-child::before{\n  display:none;\n}\n\n.fone-marina .fm-feature-index{\n  margin-bottom:8px;\n\n  color:#b0b3b8;\n\n  font-size:6.8px;\n  font-weight:760;\n\n  letter-spacing:.14em;\n}\n\n.fone-marina .fm-feature-label{\n  color:var(--fm-orange);\n\n  font-size:6.8px;\n  font-weight:790;\n\n  letter-spacing:.15em;\n  text-transform:uppercase;\n}\n\n.fone-marina .fm-feature-title{\n  max-width:560px;\n\n  margin:0 0 8px;\n\n  color:#111214;\n\n  font-size:\n    clamp(\n      22px,\n      3.2vw,\n      32px\n    );\n\n  font-weight:660;\n\n  line-height:1.08;\n  letter-spacing:-.038em;\n}\n\n.fone-marina .fm-feature-text{\n  max-width:590px;\n\n  margin:0;\n\n  color:#7b7f86;\n\n  font-size:10.8px;\n  line-height:1.72;\n}\n\n.fone-marina .fm-feature-text strong{\n  color:#25272b;\n\n  font-weight:650;\n}\n\n.fone-marina .fm-feature-meta{\n  display:flex;\n  flex-wrap:wrap;\n\n  gap:6px 15px;\n\n  margin-top:11px;\n}\n\n.fone-marina .fm-feature-meta span{\n  position:relative;\n\n  padding-left:11px;\n\n  color:#999ca2;\n\n  font-size:6.6px;\n  font-weight:700;\n\n  letter-spacing:.095em;\n  text-transform:uppercase;\n}\n\n.fone-marina .fm-feature-meta span::before{\n  content:\"\";\n\n  position:absolute;\n\n  left:0;\n  top:50%;\n\n  width:4px;\n  height:4px;\n\n  transform:\n    translateY(-50%);\n\n  border-radius:50%;\n\n  background:\n    var(--fm-orange);\n}\n\n.fone-marina .fm-ar .fm-feature-meta span{\n  padding-left:0;\n  padding-right:11px;\n}\n\n.fone-marina .fm-ar .fm-feature-meta span::before{\n  left:auto;\n  right:0;\n}\n\n\/* =========================================================\n   SINGLE VIDEO · OPTIONAL\n========================================================= *\/\n\n.fone-marina .fm-video-section{\n  display:none;\n\n  margin:\n    30px 0 28px;\n}\n\n.fone-marina .fm-video-section.is-ready{\n  display:block;\n}\n\n.fone-marina .fm-video-heading{\n  display:flex;\n  align-items:center;\n\n  gap:8px;\n\n  max-width:420px;\n\n  margin:\n    0 auto 11px;\n\n  color:#858990;\n\n  font-size:7px;\n  font-weight:750;\n\n  letter-spacing:.15em;\n  text-transform:uppercase;\n}\n\n.fone-marina .fm-video-heading::before{\n  content:\"\";\n\n  width:5px;\n  height:5px;\n\n  flex:0 0 5px;\n\n  border-radius:50%;\n\n  background:var(--fm-orange);\n}\n\n.fone-marina .fm-video-frame{\n  position:relative;\n\n  width:100%;\n  max-width:420px;\n\n  aspect-ratio:\n    9 \/ 16;\n\n  margin:0 auto;\n\n  overflow:hidden;\n\n  border-radius:24px;\n\n  background:#111;\n\n  box-shadow:\n    0 16px 40px\n    rgba(17,18,20,.09);\n}\n\n.fone-marina .fm-video,\n.fone-marina .fm-youtube{\n  display:none;\n\n  width:100%;\n  height:100%;\n\n  margin:0;\n\n  background:#111;\n}\n\n.fone-marina .fm-video.is-active,\n.fone-marina .fm-youtube.is-active{\n  display:block;\n}\n\n.fone-marina .fm-video{\n  object-fit:cover;\n  object-position:center;\n\n  pointer-events:none;\n\n  -webkit-user-select:none;\n  user-select:none;\n}\n\n.fone-marina .fm-youtube{\n  border:0;\n\n  pointer-events:none;\n}\n\n.fone-marina .fm-video::-webkit-media-controls,\n.fone-marina .fm-video::-webkit-media-controls-panel,\n.fone-marina .fm-video::-webkit-media-controls-play-button,\n.fone-marina .fm-video::-webkit-media-controls-start-playback-button{\n  display:none!important;\n  opacity:0!important;\n}\n\n.fone-marina .fm-video-frame::after{\n  content:\"\";\n\n  position:absolute;\n\n  left:0;\n  right:0;\n  bottom:0;\n\n  height:115px;\n\n  z-index:2;\n\n  background:\n    linear-gradient(\n      to top,\n      rgba(10,10,11,.48) 0%,\n      rgba(10,10,11,.14) 48%,\n      rgba(10,10,11,0) 100%\n    );\n\n  pointer-events:none;\n}\n\n.fone-marina .fm-video-site{\n  position:absolute;\n\n  left:50%;\n  bottom:15px;\n\n  z-index:4;\n\n  transform:\n    translateX(-50%);\n\n  color:\n    rgba(255,255,255,.96);\n\n  white-space:nowrap;\n\n  font-size:7.5px;\n  font-weight:600;\n\n  letter-spacing:.15em;\n\n  text-shadow:\n    0 1px 4px rgba(0,0,0,.42),\n    0 2px 12px rgba(0,0,0,.22);\n\n  pointer-events:none;\n}\n\n\n\/* =========================================================\n   SOUND BUTTON\n========================================================= *\/\n\n.fone-marina .fm-sound{\n  position:absolute;\n\n  top:14px;\n  right:14px;\n\n  z-index:6;\n\n  display:flex;\n  align-items:center;\n  justify-content:center;\n\n  width:38px;\n  height:38px;\n\n  padding:0;\n\n  border:\n    1px solid\n    rgba(255,255,255,.30);\n\n  border-radius:50%;\n\n  background:\n    rgba(15,15,16,.46);\n\n  color:#fff;\n\n  cursor:pointer;\n\n  backdrop-filter:\n    blur(10px);\n\n  -webkit-backdrop-filter:\n    blur(10px);\n\n  transition:\n    background .2s ease,\n    transform .2s ease;\n}\n\n.fone-marina .fm-sound:hover{\n  background:\n    rgba(15,15,16,.62);\n}\n\n.fone-marina .fm-sound:active{\n  transform:scale(.94);\n}\n\n.fone-marina .fm-sound svg{\n  display:block;\n\n  width:17px;\n  height:17px;\n\n  fill:none;\n  stroke:currentColor;\n\n  stroke-width:1.8;\n  stroke-linecap:round;\n  stroke-linejoin:round;\n}\n\n.fone-marina .fm-icon-on{\n  display:none;\n}\n\n.fone-marina\n.fm-sound.is-on\n.fm-icon-off{\n  display:none;\n}\n\n.fone-marina\n.fm-sound.is-on\n.fm-icon-on{\n  display:block;\n}\n\n\n\/* =========================================================\n   DETAILS\n========================================================= *\/\n\n.fone-marina .fm-details{\n  margin-top:22px;\n}\n\n.fone-marina .fm-tech{\n  border-top:\n    1px solid\n    #dedfe2;\n\n  border-bottom:\n    1px solid\n    #dedfe2;\n}\n\n.fone-marina .fm-tech summary{\n  position:relative;\n\n  display:flex;\n  align-items:center;\n  justify-content:space-between;\n\n  min-height:62px;\n\n  padding:\n    0 36px 0 0;\n\n  color:#111214;\n\n  cursor:pointer;\n  list-style:none;\n  user-select:none;\n}\n\n.fone-marina\n.fm-tech\nsummary::-webkit-details-marker{\n  display:none;\n}\n\n.fone-marina\n.fm-tech\nsummary::before,\n\n.fone-marina\n.fm-tech\nsummary::after{\n  content:\"\";\n\n  position:absolute;\n\n  right:3px;\n  top:50%;\n\n  width:14px;\n  height:1.3px;\n\n  border-radius:999px;\n\n  background:#151619;\n\n  transform:\n    translateY(-50%);\n\n  transition:\n    transform .22s ease;\n}\n\n.fone-marina\n.fm-tech\nsummary::after{\n  transform:\n    translateY(-50%)\n    rotate(90deg);\n}\n\n.fone-marina\n.fm-tech[open]\nsummary::after{\n  transform:\n    translateY(-50%);\n}\n\n.fone-marina .fm-tech-label{\n  display:flex;\n  align-items:center;\n\n  gap:9px;\n\n  color:#25272b;\n\n  font-size:8.5px;\n  font-weight:780;\n\n  letter-spacing:.12em;\n  text-transform:uppercase;\n}\n\n.fone-marina .fm-tech-label::before{\n  content:\"\";\n\n  width:5px;\n  height:5px;\n\n  flex:0 0 5px;\n\n  border-radius:50%;\n\n  background:\n    var(--fm-orange);\n}\n\n.fone-marina .fm-specs{\n  padding:\n    2px 0 14px;\n}\n\n.fone-marina .fm-spec{\n  display:grid;\n\n  grid-template-columns:\n    42% 58%;\n\n  gap:12px;\n\n  padding:\n    10px 0;\n\n  border-top:\n    1px solid\n    #f1f1f3;\n}\n\n.fone-marina .fm-spec-name{\n  color:#90949b;\n\n  font-size:9.5px;\n  line-height:1.5;\n}\n\n.fone-marina .fm-spec-value{\n  color:#222326;\n\n  font-size:10px;\n  font-weight:650;\n\n  line-height:1.5;\n\n  text-align:right;\n}\n\n\/* =========================================================\n   AR TECH\n========================================================= *\/\n\n.fone-marina\n#fm-lang-ar:checked\n~ .fm-shell\n.fm-tech summary{\n  direction:rtl;\n\n  padding:\n    0 0 0 32px;\n}\n\n.fone-marina\n#fm-lang-ar:checked\n~ .fm-shell\n.fm-tech summary::before,\n\n.fone-marina\n#fm-lang-ar:checked\n~ .fm-shell\n.fm-tech summary::after{\n  right:auto;\n  left:2px;\n}\n\n.fone-marina\n#fm-lang-ar:checked\n~ .fm-shell\n.fm-spec{\n  direction:rtl;\n}\n\n.fone-marina\n#fm-lang-ar:checked\n~ .fm-shell\n.fm-spec-name{\n  text-align:right;\n}\n\n.fone-marina\n#fm-lang-ar:checked\n~ .fm-shell\n.fm-spec-value{\n  text-align:left;\n}\n\n\n\/* =========================================================\n   MOBILE\n========================================================= *\/\n\n@media screen and (max-width:749px){\n\n  .fone-marina .fm-tech-grid{\n    grid-template-columns:repeat(2,minmax(0,1fr));\n    gap:10px;\n  }\n\n  .fone-marina .fm-tech-card{\n    min-height:104px;\n    padding:15px 12px;\n    border-radius:17px;\n  }\n\n  .fone-marina .fm-tech-number{\n    font-size:27px;\n  }\n\n  .fone-marina .fm-tech-value-unit{\n    font-size:9px;\n  }\n\n  .fone-marina .fm-tech-unit{\n    min-height:24px;\n    margin-top:8px;\n    font-size:6.4px;\n    letter-spacing:.11em;\n    line-height:1.4;\n  }\n\n  .fone-marina .fm-top{\n    padding:\n      4px 0 17px;\n  }\n\n  .fone-marina .fm-intro{\n    padding:\n      21px 0 29px;\n  }\n\n  .fone-marina .fm-title{\n    font-size:36px;\n  }\n\n  .fone-marina .fm-description{\n    margin-top:18px;\n\n    font-size:11px;\n    line-height:1.72;\n  }\n\n  .fone-marina .fm-image-section{\n    margin-bottom:22px;\n  }\n\n  .fone-marina .fm-image-frame{\n    width:\n      calc(100% + 28px);\n\n    max-width:none!important;\n\n    \/*\n       الارتفاع يحدده JavaScript حسب أبعاد الصورة الحقيقية.\n       fallback CSS يبقى عبر aspect-ratio.\n    *\/\n\n    margin-right:-14px;\n    margin-left:-14px;\n\n    border-radius:24px;\n  }\n\n  .fone-marina .fm-image-counter{\n    top:11px;\n    right:11px;\n\n    min-width:41px;\n\n    padding:\n      5px 7px;\n\n    font-size:6.9px;\n  }\n\n  .fone-marina .fm-swipe-hint{\n    top:11px;\n    left:11px;\n\n    padding:\n      5px 7px;\n\n    font-size:5.4px;\n  }\n\n  .fone-marina .fm-image-dot{\n    width:25px;\n  }\n\n  .fone-marina .fm-image-dot.is-active{\n    width:35px;\n  }\n\n  .fone-marina .fm-feature{\n    grid-template-columns:1fr;\n\n    gap:7px;\n\n    padding:\n      18px 0 20px;\n  }\n\n  .fone-marina .fm-feature-index{\n    display:inline-block;\n\n    margin:\n      0 9px 0 0;\n  }\n\n  .fone-marina .fm-feature-label{\n    display:inline-block;\n\n    color:var(--fm-orange);\n  }\n\n  .fone-marina .fm-feature-index{\n    color:#b0b3b8;\n  }\n\n  .fone-marina .fm-feature-title{\n    max-width:350px;\n\n    margin-bottom:6px;\n\n    font-size:23px;\n    line-height:1.10;\n  }\n\n  .fone-marina .fm-feature-text{\n    max-width:none;\n\n    font-size:10.1px;\n    line-height:1.68;\n  }\n\n  .fone-marina .fm-feature-meta{\n    margin-top:10px;\n\n    gap:\n      5px 13px;\n  }\n\n  .fone-marina .fm-feature-meta span{\n    font-size:6.7px;\n  }\n\n  .fone-marina .fm-image-site{\n    bottom:13px;\n\n    font-size:7px;\n  }\n\n  .fone-marina .fm-break{\n    grid-template-columns:1fr;\n\n    gap:14px;\n\n    padding:\n      26px 0 29px;\n  }\n\n  .fone-marina .fm-break::before{\n    width:36px;\n  }\n\n  .fone-marina .fm-break-kicker{\n    margin-bottom:9px;\n  }\n\n  .fone-marina .fm-break-title{\n    max-width:330px;\n\n    font-size:29px;\n    line-height:1.06;\n  }\n\n  .fone-marina .fm-break-copy{\n    max-width:none;\n\n    font-size:10.7px;\n    line-height:1.76;\n  }\n\n  .fone-marina .fm-break-note{\n    margin-top:13px;\n\n    font-size:6.7px;\n  }\n\n  .fone-marina .fm-video-section{\n    margin:\n      26px 0 24px;\n  }\n\n  .fone-marina .fm-video-heading{\n    max-width:none;\n\n    margin-bottom:9px;\n\n    font-size:6.8px;\n  }\n\n  .fone-marina .fm-video-frame{\n    width:\n      calc(100% + 28px);\n\n    max-width:none;\n\n    margin-right:-14px;\n    margin-left:-14px;\n\n    border-radius:24px;\n  }\n\n  .fone-marina .fm-video-site{\n    bottom:12px;\n\n    font-size:7px;\n  }\n\n  .fone-marina .fm-sound{\n    top:12px;\n    right:12px;\n\n    width:36px;\n    height:36px;\n  }\n\n  .fone-marina .fm-details{\n    margin-top:14px;\n  }\n\n  .fone-marina .fm-tech summary{\n    min-height:58px;\n  }\n\n  .fone-marina .fm-spec{\n    grid-template-columns:\n      40% 60%;\n\n    gap:8px;\n  }\n\n}\n\n\n\/* =========================================================\n   TABLET\n========================================================= *\/\n\n@media screen and (min-width:750px) and (max-width:1099px){\n\n  .fone-marina .fm-image-frame{\n    width:100%;\n    max-width:680px;\n  }\n\n  .fone-marina .fm-image-frame.is-landscape{\n    max-width:760px;\n  }\n\n  .fone-marina .fm-image-frame.is-square{\n    max-width:660px;\n  }\n\n  .fone-marina .fm-image-frame.is-portrait{\n    max-width:620px;\n  }\n\n}\n\n\n\/* =========================================================\n   REDUCED MOTION\n========================================================= *\/\n\n@media (prefers-reduced-motion:reduce){\n\n  .fone-marina *,\n  .fone-marina *::before,\n  .fone-marina *::after{\n    transition-duration:.01ms!important;\n    animation-duration:.01ms!important;\n  }\n\n}\n\u003c\/style\u003e\n\n\n\u003cdiv class=\"fone-marina\"\u003e\n\n  \u003c!-- =====================================================\n       MEDIA LINKS · اختياري\n       يمكنك وضع الروابط هنا، أو مباشرة داخل src لكل صورة.\n       الكود يستعمل الرابط الصحيح تلقائيا.\n       اترك أي رابط غير مستعمل على COLLEZ-...\n  ====================================================== --\u003e\n\n  \u003cdiv class=\"fm-media-config\"\u003e\n\n    \u003c!-- 01 · IMAGE 1 --\u003e\n    \u003cspan data-fm-key=\"image-1\" data-url=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0761\/3857\/8058\/files\/foneng-px132-fone-img-5.png?v=1792262226\"\u003e\u003c\/span\u003e\n\n    \u003c!-- 02 · IMAGE 2 --\u003e\n    \u003cspan data-fm-key=\"image-2\" data-url=\"COLLEZ-IMAGE-2-ICI\"\u003e\u003c\/span\u003e\n\n    \u003c!-- 03 · IMAGE 3 --\u003e\n    \u003cspan data-fm-key=\"image-3\" data-url=\"COLLEZ-IMAGE-3-ICI\"\u003e\u003c\/span\u003e\n\n    \u003c!-- 04 · IMAGE 4 --\u003e\n    \u003cspan data-fm-key=\"image-4\" data-url=\"COLLEZ-IMAGE-4-ICI\"\u003e\u003c\/span\u003e\n\n    \u003c!-- 05 · IMAGE 5 --\u003e\n    \u003cspan data-fm-key=\"image-5\" data-url=\"COLLEZ-IMAGE-5-ICI\"\u003e\u003c\/span\u003e\n\n    \u003c!-- 06 · IMAGE 6 --\u003e\n    \u003cspan data-fm-key=\"image-6\" data-url=\"COLLEZ-IMAGE-6-ICI\"\u003e\u003c\/span\u003e\n\n    \u003c!-- 07 · IMAGE 7 --\u003e\n    \u003cspan data-fm-key=\"image-7\" data-url=\"COLLEZ-IMAGE-7-ICI\"\u003e\u003c\/span\u003e\n\n    \u003c!-- 08 · IMAGE 8 --\u003e\n    \u003cspan data-fm-key=\"image-8\" data-url=\"COLLEZ-IMAGE-8-ICI\"\u003e\u003c\/span\u003e\n\n    \u003c!-- 09 · VIDEO SHOPIFY \/ MP4 --\u003e\n    \u003cspan data-fm-key=\"video-shopify\" data-url=\"COLLEZ-VIDEO-SHOPIFY-ICI\"\u003e\u003c\/span\u003e\n\n    \u003c!-- 10 · VIDEO YOUTUBE \/ SHORTS --\u003e\n    \u003cspan data-fm-key=\"video-youtube\" data-url=\"https:\/\/youtube.com\/shorts\/13Y3OsWiigw?si=dcJGy3TgtTLgCwB6\"\u003e\u003c\/span\u003e\n\n  \u003c\/div\u003e\n\n\n\n  \u003c!-- =====================================================\n       LANG\n  ====================================================== --\u003e\n\n  \u003cinput class=\"fm-lang-radio\" type=\"radio\" name=\"fm-language\" id=\"fm-lang-fr\" checked\u003e\n\n  \u003cinput class=\"fm-lang-radio\" type=\"radio\" name=\"fm-language\" id=\"fm-lang-ar\"\u003e\n\n\n  \u003cdiv class=\"fm-shell\"\u003e\n\n\n    \u003c!-- =====================================================\n         TOP\n    ====================================================== --\u003e\n\n    \u003cdiv class=\"fm-top\"\u003e\n\n      \u003cdiv class=\"fm-top-mark\" aria-hidden=\"true\"\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"fm-lang-switch\"\u003e\n\n        \u003clabel for=\"fm-lang-fr\"\u003e\n          FR\n        \u003c\/label\u003e\n\n        \u003clabel for=\"fm-lang-ar\"\u003e\n          العربية\n        \u003c\/label\u003e\n\n      \u003c\/div\u003e\n\n    \u003c\/div\u003e\n\n\n    \u003c!-- =====================================================\n         INTRO FR\n    ====================================================== --\u003e\n\n    \u003cdiv class=\"fm-fr\"\u003e\n      \u003csection class=\"fm-intro\"\u003e\n        \u003cdiv class=\"fm-brand\"\u003eFONENG\u003c\/div\u003e\n        \u003ch2 class=\"fm-title\"\u003ePX132\u003c\/h2\u003e\n        \u003cdiv class=\"fm-subtitle\"\u003e20000mAh · PD 65W · Écran couleur TFT\u003c\/div\u003e\n        \u003cp class=\"fm-description\"\u003e\n          Le \u003cstrong\u003eFONENG PX132\u003c\/strong\u003e combine une capacité de\n          \u003cstrong\u003e20000mAh\u003c\/strong\u003e avec une sortie USB-C\n          \u003cstrong\u003ejusqu’à 65W\u003c\/strong\u003e, suffisamment puissante pour de nombreux\n          smartphones, tablettes et ordinateurs portables USB-C compatibles.\n          Son \u003cstrong\u003ecâble USB-C intégré\u003c\/strong\u003e, sa recharge rapide\n          \u003cstrong\u003ejusqu’à 45W\u003c\/strong\u003e et son \u003cstrong\u003eécran couleur TFT\u003c\/strong\u003e\n          en font une solution compacte et pratique pour les déplacements.\n        \u003c\/p\u003e\n        \u003cdiv class=\"fm-intro-line\"\u003e\u003c\/div\u003e\n      \u003c\/section\u003e\n    \u003c\/div\u003e\n\n    \u003c!-- =====================================================\n         INTRO AR\n    ====================================================== --\u003e\n\n    \u003cdiv class=\"fm-ar\"\u003e\n      \u003csection class=\"fm-intro\"\u003e\n        \u003cdiv class=\"fm-brand\"\u003eFONENG\u003c\/div\u003e\n        \u003ch2 class=\"fm-title\"\u003ePX132\u003c\/h2\u003e\n        \u003cdiv class=\"fm-subtitle\"\u003e20000mAh · PD 65W · شاشة TFT ملونة\u003c\/div\u003e\n        \u003cp class=\"fm-description\"\u003e\n          يجمع \u003cstrong\u003eFONENG PX132\u003c\/strong\u003e بين سعة\n          \u003cstrong\u003e20000mAh\u003c\/strong\u003e وقدرة إخراج USB-C تصل إلى\n          \u003cstrong\u003e65W\u003c\/strong\u003e لشحن العديد من الهواتف والأجهزة اللوحية\n          والحواسيب المحمولة USB-C المتوافقة.\n          ويأتي مع \u003cstrong\u003eكابل USB-C مدمج\u003c\/strong\u003e، وإعادة شحن سريعة\n          \u003cstrong\u003eحتى 45W\u003c\/strong\u003e، إضافة إلى \u003cstrong\u003eشاشة TFT ملونة\u003c\/strong\u003e\n          تعرض معلومات الطاقة بشكل واضح.\n        \u003c\/p\u003e\n        \u003cdiv class=\"fm-intro-line\"\u003e\u003c\/div\u003e\n      \u003c\/section\u003e\n    \u003c\/div\u003e\n\n    \u003c!-- =====================================================\n         TECH SNAPSHOT\n    ====================================================== --\u003e\n\n    \u003csection class=\"fm-tech-snapshot\" aria-label=\"Spécifications clés\"\u003e\n\n      \u003cdiv class=\"fm-tech-snapshot-head\"\u003e\n        \u003cspan class=\"fm-fr\"\u003eL’essentiel en un coup d’œil\u003c\/span\u003e\n        \u003cspan class=\"fm-ar\"\u003eأهم المواصفات بسرعة\u003c\/span\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"fm-tech-grid\"\u003e\n\n        \u003cdiv class=\"fm-tech-card\"\u003e\n          \u003cdiv class=\"fm-tech-value\"\u003e\n            \u003cspan class=\"fm-tech-number\"\u003e20000\u003c\/span\u003e\n            \u003cspan class=\"fm-tech-value-unit\"\u003emAh\u003c\/span\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"fm-tech-unit\"\u003e\n            \u003cspan class=\"fm-fr\"\u003eCAPACITÉ\u003c\/span\u003e\n            \u003cspan class=\"fm-ar\"\u003eالسعة\u003c\/span\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"fm-tech-card\"\u003e\n          \u003cdiv class=\"fm-tech-value\"\u003e\n            \u003cspan class=\"fm-tech-number\"\u003e65\u003c\/span\u003e\n            \u003cspan class=\"fm-tech-value-unit\"\u003eW\u003c\/span\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"fm-tech-unit\"\u003e\n            \u003cspan class=\"fm-fr\"\u003eSORTIE MAX.\u003c\/span\u003e\n            \u003cspan class=\"fm-ar\"\u003eأقصى إخراج\u003c\/span\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"fm-tech-card\"\u003e\n          \u003cdiv class=\"fm-tech-value\"\u003e\n            \u003cspan class=\"fm-tech-number\"\u003e45\u003c\/span\u003e\n            \u003cspan class=\"fm-tech-value-unit\"\u003eW\u003c\/span\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"fm-tech-unit\"\u003e\n            \u003cspan class=\"fm-fr\"\u003eRECHARGE RAPIDE\u003c\/span\u003e\n            \u003cspan class=\"fm-ar\"\u003eإعادة شحن سريع\u003c\/span\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"fm-tech-card\"\u003e\n          \u003cdiv class=\"fm-tech-value\"\u003e\n            \u003cspan class=\"fm-tech-number\"\u003eTFT\u003c\/span\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"fm-tech-unit\"\u003e\n            \u003cspan class=\"fm-fr\"\u003eÉCRAN COULEUR\u003c\/span\u003e\n            \u003cspan class=\"fm-ar\"\u003eشاشة ملونة\u003c\/span\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n\n      \u003c\/div\u003e\n\n    \u003c\/section\u003e\n\n\n    \u003c!-- =====================================================\n         IMAGE GALLERY · 1 TO 8 IMAGES\n\n         الروابط موجودة في أعلى الكود داخل fm-media-config.\n         إذا وضعت صورة واحدة فقط: لا تظهر النقاط.\n         إذا وضعت 2 إلى 8 صور: الزبون يسحب يمين \/ يسار.\n    ====================================================== --\u003e\n\n    \u003csection class=\"fm-image-section\" data-fm-image-section\u003e\n\n      \u003cdiv class=\"fm-image-frame\"\u003e\n\n        \u003cdiv class=\"fm-image-track\" data-fm-image-track aria-label=\"Galerie produit\"\u003e\n\n          \u003cfigure class=\"fm-image-slide\" data-fm-slide=\"1\"\u003e\n            \u003cimg class=\"fm-image\" src=\"COLLEZ-IMAGE-1-ICI\" alt=\"FONENG PX132 Power Bank 20000mAh 65W · Image 1\" loading=\"eager\" decoding=\"async\"\u003e\n          \u003c\/figure\u003e\n\n          \u003cfigure class=\"fm-image-slide\" data-fm-slide=\"2\"\u003e\n            \u003cimg class=\"fm-image\" src=\"COLLEZ-IMAGE-2-ICI\" alt=\"FONENG PX132 Power Bank 20000mAh 65W · Image 2\" loading=\"eager\" decoding=\"async\"\u003e\n          \u003c\/figure\u003e\n\n          \u003cfigure class=\"fm-image-slide\" data-fm-slide=\"3\"\u003e\n            \u003cimg class=\"fm-image\" src=\"COLLEZ-IMAGE-3-ICI\" alt=\"FONENG PX132 Power Bank 20000mAh 65W · Image 3\" loading=\"eager\" decoding=\"async\"\u003e\n          \u003c\/figure\u003e\n\n          \u003cfigure class=\"fm-image-slide\" data-fm-slide=\"4\"\u003e\n            \u003cimg class=\"fm-image\" src=\"COLLEZ-IMAGE-4-ICI\" alt=\"FONENG PX132 Power Bank 20000mAh 65W · Image 4\" loading=\"eager\" decoding=\"async\"\u003e\n          \u003c\/figure\u003e\n\n          \u003cfigure class=\"fm-image-slide\" data-fm-slide=\"5\"\u003e\n            \u003cimg class=\"fm-image\" src=\"COLLEZ-IMAGE-5-ICI\" alt=\"FONENG PX132 Power Bank 20000mAh 65W · Image 5\" loading=\"eager\" decoding=\"async\"\u003e\n          \u003c\/figure\u003e\n\n          \u003cfigure class=\"fm-image-slide\" data-fm-slide=\"6\"\u003e\n            \u003cimg class=\"fm-image\" src=\"COLLEZ-IMAGE-6-ICI\" alt=\"FONENG PX132 Power Bank 20000mAh 65W · Image 6\" loading=\"eager\" decoding=\"async\"\u003e\n          \u003c\/figure\u003e\n\n          \u003cfigure class=\"fm-image-slide\" data-fm-slide=\"7\"\u003e\n            \u003cimg class=\"fm-image\" src=\"COLLEZ-IMAGE-7-ICI\" alt=\"FONENG PX132 Power Bank 20000mAh 65W · Image 7\" loading=\"eager\" decoding=\"async\"\u003e\n          \u003c\/figure\u003e\n\n          \u003cfigure class=\"fm-image-slide\" data-fm-slide=\"8\"\u003e\n            \u003cimg class=\"fm-image\" src=\"COLLEZ-IMAGE-8-ICI\" alt=\"FONENG PX132 Power Bank 20000mAh 65W · Image 8\" loading=\"eager\" decoding=\"async\"\u003e\n          \u003c\/figure\u003e\n\n        \u003c\/div\u003e\n\n\n        \u003cdiv class=\"fm-swipe-hint\" aria-hidden=\"true\"\u003e\n\n          \u003cspan class=\"fm-swipe-arrow\"\u003e\n            ↔\n          \u003c\/span\u003e\n\n          \u003cspan class=\"fm-fr\"\u003e\n            Faites glisser\n          \u003c\/span\u003e\n\n          \u003cspan class=\"fm-ar\"\u003e\n            اسحب الصور\n          \u003c\/span\u003e\n\n        \u003c\/div\u003e\n\n\n        \u003cdiv class=\"fm-image-counter\" data-fm-image-counter\u003e\n          01 \/ 01\n        \u003c\/div\u003e\n\n\n        \u003cdiv class=\"fm-image-site\"\u003e\n          www.fone.ma\n        \u003c\/div\u003e\n\n\n      \u003c\/div\u003e\n\n\n      \u003cdiv class=\"fm-image-dots\" data-fm-image-dots aria-label=\"Navigation images\"\u003e\u003c\/div\u003e\n\n\n    \u003c\/section\u003e\n\n\n    \u003c!-- =====================================================\n         EDITORIAL FEATURES · FR\n    ====================================================== --\u003e\n\n    \u003cdiv class=\"fm-fr\"\u003e\n      \u003csection class=\"fm-features\"\u003e\n\n        \u003carticle class=\"fm-feature\"\u003e\n          \u003cdiv\u003e\n            \u003cdiv class=\"fm-feature-index\"\u003e01\u003c\/div\u003e\n            \u003cdiv class=\"fm-feature-label\"\u003ePUISSANCE\u003c\/div\u003e\n          \u003c\/div\u003e\n          \u003cdiv\u003e\n            \u003ch3 class=\"fm-feature-title\"\u003e65W pour aller jusqu’au laptop.\u003c\/h3\u003e\n            \u003cp class=\"fm-feature-text\"\u003e\n              Le port USB-C et le câble USB-C intégré peuvent délivrer\n              \u003cstrong\u003ejusqu’à 65W\u003c\/strong\u003e avec Power Delivery.\n              Le PX132 prend aussi en charge \u003cstrong\u003ePPS\u003c\/strong\u003e pour une gestion\n              plus flexible de la puissance sur les appareils compatibles.\n            \u003c\/p\u003e\n            \u003cdiv class=\"fm-feature-meta\"\u003e\n              \u003cspan\u003ePD 65W\u003c\/span\u003e\n              \u003cspan\u003ePPS\u003c\/span\u003e\n              \u003cspan\u003eUSB-C\u003c\/span\u003e\n            \u003c\/div\u003e\n          \u003c\/div\u003e\n        \u003c\/article\u003e\n\n        \u003carticle class=\"fm-feature\"\u003e\n          \u003cdiv\u003e\n            \u003cdiv class=\"fm-feature-index\"\u003e02\u003c\/div\u003e\n            \u003cdiv class=\"fm-feature-label\"\u003eMOBILITÉ\u003c\/div\u003e\n          \u003c\/div\u003e\n          \u003cdiv\u003e\n            \u003ch3 class=\"fm-feature-title\"\u003eLe câble est déjà avec vous.\u003c\/h3\u003e\n            \u003cp class=\"fm-feature-text\"\u003e\n              Son \u003cstrong\u003ecâble USB-C tressé intégré\u003c\/strong\u003e permet de charger\n              sans ajouter un câble séparé dans le sac. Le PX132 propose\n              \u003cstrong\u003e3 sorties\u003c\/strong\u003e pour alimenter plusieurs appareils,\n              avec un format compact pour une capacité de 20000mAh.\n            \u003c\/p\u003e\n            \u003cdiv class=\"fm-feature-meta\"\u003e\n              \u003cspan\u003eCÂBLE USB-C INTÉGRÉ\u003c\/span\u003e\n              \u003cspan\u003e3 SORTIES\u003c\/span\u003e\n              \u003cspan\u003e20000mAh\u003c\/span\u003e\n            \u003c\/div\u003e\n          \u003c\/div\u003e\n        \u003c\/article\u003e\n\n        \u003carticle class=\"fm-feature\"\u003e\n          \u003cdiv\u003e\n            \u003cdiv class=\"fm-feature-index\"\u003e03\u003c\/div\u003e\n            \u003cdiv class=\"fm-feature-label\"\u003eCONTRÔLE\u003c\/div\u003e\n          \u003c\/div\u003e\n          \u003cdiv\u003e\n            \u003ch3 class=\"fm-feature-title\"\u003eL’énergie, visible en temps réel.\u003c\/h3\u003e\n            \u003cp class=\"fm-feature-text\"\u003e\n              L’\u003cstrong\u003eécran couleur TFT intelligent\u003c\/strong\u003e affiche le niveau\n              de batterie ainsi que les informations de puissance en entrée et en sortie.\n              La finition métallique apporte une présence plus premium tout en gardant\n              le power bank facile à transporter.\n            \u003c\/p\u003e\n            \u003cdiv class=\"fm-feature-meta\"\u003e\n              \u003cspan\u003eTFT COULEUR\u003c\/span\u003e\n              \u003cspan\u003eIN \/ OUT POWER\u003c\/span\u003e\n              \u003cspan\u003e≈345 g\u003c\/span\u003e\n            \u003c\/div\u003e\n          \u003c\/div\u003e\n        \u003c\/article\u003e\n\n      \u003c\/section\u003e\n    \u003c\/div\u003e\n\n    \u003c!-- =====================================================\n         EDITORIAL FEATURES · AR\n    ====================================================== --\u003e\n\n    \u003cdiv class=\"fm-ar\"\u003e\n      \u003csection class=\"fm-features\"\u003e\n\n        \u003carticle class=\"fm-feature\"\u003e\n          \u003cdiv\u003e\n            \u003cdiv class=\"fm-feature-index\"\u003e01\u003c\/div\u003e\n            \u003cdiv class=\"fm-feature-label\"\u003eالقدرة\u003c\/div\u003e\n          \u003c\/div\u003e\n          \u003cdiv\u003e\n            \u003ch3 class=\"fm-feature-title\"\u003e65W حتى للأجهزة المحمولة المتوافقة.\u003c\/h3\u003e\n            \u003cp class=\"fm-feature-text\"\u003e\n              يمكن لمنفذ USB-C والكابل USB-C المدمج توفير قدرة تصل إلى\n              \u003cstrong\u003e65W\u003c\/strong\u003e عبر Power Delivery.\n              كما يدعم PX132 بروتوكول \u003cstrong\u003ePPS\u003c\/strong\u003e لإدارة أكثر مرونة للطاقة\n              مع الأجهزة المتوافقة.\n            \u003c\/p\u003e\n            \u003cdiv class=\"fm-feature-meta\"\u003e\n              \u003cspan\u003ePD 65W\u003c\/span\u003e\n              \u003cspan\u003ePPS\u003c\/span\u003e\n              \u003cspan\u003eUSB-C\u003c\/span\u003e\n            \u003c\/div\u003e\n          \u003c\/div\u003e\n        \u003c\/article\u003e\n\n        \u003carticle class=\"fm-feature\"\u003e\n          \u003cdiv\u003e\n            \u003cdiv class=\"fm-feature-index\"\u003e02\u003c\/div\u003e\n            \u003cdiv class=\"fm-feature-label\"\u003eالتنقل\u003c\/div\u003e\n          \u003c\/div\u003e\n          \u003cdiv\u003e\n            \u003ch3 class=\"fm-feature-title\"\u003eالكابل معك دائمًا.\u003c\/h3\u003e\n            \u003cp class=\"fm-feature-text\"\u003e\n              يأتي مع \u003cstrong\u003eكابل USB-C مجدول ومدمج\u003c\/strong\u003e لتقليل الحاجة\n              إلى حمل كابل إضافي. ويوفر PX132 \u003cstrong\u003e3 مخارج\u003c\/strong\u003e\n              لشحن أكثر من جهاز، مع سعة كبيرة تبلغ 20000mAh في حجم مدمج.\n            \u003c\/p\u003e\n            \u003cdiv class=\"fm-feature-meta\"\u003e\n              \u003cspan\u003eكابل USB-C مدمج\u003c\/span\u003e\n              \u003cspan\u003e3 مخارج\u003c\/span\u003e\n              \u003cspan\u003e20000mAh\u003c\/span\u003e\n            \u003c\/div\u003e\n          \u003c\/div\u003e\n        \u003c\/article\u003e\n\n        \u003carticle class=\"fm-feature\"\u003e\n          \u003cdiv\u003e\n            \u003cdiv class=\"fm-feature-index\"\u003e03\u003c\/div\u003e\n            \u003cdiv class=\"fm-feature-label\"\u003eالمتابعة\u003c\/div\u003e\n          \u003c\/div\u003e\n          \u003cdiv\u003e\n            \u003ch3 class=\"fm-feature-title\"\u003eمعلومات الطاقة أمامك مباشرة.\u003c\/h3\u003e\n            \u003cp class=\"fm-feature-text\"\u003e\n              تعرض \u003cstrong\u003eشاشة TFT الملونة الذكية\u003c\/strong\u003e مستوى البطارية\n              ومعلومات قدرة الإدخال والإخراج، بينما تمنح اللمسة المعدنية\n              الجهاز مظهرًا أكثر فخامة مع الحفاظ على سهولة حمله.\n            \u003c\/p\u003e\n            \u003cdiv class=\"fm-feature-meta\"\u003e\n              \u003cspan\u003eTFT ملونة\u003c\/span\u003e\n              \u003cspan\u003eطاقة الإدخال والإخراج\u003c\/span\u003e\n              \u003cspan\u003e≈345 غ\u003c\/span\u003e\n            \u003c\/div\u003e\n          \u003c\/div\u003e\n        \u003c\/article\u003e\n\n      \u003c\/section\u003e\n    \u003c\/div\u003e\n\n\n    \u003c!-- =====================================================\n         OPTIONAL COMPATIBILITY\n         استبدل COLLEZ... بالنص الحقيقي.\n         إذا بقي placeholder فالقسم يختفي آليًا.\n    ====================================================== --\u003e\n\n    \u003csection class=\"fm-compat\" data-fm-compat\u003e\n      \u003cdiv class=\"fm-compat-label\"\u003e\n        \u003cspan class=\"fm-fr\"\u003eCOMPATIBILITÉ\u003c\/span\u003e\n        \u003cspan class=\"fm-ar\"\u003eالتوافق\u003c\/span\u003e\n      \u003c\/div\u003e\n      \u003ch3 class=\"fm-compat-title\"\u003e\n        \u003cspan class=\"fm-fr\"\u003eCompatible avec vos appareils.\u003c\/span\u003e\n        \u003cspan class=\"fm-ar\"\u003eمتوافق مع أجهزتك.\u003c\/span\u003e\n      \u003c\/h3\u003e\n      \u003cp class=\"fm-compat-text\"\u003e\n        \u003cspan class=\"fm-fr\" data-fm-compat-fr\u003eCompatible avec les smartphones, tablettes et ordinateurs portables USB-C prenant en charge les profils de charge appropriés. La puissance réellement reçue dépend de l’appareil, du protocole et de la connexion utilisée.\u003c\/span\u003e\n        \u003cspan class=\"fm-ar\" data-fm-compat-ar\u003eمتوافق مع الهواتف والأجهزة اللوحية والحواسيب المحمولة USB-C التي تدعم ملفات الشحن المناسبة. القدرة الفعلية التي يستقبلها الجهاز تعتمد على الجهاز والبروتوكول وطريقة الاتصال المستخدمة.\u003c\/span\u003e\n      \u003c\/p\u003e\n    \u003c\/section\u003e\n\n\n    \u003c!-- =====================================================\n         VIDEO · ONE ONLY · SHOPIFY OR YOUTUBE\n\n         يدعم:\n         Shopify \/ MP4\n         YouTube \/ YouTube Shorts\n\n         ضع الرابط في القسم 05 أو 06 أعلى الكود.\n    ====================================================== --\u003e\n\n    \u003csection class=\"fm-video-section\" data-fm-video-section\u003e\n\n      \u003cdiv class=\"fm-video-heading\"\u003e\n\n        \u003cspan class=\"fm-fr\"\u003e\n          Vidéo produit\n        \u003c\/span\u003e\n\n        \u003cspan class=\"fm-ar\"\u003e\n          فيديو المنتج\n        \u003c\/span\u003e\n\n      \u003c\/div\u003e\n\n\n      \u003cdiv class=\"fm-video-frame\"\u003e\n\n\n        \u003c!-- SHOPIFY \/ MP4 --\u003e\n        \u003cvideo class=\"fm-video\" data-fm-video-native autoplay muted loop playsinline preload=\"metadata\"\u003e\n        \u003c\/video\u003e\n\n\n        \u003c!-- YOUTUBE --\u003e\n        \u003ciframe class=\"fm-youtube\" data-fm-youtube title=\"Vidéo produit\" allow=\"autoplay; encrypted-media; picture-in-picture\" allowfullscreen\u003e\n        \u003c\/iframe\u003e\n\n\n        \u003cbutton class=\"fm-sound\" type=\"button\" aria-label=\"Activer le son\" data-fm-sound\u003e\n\n          \u003c!-- SOUND OFF --\u003e\n\n          \u003csvg class=\"fm-icon-off\" viewbox=\"0 0 24 24\" aria-hidden=\"true\"\u003e\n            \u003cpath d=\"M11 5 6.8 8.5H3.5v7h3.3L11 19V5Z\"\u003e\u003c\/path\u003e\n            \u003cpath d=\"m17 9 4 4\"\u003e\u003c\/path\u003e\n            \u003cpath d=\"m21 9-4 4\"\u003e\u003c\/path\u003e\n          \u003c\/svg\u003e\n\n\n          \u003c!-- SOUND ON --\u003e\n\n          \u003csvg class=\"fm-icon-on\" viewbox=\"0 0 24 24\" aria-hidden=\"true\"\u003e\n            \u003cpath d=\"M11 5 6.8 8.5H3.5v7h3.3L11 19V5Z\"\u003e\u003c\/path\u003e\n            \u003cpath d=\"M15 9.5a4 4 0 0 1 0 5\"\u003e\u003c\/path\u003e\n            \u003cpath d=\"M18 7a7 7 0 0 1 0 10\"\u003e\u003c\/path\u003e\n          \u003c\/svg\u003e\n\n        \u003c\/button\u003e\n\n\n        \u003cdiv class=\"fm-video-site\"\u003e\n          www.fone.ma\n        \u003c\/div\u003e\n\n\n      \u003c\/div\u003e\n\n    \u003c\/section\u003e\n\n\n    \u003c!-- =====================================================\n         DÉTAILS TECHNIQUES\n    ====================================================== --\u003e\n\n    \u003cdiv class=\"fm-details\"\u003e\n      \u003cdetails class=\"fm-tech\"\u003e\n        \u003csummary\u003e\n          \u003cspan class=\"fm-tech-label fm-fr\"\u003eDétails techniques\u003c\/span\u003e\n          \u003cspan class=\"fm-tech-label fm-ar\"\u003eالمواصفات التقنية\u003c\/span\u003e\n        \u003c\/summary\u003e\n\n        \u003cdiv class=\"fm-specs\"\u003e\n\n          \u003cdiv class=\"fm-spec\"\u003e\n            \u003cspan class=\"fm-spec-name\"\u003e\n              \u003cspan class=\"fm-fr\"\u003eModèle\u003c\/span\u003e\n              \u003cspan class=\"fm-ar\"\u003eالموديل\u003c\/span\u003e\n            \u003c\/span\u003e\n            \u003cspan class=\"fm-spec-value\"\u003ePX132\u003c\/span\u003e\n          \u003c\/div\u003e\n\n          \u003cdiv class=\"fm-spec\"\u003e\n            \u003cspan class=\"fm-spec-name\"\u003e\n              \u003cspan class=\"fm-fr\"\u003eCapacité\u003c\/span\u003e\n              \u003cspan class=\"fm-ar\"\u003eالسعة\u003c\/span\u003e\n            \u003c\/span\u003e\n            \u003cspan class=\"fm-spec-value\"\u003e20000mAh\u003c\/span\u003e\n          \u003c\/div\u003e\n\n          \u003cdiv class=\"fm-spec\"\u003e\n            \u003cspan class=\"fm-spec-name\"\u003e\n              \u003cspan class=\"fm-fr\"\u003eBatterie\u003c\/span\u003e\n              \u003cspan class=\"fm-ar\"\u003eالبطارية\u003c\/span\u003e\n            \u003c\/span\u003e\n            \u003cspan class=\"fm-spec-value\"\u003ePolymer 706074 · 5000mAh (3.85V) × 4\u003c\/span\u003e\n          \u003c\/div\u003e\n\n          \u003cdiv class=\"fm-spec\"\u003e\n            \u003cspan class=\"fm-spec-name\"\u003e\n              \u003cspan class=\"fm-fr\"\u003eEntrée USB-C \/ câble\u003c\/span\u003e\n              \u003cspan class=\"fm-ar\"\u003eإدخال USB-C \/ الكابل\u003c\/span\u003e\n            \u003c\/span\u003e\n            \u003cspan class=\"fm-spec-value\"\u003e\n              5V⎓3A · 9V⎓3A · 12V⎓3A · 15V⎓3A · 20V⎓2.25A · 45W max.\n            \u003c\/span\u003e\n          \u003c\/div\u003e\n\n          \u003cdiv class=\"fm-spec\"\u003e\n            \u003cspan class=\"fm-spec-name\"\u003e\n              \u003cspan class=\"fm-fr\"\u003eSortie USB-C \/ câble\u003c\/span\u003e\n              \u003cspan class=\"fm-ar\"\u003eخرج USB-C \/ الكابل\u003c\/span\u003e\n            \u003c\/span\u003e\n            \u003cspan class=\"fm-spec-value\"\u003e\n              5V⎓3A · 9V⎓3A · 12V⎓3A · 15V⎓3A · 20V⎓3.25A · 65W max.\n            \u003c\/span\u003e\n          \u003c\/div\u003e\n\n          \u003cdiv class=\"fm-spec\"\u003e\n            \u003cspan class=\"fm-spec-name\"\u003e\n              \u003cspan class=\"fm-fr\"\u003ePPS\u003c\/span\u003e\n              \u003cspan class=\"fm-ar\"\u003ePPS\u003c\/span\u003e\n            \u003c\/span\u003e\n            \u003cspan class=\"fm-spec-value\"\u003e3.3–11V⎓5A · 3.3–20V⎓3.25A\u003c\/span\u003e\n          \u003c\/div\u003e\n\n          \u003cdiv class=\"fm-spec\"\u003e\n            \u003cspan class=\"fm-spec-name\"\u003e\n              \u003cspan class=\"fm-fr\"\u003eAffichage\u003c\/span\u003e\n              \u003cspan class=\"fm-ar\"\u003eالشاشة\u003c\/span\u003e\n            \u003c\/span\u003e\n            \u003cspan class=\"fm-spec-value\"\u003eÉcran couleur TFT intelligent\u003c\/span\u003e\n          \u003c\/div\u003e\n\n          \u003cdiv class=\"fm-spec\"\u003e\n            \u003cspan class=\"fm-spec-name\"\u003e\n              \u003cspan class=\"fm-fr\"\u003eDimensions \/ poids\u003c\/span\u003e\n              \u003cspan class=\"fm-ar\"\u003eالأبعاد \/ الوزن\u003c\/span\u003e\n            \u003c\/span\u003e\n            \u003cspan class=\"fm-spec-value\"\u003e103 × 68 × 33 mm · ≈345 g\u003c\/span\u003e\n          \u003c\/div\u003e\n\n        \u003c\/div\u003e\n      \u003c\/details\u003e\n    \u003c\/div\u003e\n\n  \u003c\/div\u003e\n\n\u003c\/div\u003e\n\n\n\u003cscript\u003e\n(function(){\n\n\n  document\n  .querySelectorAll(\n    '.fone-marina'\n  )\n  .forEach(\n    function(root){\n\n\n      \/* =====================================================\n         MEDIA CONFIG\n      ====================================================== *\/\n\n      const mediaConfig =\n        root.querySelector(\n          '.fm-media-config'\n        );\n\n\n      function mediaValue(name){\n\n        if(!mediaConfig){\n          return '';\n        }\n\n\n        const mediaItem =\n          mediaConfig.querySelector(\n            '[data-fm-key=\"' + name + '\"]'\n          );\n\n\n        if(mediaItem){\n\n          return (\n            mediaItem.getAttribute(\n              'data-url'\n            )\n            ||\n            ''\n          ).trim();\n\n        }\n\n\n        \/* fallback للنسخ القديمة *\/\n\n        return (\n          mediaConfig.getAttribute(\n            'data-' + name\n          )\n          ||\n          ''\n        ).trim();\n\n      }\n\n\n      \/* =====================================================\n         IMAGE GALLERY · 1 TO 8\n      ====================================================== *\/\n\n      const imageSection =\n        root.querySelector(\n          '[data-fm-image-section]'\n        );\n\n      const imageTrack =\n        root.querySelector(\n          '[data-fm-image-track]'\n        );\n\n      const imageFrame =\n        root.querySelector(\n          '.fm-image-frame'\n        );\n\n      const imageCounter =\n        root.querySelector(\n          '[data-fm-image-counter]'\n        );\n\n      const imageDots =\n        root.querySelector(\n          '[data-fm-image-dots]'\n        );\n\n      const allSlides =\n        Array.from(\n          root.querySelectorAll(\n            '.fm-image-slide'\n          )\n        );\n\n\n      const validSlides =\n        [];\n\n\n      \/*\n         MOBILE SAFARI FIX\n         الصور الموجودة في cache يمكن أن تكون complete فوراً.\n         لذلك يجب تعريف activeSlides قبل قراءة naturalWidth.\n      *\/\n      let activeSlides =\n        [];\n\n\n      allSlides.forEach(\n        function(slide,index){\n\n          const img =\n            slide.querySelector(\n              '.fm-image'\n            );\n\n          if(!img){\n\n            slide.classList.add(\n              'is-hidden'\n            );\n\n            return;\n\n          }\n\n\n          \/*\n             ROBUST IMAGE SOURCE\n             1) إذا وضعت الرابط في fm-media-config نستعمله.\n             2) إذا بقي COLLEZ... نستعمل src الموجود مباشرة داخل \u003cimg\u003e.\n             3) إذا الاثنين فارغين\/placeholder نخفي الصورة فقط.\n          *\/\n\n          const configuredValue =\n            mediaValue(\n              'image-' + (index + 1)\n            );\n\n\n          const inlineValue =\n            (\n              img.getAttribute(\n                'src'\n              )\n              ||\n              ''\n            ).trim();\n\n\n          const configuredIsValid =\n            configuredValue\n            \u0026\u0026\n            configuredValue.indexOf(\n              'COLLEZ-IMAGE-'\n            ) === -1;\n\n\n          const inlineIsValid =\n            inlineValue\n            \u0026\u0026\n            inlineValue.indexOf(\n              'COLLEZ-IMAGE-'\n            ) === -1;\n\n\n          const value =\n            configuredIsValid\n            ? configuredValue\n            : (\n                inlineIsValid\n                ? inlineValue\n                : ''\n              );\n\n\n          if(!value){\n\n            slide.classList.add(\n              'is-hidden'\n            );\n\n            return;\n\n          }\n\n\n          img.setAttribute(\n            'src',\n            value\n          );\n\n\n          slide.classList.remove(\n            'is-hidden'\n          );\n\n\n          validSlides.push(\n            slide\n          );\n\n\n          \/*\n             AUTO IMAGE RATIO\n             - 1920×1080 \/ landscape: يظهر كاملاً 16:9 تقريباً\n             - square: إطار مربع تلقائياً\n             - portrait: يأخذ النسبة الحقيقية للصورة\n          *\/\n\n          function storeImageRatio(){\n\n            if(\n              !img.naturalWidth\n              ||\n              !img.naturalHeight\n            ){\n              return;\n            }\n\n            const ratio =\n              img.naturalWidth\n              \/\n              img.naturalHeight;\n\n            slide.dataset.fmImageRatio =\n              String(ratio);\n\n            slide.dataset.fmImageWidth =\n              String(img.naturalWidth);\n\n            slide.dataset.fmImageHeight =\n              String(img.naturalHeight);\n\n            if(\n              activeSlides\n              \u0026\u0026\n              activeSlides.length\n            ){\n              applyImageRatio(\n                currentGalleryIndex()\n              );\n            }\n\n          }\n\n\n          img.addEventListener(\n            'load',\n            storeImageRatio\n          );\n\n\n          if(\n            img.complete\n            \u0026\u0026\n            img.naturalWidth\n          ){\n            storeImageRatio();\n          }\n\n\n          img.addEventListener(\n            'error',\n            function(){\n\n              slide.classList.add(\n                'is-hidden'\n              );\n\n              initGallery();\n\n            }\n          );\n\n        }\n      );\n\n\n      function pad2(value){\n\n        return String(\n          value\n        ).padStart(\n          2,\n          '0'\n        );\n\n      }\n\n\n      function initGallery(){\n\n        if(\n          !imageSection\n          ||\n          !imageTrack\n        ){\n          return;\n        }\n\n\n        activeSlides =\n          allSlides.filter(\n            function(slide){\n\n              return !slide.classList.contains(\n                'is-hidden'\n              );\n\n            }\n          );\n\n\n        const total =\n          activeSlides.length;\n\n\n        if(total === 0){\n\n          imageSection.classList.remove(\n            'is-ready'\n          );\n\n          imageSection.classList.remove(\n            'has-multiple'\n          );\n\n          imageSection.style.display =\n            'none';\n\n          return;\n\n        }\n\n\n        imageSection.style.display =\n          '';\n\n        imageSection.classList.add(\n          'is-ready'\n        );\n\n        imageSection.classList.toggle(\n          'has-multiple',\n          total \u003e 1\n        );\n\n\n        if(imageDots){\n\n          imageDots.innerHTML =\n            '';\n\n\n          if(total \u003e 1){\n\n            activeSlides.forEach(\n              function(slide,index){\n\n                const dot =\n                  document.createElement(\n                    'button'\n                  );\n\n\n                dot.type =\n                  'button';\n\n                dot.className =\n                  'fm-image-dot'\n                  +\n                  (\n                    index === 0\n                    ? ' is-active'\n                    : ''\n                  );\n\n                dot.setAttribute(\n                  'aria-label',\n                  'Image ' + (index + 1)\n                );\n\n\n                dot.addEventListener(\n                  'click',\n                  function(){\n\n                    imageTrack.scrollTo({\n                      left:\n                        activeSlides[index].offsetLeft,\n                      behavior:'smooth'\n                    });\n\n                  }\n                );\n\n\n                imageDots.appendChild(\n                  dot\n                );\n\n              }\n            );\n\n          }\n\n        }\n\n\n        updateGalleryUI(\n          0\n        );\n\n      }\n\n\n      function currentGalleryIndex(){\n\n        if(\n          !imageTrack\n          ||\n          activeSlides.length === 0\n        ){\n          return 0;\n        }\n\n\n        const center =\n          imageTrack.scrollLeft\n          +\n          imageTrack.clientWidth \/ 2;\n\n\n        let closestIndex =\n          0;\n\n        let closestDistance =\n          Infinity;\n\n\n        activeSlides.forEach(\n          function(slide,index){\n\n            const slideCenter =\n              slide.offsetLeft\n              +\n              slide.offsetWidth \/ 2;\n\n\n            const distance =\n              Math.abs(\n                center\n                -\n                slideCenter\n              );\n\n\n            if(\n              distance\n              \u003c\n              closestDistance\n            ){\n\n              closestDistance =\n                distance;\n\n              closestIndex =\n                index;\n\n            }\n\n          }\n        );\n\n\n        return closestIndex;\n\n      }\n\n\n      function applyImageRatio(index){\n\n        if(\n          !imageFrame\n          ||\n          activeSlides.length === 0\n        ){\n          return;\n        }\n\n\n        const safeIndex =\n          Math.max(\n            0,\n            Math.min(\n              activeSlides.length - 1,\n              index\n            )\n          );\n\n\n        const slide =\n          activeSlides[safeIndex];\n\n        const img =\n          slide\n          ? slide.querySelector('.fm-image')\n          : null;\n\n\n        if(!img){\n          return;\n        }\n\n\n        const width =\n          img.naturalWidth\n          ||\n          Number(slide.dataset.fmImageWidth)\n          ||\n          0;\n\n        const height =\n          img.naturalHeight\n          ||\n          Number(slide.dataset.fmImageHeight)\n          ||\n          0;\n\n\n        if(\n          !width\n          ||\n          !height\n        ){\n          return;\n        }\n\n\n        const ratio =\n          width \/ height;\n\n\n        \/* Use the REAL image dimensions: no crop, no guesswork. *\/\n        imageFrame.style.aspectRatio =\n          width + ' \/ ' + height;\n\n\n        \/*\n           iOS \/ Safari fallback:\n           نعطي الإطار ارتفاعاً صريحاً انطلاقاً من عرضه الحالي.\n           هذا يمنع اختفاء الصورة إذا لم يُحسب aspect-ratio\n           بشكل صحيح أثناء أول render.\n        *\/\n        const frameWidth =\n          imageFrame.getBoundingClientRect().width;\n\n\n        if(frameWidth \u003e 0){\n\n          imageFrame.style.height =\n            Math.round(\n              frameWidth\n              *\n              (\n                height \/ width\n              )\n            )\n            +\n            'px';\n\n        }\n\n\n        imageFrame.classList.remove(\n          'is-landscape',\n          'is-square',\n          'is-portrait'\n        );\n\n\n        if(ratio \u003e= 1.18){\n\n          imageFrame.classList.add(\n            'is-landscape'\n          );\n\n        } else if(ratio \u003c= .84){\n\n          imageFrame.classList.add(\n            'is-portrait'\n          );\n\n        } else {\n\n          imageFrame.classList.add(\n            'is-square'\n          );\n\n        }\n\n      }\n\n\n      function updateGalleryUI(index){\n\n        const total =\n          activeSlides.length;\n\n\n        if(\n          total === 0\n        ){\n          return;\n        }\n\n\n        const safeIndex =\n          Math.max(\n            0,\n            Math.min(\n              total - 1,\n              index\n            )\n          );\n\n\n        if(imageCounter){\n\n          imageCounter.textContent =\n            pad2(\n              safeIndex + 1\n            )\n            +\n            ' \/ '\n            +\n            pad2(\n              total\n            );\n\n        }\n\n\n        if(imageDots){\n\n          Array.from(\n            imageDots.querySelectorAll(\n              '.fm-image-dot'\n            )\n          )\n          .forEach(\n            function(dot,dotIndex){\n\n              dot.classList.toggle(\n                'is-active',\n                dotIndex === safeIndex\n              );\n\n            }\n          );\n\n        }\n\n\n        applyImageRatio(\n          safeIndex\n        );\n\n      }\n\n\n      if(imageTrack){\n\n        let galleryTicking =\n          false;\n\n\n        imageTrack.addEventListener(\n          'scroll',\n          function(){\n\n            if(imageSection){\n              imageSection.classList.add(\n                'is-used'\n              );\n            }\n\n            if(galleryTicking){\n              return;\n            }\n\n\n            galleryTicking =\n              true;\n\n\n            requestAnimationFrame(\n              function(){\n\n                updateGalleryUI(\n                  currentGalleryIndex()\n                );\n\n                galleryTicking =\n                  false;\n\n              }\n            );\n\n          },\n          {\n            passive:true\n          }\n        );\n\n      }\n\n\n      initGallery();\n\n\n      \/*\n         RESPONSIVE IMAGE FRAME\n         يعاد حساب الارتفاع عند تغيير عرض الشاشة \/ تدوير الهاتف.\n      *\/\n      let fmResizeTick =\n        false;\n\n\n      window.addEventListener(\n        'resize',\n        function(){\n\n          if(fmResizeTick){\n            return;\n          }\n\n\n          fmResizeTick =\n            true;\n\n\n          requestAnimationFrame(\n            function(){\n\n              if(\n                activeSlides.length\n              ){\n                applyImageRatio(\n                  currentGalleryIndex()\n                );\n              }\n\n\n              fmResizeTick =\n                false;\n\n            }\n          );\n\n        },\n        {\n          passive:true\n        }\n      );\n\n\n      \/* =====================================================\n         OPTIONAL COMPATIBILITY\n      ====================================================== *\/\n\n      const compatSection = root.querySelector('[data-fm-compat]');\n\n      if(compatSection){\n        const compatFr = compatSection.querySelector('[data-fm-compat-fr]');\n        const compatAr = compatSection.querySelector('[data-fm-compat-ar]');\n\n        const frValue = compatFr ? compatFr.textContent.trim() : '';\n        const arValue = compatAr ? compatAr.textContent.trim() : '';\n\n        const frValid = frValue \u0026\u0026 frValue.indexOf('COLLEZ-COMPATIBILITE-') === -1;\n        const arValid = arValue \u0026\u0026 arValue.indexOf('COLLEZ-COMPATIBILITE-') === -1;\n\n        compatSection.classList.toggle('is-ready', Boolean(frValid || arValid));\n      }\n\n\n      \/* =====================================================\n         OPTIONAL VIDEO · SHOPIFY \/ MP4 + YOUTUBE\n         الأولوية: Shopify\/MP4 إذا وُجد، وإلا YouTube\n      ====================================================== *\/\n\n      const videoSection =\n        root.querySelector(\n          '[data-fm-video-section]'\n        );\n\n      const nativeVideo =\n        root.querySelector(\n          '[data-fm-video-native]'\n        );\n\n      const youtubeFrame =\n        root.querySelector(\n          '[data-fm-youtube]'\n        );\n\n      const soundButton =\n        root.querySelector(\n          '[data-fm-sound]'\n        );\n\n\n      if(!videoSection){\n        return;\n      }\n\n\n      const shopifyUrl =\n        mediaValue(\n          'video-shopify'\n        );\n\n      const youtubeUrl =\n        mediaValue(\n          'video-youtube'\n        );\n\n\n      const hasShopify =\n        shopifyUrl\n        \u0026\u0026\n        shopifyUrl.indexOf(\n          'COLLEZ-VIDEO-SHOPIFY-ICI'\n        ) === -1;\n\n\n      const hasYoutube =\n        youtubeUrl\n        \u0026\u0026\n        youtubeUrl.indexOf(\n          'COLLEZ-YOUTUBE-ICI'\n        ) === -1;\n\n\n      function getYoutubeId(url){\n\n        if(!url){\n          return '';\n        }\n\n\n        const value =\n          url.trim();\n\n\n        let match =\n          value.match(\n            \/(?:youtube\\.com\\\/watch\\?v=|youtu\\.be\\\/|youtube\\.com\\\/shorts\\\/|youtube\\.com\\\/embed\\\/)([A-Za-z0-9_-]{6,})\/\n          );\n\n\n        if(match \u0026\u0026 match[1]){\n          return match[1];\n        }\n\n\n        try{\n\n          const parsed =\n            new URL(\n              value\n            );\n\n\n          const v =\n            parsed.searchParams.get(\n              'v'\n            );\n\n\n          if(v){\n            return v;\n          }\n\n        } catch(error){}\n\n\n        return '';\n\n      }\n\n\n      let activeVideoType =\n        '';\n\n\n      function showNativeVideo(){\n\n        if(\n          !nativeVideo\n          ||\n          !hasShopify\n        ){\n          return false;\n        }\n\n\n        nativeVideo.setAttribute(\n          'src',\n          shopifyUrl\n        );\n\n        nativeVideo.classList.add(\n          'is-active'\n        );\n\n\n        if(youtubeFrame){\n\n          youtubeFrame.classList.remove(\n            'is-active'\n          );\n\n          youtubeFrame.removeAttribute(\n            'src'\n          );\n\n        }\n\n\n        nativeVideo.muted =\n          true;\n\n        nativeVideo.defaultMuted =\n          true;\n\n        nativeVideo.playsInline =\n          true;\n\n\n        const promise =\n          nativeVideo.play();\n\n\n        if(\n          promise\n          \u0026\u0026\n          typeof promise.catch ===\n          'function'\n        ){\n          promise.catch(\n            function(){}\n          );\n        }\n\n\n        activeVideoType =\n          'native';\n\n\n        return true;\n\n      }\n\n\n      function showYoutubeVideo(){\n\n        if(\n          !youtubeFrame\n          ||\n          !hasYoutube\n        ){\n          return false;\n        }\n\n\n        const youtubeId =\n          getYoutubeId(\n            youtubeUrl\n          );\n\n\n        if(!youtubeId){\n          return false;\n        }\n\n\n        const embedUrl =\n          'https:\/\/www.youtube.com\/embed\/'\n          +\n          youtubeId\n          +\n          '?autoplay=1'\n          +\n          '\u0026mute=1'\n          +\n          '\u0026loop=1'\n          +\n          '\u0026playlist='\n          +\n          youtubeId\n          +\n          '\u0026playsinline=1'\n          +\n          '\u0026controls=0'\n          +\n          '\u0026rel=0'\n          +\n          '\u0026modestbranding=1'\n          +\n          '\u0026enablejsapi=1';\n\n\n        youtubeFrame.setAttribute(\n          'src',\n          embedUrl\n        );\n\n        youtubeFrame.classList.add(\n          'is-active'\n        );\n\n\n        if(nativeVideo){\n\n          nativeVideo.classList.remove(\n            'is-active'\n          );\n\n          nativeVideo.pause();\n\n          nativeVideo.removeAttribute(\n            'src'\n          );\n\n          nativeVideo.load();\n\n        }\n\n\n        activeVideoType =\n          'youtube';\n\n\n        return true;\n\n      }\n\n\n      let videoReady =\n        false;\n\n\n      if(hasShopify){\n\n        videoReady =\n          showNativeVideo();\n\n      } else if(hasYoutube){\n\n        videoReady =\n          showYoutubeVideo();\n\n      }\n\n\n      if(!videoReady){\n\n        videoSection.classList.remove(\n          'is-ready'\n        );\n\n        videoSection.style.display =\n          'none';\n\n      } else {\n\n        videoSection.style.display =\n          '';\n\n        videoSection.classList.add(\n          'is-ready'\n        );\n\n      }\n\n\n      \/* =====================================================\n         SOUND BUTTON\n      ====================================================== *\/\n\n      let youtubeMuted =\n        true;\n\n\n      function sendYoutubeCommand(command){\n\n        if(\n          !youtubeFrame\n          ||\n          !youtubeFrame.contentWindow\n        ){\n          return;\n        }\n\n\n        youtubeFrame.contentWindow.postMessage(\n          JSON.stringify({\n            event:'command',\n            func:command,\n            args:''\n          }),\n          '*'\n        );\n\n      }\n\n\n      if(soundButton){\n\n        soundButton.addEventListener(\n          'click',\n          function(event){\n\n            event.preventDefault();\n            event.stopPropagation();\n\n\n            let soundOn =\n              false;\n\n\n            if(\n              activeVideoType ===\n              'native'\n              \u0026\u0026\n              nativeVideo\n            ){\n\n              nativeVideo.muted =\n                !nativeVideo.muted;\n\n              soundOn =\n                !nativeVideo.muted;\n\n\n              if(nativeVideo.paused){\n\n                const promise =\n                  nativeVideo.play();\n\n\n                if(\n                  promise\n                  \u0026\u0026\n                  typeof promise.catch ===\n                  'function'\n                ){\n                  promise.catch(\n                    function(){}\n                  );\n                }\n\n              }\n\n            }\n\n\n            if(\n              activeVideoType ===\n              'youtube'\n            ){\n\n              youtubeMuted =\n                !youtubeMuted;\n\n\n              sendYoutubeCommand(\n                youtubeMuted\n                ? 'mute'\n                : 'unMute'\n              );\n\n\n              if(!youtubeMuted){\n\n                sendYoutubeCommand(\n                  'playVideo'\n                );\n\n              }\n\n\n              soundOn =\n                !youtubeMuted;\n\n            }\n\n\n            soundButton.classList.toggle(\n              'is-on',\n              soundOn\n            );\n\n\n            soundButton.setAttribute(\n              'aria-label',\n              soundOn\n              ? 'Couper le son'\n              : 'Activer le son'\n            );\n\n          }\n        );\n\n      }\n\n\n      \/* =====================================================\n         NATIVE VIDEO · PLAY ONLY WHEN VISIBLE\n      ====================================================== *\/\n\n      if(\n        activeVideoType ===\n        'native'\n        \u0026\u0026\n        nativeVideo\n        \u0026\u0026\n        'IntersectionObserver'\n        in window\n      ){\n\n        const observer =\n          new IntersectionObserver(\n            function(entries){\n\n              entries.forEach(\n                function(entry){\n\n                  if(\n                    entry.isIntersecting\n                  ){\n\n                    const promise =\n                      nativeVideo.play();\n\n\n                    if(\n                      promise\n                      \u0026\u0026\n                      typeof promise.catch ===\n                      'function'\n                    ){\n                      promise.catch(\n                        function(){}\n                      );\n                    }\n\n                  } else {\n\n                    nativeVideo.pause();\n\n                  }\n\n                }\n              );\n\n            },\n            {\n              threshold:.22\n            }\n          );\n\n\n        observer.observe(\n          nativeVideo\n        );\n\n      }\n\n\n    }\n  );\n\n\n})();\n\u003c\/script\u003e\n","brand":"fone","offers":[{"title":"Default Title","offer_id":50492613558410,"sku":null,"price":549.0,"currency_code":"MAD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0761\/3857\/8058\/files\/foneng-px132-fone-img-4.png?v=1792261778","url":"https:\/\/fone.ma\/products\/foneng-px132","provider":"My Store","version":"1.0","type":"link"}