{"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-09-18T15:01:30","modified_gmt":"2026-09-18T13:01:30","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\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<!-- =========================================================\nTUNELOCKR PROOF\u2122 \u2014 SCANNER \/ PREUVE \/ SURVEILLANCE\nVERSION ENHANCED 2026\n\u00c0 utiliser autour de l'outil existant #tl-analyse-pro\n========================================================= -->\n\n<section class=\"tl-proof-hero\" aria-labelledby=\"tl-proof-title\">\n\n  <div class=\"tl-proof-glow tl-proof-glow-a\" aria-hidden=\"true\"><\/div>\n  <div class=\"tl-proof-glow tl-proof-glow-b\" aria-hidden=\"true\"><\/div>\n\n  <div class=\"tl-proof-shell\">\n\n    <header class=\"tl-proof-head\">\n\n      <span class=\"tl-proof-kicker\">\n        <i><\/i>\n        TuneLockr Proof\u2122 \u00b7 Analyse locale\n      <\/span>\n\n      <h1 id=\"tl-proof-title\">\n        TuneLockr Proof\u2122\n        <strong>Analysez votre fichier avant qu\u2019il ne circule.<\/strong>\n      <\/h1>\n\n      <p class=\"tl-proof-subtitle\">\n        Scanner anti-plagiat musical & pr\u00e9paration de preuve d\u2019ant\u00e9riorit\u00e9\n      <\/p>\n\n      <p class=\"tl-proof-lead\">\n        Analysez en quelques secondes les \u00e9l\u00e9ments techniques de votre fichier musical :\n        m\u00e9tadonn\u00e9es, structure et empreinte cryptographique.\n        L\u2019objectif n\u2019est pas de d\u00e9clarer automatiquement qu\u2019un morceau est plagi\u00e9,\n        mais de <strong>mieux documenter la version que vous poss\u00e9dez aujourd\u2019hui<\/strong>\n        avant un partage, une collaboration ou une diffusion.\n      <\/p>\n\n      <div class=\"tl-proof-trust\" aria-label=\"Caract\u00e9ristiques de l'analyse\">\n        <span><b>Local<\/b> dans votre navigateur<\/span>\n        <span><b>Aucun fichier<\/b> transmis pour l\u2019analyse<\/span>\n        <span><b>SHA-256<\/b> empreinte du fichier<\/span>\n        <span><b>MP3 \u00b7 WAV \u00b7 FLAC \u00b7 PDF \u00b7 ZIP<\/b><\/span>\n      <\/div>\n\n      <div class=\"tl-proof-actions\">\n        <a href=\"#tl-analyse-pro\" class=\"tl-proof-btn tl-proof-btn-primary\">\n          Analyser mon fichier\n          <span>\u2193<\/span>\n        <\/a>\n\n        <a href=\"#tl-proof-next\" class=\"tl-proof-btn tl-proof-btn-secondary\">\n          Comprendre le parcours\n        <\/a>\n      <\/div>\n\n    <\/header>\n\n\n    <!-- WHAT THE SCANNER REALLY DOES -->\n    <div class=\"tl-proof-capabilities\">\n\n      <article>\n        <span class=\"tl-proof-icon\" aria-hidden=\"true\">\n          <svg viewBox=\"0 0 24 24\">\n            <path d=\"M4 5h16v14H4z\"><\/path>\n            <path d=\"M8 9h8M8 13h5\"><\/path>\n          <\/svg>\n        <\/span>\n        <div>\n          <small>ANALYSE<\/small>\n          <strong>Structure du fichier<\/strong>\n          <p>Format, informations techniques et \u00e9l\u00e9ments disponibles dans le fichier.<\/p>\n        <\/div>\n      <\/article>\n\n      <article>\n        <span class=\"tl-proof-icon\" aria-hidden=\"true\">\n          <svg viewBox=\"0 0 24 24\">\n            <path d=\"M4 7h16M6 11h12M8 15h8M10 19h4\"><\/path>\n          <\/svg>\n        <\/span>\n        <div>\n          <small>M\u00c9TADONN\u00c9ES<\/small>\n          <strong>Informations embarqu\u00e9es<\/strong>\n          <p>Lecture des m\u00e9tadonn\u00e9es pr\u00e9sentes sans les confondre avec une preuve d\u2019auteur.<\/p>\n        <\/div>\n      <\/article>\n\n      <article>\n        <span class=\"tl-proof-icon\" aria-hidden=\"true\">\n          <svg viewBox=\"0 0 24 24\">\n            <path d=\"M7 4 4 7l3 3M17 4l3 3-3 3M8 20l8-16\"><\/path>\n          <\/svg>\n        <\/span>\n        <div>\n          <small>EMPREINTE<\/small>\n          <strong>Hash SHA-256<\/strong>\n          <p>Une empreinte permet d\u2019identifier pr\u00e9cis\u00e9ment cette version du fichier.<\/p>\n        <\/div>\n      <\/article>\n\n      <article>\n        <span class=\"tl-proof-icon\" aria-hidden=\"true\">\n          <svg viewBox=\"0 0 24 24\">\n            <path d=\"M6 3h9l3 3v15H6z\"><\/path>\n            <path d=\"M15 3v4h4M9 12h6M9 16h4\"><\/path>\n          <\/svg>\n        <\/span>\n        <div>\n          <small>RAPPORT<\/small>\n          <strong>Synth\u00e8se d\u2019analyse<\/strong>\n          <p>Conservez les r\u00e9sultats techniques avec votre dossier de cr\u00e9ation.<\/p>\n        <\/div>\n      <\/article>\n\n    <\/div>\n\n\n    <!-- IMPORTANT CLARIFICATION -->\n    <div class=\"tl-proof-clarity\">\n      <span>Important<\/span>\n      <p>\n        <strong>Une analyse technique ne prouve pas \u00e0 elle seule la paternit\u00e9 d\u2019une \u0153uvre\n        et ne d\u00e9termine pas qu\u2019il y a plagiat.<\/strong>\n        Elle vous aide \u00e0 documenter le fichier et \u00e0 construire une chronologie plus claire.\n      <\/p>\n    <\/div>\n\n  <\/div>\n\n<\/section>\n\n\n<!-- =========================================================\n\u00c0 CONSERVER ICI :\nVOTRE OUTIL EXISTANT AVEC id=\"tl-analyse-pro\"\n========================================================= -->\n\n\n<section class=\"tl-proof-after\" id=\"tl-proof-next\" aria-labelledby=\"tl-proof-after-title\">\n\n  <div class=\"tl-proof-after-shell\">\n\n    <!-- INTRO -->\n    <header class=\"tl-proof-after-head\">\n\n      <span>Apr\u00e8s l\u2019analyse<\/span>\n\n      <h2 id=\"tl-proof-after-title\">\n        Un fichier analys\u00e9 est un bon d\u00e9but.\n        <strong>Une chronologie v\u00e9rifiable va plus loin.<\/strong>\n      <\/h2>\n\n      <p>\n        Le scanner d\u00e9crit le fichier que vous avez entre les mains.\n        Pour renforcer votre dossier, l\u2019\u00e9tape suivante consiste \u00e0 cr\u00e9er\n        un point de r\u00e9f\u00e9rence dat\u00e9 associ\u00e9 \u00e0 cette version, puis \u00e0 suivre\n        les usages lorsqu\u2019elle commence \u00e0 circuler.\n      <\/p>\n\n    <\/header>\n\n\n    <!-- RIGHTS PATH -->\n    <div class=\"tl-proof-path\">\n\n      <article class=\"is-current\">\n        <div class=\"tl-proof-path-top\">\n          <span>01<\/span>\n          <b>ANALYZE<\/b>\n        <\/div>\n\n        <h3>Comprendre le fichier<\/h3>\n\n        <p>\n          Structure, m\u00e9tadonn\u00e9es, empreinte SHA-256 et rapport technique.\n        <\/p>\n\n        <small>Vous \u00eates ici<\/small>\n      <\/article>\n\n\n      <i class=\"tl-proof-arrow\" aria-hidden=\"true\">\u2192<\/i>\n\n\n      <article>\n        <div class=\"tl-proof-path-top\">\n          <span>02<\/span>\n          <b>PROTECT<\/b>\n        <\/div>\n\n        <h3>Cr\u00e9er une preuve dat\u00e9e<\/h3>\n\n        <p>\n          Associez cette version \u00e0 une empreinte, un horodatage\n          et un certificat \u00e0 conserver avec votre dossier.\n        <\/p>\n\n        <a href=\"https:\/\/app.tunelockr.com\/depot\">\n          Cr\u00e9er mon d\u00e9p\u00f4t \u2192\n        <\/a>\n      <\/article>\n\n\n      <i class=\"tl-proof-arrow\" aria-hidden=\"true\">\u2192<\/i>\n\n\n      <article class=\"is-monitor\">\n        <div class=\"tl-proof-path-top\">\n          <span>03<\/span>\n          <b>MONITOR<\/b>\n        <\/div>\n\n        <h3>Surveiller les usages<\/h3>\n\n        <p>\n          Une fois votre musique en circulation, TuneLockr peut centraliser\n          des correspondances potentielles \u00e0 examiner dans leur contexte.\n        <\/p>\n\n        <a href=\"https:\/\/tunelockr.com\/surveillance-musicale\/\">\n          D\u00e9couvrir la surveillance \u2192\n        <\/a>\n      <\/article>\n\n    <\/div>\n\n\n    <!-- WHY ANALYZE -->\n    <section class=\"tl-proof-info\">\n\n      <div class=\"tl-proof-info-copy\">\n\n        <span class=\"tl-proof-section-label\">Pourquoi analyser ?<\/span>\n\n        <h3>\n          Le fichier contient des informations utiles.\n          <strong>Mais elles n\u2019ont pas toutes la m\u00eame valeur.<\/strong>\n        <\/h3>\n\n        <p>\n          Une date syst\u00e8me, une m\u00e9tadonn\u00e9e ID3 ou le nom d\u2019un fichier peuvent aider\n          \u00e0 reconstruire une chronologie, mais ils ne doivent pas \u00eatre pr\u00e9sent\u00e9s\n          comme une preuve juridique automatique.\n        <\/p>\n\n        <ul>\n          <li>\n            <strong>Empreinte cryptographique<\/strong>\n            Identifie pr\u00e9cis\u00e9ment un fichier donn\u00e9.\n          <\/li>\n\n          <li>\n            <strong>M\u00e9tadonn\u00e9es<\/strong>\n            Apportent du contexte, mais peuvent \u00eatre modifi\u00e9es.\n          <\/li>\n\n          <li>\n            <strong>Fichiers source<\/strong>\n            Sessions, stems et versions successives peuvent documenter le processus cr\u00e9atif.\n          <\/li>\n\n          <li>\n            <strong>Horodatage ind\u00e9pendant<\/strong>\n            Peut compl\u00e9ter la chronologie en associant des donn\u00e9es \u00e0 un moment donn\u00e9.\n          <\/li>\n        <\/ul>\n\n      <\/div>\n\n\n      <aside class=\"tl-proof-evidence\">\n\n        <span class=\"tl-proof-evidence-kicker\">\n          Un dossier plus solide\n        <\/span>\n\n        <div>\n          <b>01<\/b>\n          <p>\n            <strong>Fichier original<\/strong>\n            <span>La version r\u00e9ellement cr\u00e9\u00e9e ou envoy\u00e9e.<\/span>\n          <\/p>\n        <\/div>\n\n        <div>\n          <b>02<\/b>\n          <p>\n            <strong>Empreinte<\/strong>\n            <span>Permet de v\u00e9rifier qu\u2019il s\u2019agit du m\u00eame fichier.<\/span>\n          <\/p>\n        <\/div>\n\n        <div>\n          <b>03<\/b>\n          <p>\n            <strong>Point de r\u00e9f\u00e9rence dat\u00e9<\/strong>\n            <span>Documente que cette version existait \u00e0 ce moment-l\u00e0.<\/span>\n          <\/p>\n        <\/div>\n\n        <div>\n          <b>04<\/b>\n          <p>\n            <strong>Contexte<\/strong>\n            <span>Projets, \u00e9changes, co-auteurs, contrats et publications.<\/span>\n          <\/p>\n        <\/div>\n\n      <\/aside>\n\n    <\/section>\n\n\n    <!-- WHEN -->\n    <section class=\"tl-proof-when\">\n\n      <span class=\"tl-proof-section-label\">Le bon moment<\/span>\n\n      <h3>Analysez et documentez <strong>avant que le fichier ne quitte votre contr\u00f4le.<\/strong><\/h3>\n\n      <div class=\"tl-proof-when-grid\">\n\n        <div>\n          <span>\ud83c\udf9b\ufe0f<\/span>\n          <strong>Avant d\u2019envoyer un beat<\/strong>\n          <p>Artiste, client, marketplace ou producteur.<\/p>\n        <\/div>\n\n        <div>\n          <span>\ud83e\udd1d<\/span>\n          <strong>Avant une collaboration<\/strong>\n          <p>Topline, stems, maquette ou session de production.<\/p>\n        <\/div>\n\n        <div>\n          <span>\ud83d\udce4<\/span>\n          <strong>Avant un pitch<\/strong>\n          <p>Label, \u00e9diteur, manager, m\u00e9dia ou superviseur musical.<\/p>\n        <\/div>\n\n        <div>\n          <span>\u25b6\ufe0f<\/span>\n          <strong>Avant publication<\/strong>\n          <p>Spotify, YouTube, TikTok, Instagram ou distribution.<\/p>\n        <\/div>\n\n      <\/div>\n\n    <\/section>\n\n\n    <!-- MONITORING -->\n    <section class=\"tl-proof-monitor\">\n\n      <div class=\"tl-proof-monitor-copy\">\n\n        <span class=\"tl-proof-section-label\">\n          Apr\u00e8s la diffusion\n        <\/span>\n\n        <h3>\n          La preuve documente l\u2019avant.\n          <strong>La surveillance vous aide \u00e0 regarder l\u2019apr\u00e8s.<\/strong>\n        <\/h3>\n\n        <p>\n          Lorsqu\u2019une \u0153uvre commence \u00e0 circuler, le probl\u00e8me change :\n          il ne s\u2019agit plus seulement de savoir quand votre fichier existait,\n          mais aussi d\u2019identifier les correspondances potentielles qui apparaissent en ligne.\n        <\/p>\n\n        <p>\n          TuneLockr organise ces signaux dans une logique de v\u00e9rification :\n          une correspondance d\u00e9tect\u00e9e n\u2019est pas automatiquement un plagiat,\n          une contrefa\u00e7on ou un usage non autoris\u00e9.\n        <\/p>\n\n        <a href=\"https:\/\/tunelockr.com\/surveillance-musicale\/\" class=\"tl-proof-monitor-btn\">\n          D\u00e9couvrir la surveillance musicale \u2192\n        <\/a>\n\n      <\/div>\n\n\n      <div class=\"tl-proof-inbox\" aria-hidden=\"true\">\n\n        <div class=\"tl-proof-inbox-head\">\n          <span>RIGHTS INBOX<\/span>\n          <b>3 \u00c0 V\u00c9RIFIER<\/b>\n        <\/div>\n\n        <div class=\"tl-proof-match\">\n          <span class=\"dot is-orange\"><\/span>\n          <div>\n            <strong>Midnight Drive<\/strong>\n            <small>Correspondance d\u00e9tect\u00e9e \u00b7 vid\u00e9o<\/small>\n          <\/div>\n          <em>\u00c0 v\u00e9rifier<\/em>\n        <\/div>\n\n        <div class=\"tl-proof-match\">\n          <span class=\"dot is-green\"><\/span>\n          <div>\n            <strong>Golden Hour<\/strong>\n            <small>Correspondance \u00b7 contenu social<\/small>\n          <\/div>\n          <em>\u00c0 examiner<\/em>\n        <\/div>\n\n        <div class=\"tl-proof-match\">\n          <span class=\"dot\"><\/span>\n          <div>\n            <strong>No Signal<\/strong>\n            <small>Correspondance \u00b7 publication<\/small>\n          <\/div>\n          <em>Signal<\/em>\n        <\/div>\n\n        <div class=\"tl-proof-inbox-foot\">\n          Une d\u00e9tection est un signal \u00e0 contextualiser.\n        <\/div>\n\n      <\/div>\n\n    <\/section>\n\n\n    <!-- OFFICIAL SOURCES -->\n    <section class=\"tl-proof-sources\">\n\n      <span class=\"tl-proof-section-label\">\n        Sources officielles\n      <\/span>\n\n      <h3>Comprendre la preuve num\u00e9rique.<\/h3>\n\n      <div class=\"tl-proof-source-grid\">\n\n        <a href=\"https:\/\/www.wipo.int\/fr\/web\/copyright\/protection\" target=\"_blank\" rel=\"noopener noreferrer\">\n          <strong>OMPI \/ WIPO<\/strong>\n          <span>\n            Preuve de cr\u00e9ation, d\u00e9p\u00f4ts et horodatage num\u00e9rique.\n          <\/span>\n          <b>\u2197<\/b>\n        <\/a>\n\n        <a href=\"https:\/\/eur-lex.europa.eu\/eli\/reg\/2014\/910\/2024-05-20\/eng\" target=\"_blank\" rel=\"noopener noreferrer\">\n          <strong>EUR-Lex \u00b7 eIDAS<\/strong>\n          <span>\n            Article 41 sur l\u2019effet juridique des horodatages \u00e9lectroniques.\n          <\/span>\n          <b>\u2197<\/b>\n        <\/a>\n\n      <\/div>\n\n      <p class=\"tl-proof-source-note\">\n        L\u2019OMPI rappelle notamment qu\u2019un horodatage peut servir \u00e0 documenter\n        la situation d\u2019un contenu num\u00e9rique \u00e0 un moment donn\u00e9.\n        Le r\u00e8glement eIDAS pr\u00e9cise qu\u2019un horodatage \u00e9lectronique ne peut \u00eatre\n        priv\u00e9 d\u2019effet juridique uniquement parce qu\u2019il est \u00e9lectronique.\n      <\/p>\n\n    <\/section>\n\n\n    <!-- FINAL CTA -->\n    <section class=\"tl-proof-final\">\n\n      <span>Votre fichier est pr\u00eat ?<\/span>\n\n      <h3>\n        Analysez-le maintenant.\n        <strong>Prot\u00e9gez-le avant de le partager.<\/strong>\n      <\/h3>\n\n      <p>\n        Commencez par le scanner. Si cette version est importante,\n        cr\u00e9ez ensuite un point de r\u00e9f\u00e9rence dat\u00e9 et conservez-le avec votre dossier.\n      <\/p>\n\n      <div class=\"tl-proof-final-actions\">\n\n        <a href=\"#tl-analyse-pro\" class=\"tl-proof-btn tl-proof-btn-primary\">\n          Analyser mon fichier\n        <\/a>\n\n        <a href=\"https:\/\/app.tunelockr.com\/depot\" class=\"tl-proof-btn tl-proof-btn-secondary\">\n          Cr\u00e9er une preuve \u2192\n        <\/a>\n\n      <\/div>\n\n    <\/section>\n\n  <\/div>\n\n<\/section>\n\n\n<style>\n\/* =========================================================\nTUNELOCKR PROOF\u2122 \u2014 ENHANCED\n========================================================= *\/\n\n.tl-proof-hero,\n.tl-proof-hero *,\n.tl-proof-after,\n.tl-proof-after *{\n  box-sizing:border-box;\n}\n\n.tl-proof-hero,\n.tl-proof-after{\n  --orange:#f97316;\n  --orange2:#fb923c;\n  --orange-dark:#e85d0b;\n  --ink:#111827;\n  --muted:#667085;\n  --dark:#06090f;\n  --dark2:#0b111c;\n  --line:rgba(255,255,255,.09);\n\n  font-family:\n    -apple-system,\n    BlinkMacSystemFont,\n    \"Inter\",\n    \"Helvetica Neue\",\n    Arial,\n    sans-serif;\n}\n\n\n\/* =========================================================\nHERO\n========================================================= *\/\n\n.tl-proof-hero{\n  position:relative;\n  isolation:isolate;\n  overflow:hidden;\n\n  padding:\n    clamp(68px,8vw,104px)\n    24px\n    clamp(54px,6vw,76px);\n\n  background:\n    radial-gradient(circle at 50% 0%,rgba(249,115,22,.14),transparent 32%),\n    radial-gradient(circle at 5% 90%,rgba(52,120,190,.08),transparent 34%),\n    linear-gradient(180deg,#080c14,#030509);\n\n  color:#fff;\n\n  border-bottom:1px solid rgba(255,255,255,.06);\n}\n\n.tl-proof-glow{\n  position:absolute;\n  z-index:0;\n  border-radius:50%;\n  filter:blur(110px);\n  pointer-events:none;\n}\n\n.tl-proof-glow-a{\n  width:340px;\n  height:340px;\n  top:-170px;\n  left:-100px;\n  background:rgba(249,115,22,.16);\n}\n\n.tl-proof-glow-b{\n  width:320px;\n  height:320px;\n  right:-160px;\n  bottom:-140px;\n  background:rgba(70,130,180,.10);\n}\n\n.tl-proof-shell{\n  position:relative;\n  z-index:2;\n  width:min(1120px,100%);\n  margin:0 auto;\n}\n\n.tl-proof-head{\n  width:min(900px,100%);\n  margin:0 auto;\n  text-align:center;\n}\n\n.tl-proof-kicker{\n  display:inline-flex;\n  align-items:center;\n  gap:9px;\n\n  margin-bottom:18px;\n  padding:8px 12px;\n\n  border:1px solid rgba(249,115,22,.22);\n  border-radius:999px;\n\n  background:rgba(249,115,22,.09);\n\n  color:#fdba74;\n\n  font-size:.65rem;\n  font-weight:900;\n  letter-spacing:.09em;\n  text-transform:uppercase;\n}\n\n.tl-proof-kicker i{\n  width:7px;\n  height:7px;\n  border-radius:50%;\n  background:var(--orange);\n  box-shadow:0 0 0 5px rgba(249,115,22,.10);\n}\n\n.tl-proof-head h1{\n  margin:0 0 11px;\n\n  color:#fff !important;\n\n  font-size:clamp(2.65rem,5.3vw,4.7rem);\n  font-weight:930;\n  line-height:.99;\n  letter-spacing:-.06em;\n\n  text-wrap:balance;\n}\n\n.tl-proof-head h1 strong{\n  display:block;\n\n  color:var(--orange2) !important;\n\n  font-weight:inherit;\n}\n\n.tl-proof-subtitle{\n  margin:0 auto 17px !important;\n\n  color:rgba(255,255,255,.82) !important;\n\n  font-size:.79rem;\n  font-weight:800;\n  letter-spacing:.015em;\n}\n\n.tl-proof-lead{\n  max-width:800px;\n\n  margin:0 auto !important;\n\n  color:rgba(255,255,255,.67) !important;\n\n  font-size:1rem;\n  line-height:1.75;\n}\n\n.tl-proof-lead strong{\n  color:#fff !important;\n}\n\n.tl-proof-trust{\n  display:flex;\n  justify-content:center;\n  flex-wrap:wrap;\n  gap:8px;\n\n  margin-top:21px;\n}\n\n.tl-proof-trust span{\n  padding:7px 10px;\n\n  border:1px solid rgba(255,255,255,.09);\n  border-radius:999px;\n\n  background:rgba(255,255,255,.035);\n\n  color:rgba(255,255,255,.58);\n\n  font-size:.63rem;\n  font-weight:650;\n}\n\n.tl-proof-trust b{\n  color:#fff !important;\n}\n\n.tl-proof-actions,\n.tl-proof-final-actions{\n  display:flex;\n  justify-content:center;\n  flex-wrap:wrap;\n  gap:10px;\n\n  margin-top:25px;\n}\n\n.tl-proof-btn{\n  min-height:49px;\n\n  display:inline-flex;\n  align-items:center;\n  justify-content:center;\n  gap:8px;\n\n  padding:0 20px;\n\n  border-radius:999px;\n\n  font-size:.82rem;\n  font-weight:830;\n\n  text-decoration:none !important;\n\n  transition:\n    transform .18s ease,\n    box-shadow .18s ease,\n    border-color .18s ease;\n}\n\n.tl-proof-btn-primary{\n  background:\n    linear-gradient(135deg,#e85d0b,#f97316,#fb923c);\n\n  color:#fff !important;\n\n  box-shadow:\n    0 13px 29px\n    rgba(249,115,22,.25);\n}\n\n.tl-proof-btn-primary:hover{\n  transform:translateY(-2px);\n\n  box-shadow:\n    0 18px 34px\n    rgba(249,115,22,.33);\n}\n\n.tl-proof-btn-secondary{\n  border:1px solid rgba(255,255,255,.14);\n  background:rgba(255,255,255,.05);\n  color:#fff !important;\n}\n\n.tl-proof-btn-secondary:hover{\n  transform:translateY(-2px);\n  border-color:rgba(249,115,22,.30);\n}\n\n\n\/* CAPABILITIES *\/\n\n.tl-proof-capabilities{\n  display:grid;\n  grid-template-columns:repeat(4,minmax(0,1fr));\n  gap:10px;\n\n  margin-top:40px;\n}\n\n.tl-proof-capabilities article{\n  display:grid;\n  grid-template-columns:38px 1fr;\n  gap:10px;\n\n  padding:15px;\n\n  border:1px solid rgba(255,255,255,.075);\n  border-radius:15px;\n\n  background:rgba(255,255,255,.03);\n}\n\n.tl-proof-icon{\n  width:36px;\n  height:36px;\n\n  display:grid;\n  place-items:center;\n\n  border-radius:11px;\n\n  background:rgba(249,115,22,.10);\n\n  color:#fb923c;\n}\n\n.tl-proof-icon svg{\n  width:18px;\n  height:18px;\n\n  fill:none;\n  stroke:currentColor;\n  stroke-width:1.65;\n  stroke-linecap:round;\n  stroke-linejoin:round;\n}\n\n.tl-proof-capabilities small{\n  display:block;\n\n  margin-bottom:3px;\n\n  color:#fb923c;\n\n  font-size:.48rem;\n  font-weight:900;\n  letter-spacing:.09em;\n}\n\n.tl-proof-capabilities strong{\n  display:block;\n\n  color:#fff !important;\n\n  font-size:.72rem;\n  font-weight:820;\n}\n\n.tl-proof-capabilities p{\n  margin:4px 0 0 !important;\n\n  color:rgba(255,255,255,.48) !important;\n\n  font-size:.62rem;\n  line-height:1.45;\n}\n\n\n\/* CLARITY *\/\n\n.tl-proof-clarity{\n  display:flex;\n  align-items:flex-start;\n  gap:12px;\n\n  width:min(850px,100%);\n\n  margin:20px auto 0;\n\n  padding:13px 15px;\n\n  border:1px solid rgba(249,115,22,.16);\n  border-radius:14px;\n\n  background:rgba(249,115,22,.055);\n}\n\n.tl-proof-clarity > span{\n  flex:0 0 auto;\n\n  padding:5px 7px;\n\n  border-radius:999px;\n\n  background:rgba(249,115,22,.10);\n\n  color:#fdba74;\n\n  font-size:.5rem;\n  font-weight:900;\n  letter-spacing:.07em;\n  text-transform:uppercase;\n}\n\n.tl-proof-clarity p{\n  margin:0 !important;\n\n  color:rgba(255,255,255,.55) !important;\n\n  font-size:.68rem;\n  line-height:1.55;\n}\n\n.tl-proof-clarity strong{\n  color:rgba(255,255,255,.86) !important;\n}\n\n\n\/* =========================================================\nAFTER\n========================================================= *\/\n\n.tl-proof-after{\n  padding:\n    clamp(62px,7vw,92px)\n    24px;\n\n  background:\n    radial-gradient(circle at 50% 0%,rgba(249,115,22,.045),transparent 27%),\n    #fff;\n\n  color:var(--ink);\n}\n\n.tl-proof-after-shell{\n  width:min(1120px,100%);\n  margin:0 auto;\n}\n\n.tl-proof-after-head{\n  width:min(790px,100%);\n  margin:0 auto 31px;\n  text-align:center;\n}\n\n.tl-proof-after-head > span,\n.tl-proof-section-label{\n  display:inline-block;\n\n  margin-bottom:9px;\n\n  color:#c2410c;\n\n  font-size:.6rem;\n  font-weight:900;\n  letter-spacing:.10em;\n  text-transform:uppercase;\n}\n\n.tl-proof-after-head h2{\n  margin:0 0 13px;\n\n  color:#111827 !important;\n\n  font-size:clamp(2.15rem,4.2vw,3.55rem);\n  font-weight:920;\n  line-height:1.03;\n  letter-spacing:-.052em;\n\n  text-wrap:balance;\n}\n\n.tl-proof-after-head h2 strong{\n  display:block;\n\n  color:var(--orange-dark) !important;\n\n  font-weight:inherit;\n}\n\n.tl-proof-after-head p{\n  max-width:720px;\n\n  margin:0 auto !important;\n\n  color:#667085 !important;\n\n  font-size:.91rem;\n  line-height:1.72;\n}\n\n\n\/* PATH *\/\n\n.tl-proof-path{\n  display:grid;\n\n  grid-template-columns:\n    1fr\n    36px\n    1fr\n    36px\n    1fr;\n\n  align-items:stretch;\n\n  gap:7px;\n\n  margin-bottom:50px;\n}\n\n.tl-proof-path article{\n  position:relative;\n\n  padding:18px;\n\n  border:1px solid rgba(17,24,39,.075);\n  border-radius:17px;\n\n  background:#fff;\n\n  box-shadow:0 10px 28px rgba(15,23,42,.04);\n}\n\n.tl-proof-path article.is-current{\n  background:#fffaf6;\n  border-color:rgba(249,115,22,.18);\n}\n\n.tl-proof-path article.is-monitor{\n  background:\n    linear-gradient(145deg,#fff,#f7fbff);\n}\n\n.tl-proof-path-top{\n  display:flex;\n  align-items:center;\n  justify-content:space-between;\n  gap:10px;\n\n  margin-bottom:13px;\n}\n\n.tl-proof-path-top span{\n  color:#c2410c;\n\n  font-size:.57rem;\n  font-weight:900;\n}\n\n.tl-proof-path-top b{\n  color:#98a2b3;\n\n  font-size:.5rem;\n  font-weight:900;\n  letter-spacing:.08em;\n}\n\n.tl-proof-path h3{\n  margin:0 0 7px;\n\n  color:#111827 !important;\n\n  font-size:.88rem;\n  font-weight:850;\n}\n\n.tl-proof-path p{\n  margin:0 0 11px !important;\n\n  color:#667085 !important;\n\n  font-size:.7rem;\n  line-height:1.55;\n}\n\n.tl-proof-path small{\n  color:#c2410c;\n\n  font-size:.53rem;\n  font-weight:850;\n}\n\n.tl-proof-path a{\n  color:#c2410c !important;\n\n  font-size:.6rem;\n  font-weight:850;\n\n  text-decoration:none !important;\n}\n\n.tl-proof-arrow{\n  align-self:center;\n\n  color:#f97316;\n\n  font-size:.9rem;\n  font-style:normal;\n\n  text-align:center;\n}\n\n\n\/* INFO *\/\n\n.tl-proof-info{\n  display:grid;\n  grid-template-columns:minmax(0,1.08fr) minmax(330px,.92fr);\n  gap:clamp(34px,5vw,62px);\n\n  align-items:center;\n\n  padding:\n    clamp(30px,4vw,45px)\n    0;\n}\n\n.tl-proof-info-copy h3,\n.tl-proof-monitor-copy h3,\n.tl-proof-when h3,\n.tl-proof-sources h3{\n  margin:0 0 13px;\n\n  color:#111827 !important;\n\n  font-size:clamp(1.7rem,3vw,2.6rem);\n  font-weight:900;\n  line-height:1.08;\n  letter-spacing:-.045em;\n}\n\n.tl-proof-info-copy h3 strong,\n.tl-proof-monitor-copy h3 strong,\n.tl-proof-when h3 strong{\n  color:var(--orange-dark) !important;\n}\n\n.tl-proof-info-copy > p,\n.tl-proof-monitor-copy > p{\n  color:#667085 !important;\n\n  font-size:.88rem;\n  line-height:1.72;\n}\n\n.tl-proof-info-copy ul{\n  display:grid;\n  gap:9px;\n\n  margin:19px 0 0;\n  padding:0;\n\n  list-style:none;\n}\n\n.tl-proof-info-copy li{\n  position:relative;\n\n  padding:\n    11px\n    12px\n    11px\n    33px;\n\n  border:1px solid rgba(15,23,42,.06);\n  border-radius:12px;\n\n  color:#667085;\n\n  font-size:.68rem;\n  line-height:1.45;\n}\n\n.tl-proof-info-copy li::before{\n  content:\"\u2713\";\n\n  position:absolute;\n  left:12px;\n  top:11px;\n\n  color:#16a34a;\n\n  font-size:.68rem;\n  font-weight:900;\n}\n\n.tl-proof-info-copy li strong{\n  display:block;\n\n  margin-bottom:2px;\n\n  color:#273244 !important;\n\n  font-size:.72rem;\n}\n\n\n\/* EVIDENCE *\/\n\n.tl-proof-evidence{\n  padding:19px;\n\n  border:1px solid rgba(15,23,42,.075);\n  border-radius:20px;\n\n  background:\n    linear-gradient(145deg,#fffaf6,#fff);\n\n  box-shadow:\n    0 17px 42px\n    rgba(15,23,42,.065);\n}\n\n.tl-proof-evidence-kicker{\n  display:block;\n\n  margin-bottom:11px;\n\n  color:#c2410c;\n\n  font-size:.57rem;\n  font-weight:900;\n  letter-spacing:.09em;\n  text-transform:uppercase;\n}\n\n.tl-proof-evidence > div{\n  display:grid;\n  grid-template-columns:31px 1fr;\n  gap:10px;\n\n  padding:10px 0;\n\n  border-bottom:1px solid rgba(15,23,42,.06);\n}\n\n.tl-proof-evidence > div:last-child{\n  border-bottom:0;\n}\n\n.tl-proof-evidence b{\n  width:29px;\n  height:29px;\n\n  display:grid;\n  place-items:center;\n\n  border-radius:9px;\n\n  background:#fff7ed;\n\n  color:#c2410c;\n\n  font-size:.55rem;\n}\n\n.tl-proof-evidence p{\n  margin:0 !important;\n}\n\n.tl-proof-evidence strong{\n  display:block;\n\n  color:#273244 !important;\n\n  font-size:.72rem;\n}\n\n.tl-proof-evidence span{\n  display:block;\n\n  margin-top:2px;\n\n  color:#7a8798;\n\n  font-size:.63rem;\n  line-height:1.4;\n}\n\n\n\/* WHEN *\/\n\n.tl-proof-when{\n  margin-top:27px;\n  padding:\n    clamp(32px,4vw,45px)\n    0;\n\n  border-top:1px solid rgba(15,23,42,.06);\n}\n\n.tl-proof-when > h3{\n  max-width:760px;\n}\n\n.tl-proof-when-grid{\n  display:grid;\n  grid-template-columns:repeat(4,minmax(0,1fr));\n  gap:9px;\n\n  margin-top:18px;\n}\n\n.tl-proof-when-grid > div{\n  padding:15px;\n\n  border:1px solid rgba(15,23,42,.07);\n  border-radius:14px;\n\n  background:#fff;\n\n  box-shadow:\n    0 8px 24px\n    rgba(15,23,42,.03);\n}\n\n.tl-proof-when-grid > div > span{\n  display:block;\n  margin-bottom:10px;\n  font-size:1rem;\n}\n\n.tl-proof-when-grid strong{\n  display:block;\n\n  color:#273244 !important;\n\n  font-size:.72rem;\n}\n\n.tl-proof-when-grid p{\n  margin:4px 0 0 !important;\n\n  color:#7a8798 !important;\n\n  font-size:.63rem;\n  line-height:1.45;\n}\n\n\n\/* MONITOR *\/\n\n.tl-proof-monitor{\n  display:grid;\n  grid-template-columns:minmax(0,1fr) minmax(330px,.88fr);\n  gap:clamp(38px,6vw,70px);\n\n  align-items:center;\n\n  margin-top:20px;\n  padding:\n    clamp(38px,5vw,58px);\n\n  overflow:hidden;\n\n  border-radius:25px;\n\n  background:\n    radial-gradient(circle at 90% 10%,rgba(249,115,22,.11),transparent 30%),\n    linear-gradient(145deg,#0c1320,#070b12);\n\n  color:#fff;\n}\n\n.tl-proof-monitor-copy h3{\n  color:#fff !important;\n}\n\n.tl-proof-monitor-copy > p{\n  color:rgba(255,255,255,.60) !important;\n}\n\n.tl-proof-monitor-btn{\n  display:inline-flex;\n\n  margin-top:8px;\n\n  color:#fdba74 !important;\n\n  font-size:.7rem;\n  font-weight:850;\n\n  text-decoration:none !important;\n}\n\n\n\/* INBOX *\/\n\n.tl-proof-inbox{\n  padding:17px;\n\n  border:1px solid rgba(255,255,255,.10);\n  border-radius:18px;\n\n  background:rgba(255,255,255,.05);\n\n  box-shadow:\n    0 20px 50px\n    rgba(0,0,0,.22);\n\n  backdrop-filter:blur(14px);\n  -webkit-backdrop-filter:blur(14px);\n}\n\n.tl-proof-inbox-head{\n  display:flex;\n  align-items:center;\n  justify-content:space-between;\n\n  padding-bottom:12px;\n  margin-bottom:2px;\n\n  border-bottom:1px solid rgba(255,255,255,.08);\n}\n\n.tl-proof-inbox-head span{\n  color:rgba(255,255,255,.53);\n\n  font-size:.51rem;\n  font-weight:900;\n  letter-spacing:.09em;\n}\n\n.tl-proof-inbox-head b{\n  color:#fb923c;\n\n  font-size:.49rem;\n  letter-spacing:.07em;\n}\n\n.tl-proof-match{\n  display:grid;\n  grid-template-columns:8px 1fr auto;\n  gap:9px;\n\n  align-items:center;\n\n  padding:11px 0;\n\n  border-bottom:1px solid rgba(255,255,255,.07);\n}\n\n.tl-proof-match .dot{\n  width:7px;\n  height:7px;\n\n  border-radius:50%;\n\n  background:#94a3b8;\n}\n\n.tl-proof-match .dot.is-orange{\n  background:#f97316;\n}\n\n.tl-proof-match .dot.is-green{\n  background:#22c55e;\n}\n\n.tl-proof-match strong{\n  display:block;\n\n  color:#fff !important;\n\n  font-size:.66rem;\n}\n\n.tl-proof-match small{\n  display:block;\n\n  margin-top:2px;\n\n  color:rgba(255,255,255,.42);\n\n  font-size:.53rem;\n}\n\n.tl-proof-match em{\n  padding:4px 6px;\n\n  border-radius:999px;\n\n  background:rgba(255,255,255,.06);\n\n  color:rgba(255,255,255,.54);\n\n  font-size:.46rem;\n  font-style:normal;\n  font-weight:800;\n}\n\n.tl-proof-inbox-foot{\n  padding-top:11px;\n\n  color:rgba(255,255,255,.38);\n\n  font-size:.53rem;\n  text-align:center;\n}\n\n\n\/* SOURCES *\/\n\n.tl-proof-sources{\n  padding:\n    clamp(38px,5vw,55px)\n    0\n    25px;\n}\n\n.tl-proof-source-grid{\n  display:grid;\n  grid-template-columns:1fr 1fr;\n  gap:9px;\n\n  margin-top:16px;\n}\n\n.tl-proof-source-grid a{\n  display:grid;\n  grid-template-columns:1fr auto;\n  gap:4px 12px;\n\n  padding:14px 15px;\n\n  border:1px solid rgba(15,23,42,.07);\n  border-radius:14px;\n\n  background:#fff;\n\n  color:#111827 !important;\n\n  text-decoration:none !important;\n}\n\n.tl-proof-source-grid strong{\n  color:#273244 !important;\n\n  font-size:.69rem;\n}\n\n.tl-proof-source-grid span{\n  grid-column:1;\n\n  color:#7a8798;\n\n  font-size:.6rem;\n  line-height:1.45;\n}\n\n.tl-proof-source-grid b{\n  grid-column:2;\n  grid-row:1 \/ span 2;\n\n  align-self:center;\n\n  color:#f97316;\n}\n\n.tl-proof-source-note{\n  max-width:850px;\n\n  margin:13px 0 0 !important;\n\n  color:#98a2b3 !important;\n\n  font-size:.6rem;\n  line-height:1.55;\n}\n\n\n\/* FINAL *\/\n\n.tl-proof-final{\n  padding:\n    clamp(37px,5vw,54px)\n    22px;\n\n  border:1px solid rgba(249,115,22,.13);\n  border-radius:22px;\n\n  background:\n    radial-gradient(circle at 50% 0%,rgba(249,115,22,.09),transparent 45%),\n    #fffaf6;\n\n  text-align:center;\n}\n\n.tl-proof-final > span{\n  color:#c2410c;\n\n  font-size:.58rem;\n  font-weight:900;\n  letter-spacing:.09em;\n  text-transform:uppercase;\n}\n\n.tl-proof-final h3{\n  margin:9px auto 12px;\n\n  color:#111827 !important;\n\n  font-size:clamp(1.8rem,3.2vw,2.8rem);\n  font-weight:900;\n  line-height:1.05;\n  letter-spacing:-.048em;\n}\n\n.tl-proof-final h3 strong{\n  display:block;\n\n  color:var(--orange-dark) !important;\n}\n\n.tl-proof-final > p{\n  max-width:670px;\n\n  margin:0 auto !important;\n\n  color:#667085 !important;\n\n  font-size:.82rem;\n  line-height:1.65;\n}\n\n.tl-proof-final .tl-proof-btn-secondary{\n  border-color:rgba(15,23,42,.10);\n  background:#fff;\n  color:#273244 !important;\n}\n\n\n\/* =========================================================\nRESPONSIVE\n========================================================= *\/\n\n@media(max-width:920px){\n\n  .tl-proof-capabilities{\n    grid-template-columns:1fr 1fr;\n  }\n\n  .tl-proof-info,\n  .tl-proof-monitor{\n    grid-template-columns:1fr;\n  }\n\n  .tl-proof-evidence{\n    width:min(620px,100%);\n  }\n\n  .tl-proof-when-grid{\n    grid-template-columns:1fr 1fr;\n  }\n\n}\n\n\n@media(max-width:720px){\n\n  .tl-proof-hero,\n  .tl-proof-after{\n    padding-left:16px;\n    padding-right:16px;\n  }\n\n  .tl-proof-path{\n    grid-template-columns:1fr;\n  }\n\n  .tl-proof-arrow{\n    transform:rotate(90deg);\n  }\n\n  .tl-proof-source-grid{\n    grid-template-columns:1fr;\n  }\n\n}\n\n\n@media(max-width:560px){\n\n  .tl-proof-capabilities,\n  .tl-proof-when-grid{\n    grid-template-columns:1fr;\n  }\n\n  .tl-proof-clarity{\n    flex-direction:column;\n  }\n\n  .tl-proof-actions,\n  .tl-proof-final-actions{\n    flex-direction:column;\n  }\n\n  .tl-proof-btn{\n    width:100%;\n  }\n\n  .tl-proof-monitor{\n    padding:30px 20px;\n  }\n\n}\n\n\n@media(prefers-reduced-motion:reduce){\n\n  .tl-proof-btn,\n  .tl-proof-path a{\n    transition:none !important;\n  }\n\n}\n<\/style>\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<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>TuneLockr Proof\u2122 \u2014 Analyse de fichier & pr\u00e9paration de preuve<\/h1>\n      <p>\n        Cet outil analyse localement certains \u00e9l\u00e9ments techniques d\u2019un fichier audio ou document afin de\n        <strong>mieux pr\u00e9parer votre dossier de cr\u00e9ation<\/strong> avant diffusion, collaboration ou litige.\n      <\/p>\n      <p class=\"tl-pro-sub\">\n        \ud83d\udd12 Analyse locale dans votre navigateur \u2014 le contenu du fichier n\u2019est ni t\u00e9l\u00e9vers\u00e9 ni stock\u00e9 par TuneLockr pendant cette analyse.\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 du fichier \u2022 Empreinte SHA-256 calcul\u00e9e dans le navigateur \u2022 Aucun upload du contenu analys\u00e9\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\u00e9sultats de l\u2019analyse technique<\/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 identifie pr\u00e9cis\u00e9ment les octets de cette version du fichier.\n          Si le fichier change, son empreinte change \u00e9galement.\n        <\/p>\n      <\/div>\n\n      <!-- SCORE -->\n      <div class=\"tl-pro-score-block\">\n        <h3>Indice de pr\u00e9paration du dossier<\/h3>\n        <p class=\"tl-pro-score-note\">\n          Cet indice est p\u00e9dagogique : il mesure la pr\u00e9sence de certains \u00e9l\u00e9ments techniques utiles.\n          <strong>Il ne mesure pas vos chances de gagner un litige et n\u2019est pas un score juridique.<\/strong>\n        <\/p>\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 \u00c9l\u00e9ments utiles d\u00e9tect\u00e9s<\/h3>\n          <ul id=\"tl-pro-plus\"><\/ul>\n        <\/div>\n        <div class=\"tl-pro-badge-card\">\n          <h3>\u26a0\ufe0f Points \u00e0 compl\u00e9ter<\/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\/depot\" target=\"_blank\" rel=\"noopener\" class=\"tl-pro-btn\">\n            Cr\u00e9er une preuve dat\u00e9e pour cette version \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\n          <a href=\"https:\/\/tunelockr.com\/surveillance-musicale\/\" class=\"tl-pro-btn-secondary\">\n            D\u00e9couvrir la surveillance musicale \u2192\n          <\/a>\n        <\/div>\n      <\/div>\n\n      <!-- Legal help \/ Info -->\n      <div class=\"tl-pro-legal-help\">\n        <h3>Comprendre les limites de l\u2019analyse<\/h3>\n\n        <details>\n          <summary>\ud83d\udcdc R\u00e8glement eIDAS & preuve \u00e9lectronique<\/summary>\n          <p>\n            Le r\u00e8glement eIDAS pr\u00e9voit qu\u2019un horodatage \u00e9lectronique ne peut \u00eatre priv\u00e9 d\u2019effet juridique\n            ou d\u2019admissibilit\u00e9 comme preuve uniquement parce qu\u2019il est \u00e9lectronique. Les horodatages\n            \u00e9lectroniques <strong>qualifi\u00e9s<\/strong> b\u00e9n\u00e9ficient de pr\u00e9somptions suppl\u00e9mentaires.\n            L\u2019analyse TuneLockr affich\u00e9e ici n\u2019est pas, \u00e0 elle seule, un horodatage \u00e9lectronique qualifi\u00e9.\n          <\/p>\n        <\/details>\n\n        <details>\n          <summary>\ud83d\udd10 CNIL, donn\u00e9es personnelles & fichiers musicaux<\/summary>\n          <p>\n            Les fichiers analys\u00e9s peuvent contenir des donn\u00e9es personnelles. Le contenu du fichier est trait\u00e9\n            localement par le navigateur pour cette analyse et n\u2019est pas t\u00e9l\u00e9vers\u00e9 vers TuneLockr.\n            Cela ne constitue pas, en soi, une certification de conformit\u00e9 RGPD ou CNIL de l\u2019ensemble\n            de vos propres traitements ou \u00e9changes de fichiers.\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, \u00e0 lui seul, une preuve\n            d\u2019ant\u00e9riorit\u00e9. Il ne d\u00e9tecte pas automatiquement le <a href=\"https:\/\/tunelockr.com\/en\/plagiat-musical\/\">plagiat musical<\/a> et ne compare pas votre\n            \u0153uvre \u00e0 une base de donn\u00e9es de morceaux existants. Il vous aide \u00e0 documenter certains\n            \u00e9l\u00e9ments techniques et \u00e0 identifier ce qui peut utilement compl\u00e9ter votre dossier.\n          <\/p>\n        <\/details>\n      <\/div>\n\n      <!-- Comparatif -->\n      <div class=\"tl-pro-compare\">\n        <h3>Quel r\u00f4le peuvent jouer les diff\u00e9rents \u00e9l\u00e9ments de preuve ?<\/h3>\n        <table class=\"tl-pro-table\">\n          <tr>\n            <th>\u00c9l\u00e9ment<\/th>\n            <th>Ce qu\u2019il peut documenter<\/th>\n            <th>Limite principale<\/th>\n          <\/tr>\n          <tr>\n            <td>E-mail ou message dat\u00e9<\/td>\n            <td>Une trace de transmission ou de chronologie<\/td>\n            <td>\u00c0 replacer dans le contexte complet du dossier<\/td>\n          <\/tr>\n          <tr>\n            <td>Dates syst\u00e8me \/ m\u00e9tadonn\u00e9es<\/td>\n            <td>Des informations techniques ou contextuelles<\/td>\n            <td>Peuvent \u00eatre modifi\u00e9es et ne prouvent pas, seules, la paternit\u00e9<\/td>\n          <\/tr>\n          <tr>\n            <td>Fichiers source \/ sessions \/ stems<\/td>\n            <td>Le processus cr\u00e9atif et l\u2019\u00e9volution des versions<\/td>\n            <td>Doivent \u00eatre conserv\u00e9s et reli\u00e9s \u00e0 une chronologie coh\u00e9rente<\/td>\n          <\/tr>\n          <tr>\n            <td>Empreinte SHA-256<\/td>\n            <td>L\u2019identit\u00e9 exacte d\u2019un fichier donn\u00e9<\/td>\n            <td>Ne fournit pas une date ind\u00e9pendante \u00e0 elle seule<\/td>\n          <\/tr>\n          <tr>\n            <td><strong>Certificat TuneLockr<\/strong><\/td>\n            <td><strong>Une empreinte associ\u00e9e \u00e0 un point de r\u00e9f\u00e9rence dat\u00e9<\/strong><\/td>\n            <td>Reste un \u00e9l\u00e9ment du dossier ; sa port\u00e9e d\u00e9pend du contexte et de la juridiction<\/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 d\u00e9crit certains \u00e9l\u00e9ments techniques\n        du fichier mais ne d\u00e9termine ni la paternit\u00e9 d\u2019une \u0153uvre, ni l\u2019existence d\u2019un plagiat,\n        ni l\u2019issue d\u2019un litige. Pour un dossier important ou un conflit actif, conservez vos fichiers\n        source, \u00e9changes et contrats, cr\u00e9ez si utile un point de r\u00e9f\u00e9rence dat\u00e9 et consultez un\n        professionnel du droit dans la juridiction concern\u00e9e.\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\n.tl-pro-score-note{\n  margin:-0.15rem 0 0.75rem;\n  font-size:0.86rem;\n  line-height:1.6;\n  opacity:0.82;\n}\n.tl-pro-score-note strong{color:#fff;}\n.tl-pro-cta-row a.tl-pro-btn-secondary{\n  display:inline-flex;\n  align-items:center;\n  justify-content:center;\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 getExtension(file) {\n    const name = file.name || \"\";\n    return (name.split(\".\").pop() || \"\").toLowerCase();\n  }\n\n  function isValidHash(value) {\n    return typeof value === \"string\" && \/^[a-f0-9]{64}$\/i.test(value);\n  }\n\n  function computePreparationScore(file, meta = {}) {\n    const name = file.name || \"\";\n    const size = file.size || 0;\n    const ext = getExtension(file);\n\n    let score = 35;\n    const plus = [];\n    const minus = [];\n\n    const audioSource = [\"wav\", \"aiff\", \"aif\", \"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    if (audioSource.includes(ext)) {\n      score += 15;\n      plus.push(\"Format audio source ou sans perte d\u00e9tect\u00e9 : utile pour conserver une version de r\u00e9f\u00e9rence.\");\n    } else if (audioLossy.includes(ext)) {\n      score += 8;\n      plus.push(\"Format audio courant d\u00e9tect\u00e9 : cette version peut \u00eatre identifi\u00e9e pr\u00e9cis\u00e9ment par son empreinte.\");\n      minus.push(\"Si vous disposez d\u2019un WAV, de stems ou du projet source, conservez-les aussi avec votre dossier.\");\n    } else if (docs.includes(ext)) {\n      score += 8;\n      plus.push(\"Document exploitable pour conserver des paroles, partitions, notes ou \u00e9l\u00e9ments contractuels.\");\n    } else if (archives.includes(ext)) {\n      score += 12;\n      plus.push(\"Archive d\u00e9tect\u00e9e : elle peut r\u00e9unir plusieurs \u00e9l\u00e9ments du projet (stems, sessions, documents).\");\n    } else {\n      score += 4;\n      minus.push(\"Format peu courant : conservez si possible aussi une version standard ou le fichier source.\");\n    }\n\n    if (meta.hashAvailable) {\n      score += 25;\n      plus.push(\"Empreinte SHA-256 calcul\u00e9e : cette version peut \u00eatre v\u00e9rifi\u00e9e bit \u00e0 bit.\");\n    } else {\n      minus.push(\"Empreinte SHA-256 indisponible sur ce navigateur ou pour ce fichier.\");\n    }\n\n    if (meta.hasID3) {\n      score += 6;\n      plus.push(\"M\u00e9tadonn\u00e9es audio d\u00e9tect\u00e9es : elles apportent du contexte suppl\u00e9mentaire.\");\n    } else if (ext === \"mp3\") {\n      minus.push(\"Aucune m\u00e9tadonn\u00e9e textuelle significative n\u2019a \u00e9t\u00e9 d\u00e9tect\u00e9e dans ce MP3.\");\n    }\n\n    if (\/(?:^|[_\\-\\s])(v\\d+|version|mix|master|demo|final)(?:[_\\-\\s.]|$)\/i.test(name)) {\n      score += 5;\n      plus.push(\"Le nom du fichier contient un rep\u00e8re de version : utile pour organiser la chronologie.\");\n    } else {\n      minus.push(\"Ajoutez id\u00e9alement un rep\u00e8re de version clair au nom du fichier ou dans votre historique de projet.\");\n    }\n\n    if (size < 50 * 1024) {\n      minus.push(\"Fichier tr\u00e8s l\u00e9ger : v\u00e9rifiez qu\u2019il contient bien le contenu que vous souhaitez documenter.\");\n    }\n\n    \/\/ lastModified is displayed only as local context; it does NOT affect the score.\n    plus.push(\"La date locale du fichier est affich\u00e9e comme information de contexte, sans \u00eatre trait\u00e9e comme un horodatage ind\u00e9pendant.\");\n\n    score = Math.max(0, Math.min(100, score));\n\n    let level, levelText;\n    if (score < 50) {\n      level = \"\u00c0 compl\u00e9ter\";\n      levelText = \"Le fichier peut \u00eatre analys\u00e9, mais plusieurs \u00e9l\u00e9ments techniques utiles manquent encore. Conservez les sources, organisez les versions et cr\u00e9ez si n\u00e9cessaire un point de r\u00e9f\u00e9rence dat\u00e9 avant diffusion.\";\n    } else if (score < 75) {\n      level = \"Pr\u00e9paration interm\u00e9diaire\";\n      levelText = \"Plusieurs \u00e9l\u00e9ments techniques sont d\u00e9j\u00e0 exploitables pour documenter cette version. Renforcez le dossier avec vos fichiers source, l\u2019historique de cr\u00e9ation et, si utile, un horodatage ind\u00e9pendant.\";\n    } else {\n      level = \"Bonne pr\u00e9paration technique\";\n      levelText = \"Cette version est correctement document\u00e9e sur le plan technique. Cela ne pr\u00e9juge pas de sa valeur juridique : conservez \u00e9galement les sources, \u00e9changes, contrats et \u00e9l\u00e9ments de chronologie pertinents.\";\n    }\n\n    return {\n      score,\n      level,\n      levelText,\n      plus,\n      minus,\n      ext,\n      size,\n      lastMod: file.lastModified || null,\n      name\n    };\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 :<\/span> <strong>${sizeStr}<\/strong><\/div>\n        <div><span class=\"tl-pro-label\">Date locale d\u00e9clar\u00e9e :<\/span> <strong>${dateStr}<\/strong><\/div>\n      <\/div>\n      <p class=\"tl-pro-filedata-note\">\n        La date locale provient du fichier et du navigateur. Elle peut apporter du contexte,\n        mais <strong>elle n\u2019est pas trait\u00e9e ici comme un horodatage ind\u00e9pendant<\/strong>.\n      <\/p>\n    `;\n  }\n\n  function renderScore(analysis) {\n    const s = analysis.score;\n    scoreValueEl.textContent = s + \" \/ 100\";\n    scoreFillEl.style.width = s + \"%\";\n\n    let cls = \"\";\n    if (s < 50) cls = \"crit\";\n    else if (s < 75) cls = \"medium\";\n    else cls = \"low\";\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 \u00e9l\u00e9ment technique particulier d\u00e9tect\u00e9.<\/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>Aucun point technique majeur \u00e0 compl\u00e9ter n\u2019a \u00e9t\u00e9 d\u00e9tect\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\", \"aif\"].includes(ext)) {\n      text = \"Vous disposez d\u2019un format source ou sans perte. Conservez cette version avec vos sessions, stems et \u00e9changes. Si elle doit \u00eatre envoy\u00e9e ou publi\u00e9e, vous pouvez cr\u00e9er un point de r\u00e9f\u00e9rence dat\u00e9 avant qu\u2019elle ne quitte votre contr\u00f4le.\";\n    } else if ([\"mp3\", \"m4a\", \"ogg\", \"aac\", \"wma\"].includes(ext)) {\n      text = \"Cette version audio peut \u00eatre identifi\u00e9e par son empreinte. Si vous poss\u00e9dez aussi un WAV, des stems ou le projet source, gardez-les avec votre dossier afin de mieux documenter le processus cr\u00e9atif.\";\n    } else if ([\"pdf\", \"doc\", \"docx\", \"txt\", \"odt\"].includes(ext)) {\n      text = \"Ce document peut compl\u00e9ter la chronologie de votre cr\u00e9ation (paroles, notes, partition ou contrat). Conservez aussi les versions de travail et les \u00e9changes li\u00e9s \u00e0 sa cr\u00e9ation.\";\n    } else if ([\"zip\", \"rar\", \"7z\", \"tar\"].includes(ext)) {\n      text = \"Cette archive peut rassembler plusieurs \u00e9l\u00e9ments utiles du projet. V\u00e9rifiez son contenu, conservez une copie source et cr\u00e9ez si n\u00e9cessaire un point de r\u00e9f\u00e9rence dat\u00e9 avant diffusion.\";\n    } else {\n      text = \"Ce fichier peut \u00eatre document\u00e9 techniquement, mais un format source ou standard compl\u00e9mentaire peut faciliter la conservation et la compr\u00e9hension du dossier.\";\n    }\n\n    recoText.textContent = text;\n  }\n\n  function readID3(file) {\n    return new Promise((resolve) => {\n      const ext = getExtension(file);\n\n      if (ext !== \"mp3\" || !window.jsmediatags) {\n        id3Box.style.display = \"none\";\n        resolve({ hasID3: false, fields: [] });\n        return;\n      }\n\n      id3List.innerHTML = \"\";\n      const fields = [];\n\n      window.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\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\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          id3Box.style.display = \"block\";\n          resolve({ hasID3: fields.length > 0, fields });\n        },\n\n        onError: function() {\n          id3Box.style.display = \"none\";\n          resolve({ hasID3: false, fields: [] });\n        }\n      });\n    });\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    hashEl.textContent = \"Calcul en cours\u2026\";\n\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    const id3Info = await readID3(file);\n\n    const analysis = computePreparationScore(file, {\n      hashAvailable: isValidHash(hashValue),\n      hasID3: id3Info.hasID3\n    });\n\n    renderFileData(analysis);\n    renderScore(analysis);\n    renderLists(analysis.plus, analysis.minus);\n    renderReco(analysis);\n\n    currentAnalysis = {\n      ...analysis,\n      hash: hashValue,\n      id3: id3Info.fields\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 technique TuneLockr Proof\", 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(\"Indice de pr\u00e9paration du dossier :\", 14, y);\n    doc.setFont(\"helvetica\", \"normal\");\n    y += 5;\n    doc.text(\"Indice : \" + score + \" \/ 100 (\" + 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(\"\u00c9l\u00e9ments utiles 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(\"Points \u00e0 compl\u00e9ter :\", 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 TuneLockr Proof et d\u00e9crit certains \u00e9l\u00e9ments techniques du fichier.\",\n      \"L\u2019indice de pr\u00e9paration est p\u00e9dagogique : il ne mesure pas la solidit\u00e9 juridique d\u2019un dossier ni vos chances de succ\u00e8s en justice.\",\n      \"La date locale et les m\u00e9tadonn\u00e9es sont des informations de contexte, pas un horodatage ind\u00e9pendant.\",\n      \"Le rapport ne constitue pas une preuve d\u2019ant\u00e9riorit\u00e9 \u00e0 lui seul et ne d\u00e9termine pas l\u2019existence d\u2019un plagiat.\",\n      \"Pour un dossier important ou un litige actif, conservez vos sources, \u00e9changes et contrats et consultez un professionnel du droit dans la juridiction concern\u00e9e.\"\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-technique-tunelockr-proof.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>\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-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 \u00b7 Analyse locale TuneLockr Proof\u2122 Analysez votre fichier avant qu\u2019il ne circule. Scanner anti-plagiat musical &#038; pr\u00e9paration de preuve d\u2019ant\u00e9riorit\u00e9 Analysez en quelques secondes les \u00e9l\u00e9ments techniques de votre fichier musical : m\u00e9tadonn\u00e9es, structure et empreinte cryptographique. L\u2019objectif n\u2019est pas de d\u00e9clarer automatiquement qu\u2019un morceau est plagi\u00e9, mais de mieux documenter la version [&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":53,"href":"https:\/\/tunelockr.com\/en\/wp-json\/wp\/v2\/pages\/7394\/revisions"}],"predecessor-version":[{"id":9647,"href":"https:\/\/tunelockr.com\/en\/wp-json\/wp\/v2\/pages\/7394\/revisions\/9647"}],"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}]}}