{"id":1509,"date":"2026-11-03T09:25:47","date_gmt":"2026-11-03T09:25:47","guid":{"rendered":"https:\/\/yohann.shop\/gdpr-privacy-requests-2\/"},"modified":"2026-11-03T15:18:17","modified_gmt":"2026-11-03T14:18:17","slug":"gdpr-privacy-requests","status":"publish","type":"page","link":"https:\/\/yohann.shop\/zh-hant\/gdpr-privacy-requests\/","title":{"rendered":"GDPR \u96b1\u79c1\u8acb\u6c42"},"content":{"rendered":"\n<style>\n    #form-gdpr-access-data-request,\n    #form-gdpr-correct-info-request,\n    #form-gdpr-delete-data-request {\n        display: none;\n    }\n    #gdpr_page button {\n      background-color: transparent;\n      border: 0;\n      border-bottom: 1px solid black;\n      padding: 0px;\n    }\n\n    \/* Modal background *\/\n    #data-verification-background {\n      display: none;\n      position: fixed;\n      z-index: 1;\n      padding: 24px 16px;\n      left: 0;\n      top: 0;\n      width: 100%;\n      height: 100%;\n      overflow: auto;\n      background-color: rgb(0,0,0);\n      background-color: rgba(15, 23, 42, 0.5);\n      opacity: unset;\n      z-index: 9999;\n      align-items: center;\n      justify-content: center;\n    }\n    \/* Modal Content *\/\n    #data-verification-modal {\n      background-color: #fefefe;\n      margin: 0;\n      padding: 20px 22px;\n      border: 1px solid #d0d7de;\n      border-radius: 14px;\n      box-shadow: 0 24px 60px rgba(15, 23, 42, 0.22);\n      width: min(100%, 620px);\n      max-height: calc(100vh - 48px);\n      overflow-y: auto;\n      opacity: 1;\n    }\n    \/* Modal Close Button *\/\n    .data-verification-close {\n      color: #4b5563;\n      float: right;\n      font-size: 24px;\n      font-weight: 500;\n      line-height: 22px;\n      background-color: transparent;\n      border: 0;\n      width: 30px;\n      height: 30px;\n      border-radius: 8px;\n      padding: 0;\n      transition: background-color 0.2s ease, color 0.2s ease;\n    }\n    .data-verification-close:hover {\n      color: #111827;\n      background-color: #f3f4f6;\n      text-decoration: none;\n      cursor: pointer;\n    }\n    \/* Checkbox Text *\/\n    #data-verification-container {\n      display: flex;\n      align-items: flex-start;\n      gap: 12px;\n      margin-top: 8px;\n    }\n    #data-verification-container p {\n      display: block;\n      padding: 0;\n      margin: 0;\n      line-height: 1.5;\n      font-size: 15px;\n      color: #1f2937;\n      width: auto;\n    }\n    #data-verification-container a, #data-verification-container a:hover{\n      text-decoration: underline !important;\n      color: #2563eb;\n      font-weight: 600;\n    }\n    #data-verification-container input {\n      opacity: 0;\n      width: 0;\n      height: 0;\n      margin: 0;\n      padding: 0;\n    }\n    \/* Checkbox Icon *\/\n    #data-verification-icon {\n      cursor: pointer;\n      position: relative;\n      margin: 2px 0 0;\n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n      width: 24px;\n      height: 24px;\n      -webkit-tap-highlight-color: transparent;\n      transform: translate3d(0, 0, 0);\n      flex: 0 0 24px;\n    }\n    #data-verification-icon:before {\n      content: \"\";\n      position: absolute;\n      top: -7px;\n      left: -7px;\n      width: 32px;\n      height: 32px;\n      border-radius: 50%;\n      background: rgba(34,50,84,0.03);\n      opacity: 0;\n      transition: opacity 0.2s ease;\n    }\n    #data-verification-icon svg {\n      position: relative;\n      z-index: 1;\n      fill: none;\n      stroke-linecap: round;\n      stroke-linejoin: round;\n      stroke: #94a3b8;\n      stroke-width: 1.5;\n      transform: translate3d(0, 0, 0);\n      transition: all 0.2s ease;\n    }\n    #data-verification-icon svg path {\n      stroke-dasharray: 60;\n      stroke-dashoffset: 0;\n    }\n    #data-verification-icon svg polyline {\n      stroke-dasharray: 22;\n      stroke-dashoffset: 66;\n    }\n    #data-verification-icon:hover:before {\n      opacity: 1;\n    }\n    #data-verification-container:hover #data-verification-icon svg {\n      stroke: #2563eb;\n    }\n    #data-verification-icon.clicked svg {\n      stroke: #2563eb;\n    }\n    #data-verification-icon.clicked svg path {\n      stroke-dashoffset: 60;\n      transition: all 0.3s linear;\n    }\n    #data-verification-icon.clicked svg polyline {\n      stroke-dashoffset: 42;\n      transition: all 0.2s linear;\n      transition-delay: 0.15s;\n    }\n\n    \/* Accessibility design *\/\n    #data-verification-icon:focus, .data-verification-close:focus, #data-verification-container input:focus ~ #data-verification-icon svg, #data-verification-container a:focus {\n      box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.28);\n      transition: all 0.3s ease;\n      outline: none;\n      transform: scale(1.06);\n    }\n\n    \/* Loading Element *\/\n    .loading {\n        display: none;\n        top:50vh;\n        left:50vw;\n        position:fixed;\n    }\n    .loading:not(:required):after {\n      content: '';\n      display: block;\n      font-size: 10px;\n      width: 1em;\n      height: 1em;\n      margin-top: -0.5em;\n      -webkit-animation: spinner 1500ms infinite linear;\n      -moz-animation: spinner 1500ms infinite linear;\n      -ms-animation: spinner 1500ms infinite linear;\n      -o-animation: spinner 1500ms infinite linear;\n      animation: spinner 1500ms infinite linear;\n      border-radius: 0.5em;\n      -webkit-box-shadow: rgba(255,255,255, 1) 1.5em 0 0 0, rgba(255,255,255, 1) 1.1em 1.1em 0 0, rgba(255,255,255, 1) 0 1.5em 0 0, rgba(255,255,255, 1) -1.1em 1.1em 0 0, rgba(255,255,255, 1) -1.5em 0 0 0, rgba(255,255,255, 1) -1.1em -1.1em 0 0, rgba(255,255,255, 1) 0 -1.5em 0 0, rgba(255,255,255, 1) 1.1em -1.1em 0 0;\n      box-shadow: rgba(255,255,255, 1) 1.5em 0 0 0, rgba(255,255,255, 1) 1.1em 1.1em 0 0, rgba(255,255,255, 1) 0 1.5em 0 0, rgba(255,255,255, 1) -1.1em 1.1em 0 0, rgba(255,255,255, 1) -1.5em 0 0 0, rgba(255,255,255, 1) -1.1em -1.1em 0 0, rgba(255,255,255, 1) 0 -1.5em 0 0, rgba(255,255,255, 1) 1.1em -1.1em 0 0;\n    }\n    #gdpr_page .list-unstyled li button {\n      cursor: pointer;\n    }\n    #gdpr_page .form-gdpr-request form label {\n      display: block;\n      margin-bottom: 10px;\n      font-weight: 600;\n    }\n    #gdpr_page .form-gdpr-request form input[type=\"email\"] {\n      display: inline-block;\n      width: 100%;\n      max-width: 420px;\n      padding: 12px 14px;\n      margin: 0 10px 12px 0;\n      border: 1px solid #d0d7de;\n      border-radius: 10px;\n      font-size: 16px;\n      line-height: 1.4;\n      box-sizing: border-box;\n      vertical-align: middle;\n      transition: border-color 0.2s ease, box-shadow 0.2s ease;\n      background-color: #fff;\n      color: #1f2328;\n    }\n    #gdpr_page .form-gdpr-request form input[type=\"email\"]:focus {\n      border-color: #4c8bf5;\n      box-shadow: 0 0 0 3px rgba(76, 139, 245, 0.2);\n      outline: none;\n    }\n    #gdpr_page .form-gdpr-request form input[type=\"submit\"] {\n      display: inline-block;\n      min-height: 42px;\n      padding: 10px 18px;\n      margin-bottom: 12px;\n      border: 0;\n      border-radius: 10px;\n      background-color: #111827;\n      color: #fff;\n      font-size: 15px;\n      font-weight: 600;\n      line-height: 1;\n      cursor: pointer;\n      vertical-align: middle;\n      transition: background-color 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease;\n    }\n    #gdpr_page .form-gdpr-request form input[type=\"submit\"]:hover {\n      background-color: #1f2937;\n      transform: translateY(-1px);\n    }\n    #gdpr_page .form-gdpr-request form input[type=\"submit\"]:focus {\n      box-shadow: 0 0 0 3px rgba(76, 139, 245, 0.25);\n      outline: none;\n    }\n    #gdpr_page .form-gdpr-request form input[type=\"button\"].btn,\n    #gdpr_page .form-gdpr-request form button.btn {\n      display: inline-block;\n      margin-top: 8px;\n      margin-bottom: 12px;\n      padding: 10px 18px;\n      font-size: 14px;\n      font-weight: 600;\n      color: #fff;\n      background-color: #111827;\n      border: none;\n      border-radius: 8px;\n      cursor: pointer;\n      line-height: 1;\n      vertical-align: middle;\n      transition: background-color 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease;\n    }\n    #gdpr_page .form-gdpr-request form input[type=\"button\"].btn:hover,\n    #gdpr_page .form-gdpr-request form button.btn:hover {\n      background-color: #1f2937;\n      transform: translateY(-1px);\n    }\n    #gdpr_page .form-gdpr-request form input[type=\"button\"].btn:focus,\n    #gdpr_page .form-gdpr-request form button.btn:focus {\n      box-shadow: 0 0 0 3px rgba(76, 139, 245, 0.25);\n      outline: none;\n    }\n    #gdpr_page .form-gdpr-request form input[type=\"button\"].btn:disabled,\n    #gdpr_page .form-gdpr-request form button.btn:disabled {\n      opacity: 0.65;\n      cursor: not-allowed;\n      transform: none;\n    }\n    #gdpr_page .form-gdpr-request form .gdpr-request-success {\n      display: block;\n      margin: 0 0 12px;\n      color: #15803d;\n      font-size: 14px;\n      line-height: 1.4;\n      font-weight: 600;\n    }\n    #gdpr_page .form-gdpr-request form .gdpr-request-error {\n      display: block;\n      margin: 0 0 12px;\n      color: #b91c1c;\n      font-size: 14px;\n      line-height: 1.4;\n      font-weight: 600;\n    }\n    .show-isense {\n      transition: opacity 400ms !important;\n    }\n    .hide-isense {\n      opacity: 0 !important;\n      transition: 0.4s ease-out;\n    }\n\n    \/* Modal changes on mobile resolution*\/\n    @media only screen and (max-width: 600px) {\n      #data-verification-modal {\n        width: 100%;\n        padding: 16px;\n      }\n    }\n\n    \/* Animation *\/\n    @-webkit-keyframes spinner {\n      0% {\n        -webkit-transform: rotate(0deg);\n        -moz-transform: rotate(0deg);\n        -ms-transform: rotate(0deg);\n        -o-transform: rotate(0deg);\n        transform: rotate(0deg);\n      }\n      100% {\n        -webkit-transform: rotate(360deg);\n        -moz-transform: rotate(360deg);\n        -ms-transform: rotate(360deg);\n        -o-transform: rotate(360deg);\n        transform: rotate(360deg);\n      }\n    }\n    @-moz-keyframes spinner {\n      0% {\n        -webkit-transform: rotate(0deg);\n        -moz-transform: rotate(0deg);\n        -ms-transform: rotate(0deg);\n        -o-transform: rotate(0deg);\n        transform: rotate(0deg);\n      }\n      100% {\n        -webkit-transform: rotate(360deg);\n        -moz-transform: rotate(360deg);\n        -ms-transform: rotate(360deg);\n        -o-transform: rotate(360deg);\n        transform: rotate(360deg);\n      }\n    }\n    @-o-keyframes spinner {\n      0% {\n        -webkit-transform: rotate(0deg);\n        -moz-transform: rotate(0deg);\n        -ms-transform: rotate(0deg);\n        -o-transform: rotate(0deg);\n        transform: rotate(0deg);\n      }\n      100% {\n        -webkit-transform: rotate(360deg);\n        -moz-transform: rotate(360deg);\n        -ms-transform: rotate(360deg);\n        -o-transform: rotate(360deg);\n        transform: rotate(360deg);\n      }\n    }\n    @keyframes spinner {\n      0% {\n        -webkit-transform: rotate(0deg);\n        -moz-transform: rotate(0deg);\n        -ms-transform: rotate(0deg);\n        -o-transform: rotate(0deg);\n        transform: rotate(0deg);\n      }\n      100% {\n        -webkit-transform: rotate(360deg);\n        -moz-transform: rotate(360deg);\n        -ms-transform: rotate(360deg);\n        -o-transform: rotate(360deg);\n        transform: rotate(360deg);\n      }\n    }\n<\/style><div id=\"gdpr_page\" class=\"col-sm-12\">\n    <div>\n        <p><strong>\u6211\u5011\u5c0a\u91cd\u60a8\u7684\u96b1\u79c1\u3002<\/strong> \u82e5\u60a8\u4f4d\u65bc\u6b50\u6d32\u7d93\u6fdf\u5340\uff08EEA\uff09\uff0c\u6839\u64da\u300a\u4e00\u822c\u8cc7\u6599\u4fdd\u8b77\u898f\u7bc4\u300b\uff08GDPR\uff09\uff0c\u60a8\u64c1\u6709\u7279\u5b9a\u6b0a\u5229\u3002\u8acb\u4f7f\u7528\u4ee5\u4e0b\u9078\u9805\u884c\u4f7f\u60a8\u5c0d\u6211\u5011\u6240\u6301\u6709\u500b\u4eba\u8cc7\u6599\u7684\u6b0a\u5229\u3002<\/p>\n    <\/div>\n    <p><strong>\u6211\u5011\u5982\u4f55\u8655\u7406\u60a8\u7684\u8acb\u6c42<\/strong> \u7576\u60a8\u900f\u904e\u6b64\u9801\u9762\u63d0\u4ea4\u8acb\u6c42\u6642\uff0c\u6211\u5011\u7684\u5408\u898f\u670d\u52d9\u63d0\u4f9b\u8005 <strong>\uff08Consentmo\uff09<\/strong> \u50c5\u8655\u7406\u60a8\u7684\u96fb\u5b50\u90f5\u4ef6\u5730\u5740\u8207\u6280\u8853\u8cc7\u8a0a\uff08\u4f8b\u5982 IP \u4f4d\u5740\uff09\uff0c\u4ee5\u9a57\u8b49\u4e26\u5c65\u884c\u60a8\u7684\u8acb\u6c42\u3001\u9632\u6b62\u6feb\u7528\uff0c\u4e26\u4fdd\u7559\u5408\u898f\u7d00\u9304\u3002\u8a73\u7d30\u8cc7\u8a0a\u8acb\u53c3\u95b1 <a href=\"https:\/\/www.consentmo.com\/end-user-dpa\" target=\"_blank\" aria-label=\"Consentmo \u7684\u8cc7\u6599\u8655\u7406\u653f\u7b56\uff08\u5728\u65b0\u5206\u9801\u958b\u555f\uff09\">Consentmo \u7684\u8cc7\u6599\u8655\u7406\u653f\u7b56<\/a>\u3002<\/p>\n    <br>\n    <h2>\u5b58\u53d6\u6216\u4e0b\u8f09\u6211\u7684\u8cc7\u6599<\/h2>\n    <p>\u60a8\u53ef\u4ee5\u8acb\u6c42\u6211\u5011\u6240\u6301\u6709\u95dc\u65bc\u60a8\u7684\u500b\u4eba\u8cc7\u6599\u526f\u672c\uff0c\u5305\u62ec\u5e33\u6236\u8cc7\u8a0a\u8207\u8a02\u55ae\u7d00\u9304\u3002\u60a8\u53ef\u9078\u64c7\u4ee5\u53ef\u651c\u5f0f\u683c\u5f0f\uff08CSV \u6216 PDF\uff09\u53d6\u5f97\u8cc7\u6599\u3002<\/p>\n    <ul id=\"gdpr_access_data_compliance_requests\" class=\"gdpr-compliance-requests list-unstyled\">\n        <li><button id=\"btn-gdpr-access-data-request\" aria-label=\"\u8acb\u6c42\u6211\u7684\u8cc7\u6599\" aria-controls=\"form-gdpr-access-data-request\" aria-expanded=\"false\">\u8acb\u6c42\u6211\u7684\u8cc7\u6599<\/button><\/li>\n    <\/ul>\n    <div id=\"form-gdpr-access-data-request\" class=\"form-gdpr-request\">\n        <form>\n            <label for=\"form-gdpr-access-data-request-email\">\u8f38\u5165\u60a8\u7684\u96fb\u5b50\u90f5\u4ef6\u4ee5\u78ba\u8a8d\u8eab\u5206<\/label>\n            <input type=\"email\" name=\"email\" id=\"form-gdpr-access-data-request-email\" placeholder=\"example@email.com\" autocomplete=\"email\" autocorrect=\"off\" autocapitalize=\"off\" autofocus=\"\">\n            <input type=\"submit\" id=\"form-gdpr-access-data-request-submit\" class=\"btn\" value=\"\u9001\u51fa\">\n        <\/form>\n    <\/div>\n    <p><em>\u56de\u61c9\u6642\u9593\uff1a\u6211\u5011\u6703\u5728\u4e00\u500b\u6708\u5167\u56de\u61c9\u3002\u82e5\u60a8\u7684\u8acb\u6c42\u8f03\u70ba\u8907\u96dc\uff0c\u6211\u5011\u53ef\u80fd\u4f9d\u6cd5\u5f8b\u898f\u5b9a\u5ef6\u9577\u671f\u9650\uff0c\u4e26\u6703\u901a\u77e5\u60a8\u3002<\/em><\/p>\n    <br>\n    <h2>\u66f4\u6b63\u6211\u7684\u8cc7\u8a0a<\/h2>\n    <p>\u82e5\u60a8\u8a8d\u70ba\u60a8\u7684\u500b\u4eba\u8cc7\u6599\u4e0d\u6e96\u78ba\u6216\u4e0d\u5b8c\u6574\uff08\u4f8b\u5982\u932f\u8aa4\u7684\u904b\u9001\u5730\u5740\u6216\u59d3\u540d\u62fc\u5beb\u932f\u8aa4\uff09\uff0c\u60a8\u53ef\u4ee5\u5728\u6b64\u66f4\u65b0\u3002<\/p>\n    <ul id=\"gdpr_correct_info_compliance_requests\" class=\"gdpr-compliance-requests list-unstyled\">\n        <li><button id=\"btn-gdpr-correct-info-request\" aria-label=\"\u66f4\u6b63\u6211\u7684\u8cc7\u8a0a\" aria-controls=\"form-gdpr-correct-info-request\" aria-expanded=\"false\">\u66f4\u6b63\u6211\u7684\u8cc7\u8a0a<\/button><\/li>\n    <\/ul>\n    <div id=\"form-gdpr-correct-info-request\" class=\"form-gdpr-request\">\n        <form>\n            <label for=\"form-gdpr-correct-info-request-email\">\u8f38\u5165\u60a8\u7684\u96fb\u5b50\u90f5\u4ef6\u4ee5\u78ba\u8a8d\u8eab\u5206<\/label>\n            <input type=\"email\" name=\"email\" id=\"form-gdpr-correct-info-request-email\" placeholder=\"example@email.com\" autocomplete=\"email\" autocorrect=\"off\" autocapitalize=\"off\" autofocus=\"\">\n            <input type=\"submit\" id=\"form-gdpr-correct-info-request-submit\" class=\"btn\" value=\"\u9001\u51fa\">\n        <\/form>\n    <\/div>\n    <br>\n    <h2>\u522a\u9664\u6211\u7684\u8cc7\u6599<\/h2>\n    <p>\u60a8\u53ef\u4ee5\u8acb\u6c42\u522a\u9664\u8207\u6b64\u5546\u5e97\u76f8\u95dc\u7684\u500b\u4eba\u8cc7\u6599\uff08\u4ea6\u7a31\u300c\u88ab\u907a\u5fd8\u6b0a\u300d\uff09\u3002<\/p>\n    <ul id=\"gdpr_delete_data_compliance_requests\" class=\"gdpr-compliance-requests list-unstyled\">\n        <li><button id=\"btn-gdpr-delete-data-request\" aria-label=\"\u8acb\u6c42\u522a\u9664\" aria-controls=\"form-gdpr-delete-data-request\" aria-expanded=\"false\">\u8acb\u6c42\u522a\u9664<\/button><\/li>\n    <\/ul>\n    <div id=\"form-gdpr-delete-data-request\" class=\"form-gdpr-request\">\n        <form>\n            <label for=\"form-gdpr-delete-data-request-email\">\u8f38\u5165\u60a8\u7684\u96fb\u5b50\u90f5\u4ef6\u4ee5\u78ba\u8a8d\u8eab\u5206<\/label>\n            <input type=\"email\" name=\"email\" id=\"form-gdpr-delete-data-request-email\" placeholder=\"example@email.com\" autocomplete=\"email\" autocorrect=\"off\" autocapitalize=\"off\" autofocus=\"\">\n            <input type=\"submit\" class=\"btn\" id=\"form-gdpr-delete-data-request-submit\" value=\"\u9001\u51fa\">\n        <\/form>\n    <\/div>\n    <p><em>\u91cd\u8981\uff1a\u67d0\u4e9b\u8cc7\u8a0a\u82e5\u56e0\u6cd5\u5f8b\u8981\u6c42\u6216\u5408\u6cd5\u76ee\u7684\uff08\u4f8b\u5982\u7a05\u52d9\u3001\u8a50\u6b3a\u9632\u5236\u8207\u5b89\u5168\uff09\u800c\u5fc5\u9808\u4fdd\u7559\uff0c\u5247\u53ef\u80fd\u4e0d\u6703\u88ab\u522a\u9664\u3002<\/em><\/p>\n    <br>\n    <h2>\u7ba1\u7406\u96b1\u79c1\u504f\u597d\u8a2d\u5b9a<\/h2>\n    <p>\u60a8\u53ef\u4ee5\u81ea\u884c\u9078\u64c7\u5141\u8a31\u6211\u5011\u4f7f\u7528\u54ea\u4e9b\u985e\u578b\u7684 Cookie \u8207\u6280\u8853\uff08\u4f8b\u5982\u958b\u555f\u5206\u6790\u529f\u80fd\u4f46\u95dc\u9589\u884c\u92b7\u529f\u80fd\uff09\uff0c\u4ee5\u5ba2\u88fd\u5316\u60a8\u7684\u9ad4\u9a57\u3002\u60a8\u53ef\u96a8\u6642\u66f4\u65b0\u9019\u4e9b\u7279\u5b9a\u8a2d\u5b9a\u3002<\/p>\n    <ul id=\"gdpr_manage_privacy_preferences_compliance_requests\" class=\"gdpr-compliance-requests list-unstyled\">\n        <li><button id=\"btn-gdpr-manage-privacy-preferences\" aria-label=\"\u66f4\u65b0 Cookie \u8a2d\u5b9a\">\u66f4\u65b0 Cookie \u8a2d\u5b9a<\/button><\/li>\n    <\/ul>\n    <br>\n    <h2>\u64a4\u56de\u540c\u610f<\/h2>\n    <p>\u60a8\u6709\u6b0a\u96a8\u6642\u64a4\u56de\u5c0d Shopify \u884c\u92b7\u8ffd\u8e64\u6280\u8853\u7684\u540c\u610f\u3002\u6b64\u64cd\u4f5c\u5c07\u9069\u7528\u65bc\u60a8\u672a\u4f86\u4f7f\u7528\u672c\u5546\u5e97\uff0c\u4e26\u505c\u6b62\u91dd\u5c0d\u975e\u5fc5\u8981\u76ee\u7684\u7684\u8cc7\u6599\u8490\u96c6\u3002<\/p>\n    <div id=\"form-gdpr-withdraw-consent-request\" class=\"form-gdpr-request\">\n        <form action=\"#\" onsubmit=\"return false;\">\n            <div id=\"gdpr-withdraw-email-wrap\" class=\"gdpr-instant-email-wrap\" style=\"display: none; margin-bottom: 12px;\">\n                <label for=\"gdpr-withdraw-email\">\u8f38\u5165\u60a8\u7684\u96fb\u5b50\u90f5\u4ef6\u4ee5\u8b58\u5225\u60a8\u7684\u8acb\u6c42<\/label>\n                <input type=\"email\" id=\"gdpr-withdraw-email\" placeholder=\"example@email.com\" autocomplete=\"email\" style=\"display: block; width: 100%; max-width: 400px; margin-top: 6px;\">\n                <p id=\"gdpr-withdraw-email-error\" class=\"gdpr-request-error\" role=\"alert\" style=\"display: none;\"><\/p>\n            <\/div>\n            <input type=\"button\" class=\"btn\" id=\"form-gdpr-withdraw-consent-request-submit\" value=\"\u64a4\u56de\u540c\u610f\" aria-label=\"\u64a4\u56de\u540c\u610f\u4e26\u505c\u7528\u975e\u5fc5\u8981\u8ffd\u8e64\"><p id=\"gdpr-withdraw-success\" class=\"gdpr-request-success\" role=\"status\" aria-live=\"polite\" style=\"display: none;\"><\/p>\n            <p id=\"gdpr-withdraw-error\" class=\"gdpr-request-error\" role=\"alert\" aria-live=\"polite\" style=\"display: none;\"><\/p>\n        <\/form>\n    <\/div>\n    <br>\n    <h2>\u9650\u5236\u6216\u62d2\u7d55\u8655\u7406<\/h2>\n    <p>\u60a8\u53ef\u8981\u6c42\u6211\u5011\u9650\u5236\u8655\u7406\u60a8\u7684\u500b\u4eba\u8cc7\u6599\uff0c\u6216\u62d2\u7d55\u7279\u5b9a\u8655\u7406\u6d3b\u52d5\uff08\u4f8b\u5982\u76f4\u63a5\u884c\u92b7\u6216\u57fa\u65bc\u6b63\u7576\u5229\u76ca\u7684\u8655\u7406\uff09\u3002<\/p>\n    <p>\u82e5\u8981\u884c\u4f7f\u9019\u4e9b\u6b0a\u5229\uff0c\u8acb\u900f\u904e\u4ee5\u4e0b\u65b9\u5f0f\u8207\u6211\u5011\u806f\u7e6b\uff1a<\/p>\n    <p>\ud83d\udce7 info@yohann.com<\/p>\n    <br>\n    <h2>\u806f\u7d61\u8cc7\u8a0a<\/h2>\n    <p>\u82e5\u5c0d\u60a8\u7684\u96b1\u79c1\u6b0a\u6216\u672c\u9801\u9762\u6709\u4efb\u4f55\u7591\u554f\uff0c\u8acb\u806f\u7e6b\uff1a<\/p>\n    <p><strong>\u96fb\u5b50\u90f5\u4ef6\uff1a<\/strong> info@yohann.com<\/p>\n    <p><strong>\u5730\u5740\uff1a<\/strong> Schwarzwaldstra\u00dfe 61, 79539 L\u00f6rrach , Germany<\/p>\n    <br>\n    <h2>\u63d0\u51fa\u7533\u8a34<\/h2><p>\u82e5\u60a8\u8a8d\u70ba\u6211\u5011\u5c1a\u672a\u5145\u5206\u56de\u61c9\u60a8\u7684\u7591\u616e\uff0c\u60a8\u6709\u6b0a\u5411\u8cb4\u570b\u7684\u8cc7\u6599\u4fdd\u8b77\u4e3b\u7ba1\u6a5f\u95dc\uff08DPA\uff09\u63d0\u51fa\u7533\u8a34\u3002<\/p>\n<\/div>\n\n<script>window.__CONSENTMO_CUSTOMER_IDENTIFICATION={\"withdraw_consent\":false,\"do_not_sell\":false,\"limit_use\":false};window.__CONSENTMO_CUSTOMER_IDENTIFICATION_I18N={\"invalidEmail\":\"\u8acb\u8f38\u5165\u6709\u6548\u7684\u96fb\u5b50\u90f5\u4ef6\u5730\u5740\u3002\",\"emailLabelIdentify\":\"\u8f38\u5165\u60a8\u7684\u96fb\u5b50\u90f5\u4ef6\u4ee5\u8b58\u5225\u60a8\u7684\u8acb\u6c42\"};<\/script><script src=\"https:\/\/cdn.consentmo.com\/js\/privacy_customer_identification.js?v=1789549329\"><\/script><script>\n\n     \/* SLIDE UP *\/\n     let slideUp = (target, duration=500) => {\n        target.style.transitionProperty = 'height, margin, padding';\n        target.style.transitionDuration = duration + 'ms';\n        target.style.boxSizing = 'border-box';\n        target.style.height = target.offsetHeight + 'px';\n        target.offsetHeight;\n        target.style.overflow = 'hidden';\n        target.style.height = 0;\n        target.style.paddingTop = 0;\n        target.style.paddingBottom = 0;\n        target.style.marginTop = 0;\n        target.style.marginBottom = 0;\n        window.setTimeout( () => {\n            target.style.display = 'none';\n            target.style.removeProperty('height');\n            target.style.removeProperty('padding-top');\n            target.style.removeProperty('padding-bottom');\n            target.style.removeProperty('margin-top');\n            target.style.removeProperty('margin-bottom');\n            target.style.removeProperty('overflow');\n            target.style.removeProperty('transition-duration');\n            target.style.removeProperty('transition-property');\n        }, duration);\n    }\n\n    \/* SLIDE DOWN *\/\n    let slideDown = (target, duration=500) => {\n      setTimeout(function(){\n        target.style.removeProperty('display');\n        let display = window.getComputedStyle(target).display;\n        if (display === 'none') display = 'block';\n\n          target.style.display = display;\n          \n          let height = target.offsetHeight;\n          \n          target.style.overflow = 'hidden';\n          target.style.height = 0;\n          target.style.paddingTop = 0;\n          target.style.paddingBottom = 0;\n          target.style.marginTop = 0;\n          target.style.marginBottom = 0;\n          target.offsetHeight;\n          target.style.boxSizing = 'border-box';\n          target.style.transitionProperty = \"height, margin, padding\";\n          target.style.transitionDuration = duration + 'ms';\n          target.style.height = height + 'px';\n\n          target.style.removeProperty('padding-top');\n          target.style.removeProperty('padding-bottom');\n          target.style.removeProperty('margin-top');\n          target.style.removeProperty('margin-bottom');\n          \n          window.setTimeout( () => {\n              target.style.removeProperty('height');\n              target.style.removeProperty('overflow');\n              target.style.removeProperty('transition-duration');\n              target.style.removeProperty('transition-property');\n          }, duration);\n       }, 100)\n    }\n\n    \/* TOOGLE *\/\n    var slideToggle = (target, duration = 500) => {\n        if (window.getComputedStyle(target).display === 'none') {\n            return slideDown(target, duration);\n        } else {\n            return slideUp(target, duration);\n        }\n    }\n\n    \/* FADE *\/\n    var toggleFadeiSense = (elem, show) => {\n        if (show) {\n            elem.style.display = elem.id === 'data-verification-background' ? 'flex' : 'block';\n            setTimeout(function(){\n                elem.classList.add('show-isense');\n                elem.classList.remove('hide-isense');\n            },20)\n        } else {\n            elem.classList.remove('show-isense');\n            elem.classList.add('hide-isense');\n            setTimeout(() => {\n                elem.style.display = 'none';\n            }, 400)\n        }\n    }\n\n    var gdprSlideUpAll = function() {\n        slideUp(document.querySelector('#form-gdpr-access-data-request'), 100);\n        if(document.querySelector('#btn-gdpr-access-data-request')) document.querySelector('#btn-gdpr-access-data-request').setAttribute(\"aria-expanded\", \"false\");\n        slideUp(document.querySelector('#form-gdpr-correct-info-request'), 100);\n        if(document.querySelector('#btn-gdpr-correct-info-request')) document.querySelector('#btn-gdpr-correct-info-request').setAttribute(\"aria-expanded\", \"false\");\n        slideUp(document.querySelector('#form-gdpr-delete-data-request'), 100);\n        if(document.querySelector('#btn-gdpr-delete-data-request')) document.querySelector('#btn-gdpr-delete-data-request').setAttribute(\"aria-expanded\", \"false\");\n        if(document.querySelector('#gdpr_page button')) document.querySelector('#gdpr_page button').setAttribute(\"aria-expanded\", \"false\");\n    };\n\n    \/** Instant withdraw consent: same as cookie banner Reject (deny + consent record). *\/\n    (function() {\n        var WITHDRAW_SUCCESS_MSG = '\u60a8\u7684\u540c\u610f\u5df2\u64a4\u56de\u3002\u6b64\u700f\u89bd\u5668\u7684\u6240\u6709\u975e\u5fc5\u8981\u8ffd\u8e64\u529f\u80fd\u7686\u5df2\u505c\u7528\u3002';\n        var GEO_PRIMARY = 'https:\/\/wekre6r5lsxxzzbnlltsbyfm6i0dcqrs.lambda-url.eu-central-1.on.aws';\n        var GEO_FALLBACK = 'https:\/\/workers.consentmo.com\/action\/geo';\n        var CONSENT_PRIMARY = 'https:\/\/4nbp277fevb5pvm2ditk5w6swe0biflq.lambda-url.eu-central-1.on.aws';\n        var CONSENT_FALLBACK = 'https:\/\/workers.consentmo.com\/action\/consent';\n\n        function getDeviceTypeInline() {\n            var ua = navigator.userAgent || '';\n            if (\/(tablet|ipad|playbook|silk)|(android(?!.*mobi))\/i.test(ua)) return 't';\n            if (\/Mobile|iP(hone|od)|Android|BlackBerry|IEMobile|Kindle|Silk-Accelerated|(hpw|web)OS|Opera M(obi|ini)\/.test(ua)) return 'm';\n            return 'd';\n        }\n\n        function int2ip(ipInt) {\n            return ((ipInt >>> 24) + '.' + ((ipInt >> 16) & 255) + '.' + ((ipInt >> 8) & 255) + '.' + (ipInt & 255));\n        }\n\n        function setConsentCookie(name, value, days) {\n            var expires = '';\n            if (days) {\n                var date = new Date();\n                date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\n                expires = '; expires=' + date.toUTCString();\n            }\n            var secure = location.protocol === 'https:' ? '; Secure' : '';\n            document.cookie = name + '=' + encodeURIComponent(value || '') + expires + '; path=\/; SameSite=Lax' + secure;\n        }\n\n        function expireCookie(name) {\n            document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=\/';\n            var host = location.hostname;\n            if (host) {\n                document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=\/; domain=' + host;\n                var parts = host.split('.');\n                if (parts.length >= 2) {\n                    document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=\/; domain=.' + parts.slice(-2).join('.');\n                }\n            }\n        }\n\n        function clearCategoryFromSettings(settings, cat) {\n            if (!settings) return;\n            var raw = settings[cat + '_cookies'] || '';\n            raw.split('n').map(function(c) { return c.trim(); }).filter(Boolean).forEach(function(n) { expireCookie(n); });\n            if (cat === 'marketing' && settings.youtube_iframe_options && settings.youtube_iframe_options.enabled) {\n                ['VISITOR_INFO1_LIVE', 'YSC', 'SOCS', '__Secure-3PSID', '__Secure-1PSID'].forEach(expireCookie);\n            }\n        }\n\n        function parseGdprSettings() {\n            var out = {\n                cookieName: '',\n                consentDuration: 365,\n                paUsrId: 0,\n                saleRegion: false,\n                manageSale: '',\n                saleCheckbox: '',\n                saleText: '',\n                settings: null\n            };\n            try {\n                var raw = localStorage.getItem('gdprCache');\n                if (!raw) return out;\n                var cache = JSON.parse(raw);\n                out.saleRegion = !!cache.userIsInSaleOfDataRegion;\n                if (cache.getCookieConsentSettings) {\n                    var s = JSON.parse(cache.getCookieConsentSettings);\n                    out.settings = s;\n                    out.cookieName = s.cookie_name != null ? String(s.cookie_name) : '';\n                    out.consentDuration = parseInt(s.consent_duration, 10) || 365;\n                    out.paUsrId = parseInt(s.pa_usr_id, 10) || 0;\n                    out.manageSale = String(s.manage_sale_of_data || '');\n                    out.saleCheckbox = String(s.sale_of_data_checkbox || '');\n                    out.saleText = String(s.sale_of_data_text || '');\n                }\n            } catch (e) {}\n            return out;\n        }\n\n        function userInSalesRegionFromParsed(parsed) {\n            return !!(parsed && parsed.saleRegion && parsed.manageSale === '1' && parsed.saleText && parsed.saleCheckbox);\n        }\n\n        function appendGdprCache(key, val) {\n            try {\n                var g = JSON.parse(localStorage.getItem('gdprCache') || '{}');\n                g[key] = val;\n                localStorage.setItem('gdprCache', JSON.stringify(g));\n            } catch (e) {}\n        }\n\n        function getConsentIdentifier() {\n            var STORAGE_KEY = 'csmConsentIdentifier';\n            try {\n                var stored = localStorage.getItem(STORAGE_KEY);\n                if (stored) {\n                    var data = JSON.parse(stored);\n                    if (data.consentIdentifier && data.expiresAt && new Date(data.expiresAt) > new Date()) {\n                        return data.consentIdentifier;\n                    }\n                    localStorage.removeItem(STORAGE_KEY);\n                }\n            } catch (e) {}\n            var bytes = new Uint8Array(32);\n            if (window.crypto && window.crypto.getRandomValues) {\n                window.crypto.getRandomValues(bytes);\n            } else {\n                for (var i = 0; i < bytes.length; i++) bytes[i] = Math.floor(Math.random() * 256);\n            }\n            var hex = '';\n            for (var j = 0; j < bytes.length; j++) hex += ('0' + bytes[j].toString(16)).slice(-2);\n            try {\n                var exp = new Date();\n                exp.setDate(exp.getDate() + 365);\n                localStorage.setItem(STORAGE_KEY, JSON.stringify({\n                    consentIdentifier: hex,\n                    createdAt: new Date().toISOString(),\n                    expiresAt: exp.toISOString()\n                }));\n            } catch (e2) {}\n            return hex;\n        }\n\n        function normalizeGeo(geo) {\n            var addInfo = geo &#038;&#038; geo.add_info != null ? String(geo.add_info) : '';\n            var longIpRegex = \/^-?d{1,12}$\/;\n            var ip = longIpRegex.test(addInfo) ? int2ip(parseInt(addInfo, 10)) : addInfo;\n            return {\n                ip: ip,\n                country: (geo &#038;&#038; geo.country) || '',\n                region: (geo &#038;&#038; (geo.state || geo.regionCode)) || '',\n                region_name: (geo &#038;&#038; geo.region) || '',\n                city: (geo &#038;&#038; geo.city) || ''\n            };\n        }\n\n        function fetchGeo() {\n            return fetch(GEO_PRIMARY, { method: 'GET', headers: { 'Accept': 'application\/json' } })\n                .then(function(r) { return r.json(); })\n                .catch(function() {\n                    return fetch(GEO_FALLBACK, { method: 'GET', headers: { 'Accept': 'application\/json' } })\n                        .then(function(r2) { return r2.json(); });\n                })\n                .catch(function() {\n                    return fetch('https:\/\/www.cloudflare.com\/cdn-cgi\/trace', { method: 'GET' })\n                        .then(function(r3) { return r3.text(); })\n                        .then(function(text) {\n                            var ip = '';\n                            text.split('n').forEach(function(line) {\n                                var p = line.split('=');\n                                if (p[0] === 'ip') ip = p[1] || '';\n                            });\n                            return { add_info: ip, country: 'US', state: '', region: '', city: '' };\n                        });\n                });\n        }\n\n        function applyShopifyCustomerPrivacy(blockedCategoriesComma) {\n            var isA = blockedCategoriesComma.indexOf('analytics') >= 0;\n            var isM = blockedCategoriesComma.indexOf('marketing') >= 0;\n            var isF = blockedCategoriesComma.indexOf('functionality') >= 0;\n            var isS = blockedCategoriesComma.indexOf('saleofdata') >= 0;\n            var parsed = parseGdprSettings();\n            var payload = { analytics: !isA, marketing: !isM, preferences: !isF };\n            if (userInSalesRegionFromParsed(parsed) || isS) {\n                payload.sale_of_data = !isS;\n            }\n            var doSet = function() {\n                if (typeof Shopify !== 'undefined' && Shopify.customerPrivacy && typeof Shopify.customerPrivacy.setTrackingConsent === 'function') {\n                    Shopify.customerPrivacy.setTrackingConsent(payload, function() {});\n                }\n            };\n            if (typeof Shopify === 'undefined') return;\n            if (Shopify.customerPrivacy && typeof Shopify.customerPrivacy.setTrackingConsent === 'function') {\n                doSet();\n            } else if (typeof Shopify.loadFeatures === 'function') {\n                Shopify.loadFeatures([{ name: 'consent-tracking-api', version: '0.1' }], function(err) {\n                    if (!err) doSet();\n                });\n            }\n        }\n\n        function postConsent(bodyObj) {\n            var body = JSON.stringify(bodyObj);\n            var opts = { method: 'POST', headers: { 'Content-Type': 'text\/plain' }, body: body };\n            return fetch(CONSENT_PRIMARY, opts).then(function(r) {\n                if (r.ok) return r;\n                throw new Error('consent primary failed');\n            }).catch(function() {\n                return fetch(CONSENT_FALLBACK, opts).then(function(r2) {\n                    if (r2.ok) return r2;\n                    throw new Error('consent fallback failed');\n                });\n            });\n        }\n\n        \/** Logs customer\/withdraw_consent to GDPR requests (same consent_identifier as consent record for cross-reference). Fire-and-forget. *\/\n        function logInstantWithdrawGdprRequest(consentIdentifier, ipAddress) {\n            try {\n                if (typeof Shopify === 'undefined' || !Shopify.shop || !consentIdentifier) return;\n                var email = '';\n                if (typeof ConsentmoCustomerIdentification !== 'undefined') {\n                    email = ConsentmoCustomerIdentification.resolveSubmitEmail(\n                        'withdraw_consent',\n                        'gdpr-withdraw-email',\n                        function() { return consentIdentifier; }\n                    );\n                }\n                if (!email) {\n                    try {\n                        if (Shopify.customerEmail) email = String(Shopify.customerEmail).trim();\n                        if (!email && window.ShopifyAnalytics && window.ShopifyAnalytics.meta && window.ShopifyAnalytics.meta.page) {\n                            var pe = window.ShopifyAnalytics.meta.page.customerEmail;\n                            if (pe) email = String(pe).trim();\n                        }\n                    } catch (e0) {}\n                }\n                if (!email) {\n                    email = String(consentIdentifier) + '@guest.withdraw.consentmo.com';\n                }\n                var customerId = 0;\n                try {\n                    if (typeof Shopify !== 'undefined' && typeof Shopify.customer_id !== 'undefined') customerId = Shopify.customer_id;\n                    else if (typeof __st !== 'undefined' && __st.cid != null) customerId = __st.cid;\n                } catch (e1) {}\n                var formData = new FormData();\n                formData.append('shop', Shopify.shop);\n                formData.append('email', email);\n                formData.append('type', 'customer\/withdraw_consent');\n                formData.append('sourceOfRequest', 1);\n                formData.append('consentGiven', 1);\n                formData.append('page', 'gdpr');\n                formData.append('lang', Shopify.locale ? Shopify.locale : '');\n                formData.append('gtranslateLang', (typeof isenseGDPR !== 'undefined' && isenseGDPR.Cookies) ? isenseGDPR.Cookies.get('googtrans') : '');\n                formData.append('ipAddress', ipAddress || '');\n                formData.append('instant_withdraw', '1');\n                if (customerId) formData.append('customer_id', customerId);\n                fetch('https:\/\/app.consentmo.com\/gdprRequests\/submitRequest', { method: 'POST', body: formData }).catch(function() {});\n            } catch (e) {}\n        }\n\n        window.csmHandleWithdrawConsentGdpr = function(btn) {\n            if (typeof Shopify === 'undefined' || !Shopify.shop) {\n                var errEl = document.getElementById('gdpr-withdraw-error');\n                if (errEl) {\n                    errEl.textContent = '\u5546\u5e97\u74b0\u5883\u7121\u6cd5\u4f7f\u7528\uff0c\u8acb\u5f9e\u5546\u5e97\u91cd\u65b0\u5617\u8a66\u3002';\n                    errEl.style.display = 'block';\n                }\n                return;\n            }\n            if (typeof ConsentmoCustomerIdentification !== 'undefined'\n                && !ConsentmoCustomerIdentification.validateEmail('gdpr-withdraw-email', 'gdpr-withdraw-email-error', 'withdraw_consent')) {\n                return;\n            }\n            if (btn && btn.disabled) return;\n            var errBox = document.getElementById('gdpr-withdraw-error');\n            var okBox = document.getElementById('gdpr-withdraw-success');\n            if (errBox) errBox.style.display = 'none';\n            if (okBox) okBox.style.display = 'none';\n\n            var parsed = parseGdprSettings();\n            var blocked = userInSalesRegionFromParsed(parsed)\n                ? 'analytics,marketing,functionality,saleofdata'\n                : 'analytics,marketing,functionality';\n            var cookieSuffix = parsed.cookieName || '';\n            var duration = parsed.consentDuration || 365;\n\n            setConsentCookie('cookieconsent_status' + cookieSuffix, 'deny', duration);\n            setConsentCookie('cookieconsent_preferences_disabled', blocked, duration);\n            appendGdprCache('cookieconsent_status' + cookieSuffix, 'deny');\n            appendGdprCache('cookieconsent_preferences_disabled', blocked);\n\n            clearCategoryFromSettings(parsed.settings, 'analytics');\n            clearCategoryFromSettings(parsed.settings, 'marketing');\n            clearCategoryFromSettings(parsed.settings, 'functionality');\n\n            applyShopifyCustomerPrivacy(blocked);\n\n            if (btn) {\n                btn.disabled = true;\n                btn.setAttribute('aria-disabled', 'true');\n            }\n\n            fetchGeo()\n                .then(function(geo) {\n                    var n = normalizeGeo(geo);\n                    if (!n.ip) {\n                        throw new Error('no ip');\n                    }\n                    var customerId = 0;\n                    if (typeof Shopify.customer_id !== 'undefined') {\n                        customerId = Shopify.customer_id;\n                    } else if (typeof __st !== 'undefined' && __st.cid != null) {\n                        customerId = __st.cid;\n                    }\n                    var body = {\n                        consent_identifier: getConsentIdentifier(),\n                        shop: Shopify.shop,\n                        customer_id: customerId,\n                        ip: n.ip,\n                        country: n.country,\n                        region: n.region,\n                        region_name: n.region_name,\n                        city: n.city,\n                        device: getDeviceTypeInline(),\n                        pa_usr_id: parsed.paUsrId || 0,\n                        blocked_cookies: blocked + ',',\n                        accepted_page: window.location.origin + window.location.pathname,\n                        interaction_button: 5,\n                        is_sale_of_data_enabled: userInSalesRegionFromParsed(parsed)\n                    };\n                    return postConsent(body).then(function() {\n                        logInstantWithdrawGdprRequest(body.consent_identifier, n.ip);\n                    });\n                })\n                .then(function() {\n                    if (okBox) {\n                        okBox.textContent = WITHDRAW_SUCCESS_MSG;\n                        okBox.style.display = 'block';\n                    }\n                })\n                .catch(function() {\n                    if (errBox) {\n                        errBox.textContent = '\u60a8\u7684\u504f\u597d\u8a2d\u5b9a\u5df2\u66f4\u65b0\uff0c\u4f46\u6211\u5011\u7121\u6cd5\u8a18\u9304\u6b64\u64cd\u4f5c\uff0c\u8acb\u7a0d\u5f8c\u518d\u8a66\u3002';\n                        errBox.style.display = 'block';\n                    }\n                    if (btn) {\n                        btn.disabled = false;\n                        btn.removeAttribute('aria-disabled');\n                    }\n                });\n        };\n    })();\n\n    var email, type, consentGiven = false;\n    var activeSubmitButton = null;\n    var successMessage = '\u60a8\u7684\u8acb\u6c42\u5df2\u6210\u529f\u63d0\u4ea4\uff0c\u8acb\u67e5\u770b\u96fb\u5b50\u90f5\u4ef6\u4ee5\u53d6\u5f97\u66f4\u591a\u8cc7\u8a0a\u3002';\n    var verificationModalContent = '<div id=\"data-verification-background\"><div class=\"loading\"><\/div><div id=\"data-verification-modal\"><button class=\"data-verification-close\" aria-label=\"\u95dc\u9589\">&times;<\/button><div id=\"data-verification-container\"><input type=\"checkbox\" aria-labelledby=\"gdpr-modal-container-text\"><label id=\"data-verification-icon\" aria-label=\"\u8cc7\u6599\u9a57\u8b49\u5716\u793a\"><svg width=\"24px\" height=\"24px\" viewBox=\"0 0 18 18\"><path d=\"M1,9 L1,3.5 C1,2 2,1 3.5,1 L14.5,1 C16,1 17,2 17,3.5 L17,14.5 C17,16 16,17 14.5,17 L3.5,17 C2,17 1,16 1,14.5 L1,9 Z\"><\/path><\/path><polyline points=\"1 9 7 14 15 4\"><\/polyline><\/svg><\/label><p id=\"gdpr-modal-container-text\">\u6211\u540c\u610f\u6536\u96c6\u6211\u7684\u96fb\u5b50\u90f5\u4ef6\u5730\u5740\u8207 IP \u4f4d\u5740\uff0c\u4ee5\u8655\u7406\u6b64\u8acb\u6c42\u3002\u66f4\u591a\u8cc7\u8a0a\u8acb\u53c3\u95b1 <a href=\"https:\/\/www.consentmo.com\/privacy-policy-terms-of-service\/en\" target=\"_blank\" aria-label=\"\u96b1\u79c1\u6b0a\u653f\u7b56\u9023\u7d50\uff08\u5728\u65b0\u5206\u9801\u958b\u555f\uff09\">\u96b1\u79c1\u6b0a\u653f\u7b56<\/a>\u3002<\/p><\/div><\/div><\/div>';\n\n    var isEmailValid = function(email) {\n        let regex = \/^(([^<>()[]\\.,;:s@\"]+(.[^<>()[]\\.,;:s@\"]+)*)|(\".+\"))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9]+.)+[a-zA-Z]{2,}))$\/;\n\n        if (email == '' || email == undefined) {\n            return false;\n        } else {\n            return regex.test(email);\n        }\n    }\n\n    var gdprSendRequest = function(callback) {\n        \n        fetch('https:\/\/www.cloudflare.com\/cdn-cgi\/trace', {\n            method: 'GET' ,\n            headers: {\n                'Content-Type': 'text\/plain',\n            },\n        })\n        .then(resp => resp.text())\n        .then(resp => {\n            if (!resp.error) {\n                let ipInfo = resp;\n\n                let formData = new FormData();\n\n                formData.append('shop', Shopify.shop);\n                formData.append('email', email);\n                formData.append('type', type);\n                formData.append('sourceOfRequest', 1);\n                formData.append('ipAddress', ipInfo);\n                formData.append('consentGiven', consentGiven);\n                formData.append('page', 'gdpr');\n                formData.append('lang', Shopify.locale ? Shopify.locale : '');\n                formData.append('gtranslateLang', (typeof isenseGDPR !== 'undefined' && isenseGDPR.Cookies) ? isenseGDPR.Cookies.get('googtrans') : '');\n\n                fetch('https:\/\/app.consentmo.com\/gdprRequests\/submitRequest', {\n                    method: 'POST',\n                    body: formData\n                })\n                .then(resp => resp.json())\n                .then(resp => {\n                    if (!resp.error) {\n                        showInlineSuccessMessage();\n                    } else {\n                        showInlineErrorMessage(resp.message);\n                    }\n                    if (typeof callback == 'function') {\n                        callback(resp);\n                    }\n                })\n                .catch(error => {\n                    showInlineErrorMessage(error.message || '\u767c\u751f\u932f\u8aa4\uff0c\u8acb\u7a0d\u5f8c\u518d\u8a66\u3002');\n                })\n\n            } \n            else {\n                showInlineErrorMessage(resp.message || '\u767c\u751f\u932f\u8aa4\uff0c\u8acb\u7a0d\u5f8c\u518d\u8a66\u3002');\n            }                        \n        })\n    }\n\n    function showInlineSuccessMessage() {\n        if (!activeSubmitButton) {\n            return;\n        }\n        var form = activeSubmitButton.closest('form');\n        if (!form) {\n            return;\n        }\n        var errNode = form.querySelector('.gdpr-request-error');\n        if (errNode) {\n            errNode.remove();\n        }\n        var successNode = form.querySelector('.gdpr-request-success');\n        if (!successNode) {\n            successNode = document.createElement('p');\n            successNode.className = 'gdpr-request-success';\n            form.appendChild(successNode);\n        }\n        successNode.textContent = successMessage;\n    }\n\n    function showInlineErrorMessage(message) {\n        if (!activeSubmitButton) {\n            return;\n        }\n        var form = activeSubmitButton.closest('form');\n        if (!form) {\n            return;\n        }\n        var successNode = form.querySelector('.gdpr-request-success');\n        if (successNode) {\n            successNode.remove();\n        }\n        var errorNode = form.querySelector('.gdpr-request-error');\n        if (!errorNode) {\n            errorNode = document.createElement('p');\n            errorNode.className = 'gdpr-request-error';\n            form.appendChild(errorNode);\n        }\n        errorNode.textContent = message;\n    }\n\n\n    \n    document.addEventListener(\"DOMContentLoaded\", function() {\n\n      \/\/Append modal to body, because otherwise it will not stay centered(even if position is fixed)\n      document.querySelector(\"body\").insertAdjacentHTML( 'beforeend', verificationModalContent);\n      \n      \/\/ When the user clicks on <span> (x), close the modal\n      document.querySelector('.data-verification-close').addEventListener('click', function(e) {\n          e.preventDefault();\n          closeVerificationModal();\n      });\n\n      document.querySelector('#data-verification-icon, #data-verification-container p').addEventListener('click', function(e) {\n          e.preventDefault();\n\n          \/\/ Detect a href's click, because it is overwritten.\n          if(e.target.tagName === \"A\") {\n            window.open(e.target.href, '_blank');\n            return;\n          }\n\n          document.querySelector('#data-verification-icon').classList.add(\"clicked\");\n          setTimeout(()=>{\n            toggleFadeiSense(document.querySelector(\"#data-verification-modal\"), false);\n            document.querySelector('#data-verification-background .loading').style.display = 'inline-block';\n            consentGiven = true;\n            gdprSendRequest(function(resp) {\n                consentGiven = false;\n                closeVerificationModal();\n            });\n          }, 400);\n      });\n    });\n\n    function openVerificationModal(){\n        if(!isEmailValid(email)) {\n            showInlineErrorMessage('\u96fb\u5b50\u90f5\u4ef6\u683c\u5f0f\u7121\u6548');\n            return;\n        }   \n        toggleFadeiSense(document.querySelector(\"#data-verification-modal\"), true);\n        toggleFadeiSense(document.querySelector('#data-verification-background'), true);\n        document.querySelector('#data-verification-container input').focus();\n    }\n\n    function closeVerificationModal(){\n        toggleFadeiSense(document.querySelector(\"#data-verification-background\"), false);\n\n        document.querySelector('#data-verification-icon').classList.remove(\"clicked\");\n        document.querySelector('#data-verification-background .loading').style.display = 'none';\n\n        \/\/ Focus the button of the request type that was picked\n        let gdprForms = document.querySelectorAll('.form-gdpr-request');\n        gdprForms.forEach(function(gdprForm) {\n          if (gdprForm.id === 'form-gdpr-withdraw-consent-request') return;\n          if (gdprForm.style.display !== \"none\") {\n            let gdprFormLinks = gdprForm.previousElementSibling.querySelectorAll('li');\n            if (gdprFormLinks.length === 1) {\n              gdprFormLinks[0].querySelector('button').focus();\n            } else {\n              \/\/ Focus logic for Data Portability requests\n              gdprFormLinks = gdprForm.parentElement;\n              if (gdprFormLinks.nodeName === 'LI') {\n                gdprFormLinks.querySelector('button').focus();\n              }\n            }\n          }\n        });\n    }\n\n    \/\/ Access or download my data\n    document.querySelector('#btn-gdpr-access-data-request').addEventListener('click', function(e) {\n        e.preventDefault();\n        let isExpanded = this.getAttribute('aria-expanded') === 'true' ? true : false;\n        gdprSlideUpAll();\n        if(!isExpanded) {\n          slideDown(document.querySelector('#form-gdpr-access-data-request'), 200);\n          this.setAttribute(\"aria-expanded\", \"true\");\n        } else {\n          slideUp(document.querySelector('#form-gdpr-access-data-request'), 200);\n          this.setAttribute(\"aria-expanded\", \"false\");\n        }\n    });\n\n    document.querySelector('#form-gdpr-access-data-request-submit').addEventListener('click', function(e) {\n        e.preventDefault();\n        activeSubmitButton = this;\n        email = document.querySelector('#form-gdpr-access-data-request-email').value;\n        type = 'customer\/report';\n        openVerificationModal();\n    });\n\n    \/\/ Correct my information\n    document.querySelector('#btn-gdpr-correct-info-request').addEventListener('click', function(e) {\n        e.preventDefault();\n        let isExpanded = this.getAttribute('aria-expanded') === 'true' ? true : false;\n        gdprSlideUpAll();\n        if(!isExpanded) {\n          slideDown(document.querySelector('#form-gdpr-correct-info-request'), 200);\n          this.setAttribute(\"aria-expanded\", \"true\");\n        } else {\n          slideUp(document.querySelector('#form-gdpr-correct-info-request'), 200);\n          this.setAttribute(\"aria-expanded\", \"false\");\n        }\n    });\n\n    document.querySelector('#form-gdpr-correct-info-request-submit').addEventListener('click', function(e) {\n        e.preventDefault();\n        activeSubmitButton = this;\n        email = document.querySelector('#form-gdpr-correct-info-request-email').value;\n        type = 'customer\/edit';\n        openVerificationModal();\n    });\n\n    \/\/ Delete my data\n    document.querySelector('#btn-gdpr-delete-data-request').addEventListener('click', function(e) {\n        e.preventDefault();\n        let isExpanded = this.getAttribute('aria-expanded') === 'true' ? true : false;\n        gdprSlideUpAll();\n        if(!isExpanded) {\n          slideDown(document.querySelector('#form-gdpr-delete-data-request'), 200);\n          this.setAttribute(\"aria-expanded\", \"true\");\n        } else {\n          slideUp(document.querySelector('#form-gdpr-delete-data-request'), 200);\n          this.setAttribute(\"aria-expanded\", \"false\");\n        }\n    });\n\n    document.querySelector('#form-gdpr-delete-data-request-submit').addEventListener('click', function(e) {\n        e.preventDefault();\n        activeSubmitButton = this;\n        email = document.querySelector('#form-gdpr-delete-data-request-email').value;\n        type = 'customer\/delete';\n        openVerificationModal();\n    });\n\n    \/\/ Withdraw consent (always visible; instant reject \u2014 no expand step)\n    document.querySelector('#form-gdpr-withdraw-consent-request-submit').addEventListener('click', function(e) {\n        e.preventDefault();\n        if (typeof window.csmHandleWithdrawConsentGdpr === 'function') {\n            window.csmHandleWithdrawConsentGdpr(this);\n        }\n    });\n\n    \/\/ Manage privacy preferences\n    document.querySelector('#btn-gdpr-manage-privacy-preferences').addEventListener('click', function(e) {\n        e.preventDefault();\n\n        if (typeof showPreferences === 'function') {\n            showPreferences(this);\n            return;\n        }\n\n        let settingsButton = document.querySelector('.cc-window .cc-settings');\n        if (settingsButton) {\n            settingsButton.click();\n            return;\n        }\n\n        alert('\u6b64\u9801\u9762\u7121\u6cd5\u4f7f\u7528 Cookie \u8a2d\u5b9a\u3002');\n    });\n\n    \/\/ Keyboard navigation in data verification modal for accessibility\n    document.addEventListener(\"DOMContentLoaded\", function() {\n      document.querySelector('#data-verification-modal').addEventListener('keydown', function(e) {\n      let isTabPressed = e.keyCode === 9 || e.key === \"Tab\" || e.code === \"Tab\";\n      let isEscapePressed = e.keyCode === 27 || e.key === \"Escape\" || e.code === \"Escape\";\n      let isSpacePressed = event.keyCode === 32 || e.key === \" \" || event.code === \"Space\";\n      let isEnterPressed = event.keyCode === 13 || e.key === \"Enter\" || event.code === \"Enter\";\n      let dataVerificationCloseButton = document.querySelector('.data-verification-close');\n      let dataVerificationCheckbox = document.querySelector('#data-verification-container input');\n      let dataVerificationLink = document.querySelector('#data-verification-container a');\n      \/\/ This function saves us the trouble of calling e.preventDefault() after every focusing\n      let executeFocus = (focusElement) => {focusElement.focus();e.preventDefault();}\n\n      if (isEscapePressed) {\n        if (dataVerificationCloseButton) {\n          dataVerificationCloseButton.click();\n        }\n      }\n\n      if (isSpacePressed || isEnterPressed) {\n        if (document.activeElement === dataVerificationCheckbox) {\n          document.querySelector('#data-verification-container #data-verification-icon').click();\n        }\n      }\n\n      if (isTabPressed) {\n        if (e.shiftKey) {\n          if (dataVerificationCloseButton && document.activeElement === dataVerificationCloseButton) {\n            executeFocus(dataVerificationLink);\n          }\n        } else {\n          if (dataVerificationLink && document.activeElement === dataVerificationLink) {\n            executeFocus(dataVerificationCloseButton);\n          }\n        }\n      }\n      });\n    });\n\n    if (typeof ConsentmoCustomerIdentification !== 'undefined') {\n        ConsentmoCustomerIdentification.initPage({ withdraw_consent: 'gdpr-withdraw-email-wrap' });\n    }\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"<p>\u6211\u5011\u5c0a\u91cd\u60a8\u7684\u96b1\u79c1\u3002 \u82e5\u60a8\u4f4d\u65bc\u6b50\u6d32\u7d93\u6fdf\u5340\uff08EEA\uff09\uff0c\u6839\u64da\u300a\u4e00\u822c\u8cc7\u6599\u4fdd\u8b77\u898f\u7bc4\u300b\uff08GDPR\uff09\uff0c\u60a8\u64c1\u6709\u7279\u5b9a\u6b0a\u5229\u3002\u8acb\u4f7f\u7528 [&hellip;]<\/p>\n","protected":false},"author":0,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1509","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/yohann.shop\/zh-hant\/wp-json\/wp\/v2\/pages\/1509","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/yohann.shop\/zh-hant\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/yohann.shop\/zh-hant\/wp-json\/wp\/v2\/types\/page"}],"replies":[{"embeddable":true,"href":"https:\/\/yohann.shop\/zh-hant\/wp-json\/wp\/v2\/comments?post=1509"}],"version-history":[{"count":1,"href":"https:\/\/yohann.shop\/zh-hant\/wp-json\/wp\/v2\/pages\/1509\/revisions"}],"predecessor-version":[{"id":1877,"href":"https:\/\/yohann.shop\/zh-hant\/wp-json\/wp\/v2\/pages\/1509\/revisions\/1877"}],"wp:attachment":[{"href":"https:\/\/yohann.shop\/zh-hant\/wp-json\/wp\/v2\/media?parent=1509"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}