{"id":7394,"date":"2025-12-02T17:45:02","date_gmt":"2025-12-02T16:45:02","guid":{"rendered":"https:\/\/tunelockr.com\/?page_id=7394"},"modified":"2026-03-16T21:07:06","modified_gmt":"2026-03-16T20:07:06","slug":"anti-plagiat-fichier-audio-preuve-danteriorite","status":"publish","type":"page","link":"https:\/\/tunelockr.com\/en\/anti-plagiat-fichier-audio-preuve-danteriorite\/","title":{"rendered":"Anti-Plagiat Scanner\u2122 \u2013 Analyse du Fichier Audio &amp; Preuve d\u2019Ant\u00e9riorit\u00e9"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"7394\" class=\"elementor elementor-7394\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8ddb2e5 e-flex e-con-boxed e-con e-parent\" data-id=\"8ddb2e5\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ca139d5 elementor-widget elementor-widget-html\" data-id=\"ca139d5\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<section class=\"tl-pro-hero\">\n  <div class=\"tl-pro-hero-inner\">\n\n    <!-- Titre principal -->\n    <h1 class=\"tl-pro-hero-title\">\n      TuneLockr Proof\u2122\n      <span>\n        Analyse de fichier musical & v\u00e9rification de preuve d\u2019ant\u00e9riorit\u00e9\n      <\/span>\n    <\/h1>\n\n    <!-- Texte SEO -->\n    <p class=\"tl-pro-hero-lead\">\n      V\u00e9rifiez en quelques secondes si votre fichier musical peut constituer une \n      <strong>preuve d\u2019ant\u00e9riorit\u00e9 exploitable<\/strong> en cas de \n      <strong><a href=\"https:\/\/tunelockr.com\/en\/plagiat-musical\/\">plagiat musical<\/a><\/strong> ou de litige sur le droit d\u2019auteur.\n      TuneLockr Proof analyse localement votre fichier audio ou document afin \n      d\u2019identifier ses \u00e9l\u00e9ments techniques et pr\u00e9parer votre protection.\n    <\/p>\n\n    <p class=\"tl-aps-lead\">\n      Notre outil analyse la structure de votre fichier (beat, chanson, stems, PDF ou projet musical), \n      lit les m\u00e9tadonn\u00e9es et g\u00e9n\u00e8re une empreinte cryptographique afin d\u2019\u00e9valuer la \n      <strong>solidit\u00e9 de votre preuve<\/strong>.\n      <br>\n      Analyse locale \u2022 S\u00e9curis\u00e9e \u2022 Aucun fichier transmis\n    <\/p>\n\n    <!-- Points cl\u00e9s -->\n    <div class=\"tl-pro-hero-points\">\n      <div class=\"tl-pro-point\">\ud83d\udee1\ufe0f Analyse technique du fichier<\/div>\n      <div class=\"tl-pro-point\">\ud83d\udd0d Lecture des m\u00e9tadonn\u00e9es audio<\/div>\n      <div class=\"tl-pro-point\">\u26d3\ufe0f Empreinte cryptographique SHA-256<\/div>\n      <div class=\"tl-pro-point\">\ud83d\udcc4 Rapport d\u2019analyse PDF<\/div>\n      <div class=\"tl-pro-point\">\ud83d\udcda Conformit\u00e9 bonnes pratiques (eIDAS & CNIL)<\/div>\n      <div class=\"tl-pro-point\">\ud83c\udfb5 Compatible MP3 \u2022 WAV \u2022 FLAC \u2022 PDF \u2022 ZIP<\/div>\n    <\/div>\n\n    <!-- CTA -->\n    <a href=\"#tl-analyse-pro\" class=\"tl-pro-hero-btn\">\n      Analyser mon fichier \u2193\n    <\/a>\n\n  <\/div>\n<\/section>\n\n<style>\n\/* ===== HERO ===== *\/\n.tl-pro-hero {\n  padding: 4.5rem 1.5rem 3.5rem;\n  background: radial-gradient(\n      circle at center,\n      rgba(255,152,0,0.12) 0%,\n      rgba(0,0,0,0) 65%\n    ),\n    #050509;\n  text-align: center;\n  color: #f5f5f5;\n  border-bottom: 1px solid rgba(255,255,255,0.06);\n}\n\n.tl-pro-hero-inner {\n  max-width: 900px;\n  margin: 0 auto;\n}\n\n\/* ===== Titre ===== *\/\n.tl-pro-hero-title {\n  font-size: 3rem;\n  font-weight: 800;\n  line-height: 1.15;\n  margin-bottom: 1.2rem;\n  letter-spacing: -0.01em;\n  text-shadow: 0 0 20px rgba(255,152,0,0.22);\n}\n\n.tl-pro-hero-title span {\n  display: block;\n  font-size: 1.15rem;\n  font-weight: 500;\n  margin-top: 0.6rem;\n  opacity: 0.9;\n}\n\n\/* ===== Texte ===== *\/\n.tl-pro-hero-lead {\n  font-size: 1.18rem;\n  max-width: 760px;\n  margin: 0.8rem auto 1.2rem;\n  line-height: 1.65;\n  opacity: 0.92;\n}\n\n.tl-aps-lead {\n  font-size: 1rem;\n  max-width: 720px;\n  margin: 0 auto 2.3rem;\n  line-height: 1.6;\n  opacity: 0.85;\n}\n\n\/* ===== Points ===== *\/\n.tl-pro-hero-points {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));\n  gap: 0.8rem;\n  margin-bottom: 2.6rem;\n}\n\n.tl-pro-point {\n  padding: 0.7rem 1rem;\n  border-radius: 12px;\n  background: rgba(255,255,255,0.04);\n  border: 1px solid rgba(255,255,255,0.08);\n  font-size: 0.94rem;\n  font-weight: 500;\n  backdrop-filter: blur(4px);\n  transition: 0.25s;\n}\n\n.tl-pro-point:hover {\n  background: rgba(255,152,0,0.15);\n  border-color: rgba(255,152,0,0.4);\n  transform: translateY(-3px);\n  box-shadow: 0 0 12px rgba(255,152,0,0.35);\n}\n\n\/* ===== Bouton ===== *\/\n.tl-pro-hero-btn {\n  display: inline-block;\n  padding: 1rem 2.4rem;\n  border-radius: 999px;\n  background: #ff9800;\n  color: #111;\n  font-size: 1.05rem;\n  font-weight: 700;\n  text-decoration: none;\n  box-shadow: 0 10px 28px rgba(0,0,0,0.65);\n  transition: 0.25s;\n}\n\n.tl-pro-hero-btn:hover {\n  background: #ffb74d;\n  transform: translateY(-3px);\n}\n\n\/* ===== Responsive ===== *\/\n@media(max-width:650px){\n  .tl-pro-hero-title {font-size:2.3rem;}\n  .tl-pro-hero-lead {font-size:1.05rem;}\n  .tl-pro-point {font-size:0.88rem;}\n}\n<\/style>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e62dfd0 elementor-widget elementor-widget-html\" data-id=\"e62dfd0\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<section id=\"tl-analyse-pro\" class=\"tl-pro-page\">\n\n  <div class=\"tl-pro-inner\">\n\n    <!-- HEADER -->\n    <header class=\"tl-pro-header\">\n      <h1>Outil d\u2019analyse  du Fichier Audio & Preuve d\u2019Ant\u00e9riorit\u00e9  <\/h1>\n      <p>\n        Cet outil \u00e9value dans quelle mesure un fichier (audio ou document) est pr\u00eat \u00e0 servir de\n        <strong>d\u00e9but de preuve d\u2019ant\u00e9riorit\u00e9<\/strong> en cas de litige ou de plagiat musical.\n      <\/p>\n      <p class=\"tl-pro-sub\">\n        \ud83d\udd12 Analyse 100% locale dans votre navigateur \u2014 aucun fichier n\u2019est envoy\u00e9 ni stock\u00e9 par TuneLockr.\n      <\/p>\n    <\/header>\n\n    <!-- UPLOAD CARD -->\n    <section class=\"tl-pro-upload-card\">\n      <h2>1. Importez votre fichier<\/h2>\n\n      <div id=\"tl-pro-drop\" class=\"tl-pro-dropzone\">\n        <div class=\"tl-pro-icon\">\u2b06<\/div>\n        <p class=\"tl-pro-title\">Glissez votre fichier ici<\/p>\n        <p class=\"tl-pro-subtitle\">\n          ou cliquez pour s\u00e9lectionner<br>\n          \ud83c\udfb5 Audio (MP3, WAV, FLAC, OGG) \u2022 \ud83d\udcc4 PDF \/ TXT \/ DOCX \u2022 \ud83d\udcc1 ZIP (projets \/ stems)\n        <\/p>\n        <input type=\"file\" id=\"tl-pro-input\" hidden>\n      <\/div>\n\n      <p class=\"tl-pro-security\">\n        \ud83d\udd10 Analyse locale uniquement \u2022 Aucune donn\u00e9e transmise \u2022 Con\u00e7u pour s\u2019inscrire dans le cadre\n        des bonnes pratiques de preuve technique (eIDAS, CNIL).\n      <\/p>\n    <\/section>\n\n    <!-- RESULTS -->\n    <section id=\"tl-pro-results\" class=\"tl-pro-results\" style=\"display:none;\">\n\n      <h2>2. R\u00e9sultat de l\u2019analyse technique & probatoire<\/h2>\n\n      <!-- File data -->\n      <div id=\"tl-pro-filedata\" class=\"tl-pro-filedata\"><\/div>\n\n      <!-- HASH -->\n      <div class=\"tl-pro-hash-block\">\n        <h3>Empreinte cryptographique (SHA-256)<\/h3>\n        <p id=\"tl-pro-hash\" class=\"tl-pro-hash\">Calcul en cours\u2026<\/p>\n        <p class=\"tl-pro-hash-info\">\n          Cette empreinte unique illustre le type de \u201csignature num\u00e9rique\u201d qui peut \u00eatre inscrite en blockchain\n          dans le cadre d\u2019un certificat d\u2019ant\u00e9riorit\u00e9 (comme ceux d\u00e9livr\u00e9s par TuneLockr).\n        <\/p>\n      <\/div>\n\n      <!-- SCORE -->\n      <div class=\"tl-pro-score-block\">\n        <h3>Score de solidit\u00e9 juridique estim\u00e9<\/h3>\n        <div class=\"tl-pro-score-header\">\n          <div class=\"tl-pro-score-value\" id=\"tl-pro-score-value\">\u2013%<\/div>\n          <div class=\"tl-pro-score-level\" id=\"tl-pro-score-level\"><\/div>\n        <\/div>\n        <div class=\"tl-pro-score-bar\">\n          <div id=\"tl-pro-score-fill\"><\/div>\n        <\/div>\n        <p id=\"tl-pro-score-desc\" class=\"tl-pro-score-desc\"><\/p>\n      <\/div>\n\n      <!-- PLUS \/ MINUS -->\n      <div class=\"tl-pro-badges\">\n        <div class=\"tl-pro-badge-card\">\n          <h3>\u2705 Points forts<\/h3>\n          <ul id=\"tl-pro-plus\"><\/ul>\n        <\/div>\n        <div class=\"tl-pro-badge-card\">\n          <h3>\u26a0\ufe0f Fragilit\u00e9s d\u00e9tect\u00e9es<\/h3>\n          <ul id=\"tl-pro-minus\"><\/ul>\n        <\/div>\n      <\/div>\n\n      <!-- ID3 -->\n      <div id=\"tl-pro-id3\" class=\"tl-pro-id3\" style=\"display:none;\">\n        <h3>M\u00e9tadonn\u00e9es audio d\u00e9tect\u00e9es (ID3)<\/h3>\n        <ul id=\"tl-pro-id3-list\"><\/ul>\n        <p class=\"tl-pro-id3-note\">\n          Ces m\u00e9tadonn\u00e9es ne suffisent pas \u00e0 elles seules \u00e0 prouver votre ant\u00e9riorit\u00e9, mais peuvent\n          compl\u00e9ter utilement votre dossier (titre, artiste, album, ann\u00e9e\u2026).\n        <\/p>\n      <\/div>\n\n      <!-- RECO & CTA -->\n      <div class=\"tl-pro-reco\">\n        <h3>3. Recommandation personnalis\u00e9e<\/h3>\n        <p id=\"tl-pro-reco-text\"><\/p>\n\n        <div class=\"tl-pro-cta-row\">\n          <a href=\"https:\/\/app.tunelockr.com\" target=\"_blank\" class=\"tl-pro-btn\">\n            Prot\u00e9ger cette \u0153uvre avec un certificat d\u2019ant\u00e9riorit\u00e9 \u2192\n          <\/a>\n          <button id=\"tl-pro-pdf-btn\" class=\"tl-pro-btn-secondary\" type=\"button\">\n            T\u00e9l\u00e9charger le rapport PDF\n          <\/button>\n        <\/div>\n      <\/div>\n\n      <!-- Legal help \/ Info -->\n      <div class=\"tl-pro-legal-help\">\n        <h3>Zone d\u2019aide l\u00e9gale (p\u00e9dagogique)<\/h3>\n\n        <details>\n          <summary>\ud83d\udcdc R\u00e8glement eIDAS & preuve \u00e9lectronique<\/summary>\n          <p>\n            Le r\u00e8glement (UE) n\u00b0910\/2014, dit <strong>eIDAS<\/strong>, encadre notamment la valeur des\n            services de confiance et des preuves \u00e9lectroniques au sein de l\u2019Union europ\u00e9enne. Dans ce\n            cadre, un horodatage \u00e9lectronique qualifi\u00e9 ou une preuve d\u2019int\u00e9grit\u00e9 forte peut renforcer\n            la valeur d\u2019un dossier. Un certificat d\u2019ant\u00e9riorit\u00e9 adoss\u00e9 \u00e0 une blockchain peut s\u2019inscrire\n            dans cette logique en apportant une date certaine et une empreinte unique du fichier.\n          <\/p>\n        <\/details>\n\n        <details>\n          <summary>\ud83d\udd10 CNIL, donn\u00e9es personnelles & fichiers musicaux<\/summary>\n          <p>\n            Les fichiers que vous analysez peuvent contenir des donn\u00e9es personnelles (noms, voix,\n            contrats\u2026). Cet outil fonctionne en <strong>analyse locale<\/strong> : aucune donn\u00e9e n\u2019est\n            transmise \u00e0 TuneLockr. Lors de vos propres \u00e9changes (d\u00e9mo, contrats, stems), pensez \u00e0\n            respecter les principes de la <strong>CNIL<\/strong> : minimisation des donn\u00e9es, s\u00e9curit\u00e9\n            des \u00e9changes, contr\u00f4le des acc\u00e8s.\n          <\/p>\n        <\/details>\n\n        <details>\n          <summary>\u2696\ufe0f Important : ce que cet outil n\u2019est PAS<\/summary>\n          <p>\n            Cet outil ne fournit pas un avis juridique et ne constitue pas une preuve d\u2019ant\u00e9riorit\u00e9\n            en lui-m\u00eame. Il ne d\u00e9tecte pas automatiquement le plagiat musical et ne compare pas votre\n            \u0153uvre \u00e0 une base de donn\u00e9es de morceaux existants. Il vous aide \u00e0 \u00e9valuer la\n            <strong>pr\u00e9paration probatoire<\/strong> de votre fichier et \u00e0 comprendre pourquoi un\n            <strong>certificat d\u2019ant\u00e9riorit\u00e9<\/strong> (par exemple via TuneLockr) peut \u00eatre utile dans\n            un dossier de plagiat.\n          <\/p>\n        <\/details>\n      <\/div>\n\n      <!-- Comparatif -->\n      <div class=\"tl-pro-compare\">\n        <h3>Comparatif de fiabilit\u00e9 des principales \u201cpreuves\u201d<\/h3>\n        <table class=\"tl-pro-table\">\n          <tr>\n            <th>Type de \u201cpreuve\u201d<\/th>\n            <th>Fiabilit\u00e9<\/th>\n            <th>Facile \u00e0 modifier ?<\/th>\n            <th>Utilisation en justice<\/th>\n          <\/tr>\n          <tr>\n            <td>Envoyer un MP3 \u00e0 soi-m\u00eame par e-mail<\/td>\n            <td>\u2b50<\/td>\n            <td>Oui<\/td>\n            <td>Fragile, contestable<\/td>\n          <\/tr>\n          <tr>\n            <td>Captures d\u2019\u00e9cran & dates syst\u00e8me<\/td>\n            <td>\u2b50\u2b50<\/td>\n            <td>Oui<\/td>\n            <td>Faible, \u00e0 compl\u00e9ter<\/td>\n          <\/tr>\n          <tr>\n            <td>Contrat ou PDF non certifi\u00e9<\/td>\n            <td>\u2b50\u2b50<\/td>\n            <td>Oui<\/td>\n            <td>Variable selon le contexte<\/td>\n          <\/tr>\n          <tr>\n            <td><strong>Certificat d\u2019ant\u00e9riorit\u00e9 TuneLockr (blockchain)<\/strong><\/td>\n            <td>\u2b50\u2b50\u2b50\u2b50\u2b50<\/td>\n            <td>Non, empreinte fig\u00e9e<\/td>\n            <td><strong>\u00c9l\u00e9ment de preuve technique solide<\/strong><\/td>\n          <\/tr>\n        <\/table>\n      <\/div>\n\n      <p class=\"tl-pro-disclaimer\">\n        Cet outil est fourni \u00e0 titre informatif et p\u00e9dagogique. Il ne remplace pas un avis juridique\n        et ne constitue pas en soi une preuve d\u2019ant\u00e9riorit\u00e9. Pour consolider un dossier de plagiat ou\n        de contrefa\u00e7on musicale, rapprochez-vous d\u2019un professionnel du droit et compl\u00e9tez votre\n        d\u00e9marche par un <strong>certificat horodat\u00e9<\/strong> (comme ceux propos\u00e9s par TuneLockr).\n      <\/p>\n\n    <\/section>\n\n  <\/div>\n\n<\/section>\n\n<style>\n\/* ========= PAGE & LAYOUT ========= *\/\n.tl-pro-page {\n  padding: 3rem 1.5rem 4rem;\n  background: radial-gradient(circle at top, rgba(255,152,0,0.08), transparent 58%) #050509;\n  color: #f5f5f5;\n  font-family: system-ui, -apple-system, BlinkMacSystemFont, \"SF Pro Text\", sans-serif;\n}\n.tl-pro-inner {\n  max-width: 980px;\n  margin: 0 auto;\n}\n\n\/* ========= HEADER ========= *\/\n.tl-pro-header h1 {\n  font-size: 2.4rem;\n  margin-bottom: 0.5rem;\n  font-weight: 700;\n  letter-spacing: 0.01em;\n}\n.tl-pro-header p {\n  font-size: 1.02rem;\n  line-height: 1.7;\n  max-width: 760px;\n  opacity: 0.95;\n}\n.tl-pro-sub {\n  margin-top: 0.35rem;\n  font-size: 0.92rem;\n  opacity: 0.85;\n}\n\n\/* ========= UPLOAD CARD ========= *\/\n.tl-pro-upload-card {\n  margin-top: 2.4rem;\n  padding: 1.9rem 1.7rem 1.5rem;\n  border-radius: 20px;\n  background: radial-gradient(circle at top left, rgba(255,152,0,0.06), transparent 55%) rgba(10,10,15,0.98);\n  border: 1px solid rgba(255,255,255,0.08);\n  box-shadow: 0 20px 48px rgba(0,0,0,0.75);\n  animation: tl-fade-in 0.5s ease-out;\n}\n.tl-pro-upload-card h2 {\n  font-size: 1.5rem;\n  margin-bottom: 1.1rem;\n}\n.tl-pro-dropzone {\n  border-radius: 18px;\n  border: 2px dashed rgba(255,152,0,0.55);\n  background: rgba(255,152,0,0.045);\n  padding: 1.9rem 1.2rem;\n  text-align: center;\n  cursor: pointer;\n  position: relative;\n  overflow: hidden;\n  transition: 0.25s;\n}\n.tl-pro-dropzone::before {\n  content: \"\";\n  position: absolute;\n  inset: -40%;\n  opacity: 0;\n  background: radial-gradient(circle at top, rgba(255,255,255,0.14), transparent 60%);\n  transition: opacity 0.35s ease-out;\n}\n.tl-pro-dropzone:hover {\n  background: rgba(255,152,0,0.12);\n  border-color: #ff9800;\n  box-shadow: 0 0 22px rgba(255,152,0,0.35);\n}\n.tl-pro-dropzone:hover::before {\n  opacity: 1;\n}\n.tl-pro-icon {\n  font-size: 2.4rem;\n  margin-bottom: 0.4rem;\n}\n.tl-pro-title {\n  font-size: 1.05rem;\n  font-weight: 600;\n}\n.tl-pro-subtitle {\n  margin-top: 0.3rem;\n  font-size: 0.9rem;\n  opacity: 0.85;\n}\n.tl-pro-security {\n  margin-top: 0.9rem;\n  font-size: 0.86rem;\n  opacity: 0.78;\n}\n\n\/* ========= RESULTS ========= *\/\n.tl-pro-results {\n  margin-top: 2.8rem;\n  padding: 2rem 1.7rem 1.6rem;\n  border-radius: 20px;\n  background: rgba(7,7,12,0.98);\n  border: 1px solid rgba(255,255,255,0.08);\n  box-shadow: 0 22px 50px rgba(0,0,0,0.85);\n  animation: tl-fade-in-up 0.55s ease-out;\n}\n.tl-pro-results h2 {\n  font-size: 1.65rem;\n  margin-bottom: 1.2rem;\n}\n\n\/* File data *\/\n.tl-pro-filedata {\n  border-radius: 14px;\n  background: rgba(255,255,255,0.03);\n  border: 1px solid rgba(255,255,255,0.09);\n  padding: 1rem 1rem 0.85rem;\n  font-size: 0.95rem;\n  margin-bottom: 1.4rem;\n}\n.tl-pro-filedata-row {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.6rem 1.8rem;\n  margin-bottom: 0.35rem;\n}\n.tl-pro-label {\n  opacity: 0.78;\n}\n.tl-pro-filedata-note {\n  margin-top: 0.4rem;\n  font-size: 0.84rem;\n  opacity: 0.8;\n}\n\n\/* Hash *\/\n.tl-pro-hash-block {\n  margin-bottom: 1.6rem;\n  padding: 1rem;\n  border-radius: 14px;\n  background: rgba(255,255,255,0.025);\n  border: 1px solid rgba(255,255,255,0.08);\n}\n.tl-pro-hash-block h3 {\n  font-size: 1.1rem;\n  margin-bottom: 0.4rem;\n}\n.tl-pro-hash {\n  font-family: \"SF Mono\", Menlo, Monaco, Consolas, \"Liberation Mono\", monospace;\n  font-size: 0.86rem;\n  word-break: break-all;\n  background: rgba(0,0,0,0.5);\n  padding: 0.6rem 0.7rem;\n  border-radius: 8px;\n  margin-bottom: 0.4rem;\n}\n.tl-pro-hash-info {\n  font-size: 0.84rem;\n  opacity: 0.8;\n}\n\n\/* Score *\/\n.tl-pro-score-block {\n  margin-bottom: 1.7rem;\n}\n.tl-pro-score-block h3 {\n  font-size: 1.2rem;\n  margin-bottom: 0.5rem;\n}\n.tl-pro-score-header {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: baseline;\n  justify-content: space-between;\n  gap: 1rem;\n}\n.tl-pro-score-value {\n  font-size: 2.1rem;\n  font-weight: 700;\n}\n.tl-pro-score-level {\n  font-size: 1rem;\n  font-weight: 600;\n}\n.tl-pro-score-level.low { color: #66bb6a; }\n.tl-pro-score-level.medium { color: #ffb300; }\n.tl-pro-score-level.high { color: #ff7043; }\n.tl-pro-score-level.crit { color: #ef5350; }\n.tl-pro-score-bar {\n  margin-top: 0.6rem;\n  width: 100%;\n  height: 12px;\n  border-radius: 999px;\n  background: linear-gradient(\n    90deg,\n    #4caf50 0%,\n    #cddc39 25%,\n    #ffb300 50%,\n    #ff7043 75%,\n    #f44336 100%\n  );\n  position: relative;\n  overflow: hidden;\n}\n.tl-pro-score-bar #tl-pro-score-fill {\n  position: absolute;\n  left: 0;\n  top: 0;\n  bottom: 0;\n  width: 0%;\n  background: rgba(0,0,0,0.35);\n  box-shadow: inset 0 0 4px rgba(0,0,0,0.8);\n  transition: width 0.5s ease-out;\n}\n.tl-pro-score-desc {\n  margin-top: 0.6rem;\n  font-size: 0.94rem;\n  opacity: 0.92;\n}\n\n\/* Badges *\/\n.tl-pro-badges {\n  display: grid;\n  grid-template-columns: repeat(2, minmax(0,1fr));\n  gap: 1rem;\n  margin-bottom: 1.6rem;\n}\n@media (max-width: 720px) {\n  .tl-pro-badges {\n    grid-template-columns: 1fr;\n  }\n}\n.tl-pro-badge-card {\n  padding: 1rem;\n  border-radius: 14px;\n  background: rgba(255,255,255,0.03);\n  border: 1px solid rgba(255,255,255,0.07);\n  font-size: 0.94rem;\n}\n.tl-pro-badge-card h3 {\n  font-size: 1rem;\n  margin-bottom: 0.4rem;\n}\n.tl-pro-badge-card ul {\n  list-style: disc;\n  padding-left: 1.1rem;\n  margin: 0;\n}\n.tl-pro-badge-card li {\n  margin-bottom: 0.3rem;\n}\n\n\/* ID3 *\/\n.tl-pro-id3 {\n  margin-bottom: 1.6rem;\n  padding: 1rem;\n  border-radius: 14px;\n  background: rgba(255,255,255,0.02);\n  border: 1px solid rgba(255,255,255,0.08);\n  font-size: 0.94rem;\n}\n.tl-pro-id3 h3 {\n  font-size: 1.02rem;\n  margin-bottom: 0.4rem;\n}\n.tl-pro-id3 ul {\n  padding-left: 1.1rem;\n  margin: 0 0 0.4rem;\n}\n.tl-pro-id3-note {\n  font-size: 0.84rem;\n  opacity: 0.78;\n}\n\n\/* Recommendations & CTA *\/\n.tl-pro-reco {\n  padding: 1.2rem 1rem 1.1rem;\n  border-radius: 14px;\n  background: rgba(255,152,0,0.08);\n  border: 1px solid rgba(255,152,0,0.25);\n  margin-bottom: 1.7rem;\n}\n.tl-pro-reco h3 {\n  font-size: 1.1rem;\n  margin-bottom: 0.35rem;\n}\n.tl-pro-reco p {\n  font-size: 0.95rem;\n  opacity: 0.92;\n}\n.tl-pro-cta-row {\n  margin-top: 0.7rem;\n  display: flex;\n  flex-wrap: wrap;\n  gap: 0.6rem;\n}\n.tl-pro-btn,\n.tl-pro-btn-secondary {\n  display: inline-block;\n  padding: 0.85rem 1.7rem;\n  border-radius: 999px;\n  font-weight: 700;\n  font-size: 0.94rem;\n  text-decoration: none;\n  cursor: pointer;\n  border: none;\n  transition: 0.22s;\n}\n.tl-pro-btn {\n  background: #ff9800;\n  color: #111;\n  box-shadow: 0 10px 22px rgba(0,0,0,0.65);\n}\n.tl-pro-btn:hover {\n  background: #ffb74d;\n  transform: translateY(-1px);\n}\n.tl-pro-btn-secondary {\n  background: transparent;\n  color: #f5f5f5;\n  border: 1px solid rgba(255,255,255,0.3);\n}\n.tl-pro-btn-secondary:hover {\n  background: rgba(255,255,255,0.1);\n}\n\n\/* Legal help *\/\n.tl-pro-legal-help {\n  margin-bottom: 1.7rem;\n}\n.tl-pro-legal-help h3 {\n  font-size: 1.1rem;\n  margin-bottom: 0.6rem;\n}\n.tl-pro-legal-help details {\n  margin-bottom: 0.5rem;\n  padding: 0.7rem 0.8rem;\n  border-radius: 10px;\n  background: rgba(255,255,255,0.02);\n  border: 1px solid rgba(255,255,255,0.07);\n  font-size: 0.92rem;\n}\n.tl-pro-legal-help summary {\n  cursor: pointer;\n  list-style: none;\n}\n.tl-pro-legal-help summary::-webkit-details-marker {\n  display: none;\n}\n.tl-pro-legal-help summary::after {\n  content: \"\u2bc8\";\n  float: right;\n  opacity: 0.6;\n  transition: transform 0.2s;\n}\n.tl-pro-legal-help details[open] summary::after {\n  transform: rotate(90deg);\n}\n.tl-pro-legal-help p {\n  margin-top: 0.4rem;\n  opacity: 0.9;\n  line-height: 1.6;\n}\n\n\/* Compare table *\/\n.tl-pro-compare h3 {\n  font-size: 1.1rem;\n  margin-bottom: 0.5rem;\n}\n.tl-pro-table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 0.9rem;\n}\n.tl-pro-table th,\n.tl-pro-table td {\n  padding: 0.6rem 0.55rem;\n  border: 1px solid rgba(255,255,255,0.16);\n}\n.tl-pro-table th {\n  background: rgba(255,255,255,0.06);\n}\n.tl-pro-disclaimer {\n  margin-top: 0.9rem;\n  font-size: 0.82rem;\n  opacity: 0.75;\n  line-height: 1.7;\n}\n\n\/* Animations *\/\n@keyframes tl-fade-in {\n  from { opacity: 0; transform: scale(0.97); }\n  to { opacity: 1; transform: scale(1); }\n}\n@keyframes tl-fade-in-up {\n  from { opacity: 0; transform: translateY(20px); }\n  to { opacity: 1; transform: translateY(0); }\n}\n\n\/* Responsive *\/\n@media (max-width: 600px) {\n  .tl-pro-page {\n    padding: 2.2rem 1.1rem 3rem;\n  }\n  .tl-pro-upload-card,\n  .tl-pro-results {\n    padding: 1.5rem 1.1rem 1.4rem;\n  }\n  .tl-pro-header h1 {\n    font-size: 2rem;\n  }\n}\n<\/style>\n\n<!-- Librairies externes n\u00e9cessaires : jsmediatags (ID3) & jsPDF (rapport PDF) -->\n<script src=\"https:\/\/unpkg.com\/jsmediatags@3.9.7\/dist\/jsmediatags.min.js\"><\/script>\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jspdf\/2.5.1\/jspdf.umd.min.js\"><\/script>\n\n<script>\n(function() {\n  const dropZone = document.getElementById(\"tl-pro-drop\");\n  const fileInput = document.getElementById(\"tl-pro-input\");\n  const results = document.getElementById(\"tl-pro-results\");\n  const fileDataBox = document.getElementById(\"tl-pro-filedata\");\n  const hashEl = document.getElementById(\"tl-pro-hash\");\n  const scoreValueEl = document.getElementById(\"tl-pro-score-value\");\n  const scoreFillEl = document.getElementById(\"tl-pro-score-fill\");\n  const scoreLevelEl = document.getElementById(\"tl-pro-score-level\");\n  const scoreDescEl = document.getElementById(\"tl-pro-score-desc\");\n  const plusEl = document.getElementById(\"tl-pro-plus\");\n  const minusEl = document.getElementById(\"tl-pro-minus\");\n  const id3Box = document.getElementById(\"tl-pro-id3\");\n  const id3List = document.getElementById(\"tl-pro-id3-list\");\n  const recoText = document.getElementById(\"tl-pro-reco-text\");\n  const pdfBtn = document.getElementById(\"tl-pro-pdf-btn\");\n\n  let currentAnalysis = null;\n\n  function formatBytes(bytes) {\n    if (bytes === 0) return \"0 octet\";\n    if (!bytes && bytes !== 0) return \"-\";\n    const sizes = [\"octets\", \"Ko\", \"Mo\", \"Go\"];\n    const i = Math.floor(Math.log(bytes) \/ Math.log(1024));\n    const val = bytes \/ Math.pow(1024, i);\n    return val.toFixed(i === 0 ? 0 : 1) + \" \" + sizes[i];\n  }\n\n  function formatDate(ts) {\n    if (!ts) return \"-\";\n    const d = new Date(ts);\n    return d.toLocaleDateString(\"fr-FR\", { year: \"numeric\", month: \"short\", day: \"2-digit\" });\n  }\n\n  async function computeHash(file) {\n    if (!window.crypto || !window.crypto.subtle) {\n      return \"Votre navigateur ne permet pas de calculer l\u2019empreinte SHA-256 (API non disponible).\";\n    }\n    const buf = await file.arrayBuffer();\n    const hashBuffer = await crypto.subtle.digest(\"SHA-256\", buf);\n    const byteArray = Array.from(new Uint8Array(hashBuffer));\n    return byteArray.map(b => b.toString(16).padStart(2, \"0\")).join(\"\");\n  }\n\n  function computeScore(file, meta) {\n    const name = file.name || \"\";\n    const size = file.size || 0;\n    const lastMod = file.lastModified || Date.now();\n    const ext = (name.split(\".\").pop() || \"\").toLowerCase();\n    const now = Date.now();\n    const diffDays = (now - lastMod) \/ (1000 * 60 * 60 * 24);\n\n    let score = 50; \/\/ plus le score est \u00e9lev\u00e9 \u2192 plus la situation est fragile (risque \u00e9lev\u00e9)\n    const plus = [];\n    const minus = [];\n\n    const audioHigh = [\"wav\", \"aiff\", \"flac\"];\n    const audioLossy = [\"mp3\", \"m4a\", \"ogg\", \"aac\", \"wma\"];\n    const docs = [\"pdf\", \"txt\", \"doc\", \"docx\", \"odt\"];\n    const archives = [\"zip\", \"rar\", \"7z\", \"tar\"];\n\n    \/\/ Extension\n    if (audioHigh.includes(ext)) {\n      score -= 10;\n      plus.push(\"Format audio non compress\u00e9 (WAV\/FLAC) : bonne base technique pour une preuve.\");\n    } else if (archives.includes(ext)) {\n      score -= 4;\n      plus.push(\"Archive (ZIP\/RAR) : peut contenir plusieurs \u00e9l\u00e9ments (stems, projets, docs).\");\n    } else if (audioLossy.includes(ext)) {\n      score += 8;\n      minus.push(\"Fichier audio compress\u00e9 (MP3\/OGG) : facile \u00e0 copier et modifier, pensez \u00e0 d\u00e9poser aussi une version source.\");\n    } else if (docs.includes(ext)) {\n      plus.push(\"Document texte (PDF\/TXT\/DOC) : utile pour paroles, contrats ou partitions.\");\n    } else {\n      minus.push(\"Format moins courant ou peu explicite : compl\u00e9tez par un format standard (WAV\/PDF) pour clarifier.\");\n    }\n\n    \/\/ Taille\n    if (size < 50 * 1024) {\n      score += 14;\n      minus.push(\"Fichier tr\u00e8s l\u00e9ger : il contient probablement peu d\u2019informations exploitables en cas de litige.\");\n    } else if (size < 500 * 1024) {\n      score += 6;\n      minus.push(\"Fichier assez l\u00e9ger : ajoutez id\u00e9alement d\u2019autres \u00e9l\u00e9ments (stems, version HD, contrat\u2026).\");\n    } else if (size > 25 * 1024 * 1024) {\n      score -= 4;\n      plus.push(\"Fichier volumineux : peut contenir davantage de mati\u00e8re (qualit\u00e9 audio, stems, etc.).\");\n    }\n\n    \/\/ \u00c2ge\n    if (diffDays < 7) {\n      score += 16;\n      minus.push(\"Fichier tr\u00e8s r\u00e9cent : il est recommand\u00e9 de d\u00e9poser rapidement pour figer officiellement une date.\");\n    } else if (diffDays < 90) {\n      score += 6;\n      minus.push(\"Fichier r\u00e9cent : un d\u00e9p\u00f4t d\u00e9di\u00e9 permet de s\u00e9curiser la chronologie de cr\u00e9ation.\");\n    } else if (diffDays > 365) {\n      score -= 8;\n      plus.push(\"Fichier ancien : l\u2019anciennet\u00e9 peut jouer en votre faveur si elle est li\u00e9e \u00e0 un d\u00e9p\u00f4t dat\u00e9.\");\n    }\n\n    \/\/ Nom de fichier\n    const lowerName = name.toLowerCase();\n    if (\/final\/i.test(name) || \/v[0-9]\/i.test(name)) {\n      score += 6;\n      minus.push(\"Nom de fichier indiquant plusieurs versions (\u201cfinal\u201d, \u201cv2\u201d\u2026) : conservez une trace claire de l\u2019\u00e9volution.\");\n    }\n    if (lowerName.startsWith(\"beat\") || lowerName.startsWith(\"track\") || lowerName === \"beat.mp3\") {\n      score += 4;\n      minus.push(\"Nom de fichier tr\u00e8s g\u00e9n\u00e9rique (\u201cbeat\u201d, \u201ctrack\u201d) : privil\u00e9giez un nom plus sp\u00e9cifique ou contextuel.\");\n    }\n    if (\/[0-9]{4}\/.test(name)) {\n      plus.push(\"Nom de fichier contenant une ann\u00e9e : peut contribuer \u00e0 situer la chronologie.\");\n    }\n\n    \/\/ M\u00e9tadonn\u00e9es audio (si pr\u00e9sentes)\n    if (meta && meta.hasID3) {\n      plus.push(\"M\u00e9tadonn\u00e9es audio (ID3) d\u00e9tect\u00e9es : utiles en compl\u00e9ment (titre, artiste, album\u2026).\");\n      score -= 3;\n    }\n\n    \/\/ Normalisation\n    if (score < 0) score = 0;\n    if (score > 100) score = 100;\n\n    \/\/ Interpr\u00e9tation\n    let level, levelText;\n    if (score <= 35) {\n      level = \"Risque faible\";\n      levelText = \"Votre fichier pr\u00e9sente un profil relativement favorable pour servir de base technique : format et\/ou anciennet\u00e9 coh\u00e9rents. Il reste toutefois recommand\u00e9 de consolider cette base avec un certificat d\u2019ant\u00e9riorit\u00e9 horodat\u00e9.\";\n    } else if (score <= 60) {\n      level = \"Risque mod\u00e9r\u00e9\";\n      levelText = \"Votre fichier comporte des \u00e9l\u00e9ments int\u00e9ressants mais aussi des fragilit\u00e9s (format compress\u00e9, taille limit\u00e9e ou date r\u00e9cente). Un d\u00e9p\u00f4t d\u00e9di\u00e9 permettrait de renforcer nettement votre position juridique.\";\n    } else if (score <= 80) {\n      level = \"Risque \u00e9lev\u00e9\";\n      levelText = \"Le profil de ce fichier est fragile s\u2019il est utilis\u00e9 seul comme preuve d\u2019ant\u00e9riorit\u00e9. Il est fortement conseill\u00e9 de g\u00e9n\u00e9rer un certificat d\u2019ant\u00e9riorit\u00e9 avant toute diffusion ou envoi.\";\n    } else {\n      level = \"Risque critique\";\n      levelText = \"Ce fichier ne devrait pas \u00eatre utilis\u00e9 seul pour d\u00e9fendre vos droits (format peu probant, tr\u00e8s r\u00e9cent ou peu informatif). Un d\u00e9p\u00f4t structur\u00e9 avec certificat blockchain est vivement recommand\u00e9 pour vous prot\u00e9ger en cas de plagiat.\";\n    }\n\n    return { score, level, levelText, plus, minus, ext, size, lastMod, name };\n  }\n\n  function renderFileData(analysis) {\n    const sizeStr = formatBytes(analysis.size);\n    const dateStr = formatDate(analysis.lastMod);\n    fileDataBox.innerHTML = `\n      <div class=\"tl-pro-filedata-row\">\n        <div><span class=\"tl-pro-label\">Nom du fichier :<\/span> <strong>${analysis.name}<\/strong><\/div>\n      <\/div>\n      <div class=\"tl-pro-filedata-row\">\n        <div><span class=\"tl-pro-label\">Extension d\u00e9tect\u00e9e :<\/span> <strong>${analysis.ext || \"Inconnue\"}<\/strong><\/div>\n        <div><span class=\"tl-pro-label\">Taille estim\u00e9e :<\/span> <strong>${sizeStr}<\/strong><\/div>\n        <div><span class=\"tl-pro-label\">Date locale :<\/span> <strong>${dateStr}<\/strong><\/div>\n      <\/div>\n      <p class=\"tl-pro-filedata-note\">\n        Ces informations techniques sont tir\u00e9es de votre syst\u00e8me et de votre navigateur. Elles sont utiles pour\n        une premi\u00e8re analyse, mais doivent id\u00e9alement \u00eatre compl\u00e9t\u00e9es par un <strong>d\u00e9p\u00f4t horodat\u00e9<\/strong>.\n      <\/p>\n    `;\n  }\n\n  function renderScore(analysis) {\n    const s = analysis.score;\n    scoreValueEl.textContent = s + \" %\";\n    scoreFillEl.style.width = s + \"%\";\n\n    let cls = \"\";\n    if (s <= 35) cls = \"low\";\n    else if (s <= 60) cls = \"medium\";\n    else if (s <= 80) cls = \"high\";\n    else cls = \"crit\";\n\n    scoreLevelEl.className = \"tl-pro-score-level \" + cls;\n    scoreLevelEl.textContent = analysis.level;\n    scoreDescEl.textContent = analysis.levelText;\n  }\n\n  function renderLists(plus, minus) {\n    plusEl.innerHTML = \"\";\n    minusEl.innerHTML = \"\";\n\n    if (!plus.length) {\n      plusEl.innerHTML = \"<li>Aucun point notable d\u00e9tect\u00e9. Un d\u00e9p\u00f4t d\u00e9di\u00e9 peut jouer un r\u00f4le cl\u00e9 pour renforcer votre dossier.<\/li>\";\n    } else {\n      plus.forEach(p => {\n        const li = document.createElement(\"li\");\n        li.textContent = p;\n        plusEl.appendChild(li);\n      });\n    }\n\n    if (!minus.length) {\n      minusEl.innerHTML = \"<li>Aucune fragilit\u00e9 majeure d\u00e9tect\u00e9e \u00e0 ce stade. Un certificat d\u2019ant\u00e9riorit\u00e9 reste toutefois recommand\u00e9.<\/li>\";\n    } else {\n      minus.forEach(m => {\n        const li = document.createElement(\"li\");\n        li.textContent = m;\n        minusEl.appendChild(li);\n      });\n    }\n  }\n\n  function renderReco(analysis) {\n    const ext = analysis.ext;\n    let text = \"\";\n\n    if ([\"wav\", \"flac\", \"aiff\"].includes(ext)) {\n      text = \"Vous utilisez un format audio non compress\u00e9, ce qui est positif pour la qualit\u00e9 de la preuve technique. Pour transformer ce fichier en \u00e9l\u00e9ment de preuve solide, l\u2019\u00e9tape suivante consiste \u00e0 g\u00e9n\u00e9rer un certificat d\u2019ant\u00e9riorit\u00e9 horodat\u00e9, utilisable dans un dossier de plagiat musical.\";\n    } else if ([\"mp3\", \"m4a\", \"ogg\", \"aac\"].includes(ext)) {\n      text = \"Votre fichier audio est compress\u00e9 (MP3 ou \u00e9quivalent). Il peut \u00eatre facilement copi\u00e9 ou modifi\u00e9. Il est conseill\u00e9 de d\u00e9poser \u00e9galement une version source (WAV\/FLAC) ou un ensemble plus complet (stems, projet MAO) via un certificat d\u2019ant\u00e9riorit\u00e9.\";\n    } else if ([\"pdf\", \"doc\", \"docx\", \"txt\", \"odt\"].includes(ext)) {\n      text = \"Votre document texte (paroles, contrat, partition\u2026) est un bon support pour expliquer votre cr\u00e9ation. Pour lui donner un poids juridique suppl\u00e9mentaire, associez-le \u00e0 un certificat d\u2019ant\u00e9riorit\u00e9 qui fige son contenu et sa date.\";\n    } else if ([\"zip\", \"rar\", \"7z\", \"tar\"].includes(ext)) {\n      text = \"Votre archive peut contenir plusieurs \u00e9l\u00e9ments cl\u00e9s (stems, projets, documents). Un d\u00e9p\u00f4t structur\u00e9 de cette archive avec un certificat d\u2019ant\u00e9riorit\u00e9 permet de s\u00e9curiser l\u2019ensemble du projet musical en une seule fois.\";\n    } else {\n      text = \"Le format de votre fichier est utilisable comme indicateur, mais reste peu standard pour un dossier juridique. Compl\u00e9tez id\u00e9alement votre d\u00e9marche avec un format plus lisible (WAV, PDF) et un certificat d\u2019ant\u00e9riorit\u00e9.\";\n    }\n\n    recoText.textContent = text;\n  }\n\n  function readID3IfNeeded(file, analysis) {\n    const ext = analysis.ext;\n    if (ext !== \"mp3\") {\n      id3Box.style.display = \"none\";\n      return { hasID3: false, fields: [] };\n    }\n\n    if (!window.jsmediatags) {\n      id3Box.style.display = \"none\";\n      return { hasID3: false, fields: [] };\n    }\n\n    id3List.innerHTML = \"\";\n    id3Box.style.display = \"block\";\n    const fields = [];\n\n    jsmediatags.read(file, {\n      onSuccess: function(tag) {\n        const tags = tag.tags || {};\n        const mapping = [\n          [\"Titre\", tags.title],\n          [\"Artiste\", tags.artist],\n          [\"Album\", tags.album],\n          [\"Ann\u00e9e\", tags.year],\n          [\"Genre\", tags.genre]\n        ];\n        mapping.forEach(([label, value]) => {\n          if (value) {\n            const li = document.createElement(\"li\");\n            li.textContent = label + \" : \" + value;\n            id3List.appendChild(li);\n            fields.push(label + \" : \" + value);\n          }\n        });\n        if (!fields.length) {\n          const li = document.createElement(\"li\");\n          li.textContent = \"Aucune m\u00e9tadonn\u00e9e textuelle significative d\u00e9tect\u00e9e.\";\n          id3List.appendChild(li);\n        }\n      },\n      onError: function() {\n        id3Box.style.display = \"none\";\n      }\n    });\n\n    return { hasID3: true, fields };\n  }\n\n  async function handleFile(file) {\n    if (!file) return;\n\n    results.style.display = \"block\";\n    results.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n\n    \/\/ Base analysis (without hash & ID3)\n    let tempMeta = { hasID3: false };\n    const preliminary = computeScore(file, tempMeta);\n    renderFileData(preliminary);\n    renderScore(preliminary);\n    renderLists(preliminary.plus, preliminary.minus);\n    renderReco(preliminary);\n\n    \/\/ Hash\n    hashEl.textContent = \"Calcul en cours\u2026\";\n    let hashValue = \"\";\n    try {\n      hashValue = await computeHash(file);\n      hashEl.textContent = hashValue;\n    } catch (e) {\n      hashEl.textContent = \"Impossible de calculer l\u2019empreinte SHA-256 sur ce navigateur.\";\n    }\n\n    \/\/ ID3 (si MP3)\n    const id3Info = readID3IfNeeded(file, preliminary);\n    if (id3Info.hasID3) {\n      \/\/ On am\u00e9liore l\u00e9g\u00e8rement le score si m\u00e9tadonn\u00e9es pr\u00e9sentes\n      const improved = computeScore(file, { hasID3: true });\n      renderScore(improved);\n      renderLists(improved.plus, improved.minus);\n      renderReco(improved);\n\n      currentAnalysis = {\n        ...improved,\n        hash: hashValue,\n        id3: id3Info.fields\n      };\n    } else {\n      currentAnalysis = {\n        ...preliminary,\n        hash: hashValue,\n        id3: []\n      };\n    }\n  }\n\n  \/\/ PDF report\n  pdfBtn.addEventListener(\"click\", function() {\n    if (!currentAnalysis) {\n      alert(\"Veuillez d\u2019abord analyser un fichier avant de g\u00e9n\u00e9rer le rapport PDF.\");\n      return;\n    }\n    if (!window.jspdf || !window.jspdf.jsPDF) {\n      alert(\"La biblioth\u00e8que jsPDF n\u2019est pas disponible. Impossible de g\u00e9n\u00e9rer le rapport PDF.\");\n      return;\n    }\n\n    const { score, level, levelText, plus, minus, ext, size, lastMod, name, hash, id3 } = currentAnalysis;\n    const sizeStr = formatBytes(size);\n    const dateStr = formatDate(lastMod);\n    const doc = new window.jspdf.jsPDF();\n\n    let y = 15;\n    doc.setFont(\"helvetica\", \"bold\");\n    doc.setFontSize(14);\n    doc.text(\"Rapport d\u2019analyse d\u2019originalit\u00e9 musicale\", 14, y);\n    y += 8;\n\n    doc.setFontSize(10);\n    doc.setFont(\"helvetica\", \"normal\");\n    doc.text(\"Fichier analys\u00e9 :\", 14, y);\n    y += 5;\n    doc.text(\"Nom : \" + name, 18, y); y += 5;\n    doc.text(\"Extension : \" + (ext || \"Inconnue\"), 18, y); y += 5;\n    doc.text(\"Taille : \" + sizeStr, 18, y); y += 5;\n    doc.text(\"Date locale : \" + dateStr, 18, y); y += 8;\n\n    doc.setFont(\"helvetica\", \"bold\");\n    doc.text(\"Empreinte SHA-256 :\", 14, y);\n    doc.setFont(\"helvetica\", \"normal\");\n    y += 5;\n\n    const hashLines = doc.splitTextToSize(hash || \"Non disponible\", 180);\n    hashLines.forEach(line => {\n      doc.text(line, 18, y);\n      y += 4;\n    });\n    y += 4;\n\n    doc.setFont(\"helvetica\", \"bold\");\n    doc.text(\"Score de solidit\u00e9 juridique :\", 14, y);\n    doc.setFont(\"helvetica\", \"normal\");\n    y += 5;\n    doc.text(\"Score estim\u00e9 : \" + score + \" % (\" + level + \")\", 18, y); y += 5;\n\n    const levelLines = doc.splitTextToSize(levelText, 180);\n    levelLines.forEach(line => {\n      doc.text(line, 18, y);\n      y += 4;\n    });\n    y += 5;\n\n    doc.setFont(\"helvetica\", \"bold\");\n    doc.text(\"Points forts d\u00e9tect\u00e9s :\", 14, y);\n    doc.setFont(\"helvetica\", \"normal\");\n    y += 5;\n    if (plus && plus.length) {\n      plus.forEach(p => {\n        const lines = doc.splitTextToSize(\"- \" + p, 180);\n        lines.forEach(line => {\n          doc.text(line, 18, y);\n          y += 4;\n        });\n      });\n    } else {\n      doc.text(\"- Aucun point notable d\u00e9tect\u00e9.\", 18, y);\n      y += 4;\n    }\n    y += 4;\n\n    doc.setFont(\"helvetica\", \"bold\");\n    doc.text(\"Fragilit\u00e9s d\u00e9tect\u00e9es :\", 14, y);\n    doc.setFont(\"helvetica\", \"normal\");\n    y += 5;\n    if (minus && minus.length) {\n      minus.forEach(m => {\n        const lines = doc.splitTextToSize(\"- \" + m, 180);\n        lines.forEach(line => {\n          doc.text(line, 18, y);\n          y += 4;\n        });\n      });\n    } else {\n      doc.text(\"- Aucune fragilit\u00e9 majeure d\u00e9tect\u00e9e \u00e0 ce stade.\", 18, y);\n      y += 4;\n    }\n    y += 4;\n\n    if (id3 && id3.length) {\n      doc.setFont(\"helvetica\", \"bold\");\n      doc.text(\"M\u00e9tadonn\u00e9es audio (ID3) :\", 14, y);\n      doc.setFont(\"helvetica\", \"normal\");\n      y += 5;\n      id3.forEach(f => {\n        const lines = doc.splitTextToSize(\"- \" + f, 180);\n        lines.forEach(line => {\n          doc.text(line, 18, y);\n          y += 4;\n        });\n      });\n      y += 4;\n    }\n\n    doc.setFont(\"helvetica\", \"bold\");\n    doc.text(\"Remarques importantes :\", 14, y);\n    doc.setFont(\"helvetica\", \"normal\");\n    y += 5;\n    const disclaimer = [\n      \"Ce rapport est g\u00e9n\u00e9r\u00e9 par l\u2019outil d\u2019analyse d\u2019originalit\u00e9 musicale de TuneLockr.\",\n      \"Il fournit une \u00e9valuation indicative de certains aspects techniques du fichier (format, taille, date locale, empreinte, m\u00e9tadonn\u00e9es).\",\n      \"Il ne constitue pas une preuve d\u2019ant\u00e9riorit\u00e9 en soi et ne remplace pas un avis juridique.\",\n      \"Pour renforcer votre protection en cas de plagiat ou de litige, il est recommand\u00e9 de g\u00e9n\u00e9rer un certificat d\u2019ant\u00e9riorit\u00e9 horodat\u00e9 (par exemple via TuneLockr) et de consulter un professionnel du droit.\"\n    ];\n    disclaimer.forEach(par => {\n      const lines = doc.splitTextToSize(par, 180);\n      lines.forEach(line => {\n        doc.text(line, 18, y);\n        y += 4;\n      });\n    });\n\n    doc.save(\"rapport-analyse-musicale-tunelockr.pdf\");\n  });\n\n  \/\/ Drag & drop events\n  dropZone.addEventListener(\"click\", () => fileInput.click());\n\n  dropZone.addEventListener(\"dragover\", (e) => {\n    e.preventDefault();\n    dropZone.style.borderColor = \"#ffb74d\";\n    dropZone.style.background = \"rgba(255,152,0,0.16)\";\n  });\n\n  dropZone.addEventListener(\"dragleave\", () => {\n    dropZone.style.borderColor = \"rgba(255,152,0,0.55)\";\n    dropZone.style.background = \"rgba(255,152,0,0.045)\";\n  });\n\n  dropZone.addEventListener(\"drop\", (e) => {\n    e.preventDefault();\n    dropZone.style.borderColor = \"rgba(255,152,0,0.55)\";\n    dropZone.style.background = \"rgba(255,152,0,0.045)\";\n    const file = e.dataTransfer.files[0];\n    handleFile(file);\n  });\n\n  fileInput.addEventListener(\"change\", () => {\n    if (fileInput.files && fileInput.files[0]) {\n      handleFile(fileInput.files[0]);\n    }\n  });\n\n})();\n<\/script>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-99951fe e-flex e-con-boxed e-con e-parent\" data-id=\"99951fe\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-efe95f8 elementor-widget elementor-widget-html\" data-id=\"efe95f8\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<section class=\"tl-after-analyse\">\n  <div class=\"tl-after-inner\">\n\n    <h2>Comprendre et renforcer la valeur de votre preuve musicale<\/h2>\n\n    <p>\n      L\u2019analyse de votre fichier est une premi\u00e8re \u00e9tape essentielle pour \u00e9valuer la \n      <strong>solidit\u00e9 technique de votre preuve<\/strong>.  \n      Elle permet d\u2019identifier les \u00e9l\u00e9ments exploitables (empreinte, m\u00e9tadonn\u00e9es, structure) \n      ainsi que les \u00e9ventuelles fragilit\u00e9s.  \n      Pour s\u00e9curiser pleinement votre \u0153uvre, il est recommand\u00e9 de compl\u00e9ter cette analyse \n      avec un <strong>certificat d\u2019ant\u00e9riorit\u00e9 horodat\u00e9<\/strong>.\n    <\/p>\n\n    <!-- SECTION 1 -->\n    <h3>1. Pourquoi analyser un fichier musical ?<\/h3>\n    <p>\n      Avant toute d\u00e9marche de protection, il est important de v\u00e9rifier si votre fichier \n      constitue une base fiable.  \n      Une analyse technique permet de :\n    <\/p>\n\n    <ul>\n      <li>V\u00e9rifier la pr\u00e9sence et la coh\u00e9rence des <strong>m\u00e9tadonn\u00e9es<\/strong><\/li>\n      <li>G\u00e9n\u00e9rer une <strong>empreinte cryptographique (SHA-256)<\/strong><\/li>\n      <li>Identifier les faiblesses potentielles du fichier<\/li>\n      <li>Pr\u00e9parer un dossier exploitable en cas de litige<\/li>\n    <\/ul>\n\n    <!-- SECTION 2 -->\n    <h3>2. Preuve d\u2019ant\u00e9riorit\u00e9 : un \u00e9l\u00e9ment cl\u00e9 en cas de litige<\/h3>\n    <p>\n      En cas de conflit ou de plagiat, il ne suffit pas d\u2019affirmer \u00eatre l\u2019auteur : \n      il faut pouvoir le d\u00e9montrer.  \n      Les juges examinent notamment :\n    <\/p>\n\n    <ul>\n      <li><strong>L\u2019ant\u00e9riorit\u00e9 v\u00e9rifiable<\/strong> de la cr\u00e9ation<\/li>\n      <li>La coh\u00e9rence technique des \u00e9l\u00e9ments fournis<\/li>\n    <\/ul>\n\n    <p>\n      Les fichiers bruts (MP3, exports, captures d\u2019\u00e9cran) sont souvent \n      <strong>facilement contestables<\/strong> s\u2019ils ne sont pas accompagn\u00e9s \n      d\u2019une preuve solide.\n    <\/p>\n\n    <!-- SECTION 3 -->\n    <h3>3. Quand analyser votre fichier ?<\/h3>\n    <p>Id\u00e9alement <strong>avant toute diffusion ou partage<\/strong> :<\/p>\n\n    <ul>\n      <li>Avant d\u2019envoyer un beat ou une d\u00e9mo<\/li>\n      <li>Avant une collaboration (stems \/ projet)<\/li>\n      <li>Avant un envoi \u00e0 un label ou \u00e9diteur<\/li>\n      <li>Avant publication (Spotify, YouTube, r\u00e9seaux)<\/li>\n    <\/ul>\n\n    <!-- SECTION 4 -->\n    <h3>4. Les limites des preuves classiques<\/h3>\n\n    <ul>\n      <li><strong>MP3 \/ WAV<\/strong> : modifiables, sans valeur temporelle fiable<\/li>\n      <li><strong>Dates syst\u00e8me<\/strong> : falsifiables en quelques secondes<\/li>\n      <li><strong>Captures d\u2019\u00e9cran<\/strong> : non opposables juridiquement seules<\/li>\n      <li><strong>E-mails<\/strong> : facilement contestables<\/li>\n    <\/ul>\n\n    <p>\n      Sans analyse ni certification, ces \u00e9l\u00e9ments restent \n      <strong>insuffisants dans un cadre juridique<\/strong>.\n    <\/p>\n\n    <!-- SECTION 5 -->\n    <h3>5. Pourquoi compl\u00e9ter avec un certificat TuneLockr<\/h3>\n    <p>\n      TuneLockr permet de transformer votre fichier en une \n      <strong>preuve d\u2019ant\u00e9riorit\u00e9 horodat\u00e9e<\/strong>, reposant sur une \n      empreinte cryptographique infalsifiable et enregistr\u00e9e sur la blockchain Tezos, \n      conform\u00e9ment aux bonnes pratiques (eIDAS, CNIL).\n    <\/p>\n\n    <p>\n      Cette combinaison :\n    <\/p>\n\n    <ul>\n      <li>Analyse technique du fichier<\/li>\n      <li>+ Horodatage blockchain<\/li>\n    <\/ul>\n\n    <p>\n      constitue un <strong>niveau de preuve nettement plus solide<\/strong> \n      en cas de litige.\n    <\/p>\n\n    <!-- SECTION 6 -->\n    <h3>6. Ressources officielles<\/h3>\n\n    <ul class=\"tl-links-official\">\n      <li>\n        <a href=\"https:\/\/www.sacem.fr\" target=\"_blank\" rel=\"noopener\">SACEM \u2013 Gestion des droits d\u2019auteur \u2192<\/a>\n      <\/li>\n      <li>\n        <a href=\"https:\/\/www.wipo.int\" target=\"_blank\" rel=\"noopener\">OMPI \u2013 Copyright international \u2192<\/a>\n      <\/li>\n      <li>\n        <a href=\"https:\/\/www.cisac.org\" target=\"_blank\" rel=\"noopener\">CISAC \u2013 R\u00e9seau mondial \u2192<\/a>\n      <\/li>\n      <li>\n        <a href=\"https:\/\/www.copyright.gov\" target=\"_blank\" rel=\"noopener\">U.S. Copyright Office \u2192<\/a>\n      <\/li>\n    <\/ul>\n\n    <!-- CTA FINAL -->\n    <div class=\"tl-after-cta\">\n      <h3>Pr\u00eat \u00e0 s\u00e9curiser votre preuve ?<\/h3>\n      <p>\n        Passez de l\u2019analyse \u00e0 une preuve horodat\u00e9e exploitable en cas de litige.\n      <\/p>\n      <a href=\"https:\/\/app.tunelockr.com\" target=\"_blank\" class=\"tl-after-btn\">\n        Obtenir un certificat \u2192\n      <\/a>\n    <\/div>\n\n  <\/div>\n<\/section>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0f6b27f e-flex e-con-boxed e-con e-parent\" data-id=\"0f6b27f\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c0c5998 e-flex e-con-boxed e-con e-parent\" data-id=\"c0c5998\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;boxed&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a809c1a elementor-widget elementor-widget-image\" data-id=\"a809c1a\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<style>\/*! elementor - v3.19.0 - 28-02-2024 *\/\n.elementor-widget-image{text-align:center}.elementor-widget-image a{display:inline-block}.elementor-widget-image a img[src$=\".svg\"]{width:48px}.elementor-widget-image img{vertical-align:middle;display:inline-block}<\/style>\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"512\" height=\"768\" src=\"https:\/\/tunelockr.com\/wp-content\/uploads\/2025\/03\/top-view-hard-disk-components-with-blue-light-512x768.jpg\" class=\"attachment-medium size-medium wp-image-6758\" alt=\"preuve d&apos;ant\u00e9riorit\u00e9\" srcset=\"https:\/\/tunelockr.com\/wp-content\/uploads\/2025\/03\/top-view-hard-disk-components-with-blue-light-512x768.jpg 512w, https:\/\/tunelockr.com\/wp-content\/uploads\/2025\/03\/top-view-hard-disk-components-with-blue-light-800x1200.jpg 800w, https:\/\/tunelockr.com\/wp-content\/uploads\/2025\/03\/top-view-hard-disk-components-with-blue-light-1024x1536.jpg 1024w, https:\/\/tunelockr.com\/wp-content\/uploads\/2025\/03\/top-view-hard-disk-components-with-blue-light-1365x2048.jpg 1365w, https:\/\/tunelockr.com\/wp-content\/uploads\/2025\/03\/top-view-hard-disk-components-with-blue-light-8x12.jpg 8w\" sizes=\"(max-width: 512px) 100vw, 512px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>TuneLockr Proof\u2122 Analyse de fichier musical &#038; v\u00e9rification de preuve d\u2019ant\u00e9riorit\u00e9 V\u00e9rifiez en quelques secondes si votre fichier musical peut constituer une preuve d\u2019ant\u00e9riorit\u00e9 exploitable en cas de plagiat musical ou de litige sur le droit d\u2019auteur. TuneLockr Proof analyse localement votre fichier audio ou document afin d\u2019identifier ses \u00e9l\u00e9ments techniques et pr\u00e9parer votre protection. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":6758,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-7394","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/tunelockr.com\/en\/wp-json\/wp\/v2\/pages\/7394","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tunelockr.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/tunelockr.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/tunelockr.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tunelockr.com\/en\/wp-json\/wp\/v2\/comments?post=7394"}],"version-history":[{"count":50,"href":"https:\/\/tunelockr.com\/en\/wp-json\/wp\/v2\/pages\/7394\/revisions"}],"predecessor-version":[{"id":8033,"href":"https:\/\/tunelockr.com\/en\/wp-json\/wp\/v2\/pages\/7394\/revisions\/8033"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tunelockr.com\/en\/wp-json\/wp\/v2\/media\/6758"}],"wp:attachment":[{"href":"https:\/\/tunelockr.com\/en\/wp-json\/wp\/v2\/media?parent=7394"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}