{"id":334,"date":"2025-05-13T13:15:34","date_gmt":"2025-05-13T13:15:34","guid":{"rendered":"https:\/\/hedonic.grabuge.dev\/?page_id=334"},"modified":"2025-07-22T05:58:37","modified_gmt":"2025-07-22T05:58:37","slug":"video","status":"publish","type":"page","link":"https:\/\/hedonic.grabuge.dev\/en\/","title":{"rendered":"Video"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"334\" class=\"elementor elementor-334\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e183959 e-con-full e-flex e-con e-parent\" data-id=\"e183959\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-27486e3 elementor-widget elementor-widget-html\" data-id=\"27486e3\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- PARTIE 1 : HTML et CSS (\u00e0 placer dans un widget HTML Elementor) -->\n<!-- Pr\u00e9chargeur -->\n<div class=\"hedonic-preloader\">\n  <div class=\"preloader-content\">\n    <div class=\"logo-progress-container\">\n      <div class=\"logo-container\">\n        <img decoding=\"async\" src=\"https:\/\/hedonic.grabuge.dev\/wp-content\/uploads\/2025\/05\/Hedonic-logo-blanc.svg\" alt=\"Hedonic Logo\" class=\"preloader-logo\">\n      <\/div>\n      <div class=\"progress-bar-container\">\n        <div class=\"progress-bar\"><\/div>\n      <\/div>\n    <\/div>\n    <div class=\"loading-text\">Chargement...<\/div>\n  <\/div>\n<\/div>\n\n<div class=\"porsche-experience\">\n  <!-- \u00c9cran d'introduction -->\n  <div class=\"intro-screen\">\n    <img decoding=\"async\" src=\"https:\/\/hedonic.grabuge.dev\/wp-content\/uploads\/2025\/05\/Hedonic-logo-blanc.svg\" alt=\"Hedonic Logo\" class=\"intro-logo\">\n    <div class=\"scroll-indicator\">\n      <div class=\"scroll-text\">Scroll<\/div>\n      <div class=\"mouse\">\n        <div class=\"wheel\"><\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n  \n  <!-- Conteneur vid\u00e9o -->\n  <div class=\"video-wrapper\">\n    <video id=\"porsche-video\" muted playsinline>\n      <source src=\"https:\/\/hedonic.grabuge.dev\/wp-content\/uploads\/2025\/05\/02cb540eec2d44a487139e9b0e14b86e.HD-1080p-7.2Mbps-43330998.mp4\" type=\"video\/mp4\">\n    <\/video>\n    \n    <!-- Textes superpos\u00e9s -->\n    <div id=\"text-porsche\" class=\"text-overlay\" style=\"top: 10%; left: 10%;\">CLASSIC 911 REIMAGINED<\/div>\n    <div id=\"text-echappement\" class=\"text-overlay\" style=\"top: 20%; right: 20%;\">BESPOKE HAND-FORGED ALUMINUM PARTS<\/div>\n    <div id=\"text-signature\" class=\"text-overlay\" style=\"top: 40%; right: 15%;\">HEDONIC [RE]CREATION OPTICAL SIGNATURE<\/div>\n    <div id=\"text-retroviseurs\" class=\"text-overlay\" style=\"top: 50%; right: 10%;\">TAILORED INTERIOR WITH SPORT BUCKET SEATS<\/div>\n    <div id=\"text-instrumentation\" class=\"text-overlay\" style=\"top: 30%; right: 5%;\">DIGITAL INSTRUMENTATION BY H DIVISION<\/div>\n    \n    <!-- Bouton de fin de vid\u00e9o -->\n    <div id=\"end-button\" class=\"end-button\">\n      <a href=\"https:\/\/hedonic.grabuge.dev\/en\/hedonic-on-scroll\/\" class=\"btn-project\">\n        <span class=\"btn-text\">H PROJECT<\/span>\n        <span class=\"btn-border\"><\/span>\n      <\/a>\n    <\/div>\n  <\/div>\n<\/div>\n\n<!-- Spacer pour permettre le d\u00e9filement -->\n<div id=\"scroll-space\"><\/div>\n\n<style>\n\/* Style g\u00e9n\u00e9ral *\/\nbody {\n  margin: 0;\n  padding: 0;\n  background-color: #000 !important;\n  color: #fff;\n  overflow-x: hidden;\n}\n\n\/* Pr\u00e9chargeur *\/\n.hedonic-preloader {\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background-color: #000;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  z-index: 9999;\n  transition: opacity 0.8s ease, visibility 0.8s ease;\n}\n\n.preloader-content {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  width: 80%;\n  max-width: 400px;\n}\n\n.logo-progress-container {\n  width: 100%;\n  margin-bottom: 20px;\n}\n\n.logo-container {\n  margin-bottom: 15px;\n  width: 100%;\n}\n\n.preloader-logo {\n  width: 100%;\n  max-width: 300px;\n  margin: 0 auto;\n  display: block;\n}\n\n.progress-bar-container {\n  width: 100%;\n  height: 4px;\n  background-color: rgba(255, 255, 255, 0.1);\n  border-radius: 2px;\n  overflow: hidden;\n}\n\n.progress-bar {\n  height: 100%;\n  width: 0%;\n  background-color: #fff;\n  transition: width 0.3s ease-out;\n}\n\n.loading-text {\n  font-family: 'Termina', Arial, sans-serif;\n  font-size: 12px;\n  letter-spacing: 2px;\n  text-transform: uppercase;\n  color: rgba(255, 255, 255, 0.7);\n  margin-top: 10px;\n}\n\n.porsche-experience {\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100vh;\n  z-index: 999;\n  opacity: 0;\n  transition: opacity 1s ease;\n}\n\n\/* \u00c9cran d'introduction *\/\n.intro-screen {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background-color: #000;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  z-index: 2;\n  transition: opacity 0.8s ease;\n}\n\n.intro-logo {\n  width: 80%;\n  max-width: 300px;\n  animation: logoReveal 1.5s ease forwards;\n}\n\n@keyframes logoReveal {\n  0% {\n    opacity: 0;\n    transform: scale(0.9);\n  }\n  100% {\n    opacity: 1;\n    transform: scale(1);\n  }\n}\n\n.scroll-indicator {\n  position: absolute;\n  bottom: 80px;\n  left: 50%;\n  transform: translateX(-50%);\n  text-align: center;\n  animation: fadeIn 1s ease forwards 1.5s;\n  opacity: 0;\n}\n\n.scroll-text {\n  font-family: 'Termina', Arial, sans-serif;\n  color: white;\n  font-size: 14px;\n  letter-spacing: 2px;\n  text-transform: uppercase;\n  margin-bottom: 10px;\n}\n\n.mouse {\n  width: 26px;\n  height: 40px;\n  border: 2px solid white;\n  border-radius: 14px;\n  position: relative;\n  margin: 0 auto;\n}\n\n.wheel {\n  width: 4px;\n  height: 8px;\n  background-color: white;\n  border-radius: 2px;\n  position: absolute;\n  top: 6px;\n  left: 50%;\n  transform: translateX(-50%);\n  animation: scrollWheel 1.5s infinite;\n}\n\n@keyframes scrollWheel {\n  0% {\n    opacity: 1;\n    transform: translateX(-50%) translateY(0);\n  }\n  100% {\n    opacity: 0;\n    transform: translateX(-50%) translateY(15px);\n  }\n}\n\n@keyframes fadeIn {\n  0% {\n    opacity: 0;\n  }\n  100% {\n    opacity: 1;\n  }\n}\n\n\/* Conteneur vid\u00e9o *\/\n.video-wrapper {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background-color: #000;\n  z-index: 1;\n}\n\n#porsche-video {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n}\n\n\/* Textes superpos\u00e9s *\/\n.text-overlay {\n  position: absolute;\n  opacity: 0;\n  color: white;\n  font-family: 'Termina', Arial, sans-serif;\n  font-weight: bold;\n  font-size: 32px;\n  text-shadow: 0 0 10px rgba(0,0,0,0.7);\n  max-width: 450px;\n  text-align: left;\n  line-height: 1.2;\n  transition: opacity 1s ease; \/* 1 seconde comme demand\u00e9 *\/\n  z-index: 2;\n}\n\n\/* Bouton de fin de vid\u00e9o *\/\n.end-button {\n  position: absolute;\n  bottom: 15%;\n  left: 50%;\n  transform: translateX(-50%);\n  opacity: 0;\n  transition: opacity 1.5s ease, transform 1.5s ease;\n  z-index: 3;\n}\n\n.btn-project {\n  display: inline-block;\n  position: relative;\n  padding: 16px 32px;\n  text-decoration: none;\n  text-align: center;\n  font-family: 'Termina', Arial, sans-serif;\n  font-size: 16px;\n  letter-spacing: 2px;\n  text-transform: uppercase;\n  color: white;\n  background-color: transparent;\n  overflow: hidden;\n  transition: color 0.5s ease;\n}\n\n.btn-border {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 1px solid white;\n  box-sizing: border-box;\n  z-index: -1;\n}\n\n.btn-project:before {\n  content: '';\n  position: absolute;\n  top: 0;\n  left: -100%;\n  width: 100%;\n  height: 100%;\n  background-color: white;\n  transition: transform 0.5s ease;\n  z-index: -1;\n  transform: skewX(-20deg);\n}\n\n.btn-project:hover {\n  color: black;\n}\n\n.btn-project:hover:before {\n  transform: translateX(100%) skewX(-20deg);\n}\n\n\/* Animation du bouton *\/\n@keyframes pulse {\n  0% {\n    transform: translateX(-50%) scale(1);\n  }\n  50% {\n    transform: translateX(-50%) scale(1.05);\n  }\n  100% {\n    transform: translateX(-50%) scale(1);\n  }\n}\n\n.end-button.visible {\n  opacity: 1;\n  animation: pulse 2s infinite;\n}\n\n\/* Responsive pour mobiles *\/\n@media (max-width: 768px) {\n  .text-overlay {\n    font-size: 20px; \/* Taille r\u00e9duite pour mobile *\/\n    max-width: 280px;\n  }\n  \n  #text-porsche {\n    top: 10% !important;\n    left: 5% !important;\n  }\n  \n  #text-echappement {\n    top: 20% !important;\n    right: 5% !important;\n  }\n  \n  #text-signature {\n    top: 40% !important;\n    right: 5% !important;\n  }\n  \n  #text-retroviseurs {\n    top: 55% !important;\n    right: 5% !important;\n  }\n  \n  #text-instrumentation {\n    top: 30% !important;\n    right: 5% !important;\n  }\n  \n  .intro-logo {\n    width: 70%;\n  }\n  \n  .scroll-indicator {\n    bottom: 50px;\n  }\n  \n  .btn-project {\n    padding: 12px 24px;\n    font-size: 14px;\n  }\n}\n\n\/* Pour les tr\u00e8s petits \u00e9crans *\/\n@media (max-width: 480px) {\n  .text-overlay {\n    font-size: 16px;\n    max-width: 220px;\n  }\n  \n  .btn-project {\n    padding: 10px 20px;\n    font-size: 12px;\n  }\n}\n\n\/* Espace de d\u00e9filement *\/\n#scroll-space {\n  height: 5000px; \/* Sera ajust\u00e9 par JavaScript *\/\n  background-color: transparent !important;\n  position: relative;\n  z-index: 1;\n}\n\n\/* Pour \u00e9viter les conflits avec Elementor *\/\n.elementor * {\n  box-sizing: border-box;\n}\n\n\/* Classe pour cacher le pr\u00e9chargeur *\/\n.preloader-hidden {\n  opacity: 0 !important;\n  visibility: hidden !important;\n}\n\n\/* Classe pour afficher l'exp\u00e9rience *\/\n.experience-visible {\n  opacity: 1 !important;\n}\n<\/style>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-98d8ac2 elementor-widget elementor-widget-html\" data-id=\"98d8ac2\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- PARTIE 2 : JavaScript (\u00e0 placer dans un second widget HTML Elementor) -->\n<script>\ndocument.addEventListener('DOMContentLoaded', function() {\n  \/\/ \u00c9l\u00e9ments DOM\n  const preloader = document.querySelector('.hedonic-preloader');\n  const progressBar = document.querySelector('.progress-bar');\n  const experience = document.querySelector('.porsche-experience');\n  const introScreen = document.querySelector('.intro-screen');\n  const video = document.getElementById('porsche-video');\n  const scrollSpace = document.getElementById('scroll-space');\n  const endButton = document.getElementById('end-button');\n  \n  \/\/ Timings des textes en secondes (apparition:disparition)\n  const textTimings = {\n    'text-porsche': { start: 17, end: 21 },\n    'text-echappement': { start: 24, end: 27 },\n    'text-signature': { start: 31, end: 35 },\n    'text-retroviseurs': { start: 37, end: 41 },\n    'text-instrumentation': { start: 43, end: 48 }\n  };\n  \n  \/\/ Timing pour le bouton de fin (appara\u00eet \u00e0 la fin de la vid\u00e9o)\n  const endButtonTiming = 48; \/\/ Le bouton appara\u00eet \u00e0 52 secondes\n  \n  \/\/ Variables de contr\u00f4le\n  let hasScrolled = false;\n  let scrollDirection = 'down';\n  let lastScrollTop = 0;\n  let currentTime = 0;\n  let resourcesLoaded = false;\n  \n  \/\/ Compteur de ressources \u00e0 charger\n  let totalResources = 2; \/\/ Logo + Vid\u00e9o\n  let loadedResources = 0;\n  let loadingProgress = 0;\n  \n  \/\/ Animation de la barre de progression\n  function updateProgressBar() {\n    \/\/ Calcul du pourcentage de chargement (bas\u00e9 sur les ressources + un facteur al\u00e9atoire pour l'effet visuel)\n    const resourceProgress = (loadedResources \/ totalResources) * 80; \/\/ 80% bas\u00e9 sur les ressources r\u00e9elles\n    const simulatedProgress = loadingProgress < resourceProgress \n      ? Math.min(loadingProgress + 1, resourceProgress) \n      : resourceProgress;\n    \n    loadingProgress = simulatedProgress;\n    \n    \/\/ Mettre \u00e0 jour la barre de progression\n    progressBar.style.width = loadingProgress + '%';\n    \n    \/\/ Continuer l'animation tant que toutes les ressources ne sont pas charg\u00e9es\n    if (!resourcesLoaded) {\n      requestAnimationFrame(updateProgressBar);\n    } else {\n      \/\/ Animation finale de 80% \u00e0 100% quand toutes les ressources sont charg\u00e9es\n      animateFinalProgress();\n    }\n  }\n  \n  \/\/ Animation finale de la barre de progression\n  function animateFinalProgress() {\n    const finalAnimation = setInterval(function() {\n      loadingProgress += 2;\n      progressBar.style.width = loadingProgress + '%';\n      \n      if (loadingProgress >= 100) {\n        clearInterval(finalAnimation);\n        setTimeout(function() {\n          \/\/ Masquer le pr\u00e9chargeur et afficher l'exp\u00e9rience\n          preloader.classList.add('preloader-hidden');\n          experience.classList.add('experience-visible');\n        }, 300);\n      }\n    }, 50);\n  }\n  \n  \/\/ D\u00e9marrer l'animation de la barre de progression\n  requestAnimationFrame(updateProgressBar);\n  \n  \/\/ Pr\u00e9charger la vid\u00e9o\n  video.addEventListener('loadeddata', function() {\n    resourceLoaded();\n  });\n  \n  \/\/ Pr\u00e9charger le logo\n  const logoPreloader = new Image();\n  logoPreloader.onload = function() {\n    resourceLoaded();\n  };\n  logoPreloader.src = 'https:\/\/hedonic.grabuge.dev\/wp-content\/uploads\/2025\/05\/Hedonic-logo-blanc.svg';\n  \n  \/\/ Fonction appel\u00e9e quand une ressource est charg\u00e9e\n  function resourceLoaded() {\n    loadedResources++;\n    \n    \/\/ V\u00e9rifier si toutes les ressources sont charg\u00e9es\n    if (loadedResources >= totalResources) {\n      resourcesLoaded = true;\n      \/\/ Note: L'animation finale du pr\u00e9chargeur est g\u00e9r\u00e9e dans updateProgressBar\/animateFinalProgress\n      \n      \/\/ Initialiser la vid\u00e9o\n      initVideoScroll();\n      \n      \/\/ Remettre la vid\u00e9o au d\u00e9but\n      video.currentTime = 0;\n    }\n  }\n  \n  \/\/ Fallback pour s'assurer que l'exp\u00e9rience d\u00e9marre m\u00eame si certaines ressources ne se chargent pas\n  setTimeout(function() {\n    if (!resourcesLoaded) {\n      console.log('Chargement forc\u00e9 apr\u00e8s d\u00e9lai');\n      resourcesLoaded = true;\n      \n      \/\/ Initialiser la vid\u00e9o\n      initVideoScroll();\n    }\n  }, 8000); \/\/ 8 secondes maximum d'attente\n  \n  \/\/ Initialiser le contr\u00f4le de la vid\u00e9o par d\u00e9filement\n  function initVideoScroll() {\n    const videoDuration = video.duration || 60; \/\/ Fallback si la dur\u00e9e n'est pas disponible\n    \n    \/\/ Ajuster la hauteur du d\u00e9filement selon l'appareil\n    let scrollMultiplier = 600; \/\/ Coefficient normal pour desktop\n    \n    \/\/ R\u00e9duire le multiplicateur pour mobile (d\u00e9filement plus rapide)\n    if (window.innerWidth <= 768) {\n      scrollMultiplier = 400;\n    }\n    \n    const scrollHeight = videoDuration * scrollMultiplier;\n    scrollSpace.style.height = scrollHeight + 'px';\n    \n    \/\/ D\u00e9calage initial (3 secondes)\n    const initialDelay = 3;\n    const initialDelayPx = (initialDelay \/ videoDuration) * scrollHeight;\n    \n    \/\/ Gestionnaire de d\u00e9filement\n    window.addEventListener('scroll', function() {\n      const scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n      \n      \/\/ D\u00e9tecter la direction du d\u00e9filement\n      scrollDirection = scrollTop > lastScrollTop ? 'down' : 'up';\n      lastScrollTop = scrollTop;\n      \n      \/\/ Masquer l'intro au premier d\u00e9filement\n      if (scrollTop > 50 && !hasScrolled) {\n        hasScrolled = true;\n        introScreen.style.opacity = '0';\n        introScreen.style.pointerEvents = 'none';\n      }\n      \n      \/\/ Calculer le pourcentage de d\u00e9filement avec d\u00e9lai\n      let scrollPercentage = 0;\n      if (scrollTop > initialDelayPx) {\n        scrollPercentage = (scrollTop - initialDelayPx) \/ (scrollHeight - initialDelayPx);\n      }\n      scrollPercentage = Math.min(Math.max(scrollPercentage, 0), 1);\n      \n      \/\/ Mettre \u00e0 jour le temps de la vid\u00e9o avec lissage pour plus de fluidit\u00e9\n      \/\/ Ajuster la vitesse de r\u00e9action selon l'appareil\n      const smoothFactor = window.innerWidth <= 768 \n        ? (scrollDirection === 'down' ? 0.2 : 0.15)  \/\/ Plus r\u00e9actif sur mobile\n        : (scrollDirection === 'down' ? 0.12 : 0.08); \/\/ Plus fluide sur desktop\n      \n      const targetTime = scrollPercentage * videoDuration;\n      currentTime += (targetTime - currentTime) * smoothFactor;\n      \n      if (Math.abs(video.currentTime - currentTime) > 0.01) {\n        video.currentTime = currentTime;\n      }\n      \n      \/\/ Mettre \u00e0 jour la visibilit\u00e9 des textes\n      updateTextVisibility(currentTime);\n      \n      \/\/ Afficher le bouton de fin si on atteint la fin de la vid\u00e9o\n      if (currentTime >= endButtonTiming) {\n        endButton.classList.add('visible');\n      } else {\n        endButton.classList.remove('visible');\n      }\n    });\n  }\n  \n  \/\/ Mettre \u00e0 jour la visibilit\u00e9 des textes\n  function updateTextVisibility(currentTime) {\n    for (const textId in textTimings) {\n      const element = document.getElementById(textId);\n      const { start, end } = textTimings[textId];\n      \n      \/\/ Ajouter une transition pour l'apparition\/disparition\n      const fadeInStart = start - 1; \/\/ 1 seconde avant\n      const fadeOutEnd = end + 1;   \/\/ 1 seconde apr\u00e8s\n      \n      let opacity = 0;\n      \n      \/\/ Calcul de l'opacit\u00e9\n      if (currentTime >= fadeInStart && currentTime < start) {\n        \/\/ Apparition\n        opacity = (currentTime - fadeInStart) \/ 1;\n      } else if (currentTime >= start && currentTime <= end) {\n        \/\/ Visible\n        opacity = 1;\n      } else if (currentTime > end && currentTime <= fadeOutEnd) {\n        \/\/ Disparition\n        opacity = 1 - (currentTime - end) \/ 1;\n      }\n      \n      element.style.opacity = opacity;\n    }\n  }\n  \n  \/\/ D\u00e9tecter l'orientation de l'appareil et appliquer des optimisations sp\u00e9cifiques\n  function handleOrientationChange() {\n    if (window.matchMedia(\"(orientation: portrait)\").matches) {\n      \/\/ En mode portrait (la plupart des utilisations mobiles)\n      document.body.classList.add('portrait-mode');\n    } else {\n      \/\/ En mode paysage\n      document.body.classList.remove('portrait-mode');\n    }\n  }\n  \n  \/\/ Appliquer les optimisations au chargement et lors des changements d'orientation\n  handleOrientationChange();\n  window.addEventListener('orientationchange', handleOrientationChange);\n  window.addEventListener('resize', handleOrientationChange);\n});\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>Chargement&#8230; Scroll 911 CLASSIC REVISIT\u00c9E PI\u00c8CES UNIQUES FAITES MAIN EN ALLUMINUM SIGNATURE OPTIQUE HEDONIC [RE]CREATION INTERIEUR SUR-MESURE AVEC SIEGES SPORTS INSTRUMENTION DIGITALE PAR LA DIVISION H LE PROJET H<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-334","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/hedonic.grabuge.dev\/en\/wp-json\/wp\/v2\/pages\/334","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hedonic.grabuge.dev\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/hedonic.grabuge.dev\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/hedonic.grabuge.dev\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hedonic.grabuge.dev\/en\/wp-json\/wp\/v2\/comments?post=334"}],"version-history":[{"count":115,"href":"https:\/\/hedonic.grabuge.dev\/en\/wp-json\/wp\/v2\/pages\/334\/revisions"}],"predecessor-version":[{"id":554,"href":"https:\/\/hedonic.grabuge.dev\/en\/wp-json\/wp\/v2\/pages\/334\/revisions\/554"}],"wp:attachment":[{"href":"https:\/\/hedonic.grabuge.dev\/en\/wp-json\/wp\/v2\/media?parent=334"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}