PageSourceSearch

https://windscribe.com/blog/windscribe-greek-court-case/

html windscribe.com collected 2026-10-01 10:28:28 UTC 53,550 bytes, 1,358 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3<head>
4  <meta charset="utf-8">
5  <title>Windscribe Wins Legal Battle in Greece Due to No-Logs Policy</title>
6  <meta content="width=device-width, initial-scale=1" name="viewport">
7  
8  <!-- Stylesheets -->
9  <link href="/blog/assets/css/normalize.css?v=DTNql-_VKk70TvMn" rel="stylesheet" type="text/css">
10  <link href="/blog/assets/css/webflow.css?v=st-vXNG3dLM1jkU3" rel="stylesheet" type="text/css">
11  <link href="/blog/assets/css/graces-wondrous-site-4ca0e9.webflow.css?v=e2vAhVvCAi2lrzLL" rel="stylesheet" type="text/css">
12  
13  <style>
14    /* ==========================================================================
15       Webflow Overrides
16       Webflow-generated rules needed for animations/transitions to work
17       ========================================================================== */
18    html.w-mod-js:not(.w-mod-ix3) :is(
19      .glow-underline,
20      [data-wf-target*='["09b99aaa-60ae-a5b4-ae29-6961d3020a60","bb6cf3ee-742f-0ca1-68ac-27c981174138"]']
21    ) {
22      visibility: hidden !important;
23    }
24
25    /* Ensure dropdown-list is visible when open, regardless of IX3 state */
26    .dropdown-list.w--open {
27      visibility: visible !important;
28      display: block !important;
29    }
30
31    /* Z-index layering: top bar above dropdown */
32    .nav-top {
33      position: relative;
34      z-index: 100;
35    }
36
37    .dropdown-list {
38      z-index: 50;
39      top: 73px !important; /* Keep position fixed even when closed */
40    }
41
42    /* Dropdown - simple quick fade */
43    .dropdown-list {
44      display: block !important;
45      visibility: hidden;
46      opacity: 0;
47      transition: opacity 0.15s ease, visibility 0s 0.15s;
48      pointer-events: none;
49      background-color: var(--_colors---background-dark);
50    }
51    .dropdown-list.w--open {
52      visibility: visible !important;
53      opacity: 1;
54      transition: opacity 0.15s ease, visibility 0s 0s;
55      pointer-events: auto;
56      background-color: var(--_colors---background-dark);
57    }
58
59    /* ==========================================================================
60       Global
61       ========================================================================== */
62    body.body {
63      background-color: var(--_colors---background-dark);
64    }
65
66    .section-all {
67      background-color: var(--_colors---background-dark);
68    }
69
70    /* ==========================================================================
71       Navigation — Search Icon
72       ========================================================================== */
73    .search-toggle {
74      cursor: pointer;
75      display: flex;
76      align-items: center;
77    }
78
79    .search-toggle .search-icon {
80      transition: opacity 0.15s ease;
81    }
82
83    .search-toggle:hover .search-icon {
84      opacity: 0.85;
85      filter: brightness(0.85);
86    }
87
88    /* ==========================================================================
89       Navigation — Active States (Desktop Tabs + Mobile Dropdown)
90       ========================================================================== */
91    .nav-glow.active .glow-underline {
92      visibility: visible !important;
93      opacity: 1 !important;
94    }
95
96    .nav-glow.active .tab {
97      color: var(--_colors---text-light-default);
98    }
99
100    html.w-mod-ix3 .nav-glow.active .glow-underline {
101      visibility: visible !important;
102      opacity: 1 !important;
103    }
104
105    .dropdown-inner .link-2.active {
106      color: var(--_colors---text-light-default);
107      text-decoration: underline;
108      text-decoration-color: var(--_colors---text-green-default);
109      text-underline-offset: 4px;
110      text-decoration-thickness: 2px;
111    }
112
113    /* ==========================================================================
114       Author Lists — Comma Separator
115       ========================================================================== */
116    .cms-author:last-child .cms-comma {
117      display: none;
118    }
119
120    /* Fix multi-author comma spacing — override flex gap with inline flow */
121    .author-list {
122      display: inline;
123      grid-column-gap: 0;
124      grid-row-gap: 0;
125    }
126
127    .author-list .cms-author {
128      white-space: nowrap;
129    }
130
131    .author-list .cms-comma {
132      margin-right: 4px;
133    }
134
135    /* ==========================================================================
136       Post/Page Hero — Layout & Spacing
137       ========================================================================== */
138    .post-hero-content {
139      width: 80% !important;
140      max-width: 1112px;
141      margin: 0 auto;
142      text-align: center;
143    }
144
145    .post-hero-content .featured-post-info {
146      align-items: center;
147    }
148
149    .post-hero-image {
150      width: 100%;
151      max-width: 1112px;
152      margin: 0 auto;
153    }
154
155    .tag-list {
156      display: flex;
157      gap: 12px;
158      justify-content: center;
159      flex-wrap: wrap;
160    }
161
162    .tag-list .tag {
163      justify-content: center;
164    }
165
166    .post-template .section-top,
167    .page-template .section-top {
168      grid-row-gap: 40px;
169    }
170
171    .post-template .featured-post-info,
172    .page-template .featured-post-info {
173      gap: 24px;
174    }
175
176    .post-template .section-top .thumbnail-link,
177    .page-template .section-top .thumbnail-link {
178      margin-top: 0;
179    }
180
181    .post-template .section-top .hero-image,
182    .page-template .section-top .hero-image {
183      cursor: default;
184    }
185
186    .post-template .section-top .hero-image:hover,
187    .page-template .section-top .hero-image:hover {
188      opacity: 1;
189    }
190
191    .post-template .authors-list.center-author,
192    .page-template .authors-list.center-author {
193      justify-content: center;
194    }
195
196    .post-template .authors-list.center-author .author-list-wrapper,
197    .page-template .authors-list.center-author .author-list-wrapper {
198      width: auto;
199      text-align: left;
200    }
201
202    /* Tag row with decoration */
203    .tag-row {
204      display: flex;
205      justify-content: space-between;
206      align-items: center;
207      width: 100%;
208    }
209    
210    .tag-decoration {
211      height: 10px;
212      width: auto;
213      opacity: 0.6;
214    }
215
216    /* ==========================================================================
217       Post Content — Images, Figures & Captions
218       ========================================================================== */
219    .blog-text img,
220    .w-richtext img {
221      width: 80%;
222      max-width: 100%;
223      height: auto;
224      display: block;
225      padding: 16px 0;
226      margin-left: auto;
227      margin-right: auto;
228    }
229
230    /* HTML card images — make <a> wrappers block-level so margin:auto centering works */
231    .blog-text a:has(> img) {
232      display: block;
233    }
234
235    /* Bookmark card images should NOT inherit global image styles */
236    .kg-bookmark-icon {
237      width: 22px !important;
238      height: 22px !important;
239      padding: 0 !important;
240      display: inline !important;
241      margin-left: 0 !important;
242      margin-right: 8px !important;
243    }
244
245    .kg-bookmark-thumbnail img {
246      width: 100% !important;
247      height: 100% !important;
248      object-fit: cover !important;
249      padding: 0 !important;
250      margin-left: 0 !important;
251      margin-right: 0 !important;
252    }
253
254    /* Bookmark card — full styling override */
255    .blog-text .kg-bookmark-card,
256    .w-richtext .kg-bookmark-card {
257      width: 100%;
258      margin: 1.5em 0;
259    }
260
261    .blog-text .kg-bookmark-container,
262    .w-richtext .kg-bookmark-container {
263      display: flex;
264      text-decoration: none;
265      border-radius: 0 !important;
266      border: 1px solid var(--_colors---border-white-10) !important;
267      background-color: var(--_colors---background-light-5) !important;
268      overflow: hidden;
269      color: inherit;
270      min-height: 140px;
271    }
272
273    .blog-text .kg-bookmark-content,
274    .w-richtext .kg-bookmark-content {
275      flex-grow: 1;
276      display: flex;
277      flex-direction: column;
278      justify-content: flex-start;
279      padding: 20px;
280      overflow: hidden;
281      order: 1;
282      text-align: left !important;
283    }
284
285    .blog-text .kg-bookmark-title,
286    .w-richtext .kg-bookmark-title {
287      font-weight: 600;
288      font-size: 1rem;
289      line-height: 1.4;
290      color: var(--_colors---text-light-default, #fff);
291    }
292
293    .blog-text .kg-bookmark-description,
294    .w-richtext .kg-bookmark-description {
295      margin-top: 10px;
296      font-size: 0.875rem;
297      line-height: 1.5;
298      opacity: 0.7;
299      color: var(--_colors---text-light-default, #fff);
300      overflow: hidden;
301      display: -webkit-box;
302      -webkit-line-clamp: 2;
303      -webkit-box-orient: vertical;
304    }
305
306    .blog-text .kg-bookmark-metadata,
307    .w-richtext .kg-bookmark-metadata {
308      margin-top: auto;
309      padding-top: 10px;
310      display: flex;
311      align-items: center;
312      font-size: 0.8rem;
313      color: var(--_colors---text-light-default, #fff);
314    }
315
316    .blog-text .kg-bookmark-author,
317    .w-richtext .kg-bookmark-author {
318      opacity: 0.7;
319    }
320
321    .blog-text .kg-bookmark-publisher,
322    .w-richtext .kg-bookmark-publisher {
323      opacity: 0.7;
324    }
325
326    .blog-text .kg-bookmark-thumbnail,
327    .w-richtext .kg-bookmark-thumbnail {
328      position: relative;
329      min-width: 160px;
330      max-width: 240px;
331      order: 2;
332    }
333
334    .kg-image-card,
335    .kg-gallery-card,
336    .kg-card {
337      width: 100%;
338      max-width: 100%;
339    }
340
341    .blog-text figure,
342    .w-richtext figure,
343    .blog-text .kg-image-card,
344    .blog-text .kg-card {
345      display: block;
346      width: 100%;
347      max-width: 100%;
348      margin-left: 0;
349      margin-right: 0;
350      text-align: center;
351    }
352
353    /* HTML card (code snippets) - center align contents */
354    .blog-text .kg-html-card,
355    .w-richtext .kg-html-card {
356      width: 100% !important;
357      max-width: 100% !important;
358      text-align: center !important;
359      display: flex !important;
360      flex-direction: column !important;
361      align-items: center !important;
362    }
363
364    /* Linked images in paragraphs - center */
365    .blog-text p > a:has(img),
366    .w-richtext p > a:has(img) {
367      display: block;
368      text-align: center;
369    }
370
371    .blog-text p > a > img,
372    .w-richtext p > a > img {
373      display: inline-block;
374      margin-left: auto;
375      margin-right: auto;
376    }
377
378    .blog-text figure img,
379    .w-richtext figure img {
380      display: block;
381      width: 80%;
382      margin-left: auto;
383      margin-right: auto;
384    }
385
386    .blog-text p:has(img),
387    .w-richtext p:has(img) {
388      text-align: center;
389    }
390
391    .blog-text figcaption,
392    .w-richtext figcaption,
393    .kg-image-card figcaption,
394    .kg-card figcaption {
395      text-align: center;
396      width: 100%;
397      color: var(--_colors---text-light-subtitle);
398    }
399
400    /* ==========================================================================
401       Post Content — Ghost Card Overrides (Callouts, Buttons, Dividers)
402       ========================================================================== */
403    .blog-text .kg-callout-card {
404      border-radius: 0;
405      background-color: var(--_colors---background-light-10);
406      text-align: left;
407      display: flex;
408      align-items: center;
409      justify-content: flex-start;
410      padding: 24px !important;
411    }
412
413    .blog-text .kg-callout-card .kg-callout-text {
414      font-weight: 600;
415    }
416
417    .blog-text .kg-btn-accent,
418    .blog-text a.kg-btn.kg-btn-accent,
419    .w-richtext .kg-btn-accent,
420    div.blog-text div.kg-card a.kg-btn,
421    .blog-text .kg-button-card .kg-btn,
422    .blog-text .kg-button-card a.kg-btn,
423    .kg-button-card .kg-btn {
424      border-radius: 0 !important;
425      text-align: center !important;
426      display: flex !important;
427      align-items: center !important;
428      justify-content: center !important;
429      position: relative !important;
430      background-color: var(--_colors---background-green-default) !important;
431      color: var(--_colors---text-dark) !important;
432      padding: 32px 24px !important;
433      margin-top: 16px !important;
434      margin-bottom: 16px !important;
435      line-height: 1 !important;
436    }
437
438    .blog-text hr,
439    .w-richtext hr {
440      border: none;
441      border-top: 1px solid var(--_colors---border-white-10);
442      padding: 0;
443      margin-top: 40px;
444      margin-bottom: 40px;
445    }
446    
447    /* YouTube/Vimeo video embeds - proper aspect ratio and full width */
448    .blog-text iframe[src*="youtube"],
449    .blog-text iframe[src*="vimeo"],
450    .w-richtext iframe[src*="youtube"],
451    .w-richtext iframe[src*="vimeo"],
452    .kg-embed-card iframe[src*="youtube"],
453    .kg-embed-card iframe[src*="vimeo"] {
454      width: 100% !important;
455      max-width: 100% !important;
456      aspect-ratio: 16 / 9;
457      height: auto !important;
458    }
459
460    /* All other iframes - full width but natural height */
461    .blog-text iframe,
462    .w-richtext iframe,
463    .kg-embed-card iframe {
464      max-width: 100%;
465      display: block;
466    }
467    
468    .kg-embed-card,
469    .kg-video-card {
470      margin: 24px 0;
471      width: 100% !important;
472      max-width: 100% !important;
473    }
474
475    /* Ghost native video player - full width, no black box */
476    .kg-video-card .kg-video-container {
477      width: 100% !important;
478      max-width: 100% !important;
479      background: transparent !important;
480      padding: 0 !important;
481    }
482
483    .kg-video-card .kg-video-player-container {
484      width: 100% !important;
485      max-width: 100% !important;
486      background: transparent !important;
487    }
488
489    .kg-video-card .kg-video-player {
490      width: 100% !important;
491      max-width: 100% !important;
492    }
493
494    /* Video elements in post content */
495    .blog-text video,
496    .w-richtext video,
497    .kg-video-card video {
498      width: 100% !important;
499      max-width: 100% !important;
500      height: auto !important;
501      display: block;
502      padding: 0;
503      border-radius: 0;
504    }
505
506    /* Twitter/YouTube embed spacing */
507    .blog-text iframe[src*="youtube"],
508    .blog-text iframe[src*="vimeo"],
509    .w-richtext iframe[src*="youtube"],
510    .w-richtext iframe[src*="vimeo"],
511    .blog-text iframe[src*="twitter.com"],
512    .blog-text iframe[src*="x.com"],
513    .blog-text iframe[src*="platform.twitter"],
514    .w-richtext iframe[src*="twitter.com"],
515    .w-richtext iframe[src*="x.com"],
516    .w-richtext iframe[src*="platform.twitter"],
517    .blog-text twitter-widget,
518    .w-richtext twitter-widget {
519      padding: 8px 0;
520    }
521    
522    /* Social media embeds (Twitter/X, Instagram, etc.) - center align */
523    .blog-text .kg-embed-card[data-provider*="twitter"],
524    .blog-text .kg-embed-card[data-provider*="x"],
525    .blog-text .kg-embed-card[data-provider*="instagram"],
526    .blog-text .kg-embed-card[data-provider*="tiktok"],
527    .w-richtext .kg-embed-card[data-provider*="twitter"],
528    .w-richtext .kg-embed-card[data-provider*="x"],
529    .w-richtext .kg-embed-card[data-provider*="instagram"],
530    .w-richtext .kg-embed-card[data-provider*="tiktok"] {
531      display: flex;
532      justify-content: center;
533      align-items: center;
534    }
535    
536    /* Twitter/X embeds - center and natural sizing */
537    .blog-text iframe[src*="twitter.com"],
538    .blog-text iframe[src*="x.com"],
539    .blog-text iframe[src*="platform.twitter"],
540    .w-richtext iframe[src*="twitter.com"],
541    .w-richtext iframe[src*="x.com"],
542    .w-richtext iframe[src*="platform.twitter"] {
543      margin: 0 auto !important;
544      width: auto !important;
545    }
546
547    .blog-text .twitter-tweet,
548    .blog-text twitter-widget,
549    .w-richtext .twitter-tweet,
550    .w-richtext twitter-widget {
551      margin: 0 auto !important;
552    }
553
554    /* ==========================================================================
555       Page Template — Full-Width Content
556       ========================================================================== */
557    .page-template .article-left {
558      max-width: 100%;
559    }
560
561    .page-template .post-feature-image {
562      margin-bottom: 2rem;
563    }
564
565    .page-template .post-feature-image img {
566      width: 100%;
567      border-radius: 8px;
568    }
569
570    /* ==========================================================================
571       Tag Page — Description Spacing
572       ========================================================================== */
573    .tag-description {
574      margin-bottom: 0;
575    }
576
577    /* ==========================================================================
578       Author Page — Social Link Icons
579       ========================================================================== */
580    .author-social-icon {
581      width: 24px;
582      height: 24px;
583    }
584
585    .author-bio-text {
586      max-width: 500px;
587    }
588
589    .author-links:empty,
590    .author-links:not(:has(*)) {
591      display: none;
592    }
593
594    /* ==========================================================================
595       404 Page — Inline Period Fix
596       ========================================================================== */
597    .home-link-group {
598      display: flex;
599      gap: 0;
600      align-items: center;
601    }
602
603    .home-link-group .text-mono {
604      margin: 0;
605    }
606
607    /* ==========================================================================
608       Footer — Subscribe Button
609       ========================================================================== */
610    .footer-form-block .button-primary {
611      white-space: nowrap;
612      align-self: stretch;
613    }
614
615    /* ==========================================================================
616       Load More Button
617       ========================================================================== */
618    .load-more-btn {
619      margin-top: 56px;
620    }
621
622    /* ==========================================================================
623       Responsive — Mobile (max-width: 767px)
624       ========================================================================== */
625    @media screen and (max-width: 767px) {
626      /* Nav toolbar */
627      .nav-actions {
628        display: flex;
629        align-items: center;
630        gap: 16px;
631      }
632
633      .nav-actions .search-toggle {
634        order: 1;
635        padding: 0;
636        margin: 0;
637      }
638
639      .nav-actions .search-toggle .icon,
640      .nav-actions .search-toggle .search-icon {
641        display: block !important;
642        width: 24px;
643        height: 24px;
644        padding: 0;
645        margin: 0;
646      }
647
648      .nav-actions .button-nav {
649        display: none;
650      }
651
652      .nav-actions .dropdown {
653        order: 2;
654      }
655
656      /* Post/Page hero spacing */
657      .post-hero-content {
658        width: 100% !important;
659      }
660
661      .post-template .section-top,
662      .page-template .section-top {
663        grid-row-gap: 32px;
664      }
665
666      /* Load more button */
667      .load-more-btn {
668        margin-top: 40px;
669      }
670    }
671
672    @media screen and (max-width: 479px) {
673      .blog-text img,
674      .w-richtext img,
675      .blog-text figure img,
676      .w-richtext figure img,
677      .kg-image-card img {
678        width: 100% !important;
679      }
680    }
681  </style>
682  
683  <!-- Fonts -->
684  <link href="https://fonts.googleapis.com" rel="preconnect">
685  <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin="anonymous">
686  
686<script src="https://ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js" type="text/javascript"></script>
686
687  
687<script type="text/javascript">
688    WebFont.load({
689      google: {
690        families: [
691          "IBM Plex Mono:300,400,500,600,700",
692          "IBM Plex Sans:300,400,500,600,700"
693        ]
694      }
695    });
696  </script>
696
697
698  <!-- Webflow feature detection -->
699  
699<script type="text/javascript">
700    !function(o, c) {
701      var n = c.documentElement, t = " w-mod-";
702      n.className += t + "js";
703      ("ontouchstart" in o || o.DocumentTouch && c instanceof DocumentTouch) && (n.className += t + "touch");
704    }(window, document);
705  </script>
705
706  
707  <!-- Favicon -->
708  <link href="https://windscribe.com/blog/content/images/size/w256h256/2022/05/favicon.png" rel="shortcut icon" type="image/x-icon">
709  <link href="/blog/assets/images/webclip.png?v=ExWBz05NbEKNSgmo" rel="apple-touch-icon">
710  
711  <meta name="description" content="Windscribe was sued by a Greek court, which kicked off a 2 year legal battle. The case was dismissed because of our no-logs policy.">
712    <link rel="icon" href="https://windscribe.com/blog/content/images/size/w256h256/2022/05/favicon.png" type="image/png">
713    <link rel="canonical" href="https://windscribe.com/blog/windscribe-greek-court-case/">
714    <meta name="referrer" content="no-referrer-when-downgrade">
715    
716    <meta property="og:site_name" content="Windscribbles">
717    <meta property="og:type" content="article">
718    <meta property="og:title" content="Windscribe Wins Legal Battle in Greece Due to No-Logs Policy">
719    <meta property="og:description" content="Windscribe was sued by a Greek court, which kicked off a 2 year legal battle. The case was dismissed because of our no-logs policy.">
720    <meta property="og:url" content="https://windscribe.com/blog/windscribe-greek-court-case/">
721    <meta property="og:image" content="https://windscribe.com/blog/content/images/size/w1200/2025/04/WS_ThatOneTimeIGotCharged_blogHeader_v1.png">
722    <meta property="article:published_time" content="2025-04-24T19:33:02.000Z">
723    <meta property="article:modified_time" content="2026-08-10T15:16:06.000Z">
724    <meta property="article:tag" content="Must Reads">
725    
726    <meta property="article:publisher" content="https://www.facebook.com/windscribe/">
727    <meta name="twitter:card" content="summary_large_image">
728    <meta name="twitter:title" content="Windscribe Wins Legal Battle in Greece Due to No-Logs Policy">
729    <meta name="twitter:description" content="Windscribe was sued by a Greek court, which kicked off a 2 year legal battle. The case was dismissed because of our no-logs policy.">
730    <meta name="twitter:url" content="https://windscribe.com/blog/windscribe-greek-court-case/">
731    <meta name="twitter:image" content="https://windscribe.com/blog/content/images/size/w1200/2025/04/WS_ThatOneTimeIGotCharged_blogHeader_v1.png">
732    <meta name="twitter:label1" content="Written by">
733    <meta name="twitter:data1" content="Yegor Sak">
734    <meta name="twitter:label2" content="Filed under">
735    <meta name="twitter:data2" content="Must Reads">
736    <meta name="twitter:site" content="@windscribe">
737    <meta name="twitter:creator" content="@yegor">
738    <meta property="og:image:width" content="1200">
739    <meta property="og:image:height" content="675">
740    
741    
741<script type="application/ld+json">
742{
743    "@context": "https://schema.org",
744    "@type": "Article",
745    "publisher": {
746        "@type": "Organization",
747        "name": "Windscribbles",
748        "url": "https://windscribe.com/blog/",
749        "logo": {
750            "@type": "ImageObject",
751            "url": "https://windscribe.com/blog/content/images/2022/01/scribbleslogo.svg",
752            "width": 245,
753            "height": 48
754        }
755    },
756    "author": {
757        "@type": "Person",
758        "name": "Yegor Sak",
759        "image": {
760            "@type": "ImageObject",
761            "url": "https://windscribe.com/blog/content/images/2021/09/Q2fYnLX--1-.jpg",
762            "width": 500,
763            "height": 500
764        },
765        "url": "https://windscribe.com/blog/author/yegor/",
766        "sameAs": [
767            "https://x.com/yegor"
768        ]
769    },
770    "headline": "Windscribe Wins Legal Battle in Greece Due to No-Logs Policy",
771    "url": "https://windscribe.com/blog/windscribe-greek-court-case/",
772    "datePublished": "2025-04-24T19:33:02.000Z",
773    "dateModified": "2026-08-10T15:16:06.000Z",
774    "image": {
775        "@type": "ImageObject",
776        "url": "https://windscribe.com/blog/content/images/size/w1200/2025/04/WS_ThatOneTimeIGotCharged_blogHeader_v1.png",
777        "width": 1200,
778        "height": 675
779    },
780    "keywords": "Must Reads",
781    "description": "Windscribe was sued by a Greek court, which kicked off a 2 year legal battle. The case was dismissed because of our no-logs policy.",
782    "mainEntityOfPage": "https://windscribe.com/blog/windscribe-greek-court-case/"
783}
784    </script>
784
785
786    <meta name="generator" content="Ghost 6.62">
787    <link rel="alternate" type="application/rss+xml" title="Windscribbles" href="https://windscribe.com/blog/rss/">
788    
788<script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.71/umd/portal.min.js" data-i18n="true" data-ghost="https://windscribe.com/blog/" data-key="b4c1c3d92059e9d08b4cd483d9" data-api="https://windscribe.com/blog/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script>
788<style id="gh-members-styles">.gh-post-upgrade-cta-content,
789.gh-post-upgrade-cta {
790    display: flex;
791    flex-direction: column;
792    align-items: center;
793    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
794    text-align: center;
795    width: 100%;
796    color: #ffffff;
797    font-size: 16px;
798}
799
800.gh-post-upgrade-cta-content {
801    border-radius: 8px;
802    padding: 40px 4vw;
803}
804
805.gh-post-upgrade-cta h2 {
806    color: #ffffff;
807    font-size: 28px;
808    letter-spacing: -0.2px;
809    margin: 0;
810    padding: 0;
811}
812
813.gh-post-upgrade-cta p {
814    margin: 20px 0 0;
815    padding: 0;
816}
817
818.gh-post-upgrade-cta small {
819    font-size: 16px;
820    letter-spacing: -0.2px;
821}
822
823.gh-post-upgrade-cta a {
824    color: #ffffff;
825    cursor: pointer;
826    font-weight: 500;
827    box-shadow: none;
828    text-decoration: underline;
829}
830
831.gh-post-upgrade-cta a:hover {
832    color: #ffffff;
833    opacity: 0.8;
834    box-shadow: none;
835    text-decoration: underline;
836}
837
838.gh-post-upgrade-cta a.gh-btn {
839    display: block;
840    background: #ffffff;
841    text-decoration: none;
842    margin: 28px 0 0;
843    padding: 8px 18px;
844    border-radius: 4px;
845    font-size: 16px;
846    font-weight: 600;
847}
848
849.gh-post-upgrade-cta a.gh-btn:hover {
850    opacity: 0.92;
851}</style>
852    
852<script defer src="https://cdn.jsdelivr.net/ghost/sodo-search@~1.8/umd/sodo-search.min.js" data-key="b4c1c3d92059e9d08b4cd483d9" data-styles="https://cdn.jsdelivr.net/ghost/sodo-search@~1.8/umd/main.css" data-sodo-search="https://windscribe.com/blog/" data-locale="en" crossorigin="anonymous"></script>
852
853    
854    <link href="https://windscribe.com/blog/webmentions/receive/" rel="webmention">
855    
855<script defer src="/blog/public/cards.min.js?v=ShRHxgy4po8zN-Wf"></script>
855
856    <link rel="stylesheet" type="text/css" href="/blog/public/cards.min.css?v=WwnU9jw5ancNC8Gc">
857    
857<script defer src="/blog/public/member-attribution.min.js?v=AKG4hWena9j3yX3I"></script>
857<style>:root {--ghost-accent-color: #10b2da;}</style>
858</head>
859<body class="body post-template tag-must-reads">
860  
861  
862<div class="hero-bg">
863<div class="nav-wrapper">
864    <div class="nav-top">
865      <a href="https://windscribe.com/blog" class="navbar-brand-three w-nav-brand">
866        <img src="/blog/assets/images/scribbleslogo.svg?v=WhTMgsR0Zl7-JR78" loading="lazy" alt="Windscribbles" class="brand">
867      </a>
868      <div class="nav-actions">
869        <a href="#" class="search-toggle" data-ghost-search>
870          <img src="/blog/assets/images/Search.svg?v=XsOTyWbvZ-soAkaK" loading="lazy" alt="Search" class="icon search-icon">
871        </a>
872        <a href="https://windscribe.com/download/?cpid=new_blog" target="_blank" class="button-nav w-button">Get Windscribe</a>
873        <div data-hover="false" data-delay="0" class="dropdown w-dropdown">
874          <div class="dropdown-toggle w-dropdown-toggle">
875            <img src="/blog/assets/images/menu-icon.svg?v=TeMrggXiCsSP1LOn" loading="lazy" alt="" class="menu-icon">
876          </div>
877          <nav class="dropdown-list w-dropdown-list">
878            <div class="dropdown-inner">
879              <a href="https://windscribe.com/blog/tag/must-reads/" class="link-2 w-dropdown-link" data-tag="must-reads">Must-Reads</a>
880              <a href="https://windscribe.com/blog/tag/announcements/" class="link-2 w-dropdown-link" data-tag="announcements">Announcements</a>
881              <a href="https://windscribe.com/blog/tag/opinions/" class="link-2 w-dropdown-link" data-tag="opinions">Opinions</a>
882              <a href="https://windscribe.com/blog/tag/technical/" class="link-2 w-dropdown-link" data-tag="technical">Technical</a>
883              <a href="https://windscribe.com/download/?cpid=new_blog" target="_blank" class="button-nav-mobile w-button">Get Windscribe</a>
884            </div>
885          </nav>
886        </div>
887      </div>
888    </div>
889    <section class="tabs-navigation">
890      <div class="nav-glow" data-tag="must-reads">
891        <a href="https://windscribe.com/blog/tag/must-reads/" class="tab w-button">Must-Reads</a>
892        <div class="glow-underline"></div>
893      </div>
894      <div class="nav-glow" data-tag="announcements">
895        <a href="https://windscribe.com/blog/tag/announcements/" class="tab w-button">Announcements</a>
896        <div class="glow-underline"></div>
897      </div>
898      <div class="nav-glow" data-tag="opinions">
899        <a href="https://windscribe.com/blog/tag/opinions/" class="tab w-button">Opinions</a>
900        <div class="glow-underline"></div>
901      </div>
902      <div class="nav-glow" data-tag="technical">
903        <a href="https://windscribe.com/blog/tag/technical/" class="tab w-button">Technical</a>
904        <div class="glow-underline"></div>
905      </div>
906    </section>
907  </div>
908
909<section class="post-top">
910  <div class="hero-div">
911    <div class="article-title">
912        <div class="tag-list">
913            <div class="tag">
914              <img loading="lazy" src="/blog/assets/images/Tag-Rectangle.svg?v=XQNuLj6F_21CPk0Q" alt="">
915              <a href="/blog/tag/must-reads/" class="tag-link w-inline-block">
916                <div class="tag-text">Must Reads</div>
917              </a>
918            </div>
919        </div>
920
921      <h1 class="h1-big center-align">My Big Fat Greek Case</h1>
922
923      <div class="authors-list center-author">
924            <div class="w-dyn-list">
925              <div role="list" class="w-dyn-items">
926                <div role="listitem" class="w-dyn-item">
927                  <img src="https://windscribe.com/blog/content/images/2021/09/Q2fYnLX--1-.jpg" loading="lazy" alt="Yegor Sak" class="profile-image">
928                </div>
929              </div>
930            </div>
931        <div class="author-list-wrapper in-line">
932          <div class="author-list">
933              <a href="/blog/author/yegor/" class="cms-author link-underline">Yegor Sak</a>
934          </div>
935          <p class="publish-date">April 24, 2025</p>
936        </div>
937      </div>
938    </div>
939
940      <div class="post-hero-image">
941        <img src="https://windscribe.com/blog/content/images/2025/04/WS_ThatOneTimeIGotCharged_blogHeader_v1.png" loading="lazy" alt="My Big Fat Greek Case" class="hero-image">
942      </div>
943  </div>
944</section>
945</div>
946
947<div class="section-all">
948  <div class="article-content">
949    <div class="article-left">
950      <div class="blog-text w-richtext">
951        <p>The story begins in June 2023 when we received a letter from the Canadian Department of Justice part of the Mutual Legal Assistance Treaty (MLAT) process, which informed us that I, Yegor Sak, am being charged in Greece for the crime of "illegal access to information system". </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://windscribe.com/blog/content/images/2025/04/image-2.png" class="kg-image" alt="Screenshot of Writ of Summons" loading="lazy" width="847" height="637" srcset="https://windscribe.com/blog/content/images/size/w600/2025/04/image-2.png 600w, https://windscribe.com/blog/content/images/2025/04/image-2.png 847w" sizes="(min-width: 720px) 720px"><figcaption><span style="white-space: pre-wrap;">Typos were present in the document</span></figcaption></figure><p>This was followed by 100 pages of disclosure which was virtually indecipherable, it might as well have been in Greek (it was). It showed that an IP address that belonged to one of Windscribe's servers in Finland was used to breach a server in Greece. </p><p>Given the nature of VPNs, especially ones that value your privacy, some "bad apples" sometimes use VPNs to commit crimes. Some people will say this is why VPNs should be banned, but that's a rather misguided approach. By this logic we should ban cars and hammers, since 0.0001% of owners of those objects choose to hurt people with them, but I digress. </p><p>When a Windscribe user does something allegedly illegal, we usually get a subpoena which includes an IP address and a timestamp associated with the alleged crime. We get <a href="https://windscribe.com/transparency/" rel="noreferrer">5-10 of these per month</a>. Since we're a non-logging VPN service, we state this fact and 99.9% of the time that makes the matter go away since we're not obligated to store logs. </p><p>This time, something unusual happened. Greek authorities, with the help of INTERPOL, subpoenaed the hosting provider of the server in Finland in order to get the billing information associated with the account, which in that case was me. This account, much like 100+ other accounts we maintain with various hosting providers world wide, is a corporate account, and the fact that Windscribe, a VPN provider, owns the server is very evident. Nothing that occurred thus far is unusual, and the next step usually involves a subpoena that is sent to our abuse department, and in rare circumstances - a server seizure. None of that happened this time. Instead, they took the only name that appeared on the account, mine, and started criminal proceedings against me personally, as if I committed the alleged crime myself. </p><figure class="kg-card kg-image-card"><img src="https://windscribe.com/blog/content/images/2025/04/image-3.png" class="kg-image" alt="Document showing IP was registered to Yegor Sak" loading="lazy" width="1289" height="1266" srcset="https://windscribe.com/blog/content/images/size/w600/2025/04/image-3.png 600w, https://windscribe.com/blog/content/images/size/w1000/2025/04/image-3.png 1000w, https://windscribe.com/blog/content/images/2025/04/image-3.png 1289w" sizes="(min-width: 720px) 720px"></figure>
951<h2 id="lawyer-up">Lawyer Up</h2><p>Although Windscribe has legal representation in Canada, they cannot do much as far as international criminal proceedings are concerned, so we had to retain legal counsel in Greece in order to dispute the charge. </p><p>This kicked off a nearly 2 year long process of fighting this in the court of Athens. This as you can imagine is a costly matter (think 5+ figures). It would have been a lot faster (and cheaper) to simply hand over the logs in order to identify the actual culprit behind the alleged crime. However, you cannot hand over what you do not have, so off to court I go! </p><h2 id="december-2023">December 2023</h2><p>The first court hearing was supposed to take place in December of 2023, where we were hoping to get the case dismissed. Unfortunately, due to a <a href="https://www.ekathimerini.com/news/1225609/athens-bar-association-initiates-five-day-strike-in-opposition-to-new-taxation-bill/" rel="noreferrer">lawyer strike</a>, all cases got pushed forward, so we got a new date in March of 2024. </p><h2 id="march-2024">March 2024 </h2><p>We got our first hearing, it didn't go as planned. We were informed that I now have a co-defendant, in Morocco, and the Moroccan authorities didn't submit the necessary documents for the case to proceed. We tried to separate the 2 cases, however that was not successful, so the matter was postponed once again to April 2025. The wheels of justice do indeed move slowly. </p><h2 id="april-2025">April 2025</h2><p>On April 11th 2025, I finally got my day in court, and was found not guilty, or rather the case was dismissed. Hurray for justice! </p><div class="kg-card kg-callout-card kg-callout-card-blue"><div class="kg-callout-emoji">💡</div><div class="kg-callout-text">Cases like this are why the legal picture matters. We maintain a running guide to <a href="https://windscribe.com/blog/are-vpns-legal/" rel="noreferrer">VPN legality around the world</a>, including which governments treat encryption itself as an offence.</div></div><h2 id="keep-the-pandoras-box-closed">Keep the Pandora's Box Closed </h2><p>We obviously do not condone the use of Windscribe for any criminal activity. Some crimes are indisputable and universally frowned upon (fraud, hacking, child abuse material, revenge porn, extortion, etc) and we would love to help put people in jail who do these things. However in order to do that, we would have to keep extensive logs, and once those are known to exist, we would have no choice but to cooperate with legal authorities in various countries when it comes to any kind of "crime". </p><ul><li>Insulted Mohammed bin Salman Al Saud's beard? Jail time. </li><li>Compared Xi Jinping to Winnie-the-Pooh? Jail time. </li><li>Spoke ill of Ali Khamenei's glasses? Worse than jail. </li><li>?????</li></ul><p>The law is pretty cut and dry, if you have the data, you must provide it, and if you say you don't have what you do in fact have, guess what? That's a crime, and we would very much be guilty of it - if that was in fact the case. </p><p>When we say we don't keep logs, we really mean it. Even if you don't believe our <a href="https://windscribe.com/blog/freshscribe-next-generation-vpn-infrastructure-2/" rel="noreferrer">audits</a>, or any of the <a href="https://windscribe.com/blog/windscribe-logging-explained-in-detail-387ad63f646/" rel="noreferrer">previous articles</a> I wrote on this subject, believe this simple fact: None of us want to go to prison for a $9 subscription, and keeping logs for multiple years is pretty expensive. </p>
952      </div>
953    </div>
954    <div class="stickycta">
955      <div class="h3 center-align">Keep your browsing private and secure by masking your IP address.</div>
956      <a href="https://windscribe.com/download/?cpid=new_blog" target="_blank" class="button-primary full-width w-button">Get Windscribe</a>
957    </div>
958  </div>
959</div>
960
961
962  
963  <div class="footer-wrapper">
964    <section class="footer">
965      <div class="footer-div">
966        <div class="left-footer">
967          <div class="column">
968            <div class="text-allcaps">Navigation</div>
969            <div class="nav-links">
970              <a href="https://windscribe.com/blog/all-posts/" class="footer-link">All Posts</a>
971              <a href="https://windscribe.com/blog/tag/must-reads/" class="footer-link">Must-Reads</a>
972              <a href="https://windscribe.com/blog/tag/announcements/" class="footer-link">Announcements</a>
973              <a href="https://windscribe.com/blog/tag/opinions/" class="footer-link">Opinions</a>
974              <a href="https://windscribe.com/blog/tag/technical/" class="footer-link">Technical</a>
975            </div>
976          </div>
977          <div class="column-socials">
978            <div class="text-allcaps">Connect With US</div>
979            <div class="w-layout-grid grid">
980              <a href="https://www.youtube.com/c/Windscribe?sub_confirmation=1" target="_blank" class="link-block w-inline-block">
981                <img loading="lazy" src="/blog/assets/images/youtube.svg?v=-ZRDFJ-Re_vdeUqV" alt="" class="snsicon">
982              </a>
983              <a href="https://www.reddit.com/r/Windscribe/" target="_blank" class="link-block w-inline-block">
984                <img loading="lazy" src="/blog/assets/images/reddit.svg?v=pkOxIu_xUTxHcu_p" alt="" class="snsicon">
985              </a>
986              <a href="https://discord.gg/vpn" target="_blank" class="link-block w-inline-block">
987                <img loading="lazy" src="/blog/assets/images/discord.svg?v=4pyHg1Q8yZYRz4-2" alt="" class="snsicon">
988              </a>
989              <a href="https://x.com/intent/user?screen_name=Windscribe" target="_blank" class="link-block w-inline-block">
990                <img loading="lazy" src="/blog/assets/images/twitter-x.svg?v=8jPkAqIDMjrHJqyr" alt="" class="snsicon">
991              </a>
992              <a href="https://www.instagram.com/windscribe" target="_blank" class="link-block w-inline-block">
993                <img loading="lazy" src="/blog/assets/images/instagram.svg?v=QAbvg26ol1XpuraZ" alt="" class="snsicon">
994              </a>
995              <a href="https://www.tiktok.com/@windscribe.vpn" target="_blank" class="link-block w-inline-block">
996                <img loading="lazy" src="/blog/assets/images/tiktok.svg?v=UerLXqpCdV3c6Baa" alt="" class="snsicon">
997              </a>
998              <a href="https://swag.windscribe.com/" target="_blank" class="link-block w-inline-block">
999                <img loading="lazy" src="/blog/assets/images/shirt.svg?v=Dvia0a59c7jxjxNs" alt="Merch Store" class="snsicon">
1000              </a>
1001            </div>
1002          </div>
1003        </div>
1004        <div class="footer-form w-form">
1005          <form id="footer-subscribe-form" class="footer-form-container" data-members-form="subscribe">
1006            <div class="text-allcaps">Service updates, opinion pieces, technical writeups and random ramblings.</div>
1007            <div class="footer-form-block">
1008              <input class="footer-form-field w-input" maxlength="256" name="email" aria-label="Get product updates" placeholder="Your Email" type="email" required="" data-members-email>
1009              <button type="submit" class="button-primary w-button">Sign up</button>
1010            </div>
1011            <div class="success-message w-form-done" style="display: none;">
1012              <div class="text-mono green">Thanks for subscribing!</div>
1013            </div>
1014            <div class="error-message w-form-fail" style="display: none;">
1015              <div class="text-mono error">An error occurred while submitting. Try again.</div>
1016            </div>
1017          </form>
1018        </div>
1019      </div>
1020    </section>
1021    <section class="footer-credit">
1022      <div class="footer-credit-div">
1023        <div class="text-mono">© 2026 Windscribbles</div>
1024        <div class="text-mono">Powered by <a href="https://www.windscribe.com" target="_blank" class="link">Windscribe</a></div>
1025      </div>
1026    </section>
1027  </div>
1028  
1029  <!-- Vendor Scripts -->
1030  
1030<script src="https://code.jquery.com/jquery-3.5.1.min.js" type="text/javascript"></script>
1030
1031  
1031<script src="/blog/assets/js/webflow.js?v=F9R-dyF6sGFFJmiC" type="text/javascript"></script>
1031
1032  
1032<script src="https://cdn.prod.website-files.com/gsap/3.14.2/gsap.min.js" type="text/javascript"></script>
1032
1033  
1034  <!-- Matomo -->
1035<script>
1036  var _paq = window._paq = window._paq || [];
1037  /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
1038  _paq.push(['trackPageView']);
1039  _paq.push(['enableLinkTracking']);
1040  (function() {
1041    var u="//stats.windscribe.com/";
1042    _paq.push(['setTrackerUrl', u+'piwik.php']);
1043    _paq.push(['setSiteId', '3']);
1044    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
1045    g.async=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
1046  })();
1047</script>
1047
1048<!-- End Matomo Code -->
1049  
1050  <!-- Theme Scripts -->
1051  
1051<script>
1052  (function() {
1053    'use strict';
1054
1055    /* ======================================================================
1056       Load More — Paginated Post Loading
1057       ====================================================================== */
1058    function initLoadMore() {
1059      var POSTS_PER_PAGE = 6;
1060      var loadMoreBtn = document.querySelector('.load-more-btn');
1061      var postsContainer = document.querySelector('.posts-container');
1062
1063      if (!loadMoreBtn || !postsContainer) return;
1064
1065      var pageType    = postsContainer.getAttribute('data-page-type');
1066      var tagSlug     = postsContainer.getAttribute('data-tag-slug');
1067      var authorSlug  = postsContainer.getAttribute('data-author-slug');
1068      var totalPosts  = parseInt(postsContainer.getAttribute('data-total-posts')) || 0;
1069      var currentPage = 2;
1070      var isLoading   = false;
1071      var postsLoaded = postsContainer.querySelectorAll('.blog-item').length;
1072
1073      // Detect the blog's base path from the current URL
1074      // e.g. "/blog/tag/news/" → basePath = "/blog"
1075      var pathname = window.location.pathname;
1076      var basePath = '';
1077      if (pageType === 'tag' && tagSlug) {
1078        basePath = pathname.split('/tag/')[0];
1079      } else if (pageType === 'author' && authorSlug) {
1080        basePath = pathname.split('/author/')[0];
1081      } else {
1082        // For index and all-posts pages, strip trailing slash and /page/N if present
1083        basePath = pathname.replace(/\/page\/\d+\/?$/, '').replace(/\/$/, '');
1084        // For all-posts page, strip the /all-posts slug to get base blog path
1085        if (pageType === 'all-posts') {
1086          basePath = basePath.replace(/\/all-posts$/, '');
1087        }
1088      }
1089
1090      if (totalPosts <= POSTS_PER_PAGE) {
1091        loadMoreBtn.style.display = 'none';
1092        return;
1093      }
1094
1095      loadMoreBtn.addEventListener('click', async function(e) {
1096        e.preventDefault();
1097        if (isLoading) return;
1098
1099        isLoading = true;
1100        var originalText = loadMoreBtn.textContent;
1101        loadMoreBtn.textContent = 'Loading...';
1102        loadMoreBtn.style.pointerEvents = 'none';
1103        loadMoreBtn.style.borderRadius = 'var(--button-radius)';
1104
1105        try {
1106          var pageUrl;
1107          if (pageType === 'tag' && tagSlug) {
1108            pageUrl = basePath + '/tag/' + tagSlug + '/page/' + currentPage + '/';
1109          } else if (pageType === 'author' && authorSlug) {
1110            pageUrl = basePath + '/author/' + authorSlug + '/page/' + currentPage + '/';
1111          } else if (pageType === 'all-posts') {
1112            pageUrl = basePath + '/page/' + currentPage + '/';
1113          } else {
1114            pageUrl = basePath + '/page/' + currentPage + '/';
1115          }
1116
1117          var response = await fetch(pageUrl);
1118          if (!response.ok) throw new Error('Page not found');
1119
1120          var html = await response.text();
1121          var doc = new DOMParser().parseFromString(html, 'text/html');
1122
1123          var selectors = [
1124            '.posts-container .post-item',
1125            '.posts-container .blog-item',
1126            '.collection-list-grid .blog-item',
1127            '.section-tags .blog-item',
1128            '.section-all .blog-item'
1129          ];
1130
1131          var newPosts = null;
1132          for (var i = 0; i < selectors.length; i++) {
1133            newPosts = doc.querySelectorAll(selectors[i]);
1134            if (newPosts && newPosts.length > 0) break;
1135          }
1136
1137          var count = newPosts ? newPosts.length : 0;
1138
1139          if (count > 0) {
1140            newPosts.forEach(function(post, index) {
1141              var clone = post.cloneNode(true);
1142              clone.classList.add('blog-item', 'w-dyn-item', 'post-item');
1143              clone.style.opacity = '0';
1144              clone.style.transform = 'translateY(20px)';
1145              clone.style.transition = 'opacity 0.3s ease, transform 0.3s ease';
1146              postsContainer.appendChild(clone);
1147
1148              setTimeout(function() {
1149                clone.style.opacity = '1';
1150                clone.style.transform = 'translateY(0)';
1151              }, index * 50);
1152            });
1153
1154            postsLoaded += count;
1155            currentPage++;
1156          }
1157
1158          if (postsLoaded >= totalPosts || count < POSTS_PER_PAGE) {
1159            loadMoreBtn.style.display = 'none';
1160          } else {
1161            loadMoreBtn.textContent = originalText;
1162            loadMoreBtn.style.pointerEvents = 'auto';
1163          }
1164        } catch (err) {
1165          console.error('Load more error:', err);
1166          loadMoreBtn.style.display = 'none';
1167        }
1168
1169        isLoading = false;
1170      });
1171    }
1172
1173    /* ======================================================================
1174       Active Nav — Highlight Current Tag in Desktop & Mobile
1175       ====================================================================== */
1176    function initActiveNav() {
1177      var path = window.location.pathname;
1178      var tagMatch = path.match(/\/tag\/([^\/]+)/);
1179      if (!tagMatch) return;
1180
1181      var currentTag = tagMatch[1];
1182
1183      // Desktop tabs
1184      document.querySelectorAll('.nav-glow[data-tag]').forEach(function(item) {
1185        if (item.getAttribute('data-tag') === currentTag) {
1186          item.classList.add('active');
1187        }
1188      });
1189
1190      // Mobile dropdown
1191      document.querySelectorAll('.dropdown-inner .link-2[data-tag]').forEach(function(link) {
1192        if (link.getAttribute('data-tag') === currentTag) {
1193          link.classList.add('active');
1194        }
1195      });
1196    }
1197
1198    /* ======================================================================
1199       Cleanup — Remove Webflow "undefined" CMS Bindings
1200       ====================================================================== */
1201    function cleanupUndefined() {
1202      document.querySelectorAll('.blog-text, .w-richtext').forEach(function(el) {
1203        if (el.textContent.trim() === 'undefined') {
1204          el.textContent = '';
1205        }
1206      });
1207    }
1208
1209    /* ======================================================================
1210       Newsletter — Footer Subscribe Form (Ghost Members API)
1211       ====================================================================== */
1212    function initNewsletter() {
1213      var form = document.getElementById('footer-subscribe-form');
1214      if (!form) return;
1215
1216      var wrapper    = form.closest('.footer-form');
1217      var successMsg = wrapper.querySelector('.success-message');
1218      var errorMsg   = wrapper.querySelector('.error-message');
1219      var formBlock  = form.querySelector('.footer-form-block');
1220      var formDesc   = form.querySelector('.text-allcaps');
1221
1222      form.addEventListener('submit', function(e) {
1223        e.preventDefault();
1224
1225        var emailInput = form.querySelector('input[type="email"]');
1226        var email      = emailInput.value.trim();
1227        var submitBtn  = form.querySelector('button[type="submit"]');
1228
1229        if (!email) return;
1230
1231        submitBtn.disabled = true;
1232        submitBtn.textContent = 'Sending...';
1233        errorMsg.style.display = 'none';
1234        successMsg.style.display = 'none';
1235
1236        fetch('/members/api/send-magic-link/', {
1237          method: 'POST',
1238          headers: { 'Content-Type': 'application/json' },
1239          body: JSON.stringify({ email: email, emailType: 'subscribe' })
1240        })
1241        .then(function(res) {
1242          if (res.ok) {
1243            if (formBlock) formBlock.style.display = 'none';
1244            if (formDesc) formDesc.style.display = 'none';
1245            successMsg.style.display = 'block';
1246          } else {
1247            throw new Error('Subscription failed');
1248          }
1249        })
1250        .catch(function() {
1251          errorMsg.style.display = 'block';
1252        })
1253        .finally(function() {
1254          submitBtn.disabled = false;
1255          submitBtn.textContent = 'Sign up';
1256        });
1257      });
1258    }
1259
1260    /* ======================================================================
1261       Init
1262       ====================================================================== */
1263    function init() {
1264      initLoadMore();
1265      cleanupUndefined();
1266      initActiveNav();
1267      initNewsletter();
1268    }
1269
1270    if (document.readyState === 'loading') {
1271      document.addEventListener('DOMContentLoaded', init);
1272    } else {
1273      init();
1274    }
1275  })();
1276  </script>
1276
1277
1278  
1278<script>
1279  /* =============================================
1280     Custom Dropdown Toggle
1281     Replaces Webflow's built-in dropdown behavior
1282     to prevent the first-click-closes bug.
1283     ============================================= */
1284  (function() {
1285    function initDropdownFix() {
1286      var dropdowns = document.querySelectorAll('.w-dropdown');
1287      dropdowns.forEach(function(dropdown) {
1288        var toggle = dropdown.querySelector('.w-dropdown-toggle');
1289        var list = dropdown.querySelector('.w-dropdown-list');
1290        if (!toggle || !list) return;
1291
1292        // Remove Webflow's data attributes that drive its dropdown JS
1293        dropdown.removeAttribute('data-hover');
1294        dropdown.removeAttribute('data-delay');
1295
1296        // Clone toggle to strip all Webflow event listeners
1297        var newToggle = toggle.cloneNode(true);
1298        toggle.parentNode.replaceChild(newToggle, toggle);
1299
1300        var isOpen = false;
1301
1302        function openMenu() {
1303          isOpen = true;
1304          list.classList.add('w--open');
1305          newToggle.classList.add('w--open');
1306          newToggle.setAttribute('aria-expanded', 'true');
1307        }
1308
1309        function closeMenu() {
1310          isOpen = false;
1311          list.classList.remove('w--open');
1312          newToggle.classList.remove('w--open');
1313          newToggle.setAttribute('aria-expanded', 'false');
1314        }
1315
1316        newToggle.addEventListener('click', function(e) {
1317          e.preventDefault();
1318          e.stopPropagation();
1319          if (isOpen) {
1320            closeMenu();
1321          } else {
1322            openMenu();
1323          }
1324        });
1325
1326        // Close when clicking outside
1327        document.addEventListener('click', function(e) {
1328          if (isOpen && !dropdown.contains(e.target)) {
1329            closeMenu();
1330          }
1331        });
1332
1333        // Close when pressing Escape
1334        document.addEventListener('keydown', function(e) {
1335          if (e.key === 'Escape' && isOpen) {
1336            closeMenu();
1337            newToggle.focus();
1338          }
1339        });
1340
1341        // Close when a nav link inside the dropdown is clicked
1342        list.querySelectorAll('a').forEach(function(link) {
1343          link.addEventListener('click', function() {
1344            closeMenu();
1345          });
1346        });
1347      });
1348    }
1349
1350    if (document.readyState === 'loading') {
1351      document.addEventListener('DOMContentLoaded', initDropdownFix);
1352    } else {
1353      initDropdownFix();
1354    }
1355  })();
1356  </script>
1356
1357</body>
1358</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.