PageSourceSearch

https://www.artistvideo.jp/privacy-policy

html artistvideo.jp collected 2026-10-08 07:22:52 UTC 71,130 bytes, 458 lines download raw bytes

1<!DOCTYPE html><!--1QKJiAoKiGM9xkRJsurmM--><html lang="ja"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/e4af272ccee01ff0-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="stylesheet" href="/_next/static/css/7e7d96b1e6991756.css?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/1613d6c61bec808d.css?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/715be398208dca58.css?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-d64b67ff9e733332.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77"/>
1<script src="/_next/static/chunks/4bd1b696-f785427dddbba9fb.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77" async=""></script>
1<script src="/_next/static/chunks/1255-f480ec036265ea17.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77" async=""></script>
1<script src="/_next/static/chunks/main-app-5eb0d9c55a395822.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77" async=""></script>
1<script src="/_next/static/chunks/5316-f9f6a1a6e3b648ee.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77" async=""></script>
1<script src="/_next/static/chunks/2619-3c9e02e22d10480a.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77" async=""></script>
1<script src="/_next/static/chunks/734-9cd027f8a4fe6136.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77" async=""></script>
1<script src="/_next/static/chunks/2663-0dede9e6c4ffe948.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77" async=""></script>
1<script src="/_next/static/chunks/8197-047fbffb9fd0bc1d.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77" async=""></script>
1<script src="/_next/static/chunks/8028-092da74c7ab82549.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77" async=""></script>
1<script src="/_next/static/chunks/4545-5e14d14f7fb19bf4.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77" async=""></script>
1<script src="/_next/static/chunks/2884-724f8ccfada609d7.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77" async=""></script>
1<script src="/_next/static/chunks/9955-e72ce8f7e660b24d.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77" async=""></script>
1<script src="/_next/static/chunks/9599-388af8aea021ea48.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77" async=""></script>
1<script src="/_next/static/chunks/app/layout-e22937023721c497.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77" async=""></script>
1<script src="/_next/static/chunks/app/privacy-policy/page-9e0ab4d2a0526b1b.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77" async=""></script>
1<link rel="canonical" href="https://www.artistai.jp"/><meta name="next-size-adjust" content=""/><title>Privacy Policy | Artist AI VIDEO</title><meta name="description" content="Read the Artist AI VIDEO privacy policy. Learn how we collect, use, and protect your personal data on our AI video generation platform."/><meta name="author" content="Artist AI VIDEO"/><meta name="keywords" content="AI video generation,AI video editor,AI video creator,video enhancement,AI art,text to video,AI video platform,video editing online"/><meta name="creator" content="Artist AI VIDEO"/><meta name="publisher" content="Artist AI VIDEO"/><meta name="robots" content="index, follow"/><meta name="googlebot" content="index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1"/><link rel="canonical" href="https://www.artistai.jp"/><meta property="og:title" content="Privacy Policy | Artist AI VIDEO"/><meta property="og:description" content="Read the Artist AI VIDEO privacy policy and how we protect your data."/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Artist AI VIDEO – AI Video Generation &amp; Editing Platform"/><meta name="twitter:description" content="AI-powered video generation and editing platform. Create, enhance, and transform videos with intelligent AI tools."/><meta name="twitter:image" content="https://www.artistai.jp/logo/logo.png"/><link rel="icon" href="/favicon.ico" type="image/x-icon" sizes="16x16"/><link rel="icon" href="/logo/logo_min.svg" type="image/svg+xml"/>
1<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"Organization","name":"Artist AI VIDEO","url":"https://www.artistai.jp","logo":"https://www.artistai.jp/logo/logo.png"},{"@type":"SoftwareApplication","name":"Artist AI VIDEO","applicationCategory":"MultimediaApplication","operatingSystem":"Web","offers":{"@type":"Offer","price":"0","priceCurrency":"USD"}},{"@type":"FAQPage","mainEntity":[{"@type":"Question","name":"What can I create with Artist AI VIDEO?","acceptedAnswer":{"@type":"Answer","text":"Artist AI VIDEO is an AI-powered video generation and editing platform. You can generate videos from text prompts, edit existing videos with AI tools, and enhance video quality — all in your browser."}},{"@type":"Question","name":"How does AI video generation work on Artist AI VIDEO?","acceptedAnswer":{"@type":"Answer","text":"Our AI models generate professional-quality videos from your text descriptions and creative prompts. You can customize styles, add effects, and fine-tune results with our editing tools."}},{"@type":"Question","name":"Do I need to install software to use Artist AI VIDEO?","acceptedA
1nswer":{"@type":"Answer","text":"No, Artist AI VIDEO is entirely browser-based. You can generate and edit videos directly in your web browser without any installation."}}]}]}</script>
1<script>
2  (function() {
3    try {
4      const storedTheme = localStorage.getItem('theme');
5      const hasThemePreference = storedTheme === 'light' || storedTheme === 'dark';
6      const theme = hasThemePreference 
7        ? storedTheme 
8        : 'dark'; // Default to dark mode for new users
9      
10      document.documentElement.setAttribute('data-theme', theme);
11      // Store the theme in localStorage if not already set
12      if (!hasThemePreference) {
13        localStorage.setItem('theme', theme);
14      }
15    } catch (e) {
16      // Fallback if localStorage is not available
17      const defaultTheme = 'dark'; // Changed to dark as default
18      document.documentElement.setAttribute('data-theme', defaultTheme);
19    }
20  })();
21</script>
21<script>
22              (function() {
23                'use strict';
24                // IMMEDIATE removeChild patch - must run before anything else
25                if (typeof Node !== 'undefined' && Node.prototype.removeChild) {
26                  const originalRemoveChild = Node.prototype.removeChild;
27                  Node.prototype.removeChild = function(child) {
28                    if (!child) return child;
29                    if (child.parentNode === this) {
30                      try {
31                        return originalRemoveChild.call(this, child);
32                      } catch(e) {
33                        if (typeof child.remove === 'function') {
34                          child.remove();
35                          return child;
36                        }
37                        return child;
38                      }
39                    }
40                    if (child.parentNode) {
41                      try {
42                        return originalRemoveChild.call(child.parentNode, child);
43                      } catch(e) {
44                        if (typeof child.remove === 'function') {
45                          child.remove();
46                          return child;
47                        }
48                        return child;
49                      }
50                    }
51                    if (typeof child.remove === 'function') {
52                      try { child.remove(); } catch(e) {}
53                    }
54                    return child;
55                  };
56                }
57              })();
58            </script>
58<script>
59  (function() {
60    'use strict';
61    
62    // CRITICAL: Patch removeChild IMMEDIATELY before anything else can use it
63    // This must be the very first thing we do
64    const originalRemoveChild = Node.prototype.removeChild;
65    Node.prototype.removeChild = function(child) {
66      // Always check if child is actually a child before removing
67      if (!child) {
68        return child;
69      }
70      
71      // Check if child is actually a child of this node
72      if (child.parentNode === this) {
73        try {
74          return originalRemoveChild.call(this, child);
75        } catch (e) {
76          // Even if parentNode matches, Edge translation might have moved it
77          // Use remove() as safe fallback
78          if (typeof child.remove === 'function') {
79            child.remove();
80            return child;
81          }
82          // Silently return child if we can't remove it
83          return child;
84        }
85      }
86      
87      // Child is not a child of this node - likely moved by translation
88      // Try to remove from actual parent
89      if (child.parentNode) {
90        try {
91          return originalRemoveChild.call(child.parentNode, child);
92        } catch (e) {
93          // If that fails, use remove()
94          if (typeof child.remove === 'function') {
95            child.remove();
96            return child;
97          }
98          return child;
99        }
100      }
101      
102      // No parent - use remove() if available, otherwise just return
103      if (typeof child.remove === 'function') {
104        try {
105          child.remove();
106        } catch (e) {
107          // Silently ignore
108        }
109      }
110      return child;
111    };
112    
113    // Detect Edge browser
114    const isEdge = navigator.userAgent.includes('Edg');
115    
116    // Edge-specific: Global error handler to catch removeChild errors
117    if (isEdge) {
118      const originalErrorHandler = window.onerror;
119      window.onerror = function(message, source, lineno, colno, error) {
120        // Check if it's a removeChild error
121        if (message && (message.toString().includes('removeChild') || message.toString().includes('not a child'))) {
122          // Silently suppress Edge translation-related removeChild errors
123          return true; // Prevent default error handling
124        }
125        // Call original error handler for other errors
126        if (originalErrorHandler) {
127          return originalErrorHandler.call(this, message, source, lineno, colno, error);
128        }
129        return false;
130      };
131      
132      // Also catch unhandled promise rejections
133      window.addEventListener('unhandledrejection', function(event) {
134        const error = event.reason;
135        if (error && (error.message && (error.message.includes('removeChild') || error.message.includes('not a child')))) {
136          event.preventDefault();
137        }
138      });
139    }
140    
141    // Clean Google Translate attributes that cause hydration mismatches
142    const cleanTranslationAttributes = function() {
143      // Remove Google Translate attributes from all elements
144      const translationAttrs = ['_msthidden', '_mstaria-label', '_msthash', '_msttexthash'];
145      document.querySelectorAll('*').forEach(function(el) {
146        translationAttrs.forEach(function(attr) {
147          if (el.hasAttribute(attr)) {
148            el.removeAttribute(attr);
149          }
150        });
151      });
152    };
153    
154    // Clean attributes immediately and before React hydrates
155    if (document.readyState === 'loading') {
156      document.addEventListener('DOMContentLoaded', cleanTranslationAttributes);
157    } else {
158      cleanTranslationAttributes();
159    }
160    
161    // Also clean attributes periodically (Google Translate adds them dynamically)
162    const observer = new MutationObserver(function(mutations) {
163      mutations.forEach(function(mutation) {
164        if (mutation.type === 'attributes') {
165          const el = mutation.target;
166          const translationAttrs = ['_msthidden', '_mstaria-label', '_msthash', '_msttexthash'];
167          translationAttrs.forEach(function(attr) {
168            if (el.hasAttribute && el.hasAttribute(attr)) {
169              el.removeAttribute(attr);
170            }
171          });
172        }
173        // Clean attributes from added nodes
174        mutation.addedNodes.forEach(function(node) {
175          if (node.nodeType === 1) { // Element node
176            const translationAttrs = ['_msthidden', '_mstaria-label', '_msthash', '_msttexthash'];
177            translationAttrs.forEach(function(attr) {
178              if (node.hasAttribute && node.hasAttribute(attr)) {
179                node.removeAttribute(attr);
180              }
181            });
182            // Also clean child elements
183            if (node.querySelectorAll) {
184              node.querySelectorAll('*').forEach(function(child) {
185                translationAttrs.forEach(function(attr) {
186                  if (child.hasAttribute(attr)) {
187                    child.removeAttribute(attr);
188                  }
189                });
190              });
191            }
192          }
193        });
194      });
195    });
196    
197    // Observe the entire document for attribute changes
198    observer.observe(document.body || document.documentElement, {
199      attributes: true,
200      subtree: true,
201      childList: true,
202      attributeFilter: ['_msthidden', '_mstaria-label', '_msthash', '_msttexthash']
203    });
204    
205    // Also patch Element.remove() to be extra safe for Edge
206    if (Element.prototype.remove) {
207      const originalRemove = Element.prototype.remove;
208      Element.prototype.remove = function() {
209        try {
210          // Check if element is still in DOM
211          if (this.parentNode) {
212            return originalRemove.call(this);
213          }
214          // Element is not in DOM, nothing to remove
215          return;
216        } catch (e) {
217          // In Edge, translation can cause issues - silently handle
218          const isEdge = navigator.userAgent.includes('Edg');
219          if (!isEdge) {
220            console.warn('remove() error suppressed (likely due to page translation):', e.message);
221          }
222        }
223      };
224    }
225    
226    // Edge-specific: Also patch ParentNode methods that might call removeChild
227    if (Element.prototype.replaceChildren) {
228      const originalReplaceChildren = Element.prototype.replaceChildren;
229      Element.prototype.replaceChildren = function() {
230        try {
231          return originalReplaceChildren.apply(this, arguments);
232        } catch (e) {
233          // If replaceChildren fails due to translation, try manual replacement
234          const isEdge = navigator.userAgent.includes('Edg');
235          if (isEdge && e.message && e.message.includes('removeChild')) {
236            // Clear children manually using innerHTML as fallback
237            this.innerHTML = '';
238            // Then append new children
239            Array.from(arguments).forEach(function(child) {
240              if (child) {
241                this.appendChild(child);
242              }
243            }, this);
244            return;
245          }
246          throw e;
247        }
248      };
249    }
250    
251    // Remove translation overlays (Google Translate and Edge Translate) that block clicks
252    const removeTranslationOverlays = function() {
253      // Remove Google Translate banner/frame that might block clicks
254      const translateBanner = document.querySelector('.goog-te-banner-frame');
255      if (translateBanner) {
256        const iframe = translateBanner.querySelector('iframe');
257        if (iframe) {
258          iframe.style.pointerEvents = 'none';
259        }
260      }
261      
262      // Remove Edge Translate overlays (Edge uses different selectors)
263      const edgeTranslateOverlays = document.querySelectorAll('[id*="MicrosoftTranslator"], [class*="MicrosoftTranslator"], [id*="EdgeTranslator"], [class*="EdgeTranslator"]');
264      edgeTranslateOverlays.forEach(function(el) {
265        el.style.pointerEvents = 'none';
266        el.style.display = 'none';
267      });
268      
269      // Remove any high z-index overlays that might block clicks (common in Edge)
270      document.querySelectorAll('*').forEach(function(el) {
271        const style = window.getComputedStyle(el);
272        const zIndex = parseInt(style.zIndex) || 0;
273        const position = style.position;
274        
275        // If it's a fixed/absolute positioned element with very high z-index
276        if ((position === 'fixed' || position === 'absolute') && zIndex > 9999) {
277          // Check if it's likely a translation overlay
278          const isTranslationOverlay = 
279            (el.id && (el.id.includes('translate') || el.id.includes('translator') || el.id.includes('Microsoft'))) ||
280            (el.className && (el.className.includes('translate') || el.className.includes('translator') || el.className.includes('Microsoft'))) ||
281            (!el.querySelector('*') && el.textContent === '');
282          
283          if (isTranslationOverlay && !el.querySelector('iframe')) {
284            el.style.pointerEvents = 'none';
285            el.style.display = 'none';
286          }
287        }
288      });
289      
290      // Ensure all interactive elements remain clickable
291      const interactiveSelectors = 'button, a, input, select, textarea, [role="button"], [onclick], [tabindex], [type="submit"], [type="button"]';
292      document.querySelectorAll(interactiveSelectors).forEach(function(el) {
293        // Force pointer-events on interactive elements
294        const computedStyle = window.getComputedStyle(el);
295        if (computedStyle.pointerEvents === 'none' || el.style.pointerEvents === 'none') {
296          el.style.pointerEvents = 'auto';
297          el.style.zIndex = '9999'; // Ensure interactive elements are on top
298        }
299        
300        // Remove any translation wrappers that might block clicks
301        let parent = el.parentElement;
302        let depth = 0;
303        while (parent && depth < 5) { // Check up to 5 levels up
304          const parentStyle = window.getComputedStyle(parent);
305          const hasTranslationAttr = parent.hasAttribute('_msthidden') || 
306                                     parent.hasAttribute('_msthash') || 
307                                     parent.hasAttribute('_msttexthash') ||
308                                     (parent.id && (parent.id.includes('translate') || parent.id.includes('translator'))) ||
309                                     (parent.className && (parent.className.includes('translate') || parent.className.includes('translator')));
310          
311          if (hasTranslationAttr && parentStyle.pointerEvents === 'none') {
312            parent.style.pointerEvents = 'auto';
313          }
314          
315          // If parent is a span wrapper around interactive element, make it not block
316          if (parent.tagName === 'SPAN' && hasTranslationAttr) {
317            parent.style.pointerEvents = 'none';
318          }
319          
320          parent = parent.parentElement;
321          depth++;
322        }
323      });
324      
325      // Make translation text wrappers not block pointer events
326      document.querySelectorAll('span, div').forEach(function(el) {
327        // If element is a translation wrapper (span/div with translation attributes)
328        const hasTranslationAttr = el.hasAttribute('_msthidden') || 
329                                  el.hasAttribute('_msthash') || 
330                                  el.hasAttribute('_msttexthash') ||
331                                  (el.id && (el.id.includes('translate') || el.id.includes('translator'))) ||
332                                  (el.className && (el.className.includes('translate') || el.className.includes('translator')));
333        
334        if (hasTranslationAttr) {
335          // Check if it's wrapping an interactive element
336          const hasInteractiveChild = el.querySelector('button, a, input, select, textarea, [role="button"], [onclick]');
337          if (hasInteractiveChild) {
338            // Make the wrapper not block clicks
339            el.style.pointerEvents = 'none';
340          } else {
341            // For text-only wrappers, allow pointer events to pass through
342            const computedStyle = window.getComputedStyle(el);
343            if (computedStyle.pointerEvents === 'none') {
344              el.style.pointerEvents = 'auto';
345            }
346          }
347        }
348      });
349    };
350    
351    // Targeted fix: only restore pointer events on elements that are actually blocked,
352    // and only hide translation-related overlays that are covering them.
353    // IMPORTANT: Never unconditionally set cursor/z-index/position — that causes hydration mismatches.
354    const forceClickable = function() {
355      const interactiveElements = document.querySelectorAll('button, a, input, select, textarea, [role="button"], [onclick], [tabindex], [type="submit"], [type="button"], label[for]');
356
357      interactiveElements.forEach(function(el) {
358        // Only unblock if pointer-events is explicitly set to none
359        const computedStyle = window.getComputedStyle(el);
360        if (computedStyle.pointerEvents === 'none') {
361          el.style.pointerEvents = 'auto';
362        }
363
364        // Find and hide translation overlays that are physically blocking this element
365        const rect = el.getBoundingClientRect();
366        if (rect.width === 0 && rect.height === 0) return; // off-screen / hidden, skip
367        const centerX = rect.left + rect.width / 2;
368        const centerY = rect.top + rect.height / 2;
369        const elementAtPoint = document.elementFromPoint(centerX, centerY);
370
371        if (elementAtPoint && elementAtPoint !== el && !el.contains(elementAtPoint)) {
372          const blockingEl = elementAtPoint;
373          const blockingClassName =
374            typeof blockingEl.className === 'string'
375              ? blockingEl.className
376              : (blockingEl.className && typeof blockingEl.className.baseVal === 'string'
377                  ? blockingEl.className.baseVal
378                  : '');
379
380          const isTranslationElement =
381            blockingEl.hasAttribute('_msthidden') ||
382            blockingEl.hasAttribute('_msthash') ||
383            blockingEl.hasAttribute('_msttexthash') ||
384            (blockingEl.id && (blockingEl.id.includes('translate') || blockingEl.id.includes('translator') || blockingEl.id.includes('Microsoft'))) ||
385            (blockingClassName && (blockingClassName.includes('translate') || blockingClassName.includes('translator') || blockingClassName.includes('Microsoft')));
386
387          if (isTranslationElement) {
388            blockingEl.style.pointerEvents = 'none';
389            blockingEl.style.display = 'none';
390          }
391        }
392
393        // Restore pointer events on parent elements if blocked by a translation wrapper
394        let parent = el.parentElement;
395        let depth = 0;
396        while (parent && depth < 10) {
397          const hasTranslationAttr =
398            parent.hasAttribute('_msthidden') ||
399            parent.hasAttribute('_msthash') ||
400            parent.hasAttribute('_msttexthash');
401          if (hasTranslationAttr) {
402            const parentComputed = window.getComputedStyle(parent);
403            if (parentComputed.pointerEvents === 'none') {
404              parent.style.pointerEvents = 'auto';
405            }
406          }
407          parent = parent.parentElement;
408          depth++;
409        }
410      });
411    };
412
413    // Run once after DOM is ready; re-run on translation-driven DOM mutations only
414    removeTranslationOverlays();
415    forceClickable();
416
417    // Run every 2s (instead of 500ms) — translation changes are slow; no need to hammer the DOM
418    setInterval(function() {
419      removeTranslationOverlays();
420      forceClickable();
421    }, 2000);
422
423    // Also run when DOM changes (translation modifies DOM)
424    const clickObserver = new MutationObserver(function() {
425      removeTranslationOverlays();
426      forceClickable();
427    });
428    
429    if (document.body) {
430      clickObserver.observe(document.body, {
431        childList: true,
432        subtree: true,
433        attributes: true,
434        attributeFilter: ['style', 'class', 'id']
435      });
436    }
437    
438    // Also listen for click events and ensure they work
439    document.addEventListener('click', function(e) {
440      const target = e.target;
441      // If click is on a translation wrapper, find the actual button underneath
442      if (target && target.nodeType === 1 && (target.hasAttribute('_msthidden') || target.hasAttribute('_msthash'))) {
443        const interactiveChild = target.closest('button, a, input, select, textarea, [role="button"]');
444        if (interactiveChild) {
445          e.stopPropagation();
446          if (interactiveChild instanceof HTMLElement) {
447            interactiveChild.click();
448          }
449        }
450      }
451    }, true); // Use capture phase to catch early
452    
453    console.log('✅ DOM error patch applied - removeChild is now safe from translation errors');
454    console.log('✅ Google Translate attribute cleaner active - hydration mismatches prevented');
455    console.log('✅ Google Translate overlay remover active - click events enabled');
456  })();
457</script>
457<script src="/_next/static/chunks/polyfills-42372ed130431b0a.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77" noModule=""></script>
457</head><body class="__className_f367f3"><div hidden=""><!--$--><!--/$--></div><div class="min-h-screen bg-[#0D0D0F] text-white"><header class="fixed w-full top-0 px-4 py-4 bg-[#070719]/80 backdrop-blur-lg border-b border-white/10 z-50"><div class="container mx-auto max-w-[1320px]"><div class="flex items-center justify-between"><a class="flex items-center gap-2 text-gray-300 hover:text-white transition-colors" href="/"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-left w-5 h-5"><path d="m12 19-7-7 7-7"></path><path d="M19 12H5"></path></svg><span>ホームに戻る</span></a><h1 class="text-xl font-bold">プライバシーポリシー</h1></div></div></header><main class="container mx-auto max-w-[1000px] px-4 pt-24 pb-16"><div class="prose prose-invert max-w-none"><div class="space-y-8"><h1 class="text-4xl font-bold mb-8">プライバシーポリシー</h1><div class="text-gray-400 mb-8">最終更新日: 2025å¹´3月19日</div><p class="text-gray-300 leading-relaxed">Richdale AIでは、お客様のプライバシーを重視し、個人データの保護に努めています。このプライバシーポリシーでは、AI画像生成プラットフォームの利用時における情報の収集、使用、保護方法について説明します。</p><section><h2 class="text-2xl font-bold mb-4">1. 収集する情報の概要</h2><p class="text-gray-300 mb-4">以下の種類のデータを収集します:</p><ul class="list-disc list-inside text-gray-300 space-y-2"><li>生成コンテンツ:AI技術を使用して作成された画像は、ユーザー体験の向上とサービス改善のために保存されます。</li><li>ユーザー情報:アカウントを作成する場合、アカウント管理に必要な氏名、メールアドレス、その他の詳細情報を収集する場合があります。</li><li>利用データ:プラットフォームとの対話など、匿名化された利用統計を収集し、サービスの分析と向上に活用する場合があります。</li></ul></section><section><h2 class="text-2xl font-bold mb-4">2. 情報の使用方法</h2><p class="text-gray-300 mb-4">データは以下の目的で使用されます:</p><ul class="list-disc list-inside text-gray-300 space-y-2"><li>ArtistAIプラットフォームの提供、維持、改善</li><li>体験のパーソナライズとAI生成結果の最適化</li><li>セキュリティの確保と不正利用の防止</li><li>法的要件の遵守</li></ul><p class="text-gray-300 mt-4">マーケティング目的でデータを第三者に販売または共有することはありません。</p><p class="text-gray-300">機密性の高い個人情報は処理しません。</p></section><section><h2 class="text-2xl font-bold mb-4">3. 情報の共有</h2><p class="text-gray-300 mb-4">個人情報を販売することはありません。ただし、以下の状況で情報を共有する場合があります:</p><ul class="list-disc list-inside text-gray-300 space-y-2"><li>サービスプロバイダー:サービスの運営を支援する第三者ベンダーとデータを共有する場合があります。</li><li>法的遵守:法律で要求される場合や法的要請に応じて情報を開示する場合があります。</li><li>事業譲渡:合併、売却、買収の際に、事業資産の一部として情報が譲渡される場合があります。</li></ul></section><section><h2 class="text-2xl font-bold mb-4">4. データの保管とセキュリティ</h2><p class="text-gray-300 mb-4">セキュリティを重視し、以下のような対策を実施しています:</p><ul class="list-disc list-inside text-gray-300 space-y-2"><li>不正アクセスを防ぐための保存データの暗号化</li><li>権限のある担当者のみにデータアクセスを制限するセキュアなアクセス制御</li><li>セキュリティのベストプラクティスに準拠するための定期的な監査</li></ul></section><section><h2 class="text-2xl font-bold mb-4">5. セキュリティ対策</h2><p class="text-gray-300">業界標準のセキュリティ対策を実施し、不正アクセス、開示、破壊からお客様の情報を保護しています。ただし、インターネット上の送信方法は100%安全でã
457¯ã‚りません。</p></section><section><h2 class="text-2xl font-bold mb-4">6. データ保持</h2><p class="text-gray-300">サービスの提供と法的要件の遵守に必要な期間のみ、お客様の情報を保持します。データの削除をご希望の場合は、<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="adc4c3cbc2eddfc4cec5c9ccc1c883ccc4">[email&#160;protected]</a>までご連絡ください。</p></section><section><h2 class="text-2xl font-bold mb-4">7. お客様の権利と選択</h2><p class="text-gray-300 mb-4">お客様の所在地に応じて、個人データに関して以下の権利を有する場合があります:</p><ul class="list-disc list-inside text-gray-300 space-y-2"><li>アクセスと訂正:データへのアクセスと訂正を要求できます。</li><li>データポータビリティ:構造化された形式でデータのコピーを要求できます。</li><li>オプトアウト:マーケティング通信や特定のデータ処理活動からオプトアウトできます。</li><li>削除:法的義務に従い、個人データの削除を要求できます。</li></ul><p class="text-gray-300 mt-4">これらの権利を行使するには、<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="620b0c040d22100b010a06030e074c030b">[email&#160;protected]</a>までご連絡ください。</p></section><section><h2 class="text-2xl font-bold mb-4">8. 第三者のリンクとサービス</h2><p class="text-gray-300">当社のサービスには第三者のウェブサイトへのリンクが含まれる場合があります。それらのプライバシー慣行については責任を負いかねます。個人情報を共有する前に、各サイトのプライバシーポリシーをご確認ください。</p></section><section><h2 class="text-2xl font-bold mb-4">9. 子どものプライバシー</h2><p class="text-gray-300">当社のサービスは13歳未満(または適用法に基づく他の年齢要件)の子ども向けではありません。子どもの個人情報を故意に収集することはありません。</p></section><section><h2 class="text-2xl font-bold mb-4">10. ポリシーの変更</h2><p class="text-gray-300">このポリシーは定期的に更新される場合があります。重要な変更がある場合は、メールまたはプラットフォーム通知でお知らせします。</p></section><section><h2 class="text-2xl font-bold mb-4">お問い合わせ</h2><p class="text-gray-300">このプライバシーポリシーに関するご質問やご懸念がございましたら、<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ea83848c85aa988389828e8b868fc48b83">[email&#160;protected]</a>までご連絡ください。</p></section><p class="text-gray-300 mt-8">ArtistAIを利用することで、このプライバシーポリシーに同意したものとみなされます。</p></div></div></main></div><!--$--><!--/$--><div data-rht-toaster="" style="position:fixed;z-index:9999;top:16px;left:16px;right:16px;bottom:16px;pointer-events:none"></div><div><section class="Toastify" aria-live="polite" aria-atomic="false" aria-relevant="additions text" aria-label="Notifications Alt+T"></section></div>
vendor: 108 bytes, line 457
457<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
457<script src="/_next/static/chunks/webpack-d64b67ff9e733332.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77" id="_R_" async=""></script>
457<script>(self.__next_f=self.__next_f||[]).push([0])</script>
457<script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n"])</script>
457<script>self.__next_f.push([1,"3:I[3479,[\"5316\",\"static/chunks/5316-f9f6a1a6e3b648ee.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"2619\",\"static/chunks/2619-3c9e02e22d10480a.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"734\",\"static/chunks/734-9cd027f8a4fe6136.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"2663\",\"static/chunks/2663-0dede9e6c4ffe948.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"8197\",\"static/chunks/8197-047fbffb9fd0bc1d.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"8028\",\"static/chunks/8028-092da74c7ab82549.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"4545\",\"static/chunks/4545-5e14d14f7fb19bf4.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"2884\",\"static/chunks/2884-724f8ccfada609d7.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"9955\",\"static/chunks/9955-e72ce8f7e660b24d.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"9599\",\"static/chunks/9599-388af8aea021ea48.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"7177\",\"static/chunks/app/layout-e22937023721c497.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\"],\"ThemeScript\"]\n"])</script>
457<script>self.__next_f.push([1,"a:I[7150,[],\"\"]\n:HL[\"/_next/static/media/e4af272ccee01ff0-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/7e7d96b1e6991756.css?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"style\"]\n:HL[\"/_next/static/css/1613d6c61bec808d.css?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"style\"]\n:HL[\"/_next/static/css/715be398208dca58.css?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"style\"]\n2:T50c,"])</script>
457<script>self.__next_f.push([1,"{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"name\":\"Artist AI VIDEO\",\"url\":\"https://www.artistai.jp\",\"logo\":\"https://www.artistai.jp/logo/logo.png\"},{\"@type\":\"SoftwareApplication\",\"name\":\"Artist AI VIDEO\",\"applicationCategory\":\"MultimediaApplication\",\"operatingSystem\":\"Web\",\"offers\":{\"@type\":\"Offer\",\"price\":\"0\",\"priceCurrency\":\"USD\"}},{\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"What can I create with Artist AI VIDEO?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Artist AI VIDEO is an AI-powered video generation and editing platform. You can generate videos from text prompts, edit existing videos with AI tools, and enhance video quality — all in your browser.\"}},{\"@type\":\"Question\",\"name\":\"How does AI video generation work on Artist AI VIDEO?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Our AI models generate professional-quality videos from your text descriptions and creative prompts. You can customize styles, add effects, and fine-tune results with our editing tools.\"}},{\"@type\":\"Question\",\"name\":\"Do I need to install software to use Artist AI VIDEO?\",\"acceptedA
457nswer\":{\"@type\":\"Answer\",\"text\":\"No, Artist AI VIDEO is entirely browser-based. You can generate and edit videos directly in your web browser without any installation.\"}}]}]}"])</script>
457<script>self.__next_f.push([1,"4:T606,"])</script>
457<script>self.__next_f.push([1,"\n              (function() {\n                'use strict';\n                // IMMEDIATE removeChild patch - must run before anything else\n                if (typeof Node !== 'undefined' \u0026\u0026 Node.prototype.removeChild) {\n                  const originalRemoveChild = Node.prototype.removeChild;\n                  Node.prototype.removeChild = function(child) {\n                    if (!child) return child;\n                    if (child.parentNode === this) {\n                      try {\n                        return originalRemoveChild.call(this, child);\n                      } catch(e) {\n                        if (typeof child.remove === 'function') {\n                          child.remove();\n                          return child;\n                        }\n                        return child;\n                      }\n                    }\n                    if (child.parentNode) {\n                      try {\n                        return originalRemoveChild.call(child.parentNode, child);\n                      } catch(e) {\n                        if (typeof child.remove === 'function') {\n                          child.remove();\n                          return child;\n                        }\n                        return child;\n                      }\n                    }\n                    if (typeof child.remove === 'function') {\n                      try { child.remove(); } catch(e) {}\n                    }\n                    return child;\n                  };\n                }\n              })();\n            "])</script>
457<script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"1QKJiAoKiGM9xkRJsurmM\",\"p\":\"\",\"c\":[\"\",\"privacy-policy\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"privacy-policy\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/7e7d96b1e6991756.css?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/1613d6c61bec808d.css?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"2\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/715be398208dca58.css?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"ja\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"meta\",null,{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\"}],[\"$\",\"link\",null,{\"rel\":\"canonical\",\"href\":\"https://www.artistai.jp\"}],[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"$2\"}}],[\"$\",\"$L3\",null,{}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"$4\"},\"suppressHydrationWarning\":true}],\"$L5\"]}],\"$L6\"]}]]}],{\"children\":[\"privacy-policy\",\"$L7\",{\"children\":[\"__PAGE__\",\"$L8\",{},null,false]},null,false]},null,false],\"$L9\",false]],\"m\":\"$undefined\",\"G\":[\"$a\",[]],\"s\":false,\"S\":true}\n"])</script>
457<script>self.__next_f.push([1,"c:I[8743,[\"5316\",\"static/chunks/5316-f9f6a1a6e3b648ee.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"2619\",\"static/chunks/2619-3c9e02e22d10480a.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"734\",\"static/chunks/734-9cd027f8a4fe6136.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"2663\",\"static/chunks/2663-0dede9e6c4ffe948.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"8197\",\"static/chunks/8197-047fbffb9fd0bc1d.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"8028\",\"static/chunks/8028-092da74c7ab82549.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"4545\",\"static/chunks/4545-5e14d14f7fb19bf4.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"2884\",\"static/chunks/2884-724f8ccfada609d7.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"9955\",\"static/chunks/9955-e72ce8f7e660b24d.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"9599\",\"static/chunks/9599-388af8aea021ea48.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"7177\",\"static/chunks/app/layout-e22937023721c497.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\"],\"Providers\"]\n"])</script>
457<script>self.__next_f.push([1,"d:I[9955,[\"5316\",\"static/chunks/5316-f9f6a1a6e3b648ee.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"2619\",\"static/chunks/2619-3c9e02e22d10480a.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"734\",\"static/chunks/734-9cd027f8a4fe6136.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"2663\",\"static/chunks/2663-0dede9e6c4ffe948.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"8197\",\"static/chunks/8197-047fbffb9fd0bc1d.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"8028\",\"static/chunks/8028-092da74c7ab82549.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"4545\",\"static/chunks/4545-5e14d14f7fb19bf4.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"2884\",\"static/chunks/2884-724f8ccfada609d7.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"9955\",\"static/chunks/9955-e72ce8f7e660b24d.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"9599\",\"static/chunks/9599-388af8aea021ea48.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"7177\",\"static/chunks/app/layout-e22937023721c497.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\"],\"UserDataProvider\"]\n"])</script>
457<script>self.__next_f.push([1,"e:I[2306,[\"5316\",\"static/chunks/5316-f9f6a1a6e3b648ee.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"2619\",\"static/chunks/2619-3c9e02e22d10480a.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"734\",\"static/chunks/734-9cd027f8a4fe6136.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"2663\",\"static/chunks/2663-0dede9e6c4ffe948.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"8197\",\"static/chunks/8197-047fbffb9fd0bc1d.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"8028\",\"static/chunks/8028-092da74c7ab82549.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"4545\",\"static/chunks/4545-5e14d14f7fb19bf4.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"2884\",\"static/chunks/2884-724f8ccfada609d7.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"9955\",\"static/chunks/9955-e72ce8f7e660b24d.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"9599\",\"static/chunks/9599-388af8aea021ea48.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"7177\",\"static/chunks/app/layout-e22937023721c497.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\"],\"LanguageProvider\"]\n"])</script>
457<script>self.__next_f.push([1,"f:I[9766,[],\"\"]\n10:I[8924,[],\"\"]\n"])</script>
457<script>self.__next_f.push([1,"11:I[2663,[\"5316\",\"static/chunks/5316-f9f6a1a6e3b648ee.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"2619\",\"static/chunks/2619-3c9e02e22d10480a.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"734\",\"static/chunks/734-9cd027f8a4fe6136.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"2663\",\"static/chunks/2663-0dede9e6c4ffe948.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"8197\",\"static/chunks/8197-047fbffb9fd0bc1d.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"8028\",\"static/chunks/8028-092da74c7ab82549.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"4545\",\"static/chunks/4545-5e14d14f7fb19bf4.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"2884\",\"static/chunks/2884-724f8ccfada609d7.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"9955\",\"static/chunks/9955-e72ce8f7e660b24d.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"9599\",\"static/chunks/9599-388af8aea021ea48.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"7177\",\"static/chunks/app/layout-e22937023721c497.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\"],\"Toaster\"]\n"])</script>
457<script>self.__next_f.push([1,"12:I[744,[\"5316\",\"static/chunks/5316-f9f6a1a6e3b648ee.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"2619\",\"static/chunks/2619-3c9e02e22d10480a.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"734\",\"static/chunks/734-9cd027f8a4fe6136.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"2663\",\"static/chunks/2663-0dede9e6c4ffe948.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"8197\",\"static/chunks/8197-047fbffb9fd0bc1d.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"8028\",\"static/chunks/8028-092da74c7ab82549.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"4545\",\"static/chunks/4545-5e14d14f7fb19bf4.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"2884\",\"static/chunks/2884-724f8ccfada609d7.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"9955\",\"static/chunks/9955-e72ce8f7e660b24d.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"9599\",\"static/chunks/9599-388af8aea021ea48.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"7177\",\"static/chunks/app/layout-e22937023721c497.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\"],\"ToastContainerWrapper\"]\n"])</script>
457<script>self.__next_f.push([1,"13:I[5423,[\"5316\",\"static/chunks/5316-f9f6a1a6e3b648ee.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"2619\",\"static/chunks/2619-3c9e02e22d10480a.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"734\",\"static/chunks/734-9cd027f8a4fe6136.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"2663\",\"static/chunks/2663-0dede9e6c4ffe948.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"8197\",\"static/chunks/8197-047fbffb9fd0bc1d.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"8028\",\"static/chunks/8028-092da74c7ab82549.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"4545\",\"static/chunks/4545-5e14d14f7fb19bf4.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"2884\",\"static/chunks/2884-724f8ccfada609d7.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"9955\",\"static/chunks/9955-e72ce8f7e660b24d.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"9599\",\"static/chunks/9599-388af8aea021ea48.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"7177\",\"static/chunks/app/layout-e22937023721c497.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\"],\"CookieConsent\"]\n"])</script>
457<script>self.__next_f.push([1,"14:I[5998,[\"5316\",\"static/chunks/5316-f9f6a1a6e3b648ee.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"2619\",\"static/chunks/2619-3c9e02e22d10480a.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"734\",\"static/chunks/734-9cd027f8a4fe6136.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"2663\",\"static/chunks/2663-0dede9e6c4ffe948.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"8197\",\"static/chunks/8197-047fbffb9fd0bc1d.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"8028\",\"static/chunks/8028-092da74c7ab82549.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"4545\",\"static/chunks/4545-5e14d14f7fb19bf4.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"2884\",\"static/chunks/2884-724f8ccfada609d7.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"9955\",\"static/chunks/9955-e72ce8f7e660b24d.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"9599\",\"static/chunks/9599-388af8aea021ea48.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"7177\",\"static/chunks/app/layout-e22937023721c497.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\"],\"default\"]\n"])</script>
457<script>self.__next_f.push([1,"15:I[1959,[],\"ClientPageRoot\"]\n16:I[5061,[\"5316\",\"static/chunks/5316-f9f6a1a6e3b648ee.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"2619\",\"static/chunks/2619-3c9e02e22d10480a.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\",\"2902\",\"static/chunks/app/privacy-policy/page-9e0ab4d2a0526b1b.js?dpl=dpl_47oqSPwgFQ4793FcaPG5ojuR1W77\"],\"default\"]\n19:I[4431,[],\"OutletBoundary\"]\n1b:I[5278,[],\"AsyncMetadataOutlet\"]\n1d:I[4431,[],\"ViewportBoundary\"]\n1f:I[4431,[],\"MetadataBoundary\"]\n20:\"$Sreact.suspense\"\nb:T41df,"])</script>
457<script>self.__next_f.push([1,"\n  (function() {\n    'use strict';\n    \n    // CRITICAL: Patch removeChild IMMEDIATELY before anything else can use it\n    // This must be the very first thing we do\n    const originalRemoveChild = Node.prototype.removeChild;\n    Node.prototype.removeChild = function(child) {\n      // Always check if child is actually a child before removing\n      if (!child) {\n        return child;\n      }\n      \n      // Check if child is actually a child of this node\n      if (child.parentNode === this) {\n        try {\n          return originalRemoveChild.call(this, child);\n        } catch (e) {\n          // Even if parentNode matches, Edge translation might have moved it\n          // Use remove() as safe fallback\n          if (typeof child.remove === 'function') {\n            child.remove();\n            return child;\n          }\n          // Silently return child if we can't remove it\n          return child;\n        }\n      }\n      \n      // Child is not a child of this node - likely moved by translation\n      // Try to remove from actual parent\n      if (child.parentNode) {\n        try {\n          return originalRemoveChild.call(child.parentNode, child);\n        } catch (e) {\n          // If that fails, use remove()\n          if (typeof child.remove === 'function') {\n            child.remove();\n            return child;\n          }\n          return child;\n        }\n      }\n      \n      // No parent - use remove() if available, otherwise just return\n      if (typeof child.remove === 'function') {\n        try {\n          child.remove();\n        } catch (e) {\n          // Silently ignore\n        }\n      }\n      return child;\n    };\n    \n    // Detect Edge browser\n    const isEdge = navigator.userAgent.includes('Edg');\n    \n    // Edge-specific: Global error handler to catch removeChild errors\n    if (isEdge) {\n      const originalErrorHandler = window.onerror;\n      window.onerror = function(message, source, lineno, colno, error) {\n        // Check if it's a removeChild error\n        if (message \u0026\u0026 (message.toString().includes('removeChild') || message.toString().includes('not a child'))) {\n          // Silently suppress Edge translation-related removeChild errors\n          return true; // Prevent default error handling\n        }\n        // Call original error handler for other errors\n        if (originalErrorHandler) {\n          return originalErrorHandler.call(this, message, source, lineno, colno, error);\n        }\n        return false;\n      };\n      \n      // Also catch unhandled promise rejections\n      window.addEventListener('unhandledrejection', function(event) {\n        const error = event.reason;\n        if (error \u0026\u0026 (error.message \u0026\u0026 (error.message.includes('removeChild') || error.message.includes('not a child')))) {\n          event.preventDefault();\n        }\n      });\n    }\n    \n    // Clean Google Translate attributes that cause hydration mismatches\n    const cleanTranslationAttributes = function() {\n      // Remove Google Translate attributes from all elements\n      const translationAttrs = ['_msthidden', '_mstaria-label', '_msthash', '_msttexthash'];\n      document.querySelectorAll('*').forEach(function(el) {\n        translationAttrs.forEach(function(attr) {\n          if (el.hasAttribute(attr)) {\n            el.removeAttribute(attr);\n          }\n        });\n      });\n    };\n    \n    // Clean attributes immediately and before React hydrates\n    if (document.readyState === 'loading') {\n      document.addEventListener('DOMContentLoaded', cleanTranslationAttributes);\n    } else {\n      cleanTranslationAttributes();\n    }\n    \n    // Also clean attributes periodically (Google Translate adds them dynamically)\n    const observer = new MutationObserver(function(mutations) {\n      mutations.forEach(function(mutation) {\n        if (mutation.type === 'attributes') {\n          const el = mutation.target;\n          const translationAttrs = ['_msthidden', '_mstaria-label', '_msthash', '_msttexthash'];
457\n          translationAttrs.forEach(function(attr) {\n            if (el.hasAttribute \u0026\u0026 el.hasAttribute(attr)) {\n              el.removeAttribute(attr);\n            }\n          });\n        }\n        // Clean attributes from added nodes\n        mutation.addedNodes.forEach(function(node) {\n          if (node.nodeType === 1) { // Element node\n            const translationAttrs = ['_msthidden', '_mstaria-label', '_msthash', '_msttexthash'];\n            translationAttrs.forEach(function(attr) {\n              if (node.hasAttribute \u0026\u0026 node.hasAttribute(attr)) {\n                node.removeAttribute(attr);\n              }\n            });\n            // Also clean child elements\n            if (node.querySelectorAll) {\n              node.querySelectorAll('*').forEach(function(child) {\n                translationAttrs.forEach(function(attr) {\n                  if (child.hasAttribute(attr)) {\n                    child.removeAttribute(attr);\n                  }\n                });\n              });\n            }\n          }\n        });\n      });\n    });\n    \n    // Observe the entire document for attribute changes\n    observer.observe(document.body || document.documentElement, {\n      attributes: true,\n      subtree: true,\n      childList: true,\n      attributeFilter: ['_msthidden', '_mstaria-label', '_msthash', '_msttexthash']\n    });\n    \n    // Also patch Element.remove() to be extra safe for Edge\n    if (Element.prototype.remove) {\n      const originalRemove = Element.prototype.remove;\n      Element.prototype.remove = function() {\n        try {\n          // Check if element is still in DOM\n          if (this.parentNode) {\n            return originalRemove.call(this);\n          }\n          // Element is not in DOM, nothing to remove\n          return;\n        } catch (e) {\n          // In Edge, translation can cause issues - silently handle\n          const isEdge = navigator.userAgent.includes('Edg');\n          if (!isEdge) {\n            console.warn('remove() error suppressed (likely due to page translation):', e.message);\n          }\n        }\n      };\n    }\n    \n    // Edge-specific: Also patch ParentNode methods that might call removeChild\n    if (Element.prototype.replaceChildren) {\n      const originalReplaceChildren = Element.prototype.replaceChildren;\n      Element.prototype.replaceChildren = function() {\n        try {\n          return originalReplaceChildren.apply(this, arguments);\n        } catch (e) {\n          // If replaceChildren fails due to translation, try manual replacement\n          const isEdge = navigator.userAgent.includes('Edg');\n          if (isEdge \u0026\u0026 e.message \u0026\u0026 e.message.includes('removeChild')) {\n            // Clear children manually using innerHTML as fallback\n            this.innerHTML = '';\n            // Then append new children\n            Array.from(arguments).forEach(function(child) {\n              if (child) {\n                this.appendChild(child);\n              }\n            }, this);\n            return;\n          }\n          throw e;\n        }\n      };\n    }\n    \n    // Remove translation overlays (Google Translate and Edge Translate) that block clicks\n    const removeTranslationOverlays = function() {\n      // Remove Google Translate banner/frame that might block clicks\n      const translateBanner = document.querySelector('.goog-te-banner-frame');\n      if (translateBanner) {\n        const iframe = translateBanner.querySelector('iframe');\n        if (iframe) {\n          iframe.style.pointerEvents = 'none';\n        }\n      }\n      \n      // Remove Edge Translate overlays (Edge uses different selectors)\n      const edgeTranslateOverlays = document.querySelectorAll('[id*=\"MicrosoftTranslator\"], [class*=\"MicrosoftTranslator\"], [id*=\"EdgeTranslator\"], [class*=\"EdgeTranslator\"]');\n      edgeTranslateOverlays.forEach(function(el) {\n        el.style.pointerEvents = 'none';\n        el.style.display = 'none';\n      });\n      \n      // Remove any high z-index overlays that might block clicks (common in Edge)\n      document.querySelectorAll('*').forEach(function(el) {\n        const style = window.getComputedStyle(el);\n        const zIndex = parseInt(style.zIndex) || 0;\n        const position = style.position;\n        \n        // If it's a fixed/absolute positioned element with very high z-index\n        if ((position === 'fixed' || position === 'absolute') \u0026\u0026 zIndex \u003e 9999) {\n          // Check if it's likely a translation overlay\n          const isTranslationOverlay = \n            (el.id \u0026\u0026 (el.id.includes('translate') || el.id.includes('translator') || el.id.includes('Microsoft'))) ||\n            (el.className \u0026\u0026 (el.className.includes('translate') || el.className.includes('translator') || el.className.includes('Microsoft'))) ||\n            (!el.querySelector('*') \u0026\u0026 el.textContent === '');\n          \n          if (isTranslationOverlay \u0026\u0026 !el.querySelector('iframe')) {\n            el.style.pointerEvents = 'none';\n            el.style.display = 'none';\n          }\n        }\n      });\n      \n      // Ensure all interactive elements remain clickable\n      const interactiveSelectors = 'button, a, input, select, textarea, [role=\"button\"], [onclick], [tabindex], [type=\"submit\"], [type=\"button\"]';
457\n      document.querySelectorAll(interactiveSelectors).forEach(function(el) {\n        // Force pointer-events on interactive elements\n        const computedStyle = window.getComputedStyle(el);\n        if (computedStyle.pointerEvents === 'none' || el.style.pointerEvents === 'none') {\n          el.style.pointerEvents = 'auto';\n          el.style.zIndex = '9999'; // Ensure interactive elements are on top\n        }\n        \n        // Remove any translation wrappers that might block clicks\n        let parent = el.parentElement;\n        let depth = 0;\n        while (parent \u0026\u0026 depth \u003c 5) { // Check up to 5 levels up\n          const parentStyle = window.getComputedStyle(parent);\n          const hasTranslationAttr = parent.hasAttribute('_msthidden') || \n                                     parent.hasAttribute('_msthash') || \n                                     parent.hasAttribute('_msttexthash') ||\n                                     (parent.id \u0026\u0026 (parent.id.includes('translate') || parent.id.includes('translator'))) ||\n                                     (parent.className \u0026\u0026 (parent.className.includes('translate') || parent.className.includes('translator')));\n          \n          if (hasTranslationAttr \u0026\u0026 parentStyle.pointerEvents === 'none') {\n            parent.style.pointerEvents = 'auto';\n          }\n          \n          // If parent is a span wrapper around interactive element, make it not block\n          if (parent.tagName === 'SPAN' \u0026\u0026 hasTranslationAttr) {\n            parent.style.pointerEvents = 'none';\n          }\n          \n          parent = parent.parentElement;\n          depth++;\n        }\n      });\n      \n      // Make translation text wrappers not block pointer events\n      document.querySelectorAll('span, div').forEach(function(el) {\n        // If element is a translation wrapper (span/div with translation attributes)\n        const hasTranslationAttr = el.hasAttribute('_msthidden') || \n                                  el.hasAttribute('_msthash') || \n                                  el.hasAttribute('_msttexthash') ||\n                                  (el.id \u0026\u0026 (el.id.includes('translate') || el.id.includes('translator'))) ||\n                                  (el.className \u0026\u0026 (el.className.includes('translate') || el.className.includes('translator')));\n        \n        if (hasTranslationAttr) {\n          // Check if it's wrapping an interactive element\n          const hasInteractiveChild = el.querySelector('button, a, input, select, textarea, [role=\"button\"], [onclick]');\n          if (hasInteractiveChild) {\n            // Make the wrapper not block clicks\n            el.style.pointerEvents = 'none';\n          } else {\n            // For text-only wrappers, allow pointer events to pass through\n            const computedStyle = window.getComputedStyle(el);\n            if (computedStyle.pointerEvents === 'none') {\n              el.style.pointerEvents = 'auto';\n            }\n          }\n        }\n      });\n    };\n    \n    // Targeted fix: only restore pointer events on elements that are actually blocked,\n    // and only hide translation-related overlays that are covering them.\n    // IMPORTANT: Never unconditionally set cursor/z-index/position — that causes hydration mismatches.\n    const forceClickable = function() {\n      const interactiveElements = document.querySelectorAll('button, a, input, select, textarea, [role=\"button\"], [onclick], [tabindex], [type=\"submit\"], [type=\"button\"], label[for]');\n\n      interactiveElements.forEach(function(el) {\n        // Only unblock if pointer-events is explicitly set to none\n        const computedStyle = window.getComputedStyle(el);\n        if (computedStyle.pointerEvents === 'none') {\n          el.style.pointerEvents = 'auto';\n        }\n\n        // Find and hide translation overlays that are physically blocking this element\n        const rect = el.getBoundingClientRect();\n        if (rect.width === 0 \u0026\u0026 rect.height === 0) return; // off-screen / hidden, skip\n        const centerX = rect.left + rect.width / 2;\n        const centerY = rect.top + rect.height / 2;\n        const elementAtPoint = document.elementFromPoint(centerX, centerY);\n\n        if (elementAtPoint \u0026\u0026 elementAtPoint !== el \u0026\u0026 !el.contains(elementAtPoint)) {\n          const blockingEl = elementAtPoint;\n          const blockingClassName =\n            typeof blockingEl.className === 'string'\n              ? blockingEl.className\n              : (blockingEl.className \u0026\u0026 typeof blockingEl.className.baseVal === 'string'\n                  ? blockingEl.className.baseVal\n                  : '');\n\n          const isTranslationElement =\n            blockingEl.hasAttribute('_msthidden') ||\n            blockingEl.hasAttribute('_msthash') ||\n            blockingEl.hasAttribute('_msttexthash') ||\n            (blockingEl.id \u0026\u0026 (blockingEl.id.includes('translate') || blockingEl.id.includes('translator') || blockingEl.id.includes('Microsoft'))) ||\n            (blockingClassName \u0026\u0026 (blockingClassName.includes('translate') || blockingClassName.includes('translator') || blockingClassName.includes('Microsoft')));\n\n          if (isTranslationElement) {\n            blockingEl.style.pointerEvents = 'none';\n            blockingEl.style.display = 'none';\n          }\n        }\n\n        // Restore pointer events on parent elements if blocked by a translation wrapper\n        let parent = el.parentElement;\n        let depth = 0;\n        while (parent \u0026\u0026 depth \u003c 10) {\n          const hasTranslationAttr =\n            parent.hasAttribute('_msthidden') ||\n            parent.hasAttribute('_msthash') ||\n            parent.hasAttribute('_msttexthash');\n          if (hasTranslationAttr) {\n            const parentComputed = window.getComputedStyle(parent);\n            if (parentComputed.pointerEvents === 'none') {\n              parent.style.pointerEvents = 'auto';\n            }\n          }\n          parent = parent.parentElement;\n          depth++;\n        }\n      });\n    };\n\n    // Run once after DOM is ready; re-run on translation-driven DOM mutations only\n    removeTranslationOverlays();\n    forceClickable();\n\n    // Run every 2s (instead of 500ms) — translation changes are slow;
457 no need to hammer the DOM\n    setInterval(function() {\n      removeTranslationOverlays();\n      forceClickable();\n    }, 2000);\n\n    // Also run when DOM changes (translation modifies DOM)\n    const clickObserver = new MutationObserver(function() {\n      removeTranslationOverlays();\n      forceClickable();\n    });\n    \n    if (document.body) {\n      clickObserver.observe(document.body, {\n        childList: true,\n        subtree: true,\n        attributes: true,\n        attributeFilter: ['style', 'class', 'id']\n      });\n    }\n    \n    // Also listen for click events and ensure they work\n    document.addEventListener('click', function(e) {\n      const target = e.target;\n      // If click is on a translation wrapper, find the actual button underneath\n      if (target \u0026\u0026 target.nodeType === 1 \u0026\u0026 (target.hasAttribute('_msthidden') || target.hasAttribute('_msthash'))) {\n        const interactiveChild = target.closest('button, a, input, select, textarea, [role=\"button\"]');\n        if (interactiveChild) {\n          e.stopPropagation();\n          if (interactiveChild instanceof HTMLElement) {\n            interactiveChild.click();\n          }\n        }\n      }\n    }, true); // Use capture phase to catch early\n    \n    console.log('✅ DOM error patch applied - removeChild is now safe from translation errors');\n    console.log('✅ Google Translate attribute cleaner active - hydration mismatches prevented');\n    console.log('✅ Google Translate overlay remover active - click events enabled');\n  })();\n"])</script>
457<script>self.__next_f.push([1,"5:[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"$b\"},\"suppressHydrationWarning\":true}]\n"])</script>
457<script>self.__next_f.push([1,"6:[\"$\",\"body\",null,{\"className\":\"__className_f367f3\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"$Lc\",null,{\"children\":[[\"$\",\"$Ld\",null,{\"children\":[\"$\",\"$Le\",null,{\"children\":[\"$\",\"$Lf\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L10\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}],[\"$\",\"$L11\",null,{}],[\"$\",\"$L12\",null,{}],[\"$\",\"$L13\",null,{}],[\"$\",\"$L14\",null,{}]]}]}]\n"])</script>
457<script>self.__next_f.push([1,"7:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$Lf\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L10\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\n8:[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L15\",null,{\"Component\":\"$16\",\"searchParams\":{},\"params\":{},\"promises\":[\"$@17\",\"$@18\"]}],null,[\"$\",\"$L19\",null,{\"children\":[\"$L1a\",[\"$\",\"$L1b\",null,{\"promise\":\"$@1c\"}]]}]]}]\n9:[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$L1d\",null,{\"children\":\"$L1e\"}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]],[\"$\",\"$L1f\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$20\",null,{\"fallback\":null,\"children\":\"$L21\"}]}]}]]}]\n"])</script>
457<script>self.__next_f.push([1,"17:{}\n18:\"$8:props:children:0:props:params\"\n"])</script>
457<script>self.__next_f.push([1,"1e:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n1a:null\n"])</script>
457<script>self.__next_f.push([1,"22:I[622,[],\"IconMark\"]\n"])</script>
457<script>self.__next_f.push([1,"1c:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Privacy Policy | Artist AI VIDEO\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Read the Artist AI VIDEO privacy policy. Learn how we collect, use, and protect your personal data on our AI video generation platform.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"author\",\"content\":\"Artist AI VIDEO\"}],[\"$\",\"meta\",\"3\",{\"name\":\"keywords\",\"content\":\"AI video generation,AI video editor,AI video creator,video enhancement,AI art,text to video,AI video platform,video editing online\"}],[\"$\",\"meta\",\"4\",{\"name\":\"creator\",\"content\":\"Artist AI VIDEO\"}],[\"$\",\"meta\",\"5\",{\"name\":\"publisher\",\"content\":\"Artist AI VIDEO\"}],[\"$\",\"meta\",\"6\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"meta\",\"7\",{\"name\":\"googlebot\",\"content\":\"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1\"}],[\"$\",\"link\",\"8\",{\"rel\":\"canonical\",\"href\":\"https://www.artistai.jp\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:title\",\"content\":\"Privacy Policy | Artist AI VIDEO\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:description\",\"content\":\"Read the Artist AI VIDEO privacy policy and how we protect your data.\"}],[\"$\",\"meta\",\"11\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"12\",{\"name\":\"twitter:title\",\"content\":\"Artist AI VIDEO – AI Video Generation \u0026 Editing Platform\"}],[\"$\",\"meta\",\"13\",{\"name\":\"twitter:description\",\"content\":\"AI-powered video generation and editing platform. Create, enhance, and transform videos with intelligent AI tools.\"}],[\"$\",\"meta\",\"14\",{\"name\":\"twitter:image\",\"content\":\"https://www.artistai.jp/logo/logo.png\"}],[\"$\",\"link\",\"15\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\",\"type\":\"image/x-icon\",\"sizes\":\"16x16\"}],[\"$\",\"link\",\"16\",{\"rel\":\"icon\",\"href\":\"/logo/logo_min.svg\",\"type\":\"image/svg+xml\"}],[\"$\",\"$L22\",\"17\",{}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script>
457<script>self.__next_f.push([1,"21:\"$1c:metadata\"\n"])</script>
457<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v4bc70e2c01a94c73b74392e4234840661791215815920" integrity="sha512-L0ha0OXavK/8okipN9F8BtP84dg9DUhPERbBXzwI6dgTA55d2+yweo3pn5CSFYs45/r8md2+xvUPtTdvTNRfjA==" data-cf-beacon='{"version":"2024.11.0","token":"34e7db0097ea4bc89aa8f3ad8faf91f8","r":1,"spa":2}' crossorigin="anonymous"></script>
457
458</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.