PageSourceSearch

https://www.timeitt.com/privacy

html timeitt.com collected 2026-10-02 01:46:17 UTC 69,728 bytes, 194 lines download raw bytes

1<!DOCTYPE html><!--_S3AnPcyfH4UNJjdTvzAN--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/><link rel="preload" as="image" href="/logo.svg"/><link rel="preload" as="image" href="/logoDark.svg"/><link rel="stylesheet" href="/_next/static/css/65559c6c59d4ee8a.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-2cd8219c1aa51a4f.js"/>
1<script src="/_next/static/chunks/4bd1b696-2b8703bf2940f042.js" async=""></script>
1<script src="/_next/static/chunks/5231-559e5d2bc5696f84.js" async=""></script>
1<script src="/_next/static/chunks/main-app-0b4e96624470ed3f.js" async=""></script>
1<link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"/><link rel="icon" href="/FaviconTimeittChromeExtension.png" media="(prefers-color-scheme: dark)"/><link rel="icon" href="/FaviconTimeittChromeExtensionLight.png" media="(prefers-color-scheme: light)"/><link rel="icon" href="/FaviconTimeittChromeExtension.png"/><title>Privacy Policy — Timeitt</title><meta name="description" content="Save tweets from X with one click. Timeitt auto-schedules them into Stories on your Google Calendar."/><meta property="og:title" content="Privacy Policy — Timeitt"/><meta property="og:description" content="Save tweets from X with one click. Timeitt auto-schedules them into Stories on your Google Calendar."/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="Privacy Policy — Timeitt"/><meta name="twitter:description" content="Save tweets from X with one click. Timeitt auto-schedules them into Stories on your Google Calendar."/>
1<script>try{var t=localStorage.getItem('timeitt-theme');document.documentElement.dataset.theme=(t==='light'||t==='dark')?t:'dark';}catch(e){document.documentElement.dataset.theme='dark';}</script>
1<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&amp;display=swap"/>
1<script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script>
1</head><body><div hidden=""><!--$--><!--/$--></div><!--$?--><template id="B:0"></template><div class="tl-root" role="status" aria-live="polite" aria-label="Loading Timeitt"><style>
2@property --tl-angle { syntax: '<angle>'; initial-value: 0deg; inherits: false; }
3
4.tl-root {
5  position: fixed;
6  inset: 0;
7  z-index: 9999;
8  /* Defaults to the theme-aware page background set in globals.css, so the
9     splash never disagrees with the page underneath it. */
10  background: var(--tl-bg, var(--page-bg, #000));
11  display: grid;
12  place-items: center;
13  overflow: hidden;
14  /* Failsafe: if the JS bundle never arrives, never trap the page behind the splash. */
15  animation: tl-failsafe 0.4s ease 8s forwards;
16}
17.tl-root.tl-out {
18  animation: none;
19  opacity: 0;
20  pointer-events: none;
21  transition: opacity 0.35s ease;
22}
23@keyframes tl-failsafe { to { opacity: 0; visibility: hidden; } }
24
25/* ── Drifting bubbles ───────────────────────────────────────────────
26   Negative animation-delays start every bubble mid-flight, so the very
27   first painted frame already has motion in it. */
28.tl-bubble {
29  position: absolute;
30  border-radius: 50%;
31  filter: blur(60px);
32  opacity: 0;
33  animation: tl-drift linear infinite;
34  pointer-events: none;
35}
36/* Extra mid-stops in each gradient: a single 0%→transparent ramp bands visibly
37   at this size, even under a 60px blur. */
38.tl-bubble-1 { width: 420px; height: 420px; left: -110px; bottom: -110px; background: radial-gradient(circle, rgba(29,155,240,0.42) 0%, rgba(29,155,240,0.20) 42%, rgba(29,155,240,0.05) 66%, transparent 78%); animation-duration: 18s; animation-delay: -9s; }
39.tl-bubble-2 { width: 320px; height: 320px; right: -70px; top: 8%;        background: radial-gradient(circle, rgba(60,160,255,0.34) 0%, rgba(60,160,255,0.16) 42%, rgba(60,160,255,0.04) 66%, transparent 78%); animation-duration: 22s; animation-delay: -6s; }
40.tl-bubble-3 { width: 240px; height: 240px; left: 16%; bottom: 12%;       background: radial-gradient(circle, rgba(100,180,255,0.30) 0%, rgba(100,180,255,0.14) 42%, rgba(100,180,255,0.04) 66%, transparent 78%); animation-duration: 26s; animation-delay: -11s; }
41.tl-bubble-4 { width: 190px; height: 190px; right: 14%; bottom: 16%;      background: radial-gradient(circle, rgba(29,155,240,0.36) 0%, rgba(29,155,240,0.17) 42%, rgba(29,155,240,0.04) 66%, transparent 78%); animation-duration: 20s; animation-delay: -4s; }
42.tl-bubble-5 { width: 300px; height: 300px; left: 34%; top: -40px;        background: radial-gradient(circle, rgba(60,160,255,0.26) 0%, rgba(60,160,255,0.12) 42%, rgba(60,160,255,0.03) 66%, transparent 78%); animation-duration: 30s; animation-delay: -15s; }
43/* Sits directly behind the panel — without it backdrop-filter has nothing to
44   blur and the glass reads as flat fill. */
45.tl-bubble-6 { width: 560px; height: 560px; left: 50%; top: 50%; margin: -280px 0 0 -280px; background: radial-gradient(circle, rgba(29,155,240,0.30) 0%, rgba(29,155,240,0.14) 40%, rgba(29,155,240,0.03) 64%, transparent 76%); filter: blur(70px); animation-duration: 24s; animation-delay: -12s; }
46@keyframes tl-drift {
47  0%   { transform: translateY(60px) scale(0.85); opacity: 0; }
48  10%  { opacity: 1; }
49  85%  { opacity: 1; }
50  100% { transform: translateY(-80px) scale(1.08); opacity: 0; }
51}
52
53/* ── Frosted glass panel ──────────────────────────────────────────── */
54.tl-panel {
55  position: relative;
56  width: 264px;
57  height: 164px;
58  border-radius: 24px;
59  border: 1px solid transparent;
60  overflow: hidden;
61  display: flex;
62  flex-direction: column;
63  align-items: center;
64  justify-content: center;
65  gap: 22px;
66  backdrop-filter: blur(24px) saturate(180%);
67  -webkit-backdrop-filter: blur(24px) saturate(180%);
68  background:
69    linear-gradient(rgba(22,24,28,0.72), rgba(22,24,28,0.72)) padding-box,
70    conic-gradient(from var(--tl-angle),
71      rgba(255,255,255,0.06) 0%,
72      rgba(255,255,255,0.06) 70%,
73      rgba(29,155,240,0.5) 85%,
74      rgba(255,255,255,0.06) 100%) border-box;
75  animation: tl-stroke 6s linear infinite, tl-panel-in 0.5s cubic-bezier(0.16,1,0.3,1) both;
76  box-shadow: 0 24px 60px rgba(0,0,0,0.45);
77}
78@keyframes tl-stroke { to { --tl-angle: 360deg; } }
79@keyframes tl-panel-in { from { opacity: 0; transform: translateY(8px) scale(0.98); } to { opacity: 1; transform: none; } }
80
81/* ── Wisps rising inside the panel, behind the logo ───────────────── */
82.tl-basin {
83  position: absolute;
84  bottom: 0;
85  left: 50%;
86  width: 150px;
87  height: 26px;
88  border-radius: 50%;
89  background: radial-gradient(ellipse, rgba(29,155,240,0.30) 0%, rgba(100,160,255,0.12) 60%, transparent 100%);
90  filter: blur(9px);
91  animation: tl-basin-pulse 4s ease-in-out infinite;
92  pointer-events: none;
93}
94@keyframes tl-basin-pulse {
95  0%, 100% { opacity: 0.5; transform: translateX(-50%) scaleX(1); }
96  50%      { opacity: 0.7; transform: translateX(-50%) scaleX(1.05); }
97}
98.tl-wisp { position: absolute; bottom: 4px; border-radius: 50%; filter: blur(4px); pointer-events: none; }
99.tl-wisp-1 { left: 42%; width: 11px; height: 17px; background: rgba(29,155,240,0.34);  animation: tl-rise-1 5.0s ease-out 0s   infinite; }
100.tl-wisp-2 { left: 33%; width: 8px;  height: 13px; background: rgba(214,232,255,0.55); animation: tl-rise-2 5.8s ease-out 0.9s infinite; }
101.tl-wisp-3 { left: 56%; width: 13px; height: 19px; background: rgba(60,160,255,0.30);  animation: tl-rise-3 5.4s ease-out 2.1s infinite; }
102.tl-wisp-4 { left: 62%; width: 7px;  height: 11px; background: rgba(220,236,255,0.50); animation: tl-rise-4 6.2s ease-out 3.0s infinite; }
103.tl-wisp-5 { left: 48%; width: 10px; height: 15px; background: rgba(29,155,240,0.28);  animation: tl-rise-5 5.6s ease-out 1.5s infinite; }
104@keyframes tl-rise-1 { 0% { opacity:0; transform:translate(0,0) scale(1); } 15% { opacity:0.7; } 85% { opacity:0.45; } 100% { opacity:0; transform:translate(7px,-104px) scale(0.34); } }
105@keyframes tl-rise-2 { 0% { opacity:0; transform:translate(0,0) scale(1); } 12% { opacity:0.62; } 88% { opacity:0.38; } 100% { opacity:0; transform:translate(-11px,-96px) scale(0.4); } }
106@keyframes tl-rise-3 { 0% { opacity:0; transform:translate(0,0) scale(1); } 18% { opacity:0.74; } 82% { opacity:0.48; } 100% { opacity:0; transform:translate(5px,-110px) scale(0.3); } }
107@keyframes tl-rise-4 { 0% { opacity:0; transform:translate(0,0) scale(1); } 14% { opacity:0.58; } 86% { opacity:0.36; } 100% { opacity:0; transform:translate(-8px,-92px) scale(0.42); } }
108@keyframes tl-rise-5 { 0% { opacity:0; transform:translate(0,0) scale(1); } 16% { opacity:0.68; } 84% { opacity:0.44; } 100% { opacity:0; transform:translate(12px,-100px) scale(0.36); } }
109
110/* ── Logo + indeterminate bar ─────────────────────────────────────── */
111.tl-logo { position: relative; z-index: 1; height: 30px; width: auto; animation: tl-logo-pulse 2.6s ease-in-out infinite; }
112@keyframes tl-logo-pulse { 0%, 100% { opacity: 0.92; } 50% { opacity: 0.6; } }
113.tl-logo--on-light { display: none; }
114
115.tl-bar {
116  position: relative;
117  z-index: 1;
118  width: 108px;
119  height: 3px;
120  border-radius: 999px;
121  background: rgba(255,255,255,0.08);
122  overflow: hidden;
123}
124.tl-bar::after {
125  content: '';
126  position: absolute;
127  inset: 0;
128  background: linear-gradient(90deg, transparent 0%, rgba(29,155,240,0.95) 50%, transparent 100%);
129  transform: translateX(-100%);
130  animation: tl-bar-sweep 1.4s ease-in-out infinite;
131}
132@keyframes tl-bar-sweep { 0% { transform: translateX(-100%); } 100% { transform: translateX(100%); } }
133
134/* ── Light theme ──────────────────────────────────────────────────────
135   The dark palette is invisible on #FAF8F6, so swap to the muted blue-greys
136   already tuned for light mode in PensieveWisps on the landing page. */
137:root[data-theme="light"] .tl-logo--on-dark  { display: none; }
138:root[data-theme="light"] .tl-logo--on-light { display: block; }
139:root[data-theme="light"] .tl-panel {
140  background:
141    linear-gradient(rgba(255,255,255,0.72), rgba(255,255,255,0.72)) padding-box,
142    conic-gradient(from var(--tl-angle),
143      rgba(0,0,0,0.06) 0%,
144      rgba(0,0,0,0.06) 70%,
145      rgba(29,155,240,0.45) 85%,
146      rgba(0,0,0,0.06) 100%) border-box;
147  box-shadow: 0 24px 60px rgba(80,90,120,0.18);
148}
149:root[data-theme="light"] .tl-bubble-1 { background: radial-gradient(circle, rgba(29,100,200,0.30) 0%, rgba(29,100,200,0.14) 42%, rgba(29,100,200,0.04) 66%, transparent 78%); }
150:root[data-theme="light"] .tl-bubble-2 { background: radial-gradient(circle, rgba(60,120,210,0.24) 0%, rgba(60,120,210,0.11) 42%, rgba(60,120,210,0.03) 66%, transparent 78%); }
151:root[data-theme="light"] .tl-bubble-3 { background: radial-gradient(circle, rgba(100,120,170,0.24) 0%, rgba(100,120,170,0.11) 42%, rgba(100,120,170,0.03) 66%, transparent 78%); }
152:root[data-theme="light"] .tl-bubble-4 { background: radial-gradient(circle, rgba(29,100,200,0.26) 0%, rgba(29,100,200,0.12) 42%, rgba(29,100,200,0.03) 66%, transparent 78%); }
153:root[data-theme="light"] .tl-bubble-5 { background: radial-gradient(circle, rgba(90,110,160,0.20) 0%, rgba(90,110,160,0.09) 42%, rgba(90,110,160,0.02) 66%, transparent 78%); }
154:root[data-theme="light"] .tl-bubble-6 { background: radial-gradient(circle, rgba(29,100,200,0.22) 0%, rgba(29,100,200,0.10) 40%, rgba(29,100,200,0.02) 64%, transparent 76%); }
155:root[data-theme="light"] .tl-basin { background: radial-gradient(ellipse, rgba(29,100,200,0.16) 0%, rgba(80,120,200,0.07) 60%, transparent 100%); }
156:root[data-theme="light"] .tl-wisp-1 { background: rgba(29,100,200,0.20); }
157:root[data-theme="light"] .tl-wisp-2 { background: rgba(110,130,175,0.24); }
158:root[data-theme="light"] .tl-wisp-3 { background: rgba(60,120,210,0.18); }
159:root[data-theme="light"] .tl-wisp-4 { background: rgba(100,120,170,0.22); }
160:root[data-theme="light"] .tl-wisp-5 { background: rgba(29,100,200,0.17); }
161:root[data-theme="light"] .tl-bar { background: rgba(0,0,0,0.07); }
162
163@media (prefers-reduced-motion: reduce) {
164  .tl-panel, .tl-basin, .tl-wisp, .tl-logo, .tl-bar::after {
165    animation: none !important;
166  }
167  .tl-bubble { animation: none !important; opacity: 0.3 !important; }
168  .tl-bar::after { transform: none; opacity: 0.5; }
169}
170</style><div class="tl-bubble tl-bubble-1"></div><div class="tl-bubble tl-bubble-2"></div><div class="tl-bubble tl-bubble-3"></div><div class="tl-bubble tl-bubble-4"></div><div class="tl-bubble tl-bubble-5"></div><div class="tl-bubble tl-bubble-6"></div><div class="tl-panel"><div class="tl-basin"></div><div class="tl-wisp tl-wisp-1"></div><div class="tl-wisp tl-wisp-2"></div><div class="tl-wisp tl-wisp-3"></div><div class="tl-wisp tl-wisp-4"></div><div class="tl-wisp tl-wisp-5"></div><img src="/logo.svg" alt="Timeitt" class="tl-logo tl-logo--on-dark"/><img src="/logoDark.svg" alt="" aria-hidden="true" class="tl-logo tl-logo--on-light"/><div class="tl-bar"></div></div></div><!--/$-->
170<script>requestAnimationFrame(function(){$RT=performance.now()});</script>
170<script src="/_next/static/chunks/webpack-2cd8219c1aa51a4f.js" id="_R_" async=""></script>
170<div hidden id="S:0"><html lang="en"><head><style>
171              body {
172                font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
173                max-width: 720px;
174                margin: 0 auto;
175                padding: 2rem 1.5rem;
176                background: #000;
177                color: #e7e9ea;
178                line-height: 1.7;
179              }
180              h1 { font-size: 1.75rem; margin-bottom: 0.25rem; }
181              h2 { font-size: 1.25rem; margin-top: 2rem; color: #fff; }
182              h3 { font-size: 1.05rem; margin-top: 1.5rem; color: #e7e9ea; }
183              p, li { color: #a1a5ab; font-size: 0.95rem; }
184              a { color: #1d9bf0; text-decoration: none; }
185              a:hover { text-decoration: underline; }
186              ul { padding-left: 1.5rem; }
187              li { margin-bottom: 0.35rem; }
188              .subtitle { color: #71767b; font-size: 0.9rem; margin-bottom: 2rem; }
189              table { width: 100%; border-collapse: collapse; margin: 1rem 0; }
190              th, td { text-align: left; padding: 0.5rem 0.75rem; border-bottom: 1px solid #2f3336; font-size: 0.9rem; color: #a1a5ab; }
191              th { color: #e7e9ea; font-weight: 600; }
192              hr { border: none; border-top: 1px solid #2f3336; margin: 2rem 0; }
193            </style></head><body><h1>Privacy Policy</h1><p class="subtitle" style="color:#71767b;font-size:0.9rem;margin-bottom:2rem">Last updated: 10 March 2026</p><p>This Privacy Policy explains how Timeitt (&quot;we&quot;, &quot;us&quot;, &quot;our&quot;) collects, uses, stores, and protects your personal data when you use the Timeitt Chrome extension, Telegram bot, or any related services (collectively, the &quot;Service&quot;). Timeitt is operated by Jose Maria Trave Villalba, a freelance professional based in Spain.</p><p>We are committed to complying with the General Data Protection Regulation (EU) 2016/679 (&quot;GDPR&quot;), the Spanish Organic Law 3/2018 on Personal Data Protection (LOPDGDD), and other applicable data protection laws.</p><h2>1. Data Controller</h2><p><strong>Jose Maria Trave Villalba</strong><br/>Spain<br/>Email: <a href="mailto:[email protected]">[email protected]</a></p><p>For any questions regarding this Privacy Policy or your personal data, you may contact us at the email address above.</p><h2>2. Data We Collect</h2><h3>2.1 Account Data (provided by you via Google OAuth)</h3><ul><li>Google account ID</li><li>Email address</li><li>Name</li><li>Profile picture URL</li></ul><h3>2.2 Telegram Data (if using the Telegram bot)</h3><ul><li>Telegram chat ID (a numeric identifier — we do not store your Telegram username or phone number)</li></ul><h3>2.3 Content Data</h3><ul><li>URLs of X (Twitter) posts you save</li><li>Tweet text, author name, and author handle (retrieved via public APIs)</li><li>Media thumbnail URLs from saved tweets</li></ul><h3>2.4 Calendar Data</h3><ul><li>Google Calendar free/busy information (used to schedule reading sessions — we only query availability, not event details)</li><li>Calendar event IDs for reading sessions we create on your behalf</li></ul><h3>2.5 Preference Data</h3><ul><li>Timezone</li><li>Scheduling preferences (agenda type, preferred reading times, sessions per day)</li><li>Email notification preferences</li></ul><h3>2.6 Authentication Tokens</h3><ul><li>Google OAuth refresh token (stored securely to maintain calendar access on your behalf)</li><li>Session JWT (short-lived authentication token)</li></ul><h3>2.7 Data We Do NOT Collect</h3><ul><li>We do not read the content of your existing Google Calendar events</li><li>We do not collect your browsing history beyond X.com interactions with Timeitt</li><li>We do not collect your Google password</li><li>We do not sell or share personal data with third parties for advertising purposes</li></ul><h2>3. Legal Basis for Processing (GDPR Article 6)</h2><table><thead><tr><th>Processing Activity</th><th>Legal Basis</th></tr></thead><tbody><tr><td>Account creation and authentication</td><td>Contract performance (Art. 6(1)(b))</td></tr><tr><td>Saving tweets and scheduling reading sessions</td><td>Contract performance (Art. 6(1)(b))</td></tr><tr><td>Google Calendar integration</td><td>Consent (Art. 6(1)(a)) — via explicit OAuth grant</td></tr><tr><td>Email notifications (digest, reminders, recap, nudges)</td><td>Legitimate interest (Art. 6(1)(f)) — service functionality</td></tr><tr><td>Storing refresh tokens for calendar access</td><td>Consent (Art. 6(1)(a)) — via explicit OAuth grant</td></tr></tbody></table><h2>4. How We Use Your Data</h2><ul><li>To provide the core Service: saving tweets, scheduling reading sessions, and creating Google Calendar events</li><li>To send email notifications you have opted into (digest, reminders, weekly recap, nudges)</li><li>To maintain your authenticated session across the extension and Telegram bot</li><li>To improve the Service (aggregate, anonymized usage patterns only)</li></ul><h2>5. Data Storage and Security</h2><ul><li><strong>Database:</strong> Your data is stored in a PostgreSQL database hosted by Neon (serverless PostgreSQL) in the United States. Neon complies with SOC 2 Type II standards.</li><li><strong>
193Backend:</strong> API routes are hosted on Vercel (serverless functions) with data centers in the United States.</li><li><strong>Encryption:</strong> All data in transit is encrypted via TLS/HTTPS. Database connections use SSL.</li><li><strong>Access:</strong> Only the data controller has administrative access to the database and infrastructure.</li></ul><h3>5.1 International Data Transfers</h3><p>Your data is processed in the United States by our infrastructure providers (Vercel, Neon). These transfers are protected under the EU-U.S. Data Privacy Framework and Standard Contractual Clauses (SCCs) where applicable. By using the Service, you acknowledge this transfer.</p><h2>6. Data Retention</h2><ul><li><strong>Account data:</strong> Retained while your account is active. Deleted upon account deletion.</li><li><strong>Saved tweets and reading sessions:</strong> Retained while your account is active. Deleted upon account deletion.</li><li><strong>Authentication tokens:</strong> Refresh tokens are retained while your calendar is connected. Revoked upon calendar disconnection or account deletion.</li><li><strong>Email logs:</strong> Timestamp-only deduplication records (e.g., &quot;last digest sent at&quot;). Deleted upon account deletion.</li></ul><p>When you delete your account, all personal data is permanently deleted from our database, including saved tweets, reading sessions, and authentication tokens. Google Calendar events created by Timeitt are also deleted from your calendar.</p><h2>7. Your Rights (GDPR Articles 15–22)</h2><p>As an EU resident, you have the following rights:</p><ul><li><strong>Right of access</strong> (Art. 15) — Request a copy of your personal data</li><li><strong>Right to rectification</strong> (Art. 16) — Request correction of inaccurate data</li><li><strong>Right to erasure</strong> (Art. 17) — Request deletion of your data (&quot;right to be forgotten&quot;). You can do this directly via the extension&#x27;
193s Settings → Delete Account, or by contacting us.</li><li><strong>Right to restriction</strong> (Art. 18) — Request restriction of processing</li><li><strong>Right to data portability</strong> (Art. 20) — Request your data in a structured, machine-readable format. You can export all your data at any time via the extension Settings or by contacting us.</li><li><strong>Right to object</strong> (Art. 21) — Object to processing based on legitimate interest</li><li><strong>Right to withdraw consent</strong> (Art. 7(3)) — Withdraw consent at any time (e.g., disconnect Google Calendar, disable email notifications)</li></ul><p>To exercise any of these rights, email us at<!-- --> <a href="mailto:[email protected]">[email protected]</a>. We will respond within 30 days.</p><p>You also have the right to lodge a complaint with the Spanish Data Protection Agency (AEPD) at <a href="https://www.aepd.es" target="_blank" rel="noopener noreferrer">www.aepd.es</a>, or with any EU supervisory authority.</p><h2>8. Recipients &amp; Data Sharing</h2><p>Timeitt shares your data only with the following third-party service providers, strictly for the purposes of operating the Service. We do not sell, rent, or share your personal data with any third party for marketing or advertising purposes.</p><ul><li><strong>Google (OAuth, Calendar API):</strong> Authentication and calendar event management. Receives your Google account data and calendar free/busy information. Subject to<!-- --> <a href="https://policies.google.com/privacy" target="_blank" rel="noopener noreferrer">Google&#x27;s Privacy Policy</a>.</li><li><strong>Telegram (Bot API):</strong> Message handling for the Telegram bot. Receives your Telegram chat ID and message content. Subject to<!-- --> <a href="https://telegram.org/privacy" target="_blank" rel="noopener noreferrer">Telegram&#x27;s Privacy Policy</a>.</li><li><strong>Resend (Email delivery):</strong> Transactional email delivery. Receives your email address and notification content. Subject to<!-- --> <a href="https://resend.com/legal/privacy-policy" target="_blank" rel="noopener noreferrer">Resend&#x27;s Privacy Policy</a>.</li><li><strong>Vercel (Hosting):</strong> Serverless infrastructure hosting our API and web pages. Processes all requests to the Service. Subject to<!-- --> <a href="https://vercel.com/legal/privacy-policy" target="_blank" rel="noopener noreferrer">Vercel&#x27;s Privacy Policy</a>.</li><li><strong>Neon (Database):</strong> PostgreSQL database hosting. Stores all user data described in Section 2. Subject to<!-- --> <a href="https://neon.tech/privacy" target="_blank" rel="noopener noreferrer">Neon&#x27;s Privacy Policy</a>.</li></ul><h2>9. Analytics</h2><p>We collect anonymized usage events (e.g., &quot;tweet saved&quot;, &quot;session scheduled&quot;) to understand how the Service is used and to improve it. Analytics events may include a user identifier but do not contain tweet content, email addresses, or other personal information beyond what is necessary to aggregate usage patterns. Analytics data is retained for 90 days and then permanently deleted.</p><h2>10. Cookies and Local Storage</h2><p>The Timeitt Chrome extension uses <code>chrome.storage.local</code> to store your authentication state, saved tweets, and preferences locally on your device. This is not shared with any third party and is not accessible to websites you visit.</p><p>The Timeitt backend does not use cookies.</p><h2>11. Children&#x27;s Privacy</h2><p>Timeitt is not directed at children under 16 years of age. We do not knowingly collect personal data from children. If you believe a child has provided us with personal data, please contact us and we will delete it.</p><h2>12. Intellectual Property</h2><p>The Timeitt name, logo, software, and all associated intellectual property are owned by Jose Maria Trave Villalba. All rights reserved.</p><ul><li>The Service software, design, and documentation are protected by copyright law.</li><li>You may not copy, modify, distribute, reverse-engineer, or create derivative works of the Service without prior written consent.</li><li>Tweet content saved through the Service remains the intellectual property of the original authors. Timeitt stores this content solely to provide the Service to you and does not claim ownership over it.</li><li>&quot;X&quot;, &quot;Twitter&quot;, and related marks are trademarks of X Corp. &quot;Google&quot;, &quot;Google Calendar&quot;, and related marks are trademarks of Google LLC. &quot;Telegram&quot; is a trademark of Telegram FZ-LLC. Timeitt is not affiliated with, endorsed by, or sponsored by any of these companies.</li></ul><h2>13. Changes to This Policy</h2><p>We may update this Privacy Policy from time to time. If we make material changes, we will notify you via email or through the Service. The &quot;Last updated&quot; date at the top indicates when the policy was last revised.</p><hr/><p style="font-size:0.85rem;color:#71767b">If you have any questions, concerns, or requests regarding this Privacy Policy, contact us at <a href="mailto:[email protected]">[email protected]</a>.</p><!--$--><!--/$--></div>
193<script>$RB=[];$RV=function(a){$RT=performance.now();for(var b=0;b<a.length;b+=2){var c=a[b],e=a[b+1];null!==e.parentNode&&e.parentNode.removeChild(e);var f=c.parentNode;if(f){var g=c.previousSibling,h=0;do{if(c&&8===c.nodeType){var d=c.data;if("/$"===d||"/&"===d)if(0===h)break;else h--;else"$"!==d&&"$?"!==d&&"$~"!==d&&"$!"!==d&&"&"!==d||h++}d=c.nextSibling;f.removeChild(c);c=d}while(c);for(;e.firstChild;)f.insertBefore(e.firstChild,c);g.data="$";g._reactRetry&&requestAnimationFrame(g._reactRetry)}}a.length=0};
194$RC=function(a,b){if(b=document.getElementById(b))(a=document.getElementById(a))?(a.previousSibling.data="$~",$RB.push(a,b),2===$RB.length&&("number"!==typeof $RT?requestAnimationFrame($RV.bind(null,$RB)):(a=performance.now(),setTimeout($RV.bind(null,$RB),2300>a&&2E3<a?2300-a:$RT+300-a)))):b.parentNode.removeChild(b)};$RC("B:0","S:0")</script>
194</body></html>
194<script>(self.__next_f=self.__next_f||[]).push([0])</script>
194<script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[9766,[],\"\"]\n3:I[8924,[],\"\"]\na:I[7150,[],\"\"]\n:HL[\"/_next/static/css/65559c6c59d4ee8a.css\",\"style\"]\n4:T1745,"])</script>
194<script>self.__next_f.push([1,"\n  * { margin: 0; padding: 0; box-sizing: border-box; }\n  html, body { margin: 0; background: #000; }\n\n  .nf-page {\n    font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n    background: #000;\n    min-height: 100vh;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    -webkit-font-smoothing: antialiased;\n    position: relative;\n    overflow: hidden;\n  }\n\n  /* ── Pensieve wisps ── */\n  .pw-root {\n    position: fixed;\n    inset: 0;\n    display: flex;\n    align-items: flex-end;\n    justify-content: center;\n    pointer-events: none;\n    z-index: 0;\n  }\n\n  .pw-basin {\n    position: absolute;\n    bottom: 38%;\n    left: 50%;\n    width: 260px;\n    height: 40px;\n    border-radius: 50%;\n    background: radial-gradient(ellipse, rgba(255,255,255,0.22) 0%, rgba(220,220,220,0.07) 60%, transparent 100%);\n    filter: blur(12px);\n    transform: translateX(-50%);\n    animation: pw-basin-pulse 6s ease-in-out infinite;\n  }\n\n  @keyframes pw-basin-pulse {\n    0%, 100% { opacity: 0.5; transform: translateX(-50%) scaleX(1); }\n    50%       { opacity: 0.7; transform: translateX(-50%) scaleX(1.05); }\n  }\n\n  .pw-wisp {\n    position: absolute;\n    bottom: 38%;\n    border-radius: 50%;\n    filter: blur(4px);\n  }\n\n  .pw-wisp-1  { left: calc(50% - 6px);  width: 12px; height: 18px; background: rgba(255,255,255,0.40); animation: pw-rise-1  9.0s ease-out 0.0s infinite; }\n  .pw-wisp-2  { left: calc(50% - 22px); width:  8px; height: 13px; background: rgba(220,220,220,0.30); animation: pw-rise-2  8.2s ease-out 1.5s infinite; }\n  .pw-wisp-3  { left: calc(50% + 10px); width: 14px; height: 20px; background: rgba(255,255,255,0.45); animation: pw-rise-3 10.0s ease-out 3.0s infinite; }\n  .pw-wisp-4  { left: calc(50% - 38px); width:  7px; height: 11px; background: rgba(230,230,230,0.28); animation: pw-rise-4  8.6s ease-out 4.5s infinite; }\n  .pw-wisp-5  { left: calc(50% + 28px); width: 11px; height: 16px; background: rgba(255,255,255,0.38); animation: pw-rise-5  9.5s ease-out 6.0s infinite; }\n  .pw-wisp-6  { left: calc(50% - 2px);  width:  9px; height: 14px; background: rgba(210,210,210,0.32); animation: pw-rise-6  8.8s ease-out 2.0s infinite; }\n  .pw-wisp-7  { left: calc(50% - 16px); width: 13px; height: 18px; background: rgba(255,255,255,0.42); animation: pw-rise-7  9.2s ease-out 5.0s infinite; }\n  .pw-wisp-8  { left: calc(50% + 20px); width:  6px; height: 10px; background: rgba(235,235,235,0.30); animation: pw-rise-8  8.4s ease-out 7.0s infinite; }\n  .pw-wisp-9  { left: calc(50% - 30px); width: 10px; height: 16px; background: rgba(255,255,255,0.36); animation: pw-rise-9  9.8s ease-out 3.8s infinite; }\n\n  @keyframes pw-rise-1 { 0% { opacity:0; transform:translateY(0) translateX(0) scale(1); } 15% { opacity:0.72; } 85% { opacity:0.55; } 100% { opacity:0; transform:translateY(-220px) translateX(8px) scale(0.35); } }\n  @keyframes pw-rise-2 { 0% { opacity:0; transform:translateY(0) translateX(0) scale(1); } 12% { opacity:0.65; } 88% { opacity:0.40; } 100% { opacity:0; transform:translateY(-200px) translateX(-12px) scale(0.40); } }\n  @keyframes pw-rise-3 { 0% { opacity:0; transform:translateY(0) translateX(0) scale(1); } 18% { opacity:0.78; } 82% { opacity:0.50; } 100% { opacity:0; transform:translateY(-230px) translateX(5px) scale(0.30); } }\n  @keyframes pw-rise-4 { 0% { opacity:0; transform:translateY(0) translateX(0) scale(1); } 14% { opacity:0.60; } 86% { opacity:0.45; } 100% { opacity:0; transform:translateY(-190px) translateX(-8px) scale(0.45); } }\n  @keyframes pw-rise-5 { 0% { opacity:0; transform:translateY(0) translateX(0) scale(1); } 16% { opacity:0.70; } 84% { opacity:0.48; } 100% { opacity:0; transform:translateY(-210px) translateX(14px) scale(0.38); } }\n  @keyframes pw-rise-6 { 0% { opacity:0; transform:translateY(0) translateX(0) scale(1); } 13% { opacity:0.62; } 87% { opacity:0.42; } 100% { opacity:0; transform:translateY(-225px) translateX(-6px) scale(0.32); } }\n  @keyframes pw-rise-7 { 0% { opacity:0; transform:translateY(0) translateX(0) scale(1); } 20% { opacity:0.75; } 80% { opacity:0.50; } 100% { opacity:0; transform:translateY(-205px) translateX(10px) scale(0.42); } }\n  @keyframes pw-rise-8 { 0% { opacity:0; transform:translateY(0) translateX(0) scale(1); } 11% { opacity:0.68; } 89% { opacity:0.44; } 100% { opacity:0; transform:translateY(-235px) translateX(-15px) scale(0.28); } }\n  @keyframes pw-rise-9 { 0% { opacity:0; transform:translateY(0) translateX(0) scale(1); } 17% { opacity:0.74; } 83% { opacity:0.52; } 100% { opacity:0; transform:translateY(-215px) translateX(7px) scale(0.36); } }\n\n  @media (prefers-reduced-motion: reduce) {\n    .pw-wisp, .pw-basin { animation: none !important; opacity: 0.25 !important; }\n  }\n\n  /* ── Content ── */\n  .nf-container {\n    text-align: center;\n    max-width: 420px;\n    padding: 40px 24px;\n    position: relative;\n    z-index: 1;\n    animation: nf-fade-up 0.6s cubic-bezier(0.16,1,0.3,1) both;\n  }\n\n  @keyframes nf-fade-up {\n    from { opacity: 0; transform: translateY(16px); }\n    to   { opacity: 1; transform: translateY(0); }\n  }\n\n  .nf-logo {\n    width: 48px;\n    height: 48px;\n    margin: 0 auto 28px;\n    display: block;\n    border-radius: 12px;\n  }\n\n  .nf-code {\n    font-size: 13px;\n    font-weight: 600;\n    letter-spacing: 0.12em;\n    text-transform: uppercase;\n    color: #555;\n    margin-bottom: 12px;\n  }\n\n  .nf-title {\n    color: #e7e9ea;\n    font-size: 22px;\n    font-weight: 600;\n    letter-spacing: -0.5px;\n    line-height: 1.3;\n    margin-bottom: 12px;\n  }\n\n  .nf-text {\n    color: #555;\n    font-size: 15px;\n    line-height: 1.6;\n    margin-bottom: 32px;\n  }\n\n  .nf-button {\n    display: inline-block;\n    background: #1d9bf0;\n    color: #fff;\n    font-size: 15px;\n    font-weight: 600;\n    padding: 12px 32px;\n    border-radius: 9999px;\n    text-decoration: none;\n    transition: background 0.2s;\n  }\n\n  .nf-button:hover { background: #1a8cd8; }\n"])</script>
194<script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"_S3AnPcyfH4UNJjdTvzAN\",\"p\":\"\",\"c\":[\"\",\"privacy\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"privacy\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/65559c6c59d4ee8a.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"try{var t=localStorage.getItem('timeitt-theme');document.documentElement.dataset.theme=(t==='light'||t==='dark')?t:'dark';}catch(e){document.documentElement.dataset.theme='dark';}\"}}],[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.googleapis.com\"}],[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.gstatic.com\",\"crossOrigin\":\"anonymous\"}],[\"$\",\"link\",null,{\"rel\":\"stylesheet\",\"href\":\"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600\u0026display=swap\"}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"href\":\"/FaviconTimeittChromeExtension.png\",\"media\":\"(prefers-color-scheme: dark)\"}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"href\":\"/FaviconTimeittChromeExtensionLight.png\",\"media\":\"(prefers-color-scheme: light)\"}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"href\":\"/FaviconTimeittChromeExtension.png\"}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"$4\"}}],\"$L5\"],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[\"privacy\",\"$L6\",{\"children\":[\"__PAGE__\",\"$L7\",{},null,false]},null,false]},[\"$L8\",[],[]],false],\"$L9\",false]],\"m\":\"$undefined\",\"G\":[\"$a\",[]],\"s\":false,\"S\":true}\n"])</script>
194<script>self.__next_f.push([1,"3d:I[4431,[],\"ViewportBoundary\"]\n3f:I[4431,[],\"MetadataBoundary\"]\n40:\"$Sreact.suspense\"\n"])</script>
194<script>self.__next_f.push([1,"5:[\"$\",\"div\",null,{\"className\":\"nf-page\",\"children\":[[\"$\",\"div\",null,{\"aria-hidden\":\"true\",\"className\":\"pw-root\",\"children\":[[\"$\",\"div\",null,{\"className\":\"pw-basin\"}],[\"$\",\"div\",null,{\"className\":\"pw-wisp pw-wisp-1\"}],[\"$\",\"div\",null,{\"className\":\"pw-wisp pw-wisp-2\"}],[\"$\",\"div\",null,{\"className\":\"pw-wisp pw-wisp-3\"}],[\"$\",\"div\",null,{\"className\":\"pw-wisp pw-wisp-4\"}],[\"$\",\"div\",null,{\"className\":\"pw-wisp pw-wisp-5\"}],[\"$\",\"div\",null,{\"className\":\"pw-wisp pw-wisp-6\"}],[\"$\",\"div\",null,{\"className\":\"pw-wisp pw-wisp-7\"}],[\"$\",\"div\",null,{\"className\":\"pw-wisp pw-wisp-8\"}],[\"$\",\"div\",null,{\"className\":\"pw-wisp pw-wisp-9\"}]]}],[\"$\",\"div\",null,{\"className\":\"nf-container\",\"children\":[[\"$\",\"img\",null,{\"src\":\"/FaviconTimeittChromeExtensionLight.png\",\"alt\":\"Timeitt\",\"className\":\"nf-logo\"}],[\"$\",\"p\",null,{\"className\":\"nf-code\",\"children\":\"404\"}],[\"$\",\"h1\",null,{\"className\":\"nf-title\",\"children\":\"This memory seems to have dissolved.\"}],[\"$\",\"p\",null,{\"className\":\"nf-text\",\"children\":\"The page you're looking for is no longer here — but your Stories are waiting.\"}],[\"$\",\"a\",null,{\"href\":\"/\",\"className\":\"nf-button\",\"children\":\"Go home\"}]]}]]}]\n"])</script>
194<script>self.__next_f.push([1,"6:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\nb:T4ef,"])</script>
194<script>self.__next_f.push([1,"\n              body {\n                font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n                max-width: 720px;\n                margin: 0 auto;\n                padding: 2rem 1.5rem;\n                background: #000;\n                color: #e7e9ea;\n                line-height: 1.7;\n              }\n              h1 { font-size: 1.75rem; margin-bottom: 0.25rem; }\n              h2 { font-size: 1.25rem; margin-top: 2rem; color: #fff; }\n              h3 { font-size: 1.05rem; margin-top: 1.5rem; color: #e7e9ea; }\n              p, li { color: #a1a5ab; font-size: 0.95rem; }\n              a { color: #1d9bf0; text-decoration: none; }\n              a:hover { text-decoration: underline; }\n              ul { padding-left: 1.5rem; }\n              li { margin-bottom: 0.35rem; }\n              .subtitle { color: #71767b; font-size: 0.9rem; margin-bottom: 2rem; }\n              table { width: 100%; border-collapse: collapse; margin: 1rem 0; }\n              th, td { text-align: left; padding: 0.5rem 0.75rem; border-bottom: 1px solid #2f3336; font-size: 0.9rem; color: #a1a5ab; }\n              th { color: #e7e9ea; font-weight: 600; }\n              hr { border: none; border-top: 1px solid #2f3336; margin: 2rem 0; }\n            "])</script>
194<script>self.__next_f.push([1,"7:[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"$b\"}}]}],[\"$\",\"body\",null,{\"children\":[[\"$\",\"h1\",null,{\"children\":\"Privacy Policy\"}],[\"$\",\"p\",null,{\"className\":\"subtitle\",\"style\":{\"color\":\"#71767b\",\"fontSize\":\"0.9rem\",\"marginBottom\":\"2rem\"},\"children\":\"Last updated: 10 March 2026\"}],[\"$\",\"p\",null,{\"children\":\"This Privacy Policy explains how Timeitt (\\\"we\\\", \\\"us\\\", \\\"our\\\") collects, uses, stores, and protects your personal data when you use the Timeitt Chrome extension, Telegram bot, or any related services (collectively, the \\\"Service\\\"). Timeitt is operated by Jose Maria Trave Villalba, a freelance professional based in Spain.\"}],[\"$\",\"p\",null,{\"children\":\"We are committed to complying with the General Data Protection Regulation (EU) 2016/679 (\\\"GDPR\\\"), the Spanish Organic Law 3/2018 on Personal Data Protection (LOPDGDD), and other applicable data protection laws.\"}],[\"$\",\"h2\",null,{\"children\":\"1. Data Controller\"}],[\"$\",\"p\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Jose Maria Trave Villalba\"}],[\"$\",\"br\",null,{}],\"Spain\",[\"$\",\"br\",null,{}],\"Email: \",[\"$\",\"a\",null,{\"href\":\"mailto:[email protected]\",\"children\":\"[email protected]\"}]]}],[\"$\",\"p\",null,{\"children\":\"For any questions regarding this Privacy Policy or your personal data, you may contact us at the email address above.\"}],[\"$\",\"h2\",null,{\"children\":\"2. Data We Collect\"}],[\"$\",\"h3\",null,{\"children\":\"2.1 Account Data (provided by you via Google OAuth)\"}],[\"$\",\"ul\",null,{\"children\":[[\"$\",\"li\",null,{\"children\":\"Google account ID\"}],[\"$\",\"li\",null,{\"children\":\"Email address\"}],[\"$\",\"li\",null,{\"children\":\"Name\"}],[\"$\",\"li\",null,{\"children\":\"Profile picture URL\"}]]}],[\"$\",\"h3\",null,{\"children\":\"2.2 Telegram Data (if using the Telegram bot)\"}],[\"$\",\"ul\",null,{\"children\":[\"$\",\"li\",null,{\"children\":\"Telegram chat ID (a numeric identifier — we do not store your Telegram username or phone number)\"}]}],[\"$\",\"h3\",null,{\"children\":\"2.3 Content Data\"}],[\"$\",\"ul\",null,{\"children\":[[\"$\",\"li\",null,{\"children\":\"URLs of X (Twitter) posts you save\"}],[\"$\",\"li\",null,{\"children\":\"Tweet text, author name, and author handle (retrieved via public APIs)\"}],[\"$\",\"li\",null,{\"children\":\"Media thumbnail URLs from saved tweets\"}]]}],[\"$\",\"h3\",null,{\"children\":\"2.4 Calendar Data\"}],[\"$\",\"ul\",null,{\"children\":[[\"$\",\"li\",null,{\"children\":\"Google Calendar free/busy information (used to schedule reading sessions — we only query availability, not event details)\"}],\"$Lc\"]}],\"$Ld\",\"$Le\",\"$Lf\",\"$L10\",\"$L11\",\"$L12\",\"$L13\",\"$L14\",\"$L15\",\"$L16\",\"$L17\",\"$L18\",\"$L19\",\"$L1a\",\"$L1b\",\"$L1c\",\"$L1d\",\"$L1e\",\"$L1f\",\"$L20\",\"$L21\",\"$L22\",\"$L23\",\"$L24\",\"$L25\",\"$L26\",\"$L27\",\"$L28\",\"$L29\",\"$L2a\",\"$L2b\",\"$L2c\",\"$L2d\",\"$L2e\",\"$L2f\",\"$L30\",\"$L31\",\"$L32\",\"$L33\"]}]]}],null,\"$L34\"]}]\n"])</script>
194<script>self.__next_f.push([1,"35:T2841,"])</script>
194<script>self.__next_f.push([1,"\n@property --tl-angle { syntax: '\u003cangle\u003e'; initial-value: 0deg; inherits: false; }\n\n.tl-root {\n  position: fixed;\n  inset: 0;\n  z-index: 9999;\n  /* Defaults to the theme-aware page background set in globals.css, so the\n     splash never disagrees with the page underneath it. */\n  background: var(--tl-bg, var(--page-bg, #000));\n  display: grid;\n  place-items: center;\n  overflow: hidden;\n  /* Failsafe: if the JS bundle never arrives, never trap the page behind the splash. */\n  animation: tl-failsafe 0.4s ease 8s forwards;\n}\n.tl-root.tl-out {\n  animation: none;\n  opacity: 0;\n  pointer-events: none;\n  transition: opacity 0.35s ease;\n}\n@keyframes tl-failsafe { to { opacity: 0; visibility: hidden; } }\n\n/* ── Drifting bubbles ───────────────────────────────────────────────\n   Negative animation-delays start every bubble mid-flight, so the very\n   first painted frame already has motion in it. */\n.tl-bubble {\n  position: absolute;\n  border-radius: 50%;\n  filter: blur(60px);\n  opacity: 0;\n  animation: tl-drift linear infinite;\n  pointer-events: none;\n}\n/* Extra mid-stops in each gradient: a single 0%→transparent ramp bands visibly\n   at this size, even under a 60px blur. */\n.tl-bubble-1 { width: 420px; height: 420px; left: -110px; bottom: -110px; background: radial-gradient(circle, rgba(29,155,240,0.42) 0%, rgba(29,155,240,0.20) 42%, rgba(29,155,240,0.05) 66%, transparent 78%); animation-duration: 18s; animation-delay: -9s; }\n.tl-bubble-2 { width: 320px; height: 320px; right: -70px; top: 8%;        background: radial-gradient(circle, rgba(60,160,255,0.34) 0%, rgba(60,160,255,0.16) 42%, rgba(60,160,255,0.04) 66%, transparent 78%); animation-duration: 22s; animation-delay: -6s; }\n.tl-bubble-3 { width: 240px; height: 240px; left: 16%; bottom: 12%;       background: radial-gradient(circle, rgba(100,180,255,0.30) 0%, rgba(100,180,255,0.14) 42%, rgba(100,180,255,0.04) 66%, transparent 78%); animation-duration: 26s; animation-delay: -11s; }\n.tl-bubble-4 { width: 190px; height: 190px; right: 14%; bottom: 16%;      background: radial-gradient(circle, rgba(29,155,240,0.36) 0%, rgba(29,155,240,0.17) 42%, rgba(29,155,240,0.04) 66%, transparent 78%); animation-duration: 20s; animation-delay: -4s; }\n.tl-bubble-5 { width: 300px; height: 300px; left: 34%; top: -40px;        background: radial-gradient(circle, rgba(60,160,255,0.26) 0%, rgba(60,160,255,0.12) 42%, rgba(60,160,255,0.03) 66%, transparent 78%); animation-duration: 30s; animation-delay: -15s; }\n/* Sits directly behind the panel — without it backdrop-filter has nothing to\n   blur and the glass reads as flat fill. */\n.tl-bubble-6 { width: 560px; height: 560px; left: 50%; top: 50%; margin: -280px 0 0 -280px; background: radial-gradient(circle, rgba(29,155,240,0.30) 0%, rgba(29,155,240,0.14) 40%, rgba(29,155,240,0.03) 64%, transparent 76%); filter: blur(70px); animation-duration: 24s; animation-delay: -12s; }\n@keyframes tl-drift {\n  0%   { transform: translateY(60px) scale(0.85); opacity: 0; }\n  10%  { opacity: 1; }\n  85%  { opacity: 1; }\n  100% { transform: translateY(-80px) scale(1.08); opacity: 0; }\n}\n\n/* ── Frosted glass panel ──────────────────────────────────────────── */\n.tl-panel {\n  position: relative;\n  width: 264px;\n  height: 164px;\n  border-radius: 24px;\n  border: 1px solid transparent;\n  overflow: hidden;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  gap: 22px;\n  backdrop-filter: blur(24px) saturate(180%);\n  -webkit-backdrop-filter: blur(24px) saturate(180%);\n  background:\n    linear-gradient(rgba(22,24,28,0.72), rgba(22,24,28,0.72)) padding-box,\n    conic-gradient(from var(--tl-angle),\n      rgba(255,255,255,0.06) 0%,\n      rgba(255,255,255,0.06) 70%,\n      rgba(29,155,240,0.5) 85%,\n      rgba(255,255,255,0.06) 100%) border-box;\n  animation: tl-stroke 6s linear infinite, tl-panel-in 0.5s cubic-bezier(0.16,1,0.3,1) both;\n  box-shadow: 0 24px 60px rgba(0,0,0,0.45);\n}\n@keyframes tl-stroke { to { --tl-angle: 360deg; } }\n@keyframes tl-panel-in { from { opacity: 0; transform: translateY(8px) scale(0.98); } to { opacity: 1; transform: none; } }\n\n/* ── Wisps rising inside the panel, behind the logo ───────────────── */\n.tl-basin {\n  position: absolute;\n  bottom: 0;\n  left: 50%;\n  width: 150px;
194\n  height: 26px;\n  border-radius: 50%;\n  background: radial-gradient(ellipse, rgba(29,155,240,0.30) 0%, rgba(100,160,255,0.12) 60%, transparent 100%);\n  filter: blur(9px);\n  animation: tl-basin-pulse 4s ease-in-out infinite;\n  pointer-events: none;\n}\n@keyframes tl-basin-pulse {\n  0%, 100% { opacity: 0.5; transform: translateX(-50%) scaleX(1); }\n  50%      { opacity: 0.7; transform: translateX(-50%) scaleX(1.05); }\n}\n.tl-wisp { position: absolute; bottom: 4px; border-radius: 50%; filter: blur(4px); pointer-events: none; }\n.tl-wisp-1 { left: 42%; width: 11px; height: 17px; background: rgba(29,155,240,0.34);  animation: tl-rise-1 5.0s ease-out 0s   infinite; }\n.tl-wisp-2 { left: 33%; width: 8px;  height: 13px; background: rgba(214,232,255,0.55); animation: tl-rise-2 5.8s ease-out 0.9s infinite; }\n.tl-wisp-3 { left: 56%; width: 13px; height: 19px; background: rgba(60,160,255,0.30);  animation: tl-rise-3 5.4s ease-out 2.1s infinite; }\n.tl-wisp-4 { left: 62%; width: 7px;  height: 11px; background: rgba(220,236,255,0.50); animation: tl-rise-4 6.2s ease-out 3.0s infinite; }\n.tl-wisp-5 { left: 48%; width: 10px; height: 15px; background: rgba(29,155,240,0.28);  animation: tl-rise-5 5.6s ease-out 1.5s infinite; }\n@keyframes tl-rise-1 { 0% { opacity:0; transform:translate(0,0) scale(1); } 15% { opacity:0.7; } 85% { opacity:0.45; } 100% { opacity:0; transform:translate(7px,-104px) scale(0.34); } }\n@keyframes tl-rise-2 { 0% { opacity:0; transform:translate(0,0) scale(1); } 12% { opacity:0.62; } 88% { opacity:0.38; } 100% { opacity:0; transform:translate(-11px,-96px) scale(0.4); } }\n@keyframes tl-rise-3 { 0% { opacity:0; transform:translate(0,0) scale(1); } 18% { opacity:0.74; } 82% { opacity:0.48; } 100% { opacity:0; transform:translate(5px,-110px) scale(0.3); } }\n@keyframes tl-rise-4 { 0% { opacity:0; transform:translate(0,0) scale(1); } 14% { opacity:0.58; } 86% { opacity:0.36; } 100% { opacity:0; transform:translate(-8px,-92px) scale(0.42); } }\n@keyframes tl-rise-5 { 0% { opacity:0; transform:translate(0,0) scale(1); } 16% { opacity:0.68; } 84% { opacity:0.44; } 100% { opacity:0; transform:translate(12px,-100px) scale(0.36); } }\n\n/* ── Logo + indeterminate bar ─────────────────────────────────────── */\n.tl-logo { position: relative; z-index: 1; height: 30px; width: auto; animation: tl-logo-pulse 2.6s ease-in-out infinite; }\n@keyframes tl-logo-pulse { 0%, 100% { opacity: 0.92; } 50% { opacity: 0.6; } }\n.tl-logo--on-light { display: none; }\n\n.tl-bar {\n  position: relative;\n  z-index: 1;\n  width: 108px;\n  height: 3px;\n  border-radius: 999px;\n  background: rgba(255,255,255,0.08);\n  overflow: hidden;\n}\n.tl-bar::after {\n  content: '';\n  position: absolute;\n  inset: 0;\n  background: linear-gradient(90deg, transparent 0%, rgba(29,155,240,0.95) 50%, transparent 100%);\n  transform: translateX(-100%);\n  animation: tl-bar-sweep 1.4s ease-in-out infinite;\n}\n@keyframes tl-bar-sweep { 0% { transform: translateX(-100%); } 100% { transform: translateX(100%); } }\n\n/* ── Light theme ──────────────────────────────────────────────────────\n   The dark palette is invisible on #FAF8F6, so swap to the muted blue-greys\n   already tuned for light mode in PensieveWisps on the landing page. */\n:root[data-theme=\"light\"] .tl-logo--on-dark  { display: none; }\n:root[data-theme=\"light\"] .tl-logo--on-light { display: block; }\n:root[data-theme=\"light\"] .tl-panel {\n  background:\n    linear-gradient(rgba(255,255,255,0.72), rgba(255,255,255,0.72)) padding-box,\n    conic-gradient(from var(--tl-angle),\n      rgba(0,0,0,0.06) 0%,\n      rgba(0,0,0,0.06) 70%,\n      rgba(29,155,240,0.45) 85%,\n      rgba(0,0,0,0.06) 100%) border-box;\n  box-shadow: 0 24px 60px rgba(80,90,120,0.18);\n}\n:root[data-theme=\"light\"] .tl-bubble-1 { background: radial-gradient(circle, rgba(29,100,200,0.30) 0%, rgba(29,100,200,0.14) 42%, rgba(29,100,200,0.04) 66%, transparent 78%); }\n:root[data-theme=\"light\"] .tl-bubble-2 { background: radial-gradient(circle, rgba(60,120,210,0.24) 0%, rgba(60,120,210,0.11) 42%, rgba(60,120,210,0.03) 66%, transparent 78%); }\n:root[data-theme=\"light\"] .tl-bubble-3 { background: radial-gradient(circle, rgba(100,120,170,0.24) 0%, rgba(100,120,170,0.11) 42%, rgba(100,120,170,0.03) 66%, transparent 78%); }\n:root[data-theme=\"light\"] .tl-bubble-4 { background: radial-gradient(circle, rgba(29,100,200,0.26) 0%, rgba(29,100,200,0.12) 42%, rgba(29,100,200,0.03) 66%, transparent 78%); }\n:root[data-theme=\"light\"] .tl-bubble-5 { background: radial-gradient(circle, rgba(90,110,160,0.20) 0%, rgba(90,110,160,0.09) 42%, rgba(90,110,160,0.02) 66%, transparent 78%); }\n:root[data-theme=\"light\"] .tl-bubble-6 { background: radial-gradient(circle, rgba(29,100,200,0.22) 0%, rgba(29,100,200,0.10) 40%, rgba(29,100,200,0.02) 64%, transparent 76%); }\n:root[data-theme=\"light\"] .tl-basin { background: radial-gradient(ellipse, rgba(29,100,200,0.16) 0%, rgba(80,120,200,0.07) 60%, transparent 100%); }\n:root[data-theme=\"light\"] .tl-wisp-1 { background: rgba(29,100,200,0.20); }\n:root[data-theme=\"light\"] .tl-wisp-2 { background: rgba(110,130,175,0.24); }\n:root[data-theme=\"light\"] .tl-wisp-3 { background: rgba(60,120,210,0.18); }\n:root[data-theme=\"light\"] .tl-wisp-4 { background: rgba(100,120,170,0.22); }\n:root[data-theme=\"light\"] .tl-wisp-5 { background: rgba(29,100,200,0.17); }\n:root[data-theme=\"light\"] .tl-bar { background: rgba(0,0,0,0.07); }\n\n@media (prefers-reduced-motion: reduce) {\n  .tl-panel, .tl-basin, .tl-wisp, .tl-logo, .tl-bar::after {\n    animation: none !important;\n  }\n  .tl-bubble { animation: none !important; opacity: 0.3 !important; }\n  .tl-bar::after { transform: none; opacity: 0.5; }\n}\n"])</script>
194<script>self.__next_f.push([1,"8:[\"$\",\"div\",\"l\",{\"className\":\"tl-root\",\"style\":\"$undefined\",\"role\":\"status\",\"aria-live\":\"polite\",\"aria-label\":\"Loading Timeitt\",\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"$35\"}}],\"$L36\",\"$L37\",\"$L38\",\"$L39\",\"$L3a\",\"$L3b\",\"$L3c\"]}]\n9:[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$L3d\",null,{\"children\":\"$L3e\"}],null],[\"$\",\"$L3f\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$40\",null,{\"fallback\":null,\"children\":\"$L41\"}]}]}]]}]\n"])</script>
194<script>self.__next_f.push([1,"42:I[4431,[],\"OutletBoundary\"]\n44:I[5278,[],\"AsyncMetadataOutlet\"]\nc:[\"$\",\"li\",null,{\"children\":\"Calendar event IDs for reading sessions we create on your behalf\"}]\nd:[\"$\",\"h3\",null,{\"children\":\"2.5 Preference Data\"}]\ne:[\"$\",\"ul\",null,{\"children\":[[\"$\",\"li\",null,{\"children\":\"Timezone\"}],[\"$\",\"li\",null,{\"children\":\"Scheduling preferences (agenda type, preferred reading times, sessions per day)\"}],[\"$\",\"li\",null,{\"children\":\"Email notification preferences\"}]]}]\nf:[\"$\",\"h3\",null,{\"children\":\"2.6 Authentication Tokens\"}]\n10:[\"$\",\"ul\",null,{\"children\":[[\"$\",\"li\",null,{\"children\":\"Google OAuth refresh token (stored securely to maintain calendar access on your behalf)\"}],[\"$\",\"li\",null,{\"children\":\"Session JWT (short-lived authentication token)\"}]]}]\n11:[\"$\",\"h3\",null,{\"children\":\"2.7 Data We Do NOT Collect\"}]\n12:[\"$\",\"ul\",null,{\"children\":[[\"$\",\"li\",null,{\"children\":\"We do not read the content of your existing Google Calendar events\"}],[\"$\",\"li\",null,{\"children\":\"We do not collect your browsing history beyond X.com interactions with Timeitt\"}],[\"$\",\"li\",null,{\"children\":\"We do not collect your Google password\"}],[\"$\",\"li\",null,{\"children\":\"We do not sell or share personal data with third parties for advertising purposes\"}]]}]\n13:[\"$\",\"h2\",null,{\"children\":\"3. Legal Basis for Processing (GDPR Article 6)\"}]\n"])</script>
194<script>self.__next_f.push([1,"14:[\"$\",\"table\",null,{\"children\":[[\"$\",\"thead\",null,{\"children\":[\"$\",\"tr\",null,{\"children\":[[\"$\",\"th\",null,{\"children\":\"Processing Activity\"}],[\"$\",\"th\",null,{\"children\":\"Legal Basis\"}]]}]}],[\"$\",\"tbody\",null,{\"children\":[[\"$\",\"tr\",null,{\"children\":[[\"$\",\"td\",null,{\"children\":\"Account creation and authentication\"}],[\"$\",\"td\",null,{\"children\":\"Contract performance (Art. 6(1)(b))\"}]]}],[\"$\",\"tr\",null,{\"children\":[[\"$\",\"td\",null,{\"children\":\"Saving tweets and scheduling reading sessions\"}],[\"$\",\"td\",null,{\"children\":\"Contract performance (Art. 6(1)(b))\"}]]}],[\"$\",\"tr\",null,{\"children\":[[\"$\",\"td\",null,{\"children\":\"Google Calendar integration\"}],[\"$\",\"td\",null,{\"children\":\"Consent (Art. 6(1)(a)) — via explicit OAuth grant\"}]]}],[\"$\",\"tr\",null,{\"children\":[[\"$\",\"td\",null,{\"children\":\"Email notifications (digest, reminders, recap, nudges)\"}],[\"$\",\"td\",null,{\"children\":\"Legitimate interest (Art. 6(1)(f)) — service functionality\"}]]}],[\"$\",\"tr\",null,{\"children\":[[\"$\",\"td\",null,{\"children\":\"Storing refresh tokens for calendar access\"}],[\"$\",\"td\",null,{\"children\":\"Consent (Art. 6(1)(a)) — via explicit OAuth grant\"}]]}]]}]]}]\n"])</script>
194<script>self.__next_f.push([1,"15:[\"$\",\"h2\",null,{\"children\":\"4. How We Use Your Data\"}]\n16:[\"$\",\"ul\",null,{\"children\":[[\"$\",\"li\",null,{\"children\":\"To provide the core Service: saving tweets, scheduling reading sessions, and creating Google Calendar events\"}],[\"$\",\"li\",null,{\"children\":\"To send email notifications you have opted into (digest, reminders, weekly recap, nudges)\"}],[\"$\",\"li\",null,{\"children\":\"To maintain your authenticated session across the extension and Telegram bot\"}],[\"$\",\"li\",null,{\"children\":\"To improve the Service (aggregate, anonymized usage patterns only)\"}]]}]\n17:[\"$\",\"h2\",null,{\"children\":\"5. Data Storage and Security\"}]\n"])</script>
194<script>self.__next_f.push([1,"18:[\"$\",\"ul\",null,{\"children\":[[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Database:\"}],\" Your data is stored in a PostgreSQL database hosted by Neon (serverless PostgreSQL) in the United States. Neon complies with SOC 2 Type II standards.\"]}],[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Backend:\"}],\" API routes are hosted on Vercel (serverless functions) with data centers in the United States.\"]}],[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Encryption:\"}],\" All data in transit is encrypted via TLS/HTTPS. Database connections use SSL.\"]}],[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Access:\"}],\" Only the data controller has administrative access to the database and infrastructure.\"]}]]}]\n"])</script>
194<script>self.__next_f.push([1,"19:[\"$\",\"h3\",null,{\"children\":\"5.1 International Data Transfers\"}]\n1a:[\"$\",\"p\",null,{\"children\":\"Your data is processed in the United States by our infrastructure providers (Vercel, Neon). These transfers are protected under the EU-U.S. Data Privacy Framework and Standard Contractual Clauses (SCCs) where applicable. By using the Service, you acknowledge this transfer.\"}]\n1b:[\"$\",\"h2\",null,{\"children\":\"6. Data Retention\"}]\n"])</script>
194<script>self.__next_f.push([1,"1c:[\"$\",\"ul\",null,{\"children\":[[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Account data:\"}],\" Retained while your account is active. Deleted upon account deletion.\"]}],[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Saved tweets and reading sessions:\"}],\" Retained while your account is active. Deleted upon account deletion.\"]}],[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Authentication tokens:\"}],\" Refresh tokens are retained while your calendar is connected. Revoked upon calendar disconnection or account deletion.\"]}],[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Email logs:\"}],\" Timestamp-only deduplication records (e.g., \\\"last digest sent at\\\"). Deleted upon account deletion.\"]}]]}]\n"])</script>
194<script>self.__next_f.push([1,"1d:[\"$\",\"p\",null,{\"children\":\"When you delete your account, all personal data is permanently deleted from our database, including saved tweets, reading sessions, and authentication tokens. Google Calendar events created by Timeitt are also deleted from your calendar.\"}]\n1e:[\"$\",\"h2\",null,{\"children\":\"7. Your Rights (GDPR Articles 15–22)\"}]\n1f:[\"$\",\"p\",null,{\"children\":\"As an EU resident, you have the following rights:\"}]\n"])</script>
194<script>self.__next_f.push([1,"20:[\"$\",\"ul\",null,{\"children\":[[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Right of access\"}],\" (Art. 15) — Request a copy of your personal data\"]}],[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Right to rectification\"}],\" (Art. 16) — Request correction of inaccurate data\"]}],[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Right to erasure\"}],\" (Art. 17) — Request deletion of your data (\\\"right to be forgotten\\\"). You can do this directly via the extension's Settings → Delete Account, or by contacting us.\"]}],[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Right to restriction\"}],\" (Art. 18) — Request restriction of processing\"]}],[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Right to data portability\"}],\" (Art. 20) — Request your data in a structured, machine-readable format. You can export all your data at any time via the extension Settings or by contacting us.\"]}],[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Right to object\"}],\" (Art. 21) — Object to processing based on legitimate interest\"]}],[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Right to withdraw consent\"}],\" (Art. 7(3)) — Withdraw consent at any time (e.g., disconnect Google Calendar, disable email notifications)\"]}]]}]\n"])</script>
194<script>self.__next_f.push([1,"21:[\"$\",\"p\",null,{\"children\":[\"To exercise any of these rights, email us at\",\" \",[\"$\",\"a\",null,{\"href\":\"mailto:[email protected]\",\"children\":\"[email protected]\"}],\". We will respond within 30 days.\"]}]\n22:[\"$\",\"p\",null,{\"children\":[\"You also have the right to lodge a complaint with the Spanish Data Protection Agency (AEPD) at \",[\"$\",\"a\",null,{\"href\":\"https://www.aepd.es\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"www.aepd.es\"}],\", or with any EU supervisory authority.\"]}]\n23:[\"$\",\"h2\",null,{\"children\":\"8. Recipients \u0026 Data Sharing\"}]\n24:[\"$\",\"p\",null,{\"children\":\"Timeitt shares your data only with the following third-party service providers, strictly for the purposes of operating the Service. We do not sell, rent, or share your personal data with any third party for marketing or advertising purposes.\"}]\n"])</script>
194<script>self.__next_f.push([1,"25:[\"$\",\"ul\",null,{\"children\":[[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Google (OAuth, Calendar API):\"}],\" Authentication and calendar event management. Receives your Google account data and calendar free/busy information. Subject to\",\" \",[\"$\",\"a\",null,{\"href\":\"https://policies.google.com/privacy\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"Google's Privacy Policy\"}],\".\"]}],[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Telegram (Bot API):\"}],\" Message handling for the Telegram bot. Receives your Telegram chat ID and message content. Subject to\",\" \",[\"$\",\"a\",null,{\"href\":\"https://telegram.org/privacy\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"Telegram's Privacy Policy\"}],\".\"]}],[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Resend (Email delivery):\"}],\" Transactional email delivery. Receives your email address and notification content. Subject to\",\" \",[\"$\",\"a\",null,{\"href\":\"https://resend.com/legal/privacy-policy\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"Resend's Privacy Policy\"}],\".\"]}],[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Vercel (Hosting):\"}],\" Serverless infrastructure hosting our API and web pages. Processes all requests to the Service. Subject to\",\" \",[\"$\",\"a\",null,{\"href\":\"https://vercel.com/legal/privacy-policy\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"Vercel's Privacy Policy\"}],\".\"]}],[\"$\",\"li\",null,{\"children\":[[\"$\",\"strong\",null,{\"children\":\"Neon (Database):\"}],\" PostgreSQL database hosting. Stores all user data described in Section 2. Subject to\",\" \",[\"$\",\"a\",null,{\"href\":\"https://neon.tech/privacy\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":\"Neon's Privacy Policy\"}],\".\"]}]]}]\n"])</script>
194<script>self.__next_f.push([1,"26:[\"$\",\"h2\",null,{\"children\":\"9. Analytics\"}]\n27:[\"$\",\"p\",null,{\"children\":\"We collect anonymized usage events (e.g., \\\"tweet saved\\\", \\\"session scheduled\\\") to understand how the Service is used and to improve it. Analytics events may include a user identifier but do not contain tweet content, email addresses, or other personal information beyond what is necessary to aggregate usage patterns. Analytics data is retained for 90 days and then permanently deleted.\"}]\n28:[\"$\",\"h2\",null,{\"children\":\"10. Cookies and Local Storage\"}]\n29:[\"$\",\"p\",null,{\"children\":[\"The Timeitt Chrome extension uses \",[\"$\",\"code\",null,{\"children\":\"chrome.storage.local\"}],\" to store your authentication state, saved tweets, and preferences locally on your device. This is not shared with any third party and is not accessible to websites you visit.\"]}]\n2a:[\"$\",\"p\",null,{\"children\":\"The Timeitt backend does not use cookies.\"}]\n2b:[\"$\",\"h2\",null,{\"children\":\"11. Children's Privacy\"}]\n2c:[\"$\",\"p\",null,{\"children\":\"Timeitt is not directed at children under 16 years of age. We do not knowingly collect personal data from children. If you believe a child has provided us with personal data, please contact us and we will delete it.\"}]\n2d:[\"$\",\"h2\",null,{\"children\":\"12. Intellectual Property\"}]\n2e:[\"$\",\"p\",null,{\"children\":\"The Timeitt name, logo, software, and all associated intellectual property are owned by Jose Maria Trave Villalba. All rights reserved.\"}]\n"])</script>
194<script>self.__next_f.push([1,"2f:[\"$\",\"ul\",null,{\"children\":[[\"$\",\"li\",null,{\"children\":\"The Service software, design, and documentation are protected by copyright law.\"}],[\"$\",\"li\",null,{\"children\":\"You may not copy, modify, distribute, reverse-engineer, or create derivative works of the Service without prior written consent.\"}],[\"$\",\"li\",null,{\"children\":\"Tweet content saved through the Service remains the intellectual property of the original authors. Timeitt stores this content solely to provide the Service to you and does not claim ownership over it.\"}],[\"$\",\"li\",null,{\"children\":\"\\\"X\\\", \\\"Twitter\\\", and related marks are trademarks of X Corp. \\\"Google\\\", \\\"Google Calendar\\\", and related marks are trademarks of Google LLC. \\\"Telegram\\\" is a trademark of Telegram FZ-LLC. Timeitt is not affiliated with, endorsed by, or sponsored by any of these companies.\"}]]}]\n"])</script>
194<script>self.__next_f.push([1,"30:[\"$\",\"h2\",null,{\"children\":\"13. Changes to This Policy\"}]\n31:[\"$\",\"p\",null,{\"children\":\"We may update this Privacy Policy from time to time. If we make material changes, we will notify you via email or through the Service. The \\\"Last updated\\\" date at the top indicates when the policy was last revised.\"}]\n32:[\"$\",\"hr\",null,{}]\n33:[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"0.85rem\",\"color\":\"#71767b\"},\"children\":[\"If you have any questions, concerns, or requests regarding this Privacy Policy, contact us at \",[\"$\",\"a\",null,{\"href\":\"mailto:[email protected]\",\"children\":\"[email protected]\"}],\".\"]}]\n34:[\"$\",\"$L42\",null,{\"children\":[\"$L43\",[\"$\",\"$L44\",null,{\"promise\":\"$@45\"}]]}]\n36:[\"$\",\"div\",null,{\"className\":\"tl-bubble tl-bubble-1\"}]\n37:[\"$\",\"div\",null,{\"className\":\"tl-bubble tl-bubble-2\"}]\n38:[\"$\",\"div\",null,{\"className\":\"tl-bubble tl-bubble-3\"}]\n39:[\"$\",\"div\",null,{\"className\":\"tl-bubble tl-bubble-4\"}]\n3a:[\"$\",\"div\",null,{\"className\":\"tl-bubble tl-bubble-5\"}]\n3b:[\"$\",\"div\",null,{\"className\":\"tl-bubble tl-bubble-6\"}]\n3c:[\"$\",\"div\",null,{\"className\":\"tl-panel\",\"children\":[[\"$\",\"div\",null,{\"className\":\"tl-basin\"}],[\"$\",\"div\",null,{\"className\":\"tl-wisp tl-wisp-1\"}],[\"$\",\"div\",null,{\"className\":\"tl-wisp tl-wisp-2\"}],[\"$\",\"div\",null,{\"className\":\"tl-wisp tl-wisp-3\"}],[\"$\",\"div\",null,{\"className\":\"tl-wisp tl-wisp-4\"}],[\"$\",\"div\",null,{\"className\":\"tl-wisp tl-wisp-5\"}],[\"$\",\"img\",null,{\"src\":\"/logo.svg\",\"alt\":\"Timeitt\",\"className\":\"tl-logo tl-logo--on-dark\"}],[\"$\",\"img\",null,{\"src\":\"/logoDark.svg\",\"alt\":\"\",\"aria-hidden\":\"true\",\"className\":\"tl-logo tl-logo--on-light\"}],[\"$\",\"div\",null,{\"className\":\"tl-bar\"}]]}]\n"])</script>
194<script>self.__next_f.push([1,"3e:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, viewport-fit=cover\"}]]\n"])</script>
194<script>self.__next_f.push([1,"43:null\n"])</script>
194<script>self.__next_f.push([1,"45:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Privacy Policy — Timeitt\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Save tweets from X with one click. Timeitt auto-schedules them into Stories on your Google Calendar.\"}],[\"$\",\"meta\",\"2\",{\"property\":\"og:title\",\"content\":\"Privacy Policy — Timeitt\"}],[\"$\",\"meta\",\"3\",{\"property\":\"og:description\",\"content\":\"Save tweets from X with one click. Timeitt auto-schedules them into Stories on your Google Calendar.\"}],[\"$\",\"meta\",\"4\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"5\",{\"name\":\"twitter:title\",\"content\":\"Privacy Policy — Timeitt\"}],[\"$\",\"meta\",\"6\",{\"name\":\"twitter:description\",\"content\":\"Save tweets from X with one click. Timeitt auto-schedules them into Stories on your Google Calendar.\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script>
194<script>self.__next_f.push([1,"41:\"$45:metadata\"\n"])</script>
194</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.