# DataPrivacy

> Your data rights. Request a copy of your data and follow it until it is ready to download, delete the account with a grace period, and the public page that cancels a scheduled deletion.

Source: https://docs.nasaqui.com/components/data-privacy

## Install

```bash
npx shadcn@latest add https://docs.nasaqui.com/r/data-privacy.json
```

The privacy page of account settings, and the email link that goes with it. Two flows: export a copy of
everything, and delete the account after a grace period so a mistake can be undone.

## When to use

- The privacy or "Your data" page of account settings.
- The landing page of the "cancel deletion" link in the reminder email (`CancelDeletionPage`).

## When not to use

- Exporting rows of a table: use `ExportButton`.
- Deleting a workspace: use `WorkspaceSettings`.

## Import

```tsx
import { DataPrivacy, CancelDeletionPage } from "@fadymondy/nasaq/web";
```

## Quick start

```tsx
<DataPrivacy
  dataExport={{
    request: latestExport,
    onRequest: () => api.requestExport(),
    poll: (id) => api.getExport(id),
    onDownload: (r) => window.open(r.url),
    includes: ["Profile", "Activity", "Files"],
  }}
  deletion={{
    scheduledFor: account.deleteAt,
    graceDays: 30,
    confirmText: account.email,
    onSchedule: () => api.scheduleDeletion(),
    onCancel: () => api.cancelDeletion(),
  }}
/>

<CancelDeletionPage state="ready" account={account} scheduledFor={date} onCancelDeletion={() => api.cancelWithToken(token)} />
```

## Anatomy

```
DataPrivacy                       data-slot="data-privacy"
├─ DataExport                        data-slot="data-export", data-status
│  └─ status card                    badge, progress, dates, Download
└─ AccountDeletion                   data-slot="account-deletion", data-phase (none, pending, due)
   ├─ none: DangerZone with the confirm text
   └─ pending: date, days left, grace progress, Cancel deletion

CancelDeletionPage                data-slot="cancel-deletion-page", data-state (ready, cancelled, expired, invalid)
```

## API

### DataExport

| Prop | Type | Description |
| --- | --- | --- |
| `request` | `DataExportRequest \| null` | `{ id, status, requestedAt, completedAt?, expiresAt?, sizeBytes?, progress? }`; status is `queued`, `processing`, `ready`, `failed` or `expired`. |
| `onRequest` | `() => Promise<{ request } \| { error }>` | |
| `poll` | `(id) => Promise<DataExportRequest>` | Called on a backing-off timer (3 s, growing to 30 s) while queued or processing. Three failures in a row stop it and offer "Check again". |
| `onChange` | `(request) => void` | Every new state, to store it. |
| `onDownload` | `(request) => void \| Promise<void>` | Shows Download on ready exports. |
| `includes` | `string[]` | What the file contains. |

### AccountDeletion

| Prop | Type | Description |
| --- | --- | --- |
| `scheduledFor` | date or `null` | When it will be deleted. |
| `graceDays` | `number` | Default 30. |
| `confirmText` | `string` | What to type, usually the email. |
| `onSchedule` | `() => Promise<void \| { scheduledFor? }>` | |
| `onCancel` | `() => Promise<void \| { error? }>` | |

### CancelDeletionPage

`state`, `account?`, `scheduledFor?`, `onCancelDeletion`, `onSignIn?`, `onSignUp?`, `onGoHome?`, `bare?`, plus `AuthLayout` props.

## Accessibility

Export status is a polite live region and is written out, not only coloured. Progress has an accessible name.
Scheduling deletion needs the confirm text typed.

## RTL & i18n

Built-in English and Arabic. File sizes and emails stay left-to-right; dates use the locale.

## Styling & tokens

Built on `SettingsSection`, `DangerZone`, `Progress` and `AuthLayout`.

## Do / Don't

- Do check the cancel token on the server and keep the grace period on the server clock.
- Do not delete anything before the date; sign the person out and hide the account instead.

## Related

- [AccountSettings](https://docs.nasaqui.com/components/account-settings)
- [ExportButton](https://docs.nasaqui.com/components/export-action)

## Lab

https://docs.nasaqui.com/?path=/docs/components-security-data-privacy--docs

## Code

### React

```tsx
<DataPrivacy
  dataExport={{
    request: latestExport,
    onRequest: () => api.requestExport(),
    poll: (id) => api.getExport(id),
    onDownload: (r) => window.open(r.url),
    includes: ["Profile", "Activity", "Files"],
  }}
  deletion={{
    scheduledFor: account.deleteAt,
    graceDays: 30,
    confirmText: account.email,
    onSchedule: () => api.scheduleDeletion(),
    onCancel: () => api.cancelDeletion(),
  }}
/>

<CancelDeletionPage state="ready" account={account} scheduledFor={date} onCancelDeletion={() => api.cancelWithToken(token)} />
```

### shadcn

```tsx
<DataPrivacy
  dataExport={{
    request: latestExport,
    onRequest: () => api.requestExport(),
    poll: (id) => api.getExport(id),
    onDownload: (r) => window.open(r.url),
    includes: ["Profile", "Activity", "Files"],
  }}
  deletion={{
    scheduledFor: account.deleteAt,
    graceDays: 30,
    confirmText: account.email,
    onSchedule: () => api.scheduleDeletion(),
    onCancel: () => api.cancelDeletion(),
  }}
/>

<CancelDeletionPage state="ready" account={account} scheduledFor={date} onCancelDeletion={() => api.cancelWithToken(token)} />
```

### Vue

```vue
<script setup lang="ts">
import { NqAccountDeletion, NqCancelDeletionPage, NqDataPrivacy, type DataExportRequest } from "@fadymondy/nasaq/vue";
import { ref } from "vue";

// A frozen clock keeps the countdown the same on every render.
const now = new Date(2026, 8, 29, 9, 0, 0);
const latest = ref<DataExportRequest>({
  id: "exp_1",
  status: "ready",
  requestedAt: new Date(2026, 8, 28, 9, 0, 0),
  completedAt: new Date(2026, 8, 28, 9, 12, 0),
  expiresAt: new Date(2026, 9, 5, 9, 0, 0),
  sizeBytes: 48_300_000,
});
const scheduled = new Date(2026, 9, 14, 9, 0, 0);
const noop = async () => undefined;
</script>

<template>
  <div class="flex flex-col gap-10">
    <NqDataPrivacy
      :data-export="{
        request: latest,
        onRequest: async () => ({ request: { ...latest, id: 'exp_2', status: 'queued' as const } }),
        onDownload: noop,
        includes: ['Profile', 'Activity', 'Files'],
      }"
      :deletion="{ scheduledFor: null, graceDays: 30, confirmText: 'sara@sahab.studio', onSchedule: noop, onCancel: noop, now }"
    />
    <NqAccountDeletion :scheduled-for="scheduled" :grace-days="30" confirm-text="sara@sahab.studio" :on-schedule="noop" :on-cancel="noop" :now="now" />
    <NqCancelDeletionPage
      bare
      state="ready"
      :account="{ name: 'Sara Haddad', email: 'sara@sahab.studio' }"
      :scheduled-for="scheduled"
      :on-cancel-deletion="noop"
    />
  </div>
</template>
```

### Blade

```blade
@php
    $request = [
        'id' => 'exp_1', 'status' => 'ready', 'requestedAt' => '2026-09-28T09:00:00', 'completedAt' => '2026-09-28T09:12:00',
        'expiresAt' => '2026-10-05T09:00:00', 'sizeBytes' => 48300000,
    ];
@endphp
<div class="flex flex-col gap-10">
    <x-nq::data-privacy :request="$request" can-request can-download poll :includes="['Profile', 'Activity', 'Files']" :grace-days="30" confirm-text="sara@sahab.studio" now="2026-09-29T09:00:00" />
    <x-nq::data-privacy :scheduled-for="'2026-10-14T09:00:00'" confirm-text="sara@sahab.studio" now="2026-09-29T09:00:00" />
    <x-nq::data-privacy.cancel-page bare state="ready" :account="['name' => 'Sara Haddad', 'email' => 'sara@sahab.studio']" scheduled-for="2026-10-14T09:00:00" sign-in-href="/sign-in" />
</div>
```

### HTML + Alpine

```html
<div class="flex flex-col gap-10">
    <div data-slot="data-privacy" x-data="nqDataPrivacy(JSON.parse('{\u0022request\u0022:{\u0022id\u0022:\u0022exp_1\u0022,\u0022status\u0022:\u0022ready\u0022,\u0022requestedAt\u0022:\u00222026-09-28T09:00:00+00:00\u0022,\u0022completedAt\u0022:\u00222026-09-28T09:12:00+00:00\u0022,\u0022expiresAt\u0022:\u00222026-10-05T09:00:00+00:00\u0022,\u0022sizeBytes\u0022:48300000},\u0022canRequest\u0022:true,\u0022canDownload\u0022:true,\u0022poll\u0022:true,\u0022interval\u0022:3000,\u0022scheduledFor\u0022:null,\u0022graceDays\u0022:30,\u0022now\u0022:\u00222026-09-29T09:00:00+00:00\u0022,\u0022locale\u0022:\u0022en\u0022,\u0022labels\u0022:{\u0022exportTitle\u0022:\u0022Export your data\u0022,\u0022exportBody\u0022:\u0022Get a copy of everything we hold about you, as a file you can keep or move elsewhere.\u0022,\u0022includes\u0022:\u0022The file includes\u0022,\u0022request\u0022:\u0022Request export\u0022,\u0022requesting\u0022:\u0022Requesting\u0022,\u0022status\u0022:{\u0022queued\u0022:\u0022Waiting in line\u0022,\u0022processing\u0022:\u0022Preparing your file\u0022,\u0022ready\u0022:\u0022Ready to download\u0022,\u0022failed\u0022:\u0022Failed\u0022,\u0022expired\u0022:\u0022Expired\u0022},\u0022requestedAt\u0022:\u0022Requested\u0022,\u0022readyAt\u0022:\u0022Ready\u0022,\u0022size\u0022:\u0022Size\u0022,\u0022expiresAt\u0022:\u0022Download available until\u0022,\u0022download\u0022:\u0022Download\u0022,\u0022downloading\u0022:\u0022Downloading\u0022,\u0022requestAgain\u0022:\u0022Request a new export\u0022,\u0022retryCheck\u0022:\u0022Check again\u0022,\u0022emailNote\u0022:\u0022We also email you when it is ready. This can take a few minutes.\u0022,\u0022failedBody\u0022:\u0022The export could not be prepared. Try again.\u0022,\u0022expiredBody\u0022:\u0022This export is no longer available. Request a new one.\u0022,\u0022checkFailed\u0022:\u0022We could not check the status. It may still be running.\u0022,\u0022requestFailed\u0022:\u0022The export could not be requested. Try again.\u0022,\u0022downloadFailed\u0022:\u0022The download did not start. Try again.\u0022,\u0022progressLabel\u0022:\u0022Export progress\u0022,\u0022deleteTitle\u0022:\u0022Delete account\u0022,\u0022deleteHeading\u0022:\u0022Delete your account\u0022,\u0022deleteBody\u0022:\u0022Your account and its data are permanently deleted after {days} days. Until then you can sign in and cancel.\u0022,\u0022deleteButton\u0022:\u0022Delete my account\u0022,\u0022deleteConfirmTitle\u0022:\u0022Delete your account?\u0022,\u0022deleteConfirmBody\u0022:\u0022You are signed out everywhere. After {days} days everything is removed for good. You can cancel any time before then.\u0022,\u0022deletePrompt\u0022:\u0022Type {text} to confirm\u0022,\u0022deleteAction\u0022:\u0022Schedule deletion\u0022,\u0022cancel\u0022:\u0022Cancel\u0022,\u0022deleteFailed\u0022:\u0022The deletion could not be scheduled. Try again.\u0022,\u0022scheduledTitle\u0022:\u0022Your account is scheduled for deletion\u0022,\u0022scheduledOn\u0022:\u0022It will be deleted on\u0022,\u0022daysLeft\u0022:\u0022{n} days left\u0022,\u0022lessThanDay\u0022:\u0022Less than a day left\u0022,\u0022scheduledBody\u0022:\u0022Everything is removed for good on that date. Cancel now to keep your account exactly as it is.\u0022,\u0022cancelDeletion\u0022:\u0022Cancel deletion\u0022,\u0022cancelling\u0022:\u0022Cancelling\u0022,\u0022cancelFailed\u0022:\u0022Deletion could not be cancelled. Try again.\u0022,\u0022cancelledOk\u0022:\u0022Deletion cancelled. Your account stays as it was.\u0022,\u0022dueTitle\u0022:\u0022Your account is being deleted\u0022,\u0022dueBody\u0022:\u0022The grace period has ended. It can no longer be cancelled here. Contact support if this is a mistake.\u0022,\u0022graceProgress\u0022:\u0022Grace period used\u0022,\u0022pageReadyTitle\u0022:\u0022Keep your account?\u0022,\u0022pageReadyBody\u0022:\u0022Your account is scheduled for deletion on {date}. Cancel it and nothing is lost.\u0022,\u0022keep\u0022:\u0022Keep my account\u0022,\u0022pageDoneTitle\u0022:\u0022Your account is safe\u0022,\u0022pageDoneBody\u0022:\u0022The deletion was cancelled. You can sign in as usual.\u0022,\u0022pageExpiredTitle\u0022:\u0022This account has been deleted\u0022,\u0022pageExpiredBody\u0022:\u0022The grace period ended and the data was removed. It cannot be recovered. You can create a new account any time.\u0022,\u0022pageInvalidTitle\u0022:\u0022This link does not work\u0022,\u0022pageInvalidBody\u0022:\u0022It may be wrong, already used, or from an older request. Sign in to check your account.\u0022,\u0022signIn\u0022:\u0022Sign in\u0022,\u0022signUp\u0022:\u0022Create a new account\u0022,\u0022goHome\u0022:\u0022Go to the home page\u0022,\u0022daysLeftOne\u0022:\u00221 day left\u0022}}'))" class="flex flex-col gap-6">
    <div role="region" aria-labelledby="nq-settings-section-4a7ccac4-title" data-slot="data-export" data-tone="default"
    data-status="ready" x-bind:data-status="status || &#039;none&#039;" class="flex flex-col rounded-card border border-border bg-card py-4 text-card-foreground gap-5">
    <div data-slot="card-header" class="grid auto-rows-min items-start gap-1 px-4 has-data-[slot=card-action]:grid-cols-[1fr_auto]"><h2 data-slot="card-title" id="nq-settings-section-4a7ccac4-title" class="text-foreground text-h3">Export your data</h2>
        <div data-slot="card-description" class="text-body-sm text-muted-foreground">Get a copy of everything we hold about you, as a file you can keep or move elsewhere.</div>
        <div data-slot="card-action" class="col-start-2 row-span-2 row-start-1 self-start justify-self-end"><button data-slot="button"
     type="button"                         x-show="canAsk" style="display: none" x-on:click="ask()" x-bind:disabled="busy === &#039;request&#039;" x-bind:aria-busy="busy === &#039;request&#039; ? &#039;true&#039; : null" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary text-primary-foreground hover:bg-[color-mix(in_oklab,var(--nq-action)_88%,var(--nq-fg))] h-control px-[var(--nq-control-pad)]">
        <template x-if="busy === 'request'"><svg data-slot="spinner" aria-hidden="true" class="size-4 animate-spin motion-reduce:animate-none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M21 12a9 9 0 1 1-6.219-8.56"/>
</svg></template>
                    <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M13.659 22H18a2 2 0 0 0 2-2V8a2.4 2.4 0 0 0-.706-1.706l-3.588-3.588A2.4 2.4 0 0 0 14 2H6a2 2 0 0 0-2 2v11.5"/>
  <path d="M14 2v5a1 1 0 0 0 1 1h5"/>
  <path d="M8 12v-1"/>
  <path d="M8 18v-2"/>
  <path d="M8 7V6"/>
  <circle cx="8" cy="20" r="2"/>
</svg>                    <span x-text="req ? config.labels.requestAgain : config.labels.request">Request a new export</span></button></div></div>
    <div data-slot="card-content" class="px-4"><div class="flex flex-col gap-4">
                            <div class="flex flex-col gap-1.5">
                    <span class="text-label text-foreground">The file includes</span>
                    <ul class="list-disc ps-5 text-body-sm text-muted-foreground">
                        <li>Profile</li><li>Activity</li><li>Files</li>                    </ul>
                </div>
            <template x-if="error">
                <div data-slot="alert" data-tone="danger" role="alert"
     x-data="nqAlert()" x-modelable="open" x-show="open"     x-on:nq:dismiss="error = null" class="relative grid grid-cols-[auto_1fr_auto] items-start gap-x-3 rounded-card border p-3 text-start border-nq-danger/30 bg-nq-danger-soft">
    <svg aria-hidden="true" data-slot="alert-icon" class="mt-0.5 size-4 text-nq-danger-text" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <circle cx="12" cy="12" r="10"/>
  <path d="m15 9-6 6"/>
  <path d="m9 9 6 6"/>
</svg>    <div data-slot="alert-body" class="flex min-w-0 flex-col gap-0.5">
                            <div data-slot="alert-description" class="text-body-sm text-foreground"><span x-text="error"></span></div>
            </div>
            <div data-slot="alert-actions" class="ms-3 flex items-center gap-1">
                            <button data-slot="button"
     type="button"                         aria-label="Dismiss" x-on:click="dismiss()" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 hover:bg-nq-hover size-control-sm p-0 text-muted-foreground [&_svg]:size-3.5">
        <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M18 6 6 18"/>
  <path d="m6 6 12 12"/>
</svg></button>
                    </div>
    </div>
            </template>
            <div class="flex flex-col gap-3 rounded-card border border-border p-4" data-slot="data-export-status" x-show="req" >
                <div class="flex flex-wrap items-center justify-between gap-3">
                    <div class="flex items-center gap-2" role="status" aria-live="polite">
                                                    <span data-slot="badge"  style="display: none"     x-show="status === &#039;queued&#039;" class="inline-flex h-5 shrink-0 items-center gap-1 whitespace-nowrap rounded-[4px] border px-1.5 text-caption font-medium [&_svg]:size-3 border-nq-info/40 bg-nq-info-soft text-nq-info-text"><svg aria-hidden="true" class="motion-safe:animate-spin" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"/>
  <path d="M21 3v5h-5"/>
  <path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"/>
  <path d="M8 16H3v5"/>
</svg>                                <span x-text="statusLabel"></span></span>
                                                    <span data-slot="badge"  style="display: none"     x-show="status === &#039;processing&#039;" class="inline-flex h-5 shrink-0 items-center gap-1 whitespace-nowrap rounded-[4px] border px-1.5 text-caption font-medium [&_svg]:size-3 border-nq-info/40 bg-nq-info-soft text-nq-info-text"><svg aria-hidden="true" class="motion-safe:animate-spin" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"/>
  <path d="M21 3v5h-5"/>
  <path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"/>
  <path d="M8 16H3v5"/>
</svg>                                <span x-text="statusLabel"></span></span>
                                                    <span data-slot="badge"     x-show="status === &#039;ready&#039;" class="inline-flex h-5 shrink-0 items-center gap-1 whitespace-nowrap rounded-[4px] border px-1.5 text-caption font-medium [&_svg]:size-3 border-nq-success/40 bg-nq-success-soft text-nq-success-text"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <circle cx="12" cy="12" r="10"/>
  <path d="m9 12 2 2 4-4"/>
</svg>                                <span x-text="statusLabel">Ready to download</span></span>
                                                    <span data-slot="badge"  style="display: none"     x-show="status === &#039;failed&#039;" class="inline-flex h-5 shrink-0 items-center gap-1 whitespace-nowrap rounded-[4px] border px-1.5 text-caption font-medium [&_svg]:size-3 border-nq-danger/40 bg-nq-danger-soft text-nq-danger-text"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <circle cx="12" cy="12" r="10"/>
  <line x1="12" x2="12" y1="8" y2="12"/>
  <line x1="12" x2="12.01" y1="16" y2="16"/>
</svg>                                <span x-text="statusLabel"></span></span>
                                                    <span data-slot="badge"  style="display: none"     x-show="status === &#039;expired&#039;" class="inline-flex h-5 shrink-0 items-center gap-1 whitespace-nowrap rounded-[4px] border px-1.5 text-caption font-medium [&_svg]:size-3 border-border bg-secondary text-foreground"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <circle cx="12" cy="12" r="10"/>
  <path d="M12 6v6l4 2"/>
</svg>                                <span x-text="statusLabel"></span></span>
                                            </div>
                                            <button data-slot="button"
     type="button"                         x-show="canDownload" x-on:click="download()" x-bind:disabled="busy === &#039;download&#039;" x-bind:aria-busy="busy === &#039;download&#039; ? &#039;true&#039; : null" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary text-primary-foreground hover:bg-[color-mix(in_oklab,var(--nq-action)_88%,var(--nq-fg))] h-control px-[var(--nq-control-pad)]">
        <template x-if="busy === 'download'"><svg data-slot="spinner" aria-hidden="true" class="size-4 animate-spin motion-reduce:animate-none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M21 12a9 9 0 1 1-6.219-8.56"/>
</svg></template>
                            <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M12 15V3"/>
  <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/>
  <path d="m7 10 5 5 5-5"/>
</svg>                            Download
                            <span class="opacity-80" x-show="sizeText" >(<bdi dir="ltr" x-text="sizeText">46.1 MB</bdi>)</span></button>
                                    </div>
                <div class="flex flex-col gap-3" x-show="isActive"  style="display: none" >
                    <div data-slot="progress" role="progressbar" aria-label="Export progress" aria-valuemin="0" aria-valuemax="100"
                        x-bind:aria-valuenow="progressValue" x-bind:data-indeterminate="progressValue === null ? '' : null" class="flex w-full flex-col gap-1.5">
                        <div class="relative block h-1 w-full overflow-hidden rounded-full bg-nq-surface-soft">
                            <div class="block h-full rounded-full bg-primary transition-[width] duration-300 ease-nq motion-reduce:transition-none"
                                x-bind:class="progressValue === null ? 'w-full motion-safe:animate-pulse' : ''"
                                x-bind:style="progressValue === null ? '' : 'width:' + progressValue + '%'" style="inset-inline-start:0;"></div>
                        </div>
                    </div>
                    <p class="text-caption text-muted-foreground">We also email you when it is ready. This can take a few minutes.</p>
                </div>
                <p class="text-body-sm text-nq-danger-text" x-show="status === 'failed'"  style="display: none" >The export could not be prepared. Try again.</p>
                <p class="text-body-sm text-muted-foreground" x-show="status === 'expired'"  style="display: none" >This export is no longer available. Request a new one.</p>
                <div data-slot="alert" data-tone="warning" role="alert"
        x-show="stalled" style="display: none" class="relative grid grid-cols-[auto_1fr_auto] items-start gap-x-3 rounded-card border p-3 text-start border-nq-warning/30 bg-nq-warning-soft">
    <svg aria-hidden="true" data-slot="alert-icon" class="mt-0.5 size-4 text-nq-warning-text" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <circle cx="12" cy="12" r="10"/>
  <line x1="12" x2="12" y1="8" y2="12"/>
  <line x1="12" x2="12.01" y1="16" y2="16"/>
</svg>    <div data-slot="alert-body" class="flex min-w-0 flex-col gap-0.5">
                            <div data-slot="alert-description" class="text-body-sm text-foreground">We could not check the status. It may still be running.</div>
            </div>
            <div data-slot="alert-actions" class="ms-3 flex items-center gap-1">
            <button data-slot="button"
     type="button"                         x-on:click="recheck()" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border-border bg-card text-foreground hover:bg-nq-hover h-control-sm px-2.5">
        Check again</button>
                    </div>
    </div>
                <dl class="grid grid-cols-[auto_minmax(0,1fr)] gap-x-6 gap-y-1 text-body-sm">
                    <dt class="text-muted-foreground">Requested</dt>
                    <dd><time class="tabular-nums [unicode-bidi:isolate]" dir="auto" x-bind:datetime="req ? req.requestedAt : null" x-text="fmt(req ? req.requestedAt : null, 'dt')" datetime="2026-09-28T09:00:00+00:00">Sep 28, 2026, 9:00 AM</time></dd>
                    <dt class="text-muted-foreground" x-show="showReady" >Ready</dt>
                    <dd x-show="showReady" ><time class="tabular-nums [unicode-bidi:isolate]" dir="auto" x-text="fmt(req ? req.completedAt : null, 'dt')" datetime="2026-09-28T09:12:00+00:00">Sep 28, 2026, 9:12 AM</time></dd>
                    <dt class="text-muted-foreground" x-show="showReady" >Download available until</dt>
                    <dd x-show="showReady" ><time class="tabular-nums [unicode-bidi:isolate]" dir="auto" x-text="fmt(req ? req.expiresAt : null, 'd')" datetime="2026-10-05T09:00:00+00:00">Oct 5, 2026</time></dd>
                </dl>
            </div>
        </div></div>
    </div>
    <div data-slot="account-deletion" data-phase="none" class="flex flex-col gap-4" x-show="phase === 'none'"         x-on:nq-account-delete="$event.detail.waitUntil(schedule())">
        <template x-if="notice">
            <div data-slot="alert" data-tone="success" role="status"
     x-data="nqAlert()" x-modelable="open" x-show="open"     x-on:nq:dismiss="notice = null" class="relative grid grid-cols-[auto_1fr_auto] items-start gap-x-3 rounded-card border p-3 text-start border-nq-success/30 bg-nq-success-soft">
    <svg aria-hidden="true" data-slot="alert-icon" class="mt-0.5 size-4 text-nq-success-text" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <circle cx="12" cy="12" r="10"/>
  <path d="m9 12 2 2 4-4"/>
</svg>    <div data-slot="alert-body" class="flex min-w-0 flex-col gap-0.5">
                            <div data-slot="alert-description" class="text-body-sm text-foreground"><span x-text="notice.text"></span></div>
            </div>
            <div data-slot="alert-actions" class="ms-3 flex items-center gap-1">
                            <button data-slot="button"
     type="button"                         aria-label="Dismiss" x-on:click="dismiss()" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 hover:bg-nq-hover size-control-sm p-0 text-muted-foreground [&_svg]:size-3.5">
        <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M18 6 6 18"/>
  <path d="m6 6 12 12"/>
</svg></button>
                    </div>
    </div>
        </template>
        <div role="region" aria-labelledby="nq-settings-section-ec544ea3-title" data-slot="danger-zone" data-tone="danger"
    class="flex flex-col rounded-card border bg-card py-4 text-card-foreground gap-5 border-nq-danger/40">
    <div data-slot="card-header" class="grid auto-rows-min items-start gap-1 px-4 has-data-[slot=card-action]:grid-cols-[1fr_auto]"><h2 data-slot="card-title" id="nq-settings-section-ec544ea3-title" class="text-h3 text-nq-danger-text">Delete account</h2></div>
    <div data-slot="card-content" class="px-4"><div class="flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between" x-data="nqDangerZone(JSON.parse('{\u0022phrase\u0022:\u0022sara@sahab.studio\u0022,\u0022failed\u0022:\u0022The deletion could not be scheduled. Try again.\u0022}'))">
        <div class="min-w-0">
            <p class="text-label text-foreground">Delete your account</p>
            <p class="text-body-sm text-muted-foreground">Your account and its data are permanently deleted after 30 days. Until then you can sign in and cancel.</p>
        </div>
        <div data-slot="alert-dialog" x-data="nqAlertDialog(false)" x-modelable="open" x-id="['nq-alert-dialog']" x-model="confirming" class="contents">
    <button data-slot="alert-dialog-trigger"
     type="button"                         aria-haspopup="dialog" x-on:click="show()" :aria-expanded="open" class="inline-flex select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-destructive text-destructive-foreground hover:bg-[color-mix(in_oklab,var(--nq-danger-solid)_88%,var(--nq-fg))] h-control px-[var(--nq-control-pad)] shrink-0">
        Delete my account</button>
            <template x-teleport="body">
    <div data-slot="alert-dialog-portal">
        <div data-slot="alert-dialog-backdrop" x-nq-presence="open" class="fixed inset-0 z-50 bg-nq-fg/15 dark:bg-nq-bg/60 transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0"></div>
        <div data-slot="alert-dialog-content" x-bind="popup" x-nq-presence="open" x-trap.noscroll="open"
            class="fixed inset-0 z-50 m-auto grid h-fit w-[calc(100%-2rem)] max-w-md gap-4 rounded-floating border border-border bg-popover p-6 text-popover-foreground outline-none max-h-[calc(100dvh-2rem)] overflow-y-auto transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0">
            <form novalidate class="grid gap-4" x-on:submit.prevent="remove()">
                    <div data-slot="alert-dialog-header" class="flex flex-col gap-1.5 text-start"><h2 data-slot="alert-dialog-title" :id="$id('nq-alert-dialog', 'title')" class="text-h3 text-foreground">Delete your account?</h2>
                        <p data-slot="alert-dialog-description" :id="$id('nq-alert-dialog', 'description')" class="text-body-sm text-muted-foreground">You are signed out everywhere. After 30 days everything is removed for good. You can cancel any time before then.</p></div>
                    <div data-slot="field" x-data="nqField(false)" x-modelable="invalid" x-id="['nq-field']"
         data-valid     x-model="bad" class="flex flex-col gap-1.5">
    <label data-slot="field-label"  class="text-label text-foreground data-disabled:opacity-50">Type ⁨sara@sahab.studio⁩ to confirm</label>
                        <input data-slot="input" type="text"
     dir="ltr"      name="confirm-delete"             autocomplete="off" autocapitalize="none" autocorrect="off" spellcheck="false" x-bind:value="typed" x-on:input="type($event.target.value)" x-bind:disabled="busy" class="w-full min-w-0 rounded-control border border-input bg-card px-3 text-body text-foreground min-h-[var(--nq-touch-min,0px)] transition-colors duration-150 ease-nq outline-none placeholder:text-muted-foreground focus-visible:border-nq-focus focus-visible:outline-1 focus-visible:outline-nq-focus data-invalid:border-nq-danger aria-invalid:border-nq-danger disabled:cursor-not-allowed disabled:opacity-50 pointer-coarse:text-[16px] h-control text-start">
                        <p data-slot="field-description" role="alert" x-show="bad" style="display: none" x-text="error" class="text-caption text-nq-danger-text"></p>
</div>
                    <div data-slot="alert-dialog-footer" class="flex flex-col-reverse gap-2 sm:flex-row sm:justify-end"><button data-slot="alert-dialog-cancel"
     type="button"                         autofocus="autofocus" x-on:click="close()" x-bind:disabled="busy" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 text-foreground hover:bg-nq-hover h-control px-[var(--nq-control-pad)]">
        Cancel</button>
                        <button data-slot="button"
     type="submit"                         x-bind:disabled="! matches || busy" x-bind:data-disabled="(! matches || busy) ? &#039;&#039; : null" x-bind:aria-busy="busy ? &#039;true&#039; : null" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-destructive text-destructive-foreground hover:bg-[color-mix(in_oklab,var(--nq-danger-solid)_88%,var(--nq-fg))] h-control px-[var(--nq-control-pad)]">
        <template x-if="busy"><svg data-slot="spinner" aria-hidden="true" class="size-4 animate-spin motion-reduce:animate-none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M21 12a9 9 0 1 1-6.219-8.56"/>
</svg></template>
                            Schedule deletion</button></div>
                </form>
        </div>
    </div>
</template>
</div>
    </div></div>
    </div>
    </div>
    <div role="region" aria-labelledby="nq-settings-section-3ffaa5d7-title" data-slot="account-deletion" data-tone="danger"
    data-phase="pending" x-show="phase === &#039;pending&#039;" style="display: none" class="flex flex-col rounded-card border bg-card py-4 text-card-foreground gap-5 border-nq-danger/40">
    <div data-slot="card-header" class="grid auto-rows-min items-start gap-1 px-4 has-data-[slot=card-action]:grid-cols-[1fr_auto]"><h2 data-slot="card-title" id="nq-settings-section-3ffaa5d7-title" class="text-h3 text-nq-danger-text">Your account is scheduled for deletion</h2></div>
    <div data-slot="card-content" class="px-4"><div class="flex flex-col gap-4">
            <div data-slot="alert" data-tone="warning" role="alert"
        class="relative grid grid-cols-[auto_1fr_auto] items-start gap-x-3 rounded-card border p-3 text-start border-nq-warning/30 bg-nq-warning-soft">
    <svg aria-hidden="true" data-slot="alert-icon" class="mt-0.5 size-4 text-nq-warning-text" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"/>
  <path d="M12 9v4"/>
  <path d="M12 17h.01"/>
</svg>    <div data-slot="alert-body" class="flex min-w-0 flex-col gap-0.5">
                            <div data-slot="alert-description" class="text-body-sm text-foreground"><span>It will be deleted on <time class="tabular-nums [unicode-bidi:isolate]" dir="auto" x-bind:datetime="date" x-text="fmt(date, 'long')" datetime=""></time> · <strong x-text="leftText">Less than a day left</strong></span></div>
            </div>
    </div>
            <div data-slot="progress" role="progressbar" aria-label="Grace period used" aria-valuemin="0" aria-valuemax="100" x-bind:aria-valuenow="elapsed" aria-valuenow="100" class="flex w-full flex-col gap-1.5">
                <div class="flex items-baseline justify-between gap-3 text-body-sm"><span class="text-label text-foreground">Grace period used</span><span aria-hidden="true" class="text-muted-foreground tabular-nums" x-text="elapsed + '%'">100%</span></div>
                <div class="relative block h-1 w-full overflow-hidden rounded-full bg-nq-surface-soft">
                    <div class="block h-full rounded-full bg-nq-warning transition-[width] duration-300 ease-nq motion-reduce:transition-none" x-bind:style="'width:' + elapsed + '%'" style="inset-inline-start:0;width:100%"></div>
                </div>
            </div>
            <p class="text-body-sm text-muted-foreground">Everything is removed for good on that date. Cancel now to keep your account exactly as it is.</p>
            <div>
                <button data-slot="button"
     type="button"                         x-on:click="cancel()" x-bind:disabled="cancelBusy" x-bind:aria-busy="cancelBusy ? &#039;true&#039; : null" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary text-primary-foreground hover:bg-[color-mix(in_oklab,var(--nq-action)_88%,var(--nq-fg))] h-control px-[var(--nq-control-pad)]">
        <template x-if="cancelBusy"><svg data-slot="spinner" aria-hidden="true" class="size-4 animate-spin motion-reduce:animate-none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M21 12a9 9 0 1 1-6.219-8.56"/>
</svg></template>
                    <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"/>
  <path d="m9 12 2 2 4-4"/>
</svg>                    Cancel deletion</button>
            </div>
            <template x-if="notice">
                <div data-slot="alert" data-tone="danger" role="alert"
     x-data="nqAlert()" x-modelable="open" x-show="open"     x-on:nq:dismiss="notice = null" class="relative grid grid-cols-[auto_1fr_auto] items-start gap-x-3 rounded-card border p-3 text-start border-nq-danger/30 bg-nq-danger-soft">
    <svg aria-hidden="true" data-slot="alert-icon" class="mt-0.5 size-4 text-nq-danger-text" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <circle cx="12" cy="12" r="10"/>
  <path d="m15 9-6 6"/>
  <path d="m9 9 6 6"/>
</svg>    <div data-slot="alert-body" class="flex min-w-0 flex-col gap-0.5">
                            <div data-slot="alert-description" class="text-body-sm text-foreground"><span x-text="notice.text"></span></div>
            </div>
            <div data-slot="alert-actions" class="ms-3 flex items-center gap-1">
                            <button data-slot="button"
     type="button"                         aria-label="Dismiss" x-on:click="dismiss()" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 hover:bg-nq-hover size-control-sm p-0 text-muted-foreground [&_svg]:size-3.5">
        <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M18 6 6 18"/>
  <path d="m6 6 12 12"/>
</svg></button>
                    </div>
    </div>
            </template>
        </div></div>
    </div>
    <div role="region" aria-labelledby="nq-settings-section-d35b17bf-title" data-slot="account-deletion" data-tone="danger"
    data-phase="due" x-show="phase === &#039;due&#039;" style="display: none" class="flex flex-col rounded-card border bg-card py-4 text-card-foreground gap-5 border-nq-danger/40">
    <div data-slot="card-header" class="grid auto-rows-min items-start gap-1 px-4 has-data-[slot=card-action]:grid-cols-[1fr_auto]"><h2 data-slot="card-title" id="nq-settings-section-d35b17bf-title" class="text-h3 text-nq-danger-text">Your account is being deleted</h2></div>
    <div data-slot="card-content" class="px-4"><p class="text-body-sm text-muted-foreground">The grace period has ended. It can no longer be cancelled here. Contact support if this is a mistake.</p></div>
    </div>
</div>
    <div data-slot="data-privacy" x-data="nqDataPrivacy(JSON.parse('{\u0022request\u0022:null,\u0022canRequest\u0022:false,\u0022canDownload\u0022:false,\u0022poll\u0022:false,\u0022interval\u0022:3000,\u0022scheduledFor\u0022:\u00222026-10-14T09:00:00+00:00\u0022,\u0022graceDays\u0022:30,\u0022now\u0022:\u00222026-09-29T09:00:00+00:00\u0022,\u0022locale\u0022:\u0022en\u0022,\u0022labels\u0022:{\u0022exportTitle\u0022:\u0022Export your data\u0022,\u0022exportBody\u0022:\u0022Get a copy of everything we hold about you, as a file you can keep or move elsewhere.\u0022,\u0022includes\u0022:\u0022The file includes\u0022,\u0022request\u0022:\u0022Request export\u0022,\u0022requesting\u0022:\u0022Requesting\u0022,\u0022status\u0022:{\u0022queued\u0022:\u0022Waiting in line\u0022,\u0022processing\u0022:\u0022Preparing your file\u0022,\u0022ready\u0022:\u0022Ready to download\u0022,\u0022failed\u0022:\u0022Failed\u0022,\u0022expired\u0022:\u0022Expired\u0022},\u0022requestedAt\u0022:\u0022Requested\u0022,\u0022readyAt\u0022:\u0022Ready\u0022,\u0022size\u0022:\u0022Size\u0022,\u0022expiresAt\u0022:\u0022Download available until\u0022,\u0022download\u0022:\u0022Download\u0022,\u0022downloading\u0022:\u0022Downloading\u0022,\u0022requestAgain\u0022:\u0022Request a new export\u0022,\u0022retryCheck\u0022:\u0022Check again\u0022,\u0022emailNote\u0022:\u0022We also email you when it is ready. This can take a few minutes.\u0022,\u0022failedBody\u0022:\u0022The export could not be prepared. Try again.\u0022,\u0022expiredBody\u0022:\u0022This export is no longer available. Request a new one.\u0022,\u0022checkFailed\u0022:\u0022We could not check the status. It may still be running.\u0022,\u0022requestFailed\u0022:\u0022The export could not be requested. Try again.\u0022,\u0022downloadFailed\u0022:\u0022The download did not start. Try again.\u0022,\u0022progressLabel\u0022:\u0022Export progress\u0022,\u0022deleteTitle\u0022:\u0022Delete account\u0022,\u0022deleteHeading\u0022:\u0022Delete your account\u0022,\u0022deleteBody\u0022:\u0022Your account and its data are permanently deleted after {days} days. Until then you can sign in and cancel.\u0022,\u0022deleteButton\u0022:\u0022Delete my account\u0022,\u0022deleteConfirmTitle\u0022:\u0022Delete your account?\u0022,\u0022deleteConfirmBody\u0022:\u0022You are signed out everywhere. After {days} days everything is removed for good. You can cancel any time before then.\u0022,\u0022deletePrompt\u0022:\u0022Type {text} to confirm\u0022,\u0022deleteAction\u0022:\u0022Schedule deletion\u0022,\u0022cancel\u0022:\u0022Cancel\u0022,\u0022deleteFailed\u0022:\u0022The deletion could not be scheduled. Try again.\u0022,\u0022scheduledTitle\u0022:\u0022Your account is scheduled for deletion\u0022,\u0022scheduledOn\u0022:\u0022It will be deleted on\u0022,\u0022daysLeft\u0022:\u0022{n} days left\u0022,\u0022lessThanDay\u0022:\u0022Less than a day left\u0022,\u0022scheduledBody\u0022:\u0022Everything is removed for good on that date. Cancel now to keep your account exactly as it is.\u0022,\u0022cancelDeletion\u0022:\u0022Cancel deletion\u0022,\u0022cancelling\u0022:\u0022Cancelling\u0022,\u0022cancelFailed\u0022:\u0022Deletion could not be cancelled. Try again.\u0022,\u0022cancelledOk\u0022:\u0022Deletion cancelled. Your account stays as it was.\u0022,\u0022dueTitle\u0022:\u0022Your account is being deleted\u0022,\u0022dueBody\u0022:\u0022The grace period has ended. It can no longer be cancelled here. Contact support if this is a mistake.\u0022,\u0022graceProgress\u0022:\u0022Grace period used\u0022,\u0022pageReadyTitle\u0022:\u0022Keep your account?\u0022,\u0022pageReadyBody\u0022:\u0022Your account is scheduled for deletion on {date}. Cancel it and nothing is lost.\u0022,\u0022keep\u0022:\u0022Keep my account\u0022,\u0022pageDoneTitle\u0022:\u0022Your account is safe\u0022,\u0022pageDoneBody\u0022:\u0022The deletion was cancelled. You can sign in as usual.\u0022,\u0022pageExpiredTitle\u0022:\u0022This account has been deleted\u0022,\u0022pageExpiredBody\u0022:\u0022The grace period ended and the data was removed. It cannot be recovered. You can create a new account any time.\u0022,\u0022pageInvalidTitle\u0022:\u0022This link does not work\u0022,\u0022pageInvalidBody\u0022:\u0022It may be wrong, already used, or from an older request. Sign in to check your account.\u0022,\u0022signIn\u0022:\u0022Sign in\u0022,\u0022signUp\u0022:\u0022Create a new account\u0022,\u0022goHome\u0022:\u0022Go to the home page\u0022,\u0022daysLeftOne\u0022:\u00221 day left\u0022}}'))" class="flex flex-col gap-6">
    <div role="region" aria-labelledby="nq-settings-section-4a7ccac4-title" data-slot="data-export" data-tone="default"
    data-status="none" x-bind:data-status="status || &#039;none&#039;" class="flex flex-col rounded-card border border-border bg-card py-4 text-card-foreground gap-5">
    <div data-slot="card-header" class="grid auto-rows-min items-start gap-1 px-4 has-data-[slot=card-action]:grid-cols-[1fr_auto]"><h2 data-slot="card-title" id="nq-settings-section-4a7ccac4-title" class="text-foreground text-h3">Export your data</h2>
        <div data-slot="card-description" class="text-body-sm text-muted-foreground">Get a copy of everything we hold about you, as a file you can keep or move elsewhere.</div></div>
    <div data-slot="card-content" class="px-4"><div class="flex flex-col gap-4">
            <template x-if="error">
                <div data-slot="alert" data-tone="danger" role="alert"
     x-data="nqAlert()" x-modelable="open" x-show="open"     x-on:nq:dismiss="error = null" class="relative grid grid-cols-[auto_1fr_auto] items-start gap-x-3 rounded-card border p-3 text-start border-nq-danger/30 bg-nq-danger-soft">
    <svg aria-hidden="true" data-slot="alert-icon" class="mt-0.5 size-4 text-nq-danger-text" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <circle cx="12" cy="12" r="10"/>
  <path d="m15 9-6 6"/>
  <path d="m9 9 6 6"/>
</svg>    <div data-slot="alert-body" class="flex min-w-0 flex-col gap-0.5">
                            <div data-slot="alert-description" class="text-body-sm text-foreground"><span x-text="error"></span></div>
            </div>
            <div data-slot="alert-actions" class="ms-3 flex items-center gap-1">
                            <button data-slot="button"
     type="button"                         aria-label="Dismiss" x-on:click="dismiss()" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 hover:bg-nq-hover size-control-sm p-0 text-muted-foreground [&_svg]:size-3.5">
        <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M18 6 6 18"/>
  <path d="m6 6 12 12"/>
</svg></button>
                    </div>
    </div>
            </template>
            <div class="flex flex-col gap-3 rounded-card border border-border p-4" data-slot="data-export-status" x-show="req"  style="display: none" >
                <div class="flex flex-wrap items-center justify-between gap-3">
                    <div class="flex items-center gap-2" role="status" aria-live="polite">
                                                    <span data-slot="badge"  style="display: none"     x-show="status === &#039;queued&#039;" class="inline-flex h-5 shrink-0 items-center gap-1 whitespace-nowrap rounded-[4px] border px-1.5 text-caption font-medium [&_svg]:size-3 border-nq-info/40 bg-nq-info-soft text-nq-info-text"><svg aria-hidden="true" class="motion-safe:animate-spin" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"/>
  <path d="M21 3v5h-5"/>
  <path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"/>
  <path d="M8 16H3v5"/>
</svg>                                <span x-text="statusLabel"></span></span>
                                                    <span data-slot="badge"  style="display: none"     x-show="status === &#039;processing&#039;" class="inline-flex h-5 shrink-0 items-center gap-1 whitespace-nowrap rounded-[4px] border px-1.5 text-caption font-medium [&_svg]:size-3 border-nq-info/40 bg-nq-info-soft text-nq-info-text"><svg aria-hidden="true" class="motion-safe:animate-spin" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"/>
  <path d="M21 3v5h-5"/>
  <path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"/>
  <path d="M8 16H3v5"/>
</svg>                                <span x-text="statusLabel"></span></span>
                                                    <span data-slot="badge"  style="display: none"     x-show="status === &#039;ready&#039;" class="inline-flex h-5 shrink-0 items-center gap-1 whitespace-nowrap rounded-[4px] border px-1.5 text-caption font-medium [&_svg]:size-3 border-nq-success/40 bg-nq-success-soft text-nq-success-text"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <circle cx="12" cy="12" r="10"/>
  <path d="m9 12 2 2 4-4"/>
</svg>                                <span x-text="statusLabel"></span></span>
                                                    <span data-slot="badge"  style="display: none"     x-show="status === &#039;failed&#039;" class="inline-flex h-5 shrink-0 items-center gap-1 whitespace-nowrap rounded-[4px] border px-1.5 text-caption font-medium [&_svg]:size-3 border-nq-danger/40 bg-nq-danger-soft text-nq-danger-text"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <circle cx="12" cy="12" r="10"/>
  <line x1="12" x2="12" y1="8" y2="12"/>
  <line x1="12" x2="12.01" y1="16" y2="16"/>
</svg>                                <span x-text="statusLabel"></span></span>
                                                    <span data-slot="badge"  style="display: none"     x-show="status === &#039;expired&#039;" class="inline-flex h-5 shrink-0 items-center gap-1 whitespace-nowrap rounded-[4px] border px-1.5 text-caption font-medium [&_svg]:size-3 border-border bg-secondary text-foreground"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <circle cx="12" cy="12" r="10"/>
  <path d="M12 6v6l4 2"/>
</svg>                                <span x-text="statusLabel"></span></span>
                                            </div>
                                    </div>
                <div class="flex flex-col gap-3" x-show="isActive"  style="display: none" >
                    <div data-slot="progress" role="progressbar" aria-label="Export progress" aria-valuemin="0" aria-valuemax="100"
                        x-bind:aria-valuenow="progressValue" x-bind:data-indeterminate="progressValue === null ? '' : null" class="flex w-full flex-col gap-1.5">
                        <div class="relative block h-1 w-full overflow-hidden rounded-full bg-nq-surface-soft">
                            <div class="block h-full rounded-full bg-primary transition-[width] duration-300 ease-nq motion-reduce:transition-none"
                                x-bind:class="progressValue === null ? 'w-full motion-safe:animate-pulse' : ''"
                                x-bind:style="progressValue === null ? '' : 'width:' + progressValue + '%'" style="inset-inline-start:0;"></div>
                        </div>
                    </div>
                    <p class="text-caption text-muted-foreground">We also email you when it is ready. This can take a few minutes.</p>
                </div>
                <p class="text-body-sm text-nq-danger-text" x-show="status === 'failed'"  style="display: none" >The export could not be prepared. Try again.</p>
                <p class="text-body-sm text-muted-foreground" x-show="status === 'expired'"  style="display: none" >This export is no longer available. Request a new one.</p>
                <div data-slot="alert" data-tone="warning" role="alert"
        x-show="stalled" style="display: none" class="relative grid grid-cols-[auto_1fr_auto] items-start gap-x-3 rounded-card border p-3 text-start border-nq-warning/30 bg-nq-warning-soft">
    <svg aria-hidden="true" data-slot="alert-icon" class="mt-0.5 size-4 text-nq-warning-text" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <circle cx="12" cy="12" r="10"/>
  <line x1="12" x2="12" y1="8" y2="12"/>
  <line x1="12" x2="12.01" y1="16" y2="16"/>
</svg>    <div data-slot="alert-body" class="flex min-w-0 flex-col gap-0.5">
                            <div data-slot="alert-description" class="text-body-sm text-foreground">We could not check the status. It may still be running.</div>
            </div>
            <div data-slot="alert-actions" class="ms-3 flex items-center gap-1">
            <button data-slot="button"
     type="button"                         x-on:click="recheck()" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border-border bg-card text-foreground hover:bg-nq-hover h-control-sm px-2.5">
        Check again</button>
                    </div>
    </div>
                <dl class="grid grid-cols-[auto_minmax(0,1fr)] gap-x-6 gap-y-1 text-body-sm">
                    <dt class="text-muted-foreground">Requested</dt>
                    <dd><time class="tabular-nums [unicode-bidi:isolate]" dir="auto" x-bind:datetime="req ? req.requestedAt : null" x-text="fmt(req ? req.requestedAt : null, 'dt')" datetime=""></time></dd>
                    <dt class="text-muted-foreground" x-show="showReady"  style="display: none" >Ready</dt>
                    <dd x-show="showReady"  style="display: none" ><time class="tabular-nums [unicode-bidi:isolate]" dir="auto" x-text="fmt(req ? req.completedAt : null, 'dt')" datetime=""></time></dd>
                    <dt class="text-muted-foreground" x-show="showReady"  style="display: none" >Download available until</dt>
                    <dd x-show="showReady"  style="display: none" ><time class="tabular-nums [unicode-bidi:isolate]" dir="auto" x-text="fmt(req ? req.expiresAt : null, 'd')" datetime=""></time></dd>
                </dl>
            </div>
        </div></div>
    </div>
    <div data-slot="account-deletion" data-phase="none" class="flex flex-col gap-4" x-show="phase === 'none'"  style="display: none"         x-on:nq-account-delete="$event.detail.waitUntil(schedule())">
        <template x-if="notice">
            <div data-slot="alert" data-tone="success" role="status"
     x-data="nqAlert()" x-modelable="open" x-show="open"     x-on:nq:dismiss="notice = null" class="relative grid grid-cols-[auto_1fr_auto] items-start gap-x-3 rounded-card border p-3 text-start border-nq-success/30 bg-nq-success-soft">
    <svg aria-hidden="true" data-slot="alert-icon" class="mt-0.5 size-4 text-nq-success-text" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <circle cx="12" cy="12" r="10"/>
  <path d="m9 12 2 2 4-4"/>
</svg>    <div data-slot="alert-body" class="flex min-w-0 flex-col gap-0.5">
                            <div data-slot="alert-description" class="text-body-sm text-foreground"><span x-text="notice.text"></span></div>
            </div>
            <div data-slot="alert-actions" class="ms-3 flex items-center gap-1">
                            <button data-slot="button"
     type="button"                         aria-label="Dismiss" x-on:click="dismiss()" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 hover:bg-nq-hover size-control-sm p-0 text-muted-foreground [&_svg]:size-3.5">
        <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M18 6 6 18"/>
  <path d="m6 6 12 12"/>
</svg></button>
                    </div>
    </div>
        </template>
        <div role="region" aria-labelledby="nq-settings-section-ec544ea3-title" data-slot="danger-zone" data-tone="danger"
    class="flex flex-col rounded-card border bg-card py-4 text-card-foreground gap-5 border-nq-danger/40">
    <div data-slot="card-header" class="grid auto-rows-min items-start gap-1 px-4 has-data-[slot=card-action]:grid-cols-[1fr_auto]"><h2 data-slot="card-title" id="nq-settings-section-ec544ea3-title" class="text-h3 text-nq-danger-text">Delete account</h2></div>
    <div data-slot="card-content" class="px-4"><div class="flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between" x-data="nqDangerZone(JSON.parse('{\u0022phrase\u0022:\u0022sara@sahab.studio\u0022,\u0022failed\u0022:\u0022The deletion could not be scheduled. Try again.\u0022}'))">
        <div class="min-w-0">
            <p class="text-label text-foreground">Delete your account</p>
            <p class="text-body-sm text-muted-foreground">Your account and its data are permanently deleted after 30 days. Until then you can sign in and cancel.</p>
        </div>
        <div data-slot="alert-dialog" x-data="nqAlertDialog(false)" x-modelable="open" x-id="['nq-alert-dialog']" x-model="confirming" class="contents">
    <button data-slot="alert-dialog-trigger"
     type="button"                         aria-haspopup="dialog" x-on:click="show()" :aria-expanded="open" class="inline-flex select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-destructive text-destructive-foreground hover:bg-[color-mix(in_oklab,var(--nq-danger-solid)_88%,var(--nq-fg))] h-control px-[var(--nq-control-pad)] shrink-0">
        Delete my account</button>
            <template x-teleport="body">
    <div data-slot="alert-dialog-portal">
        <div data-slot="alert-dialog-backdrop" x-nq-presence="open" class="fixed inset-0 z-50 bg-nq-fg/15 dark:bg-nq-bg/60 transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0"></div>
        <div data-slot="alert-dialog-content" x-bind="popup" x-nq-presence="open" x-trap.noscroll="open"
            class="fixed inset-0 z-50 m-auto grid h-fit w-[calc(100%-2rem)] max-w-md gap-4 rounded-floating border border-border bg-popover p-6 text-popover-foreground outline-none max-h-[calc(100dvh-2rem)] overflow-y-auto transition-opacity duration-150 ease-nq data-starting-style:opacity-0 data-ending-style:opacity-0">
            <form novalidate class="grid gap-4" x-on:submit.prevent="remove()">
                    <div data-slot="alert-dialog-header" class="flex flex-col gap-1.5 text-start"><h2 data-slot="alert-dialog-title" :id="$id('nq-alert-dialog', 'title')" class="text-h3 text-foreground">Delete your account?</h2>
                        <p data-slot="alert-dialog-description" :id="$id('nq-alert-dialog', 'description')" class="text-body-sm text-muted-foreground">You are signed out everywhere. After 30 days everything is removed for good. You can cancel any time before then.</p></div>
                    <div data-slot="field" x-data="nqField(false)" x-modelable="invalid" x-id="['nq-field']"
         data-valid     x-model="bad" class="flex flex-col gap-1.5">
    <label data-slot="field-label"  class="text-label text-foreground data-disabled:opacity-50">Type ⁨sara@sahab.studio⁩ to confirm</label>
                        <input data-slot="input" type="text"
     dir="ltr"      name="confirm-delete"             autocomplete="off" autocapitalize="none" autocorrect="off" spellcheck="false" x-bind:value="typed" x-on:input="type($event.target.value)" x-bind:disabled="busy" class="w-full min-w-0 rounded-control border border-input bg-card px-3 text-body text-foreground min-h-[var(--nq-touch-min,0px)] transition-colors duration-150 ease-nq outline-none placeholder:text-muted-foreground focus-visible:border-nq-focus focus-visible:outline-1 focus-visible:outline-nq-focus data-invalid:border-nq-danger aria-invalid:border-nq-danger disabled:cursor-not-allowed disabled:opacity-50 pointer-coarse:text-[16px] h-control text-start">
                        <p data-slot="field-description" role="alert" x-show="bad" style="display: none" x-text="error" class="text-caption text-nq-danger-text"></p>
</div>
                    <div data-slot="alert-dialog-footer" class="flex flex-col-reverse gap-2 sm:flex-row sm:justify-end"><button data-slot="alert-dialog-cancel"
     type="button"                         autofocus="autofocus" x-on:click="close()" x-bind:disabled="busy" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 text-foreground hover:bg-nq-hover h-control px-[var(--nq-control-pad)]">
        Cancel</button>
                        <button data-slot="button"
     type="submit"                         x-bind:disabled="! matches || busy" x-bind:data-disabled="(! matches || busy) ? &#039;&#039; : null" x-bind:aria-busy="busy ? &#039;true&#039; : null" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-destructive text-destructive-foreground hover:bg-[color-mix(in_oklab,var(--nq-danger-solid)_88%,var(--nq-fg))] h-control px-[var(--nq-control-pad)]">
        <template x-if="busy"><svg data-slot="spinner" aria-hidden="true" class="size-4 animate-spin motion-reduce:animate-none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M21 12a9 9 0 1 1-6.219-8.56"/>
</svg></template>
                            Schedule deletion</button></div>
                </form>
        </div>
    </div>
</template>
</div>
    </div></div>
    </div>
    </div>
    <div role="region" aria-labelledby="nq-settings-section-3ffaa5d7-title" data-slot="account-deletion" data-tone="danger"
    data-phase="pending" x-show="phase === &#039;pending&#039;" class="flex flex-col rounded-card border bg-card py-4 text-card-foreground gap-5 border-nq-danger/40">
    <div data-slot="card-header" class="grid auto-rows-min items-start gap-1 px-4 has-data-[slot=card-action]:grid-cols-[1fr_auto]"><h2 data-slot="card-title" id="nq-settings-section-3ffaa5d7-title" class="text-h3 text-nq-danger-text">Your account is scheduled for deletion</h2></div>
    <div data-slot="card-content" class="px-4"><div class="flex flex-col gap-4">
            <div data-slot="alert" data-tone="warning" role="alert"
        class="relative grid grid-cols-[auto_1fr_auto] items-start gap-x-3 rounded-card border p-3 text-start border-nq-warning/30 bg-nq-warning-soft">
    <svg aria-hidden="true" data-slot="alert-icon" class="mt-0.5 size-4 text-nq-warning-text" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"/>
  <path d="M12 9v4"/>
  <path d="M12 17h.01"/>
</svg>    <div data-slot="alert-body" class="flex min-w-0 flex-col gap-0.5">
                            <div data-slot="alert-description" class="text-body-sm text-foreground"><span>It will be deleted on <time class="tabular-nums [unicode-bidi:isolate]" dir="auto" x-bind:datetime="date" x-text="fmt(date, 'long')" datetime="2026-10-14T09:00:00+00:00">October 14, 2026</time> · <strong x-text="leftText">15 days left</strong></span></div>
            </div>
    </div>
            <div data-slot="progress" role="progressbar" aria-label="Grace period used" aria-valuemin="0" aria-valuemax="100" x-bind:aria-valuenow="elapsed" aria-valuenow="50" class="flex w-full flex-col gap-1.5">
                <div class="flex items-baseline justify-between gap-3 text-body-sm"><span class="text-label text-foreground">Grace period used</span><span aria-hidden="true" class="text-muted-foreground tabular-nums" x-text="elapsed + '%'">50%</span></div>
                <div class="relative block h-1 w-full overflow-hidden rounded-full bg-nq-surface-soft">
                    <div class="block h-full rounded-full bg-nq-warning transition-[width] duration-300 ease-nq motion-reduce:transition-none" x-bind:style="'width:' + elapsed + '%'" style="inset-inline-start:0;width:50%"></div>
                </div>
            </div>
            <p class="text-body-sm text-muted-foreground">Everything is removed for good on that date. Cancel now to keep your account exactly as it is.</p>
            <div>
                <button data-slot="button"
     type="button"                         x-on:click="cancel()" x-bind:disabled="cancelBusy" x-bind:aria-busy="cancelBusy ? &#039;true&#039; : null" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary text-primary-foreground hover:bg-[color-mix(in_oklab,var(--nq-action)_88%,var(--nq-fg))] h-control px-[var(--nq-control-pad)]">
        <template x-if="cancelBusy"><svg data-slot="spinner" aria-hidden="true" class="size-4 animate-spin motion-reduce:animate-none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M21 12a9 9 0 1 1-6.219-8.56"/>
</svg></template>
                    <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"/>
  <path d="m9 12 2 2 4-4"/>
</svg>                    Cancel deletion</button>
            </div>
            <template x-if="notice">
                <div data-slot="alert" data-tone="danger" role="alert"
     x-data="nqAlert()" x-modelable="open" x-show="open"     x-on:nq:dismiss="notice = null" class="relative grid grid-cols-[auto_1fr_auto] items-start gap-x-3 rounded-card border p-3 text-start border-nq-danger/30 bg-nq-danger-soft">
    <svg aria-hidden="true" data-slot="alert-icon" class="mt-0.5 size-4 text-nq-danger-text" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <circle cx="12" cy="12" r="10"/>
  <path d="m15 9-6 6"/>
  <path d="m9 9 6 6"/>
</svg>    <div data-slot="alert-body" class="flex min-w-0 flex-col gap-0.5">
                            <div data-slot="alert-description" class="text-body-sm text-foreground"><span x-text="notice.text"></span></div>
            </div>
            <div data-slot="alert-actions" class="ms-3 flex items-center gap-1">
                            <button data-slot="button"
     type="button"                         aria-label="Dismiss" x-on:click="dismiss()" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 hover:bg-nq-hover size-control-sm p-0 text-muted-foreground [&_svg]:size-3.5">
        <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M18 6 6 18"/>
  <path d="m6 6 12 12"/>
</svg></button>
                    </div>
    </div>
            </template>
        </div></div>
    </div>
    <div role="region" aria-labelledby="nq-settings-section-d35b17bf-title" data-slot="account-deletion" data-tone="danger"
    data-phase="due" x-show="phase === &#039;due&#039;" style="display: none" class="flex flex-col rounded-card border bg-card py-4 text-card-foreground gap-5 border-nq-danger/40">
    <div data-slot="card-header" class="grid auto-rows-min items-start gap-1 px-4 has-data-[slot=card-action]:grid-cols-[1fr_auto]"><h2 data-slot="card-title" id="nq-settings-section-d35b17bf-title" class="text-h3 text-nq-danger-text">Your account is being deleted</h2></div>
    <div data-slot="card-content" class="px-4"><p class="text-body-sm text-muted-foreground">The grace period has ended. It can no longer be cancelled here. Contact support if this is a mistake.</p></div>
    </div>
</div>
    <section data-slot="cancel-deletion-page" data-state="ready" x-bind:data-state="shown" x-data="nqCancelDeletion(JSON.parse('{\u0022state\u0022:\u0022ready\u0022,\u0022dateText\u0022:\u0022October 14, 2026\u0022,\u0022labels\u0022:{\u0022exportTitle\u0022:\u0022Export your data\u0022,\u0022exportBody\u0022:\u0022Get a copy of everything we hold about you, as a file you can keep or move elsewhere.\u0022,\u0022includes\u0022:\u0022The file includes\u0022,\u0022request\u0022:\u0022Request export\u0022,\u0022requesting\u0022:\u0022Requesting\u0022,\u0022status\u0022:{\u0022queued\u0022:\u0022Waiting in line\u0022,\u0022processing\u0022:\u0022Preparing your file\u0022,\u0022ready\u0022:\u0022Ready to download\u0022,\u0022failed\u0022:\u0022Failed\u0022,\u0022expired\u0022:\u0022Expired\u0022},\u0022requestedAt\u0022:\u0022Requested\u0022,\u0022readyAt\u0022:\u0022Ready\u0022,\u0022size\u0022:\u0022Size\u0022,\u0022expiresAt\u0022:\u0022Download available until\u0022,\u0022download\u0022:\u0022Download\u0022,\u0022downloading\u0022:\u0022Downloading\u0022,\u0022requestAgain\u0022:\u0022Request a new export\u0022,\u0022retryCheck\u0022:\u0022Check again\u0022,\u0022emailNote\u0022:\u0022We also email you when it is ready. This can take a few minutes.\u0022,\u0022failedBody\u0022:\u0022The export could not be prepared. Try again.\u0022,\u0022expiredBody\u0022:\u0022This export is no longer available. Request a new one.\u0022,\u0022checkFailed\u0022:\u0022We could not check the status. It may still be running.\u0022,\u0022requestFailed\u0022:\u0022The export could not be requested. Try again.\u0022,\u0022downloadFailed\u0022:\u0022The download did not start. Try again.\u0022,\u0022progressLabel\u0022:\u0022Export progress\u0022,\u0022deleteTitle\u0022:\u0022Delete account\u0022,\u0022deleteHeading\u0022:\u0022Delete your account\u0022,\u0022deleteBody\u0022:\u0022Your account and its data are permanently deleted after {days} days. Until then you can sign in and cancel.\u0022,\u0022deleteButton\u0022:\u0022Delete my account\u0022,\u0022deleteConfirmTitle\u0022:\u0022Delete your account?\u0022,\u0022deleteConfirmBody\u0022:\u0022You are signed out everywhere. After {days} days everything is removed for good. You can cancel any time before then.\u0022,\u0022deletePrompt\u0022:\u0022Type {text} to confirm\u0022,\u0022deleteAction\u0022:\u0022Schedule deletion\u0022,\u0022cancel\u0022:\u0022Cancel\u0022,\u0022deleteFailed\u0022:\u0022The deletion could not be scheduled. Try again.\u0022,\u0022scheduledTitle\u0022:\u0022Your account is scheduled for deletion\u0022,\u0022scheduledOn\u0022:\u0022It will be deleted on\u0022,\u0022daysLeft\u0022:\u0022{n} days left\u0022,\u0022lessThanDay\u0022:\u0022Less than a day left\u0022,\u0022scheduledBody\u0022:\u0022Everything is removed for good on that date. Cancel now to keep your account exactly as it is.\u0022,\u0022cancelDeletion\u0022:\u0022Cancel deletion\u0022,\u0022cancelling\u0022:\u0022Cancelling\u0022,\u0022cancelFailed\u0022:\u0022Deletion could not be cancelled. Try again.\u0022,\u0022cancelledOk\u0022:\u0022Deletion cancelled. Your account stays as it was.\u0022,\u0022dueTitle\u0022:\u0022Your account is being deleted\u0022,\u0022dueBody\u0022:\u0022The grace period has ended. It can no longer be cancelled here. Contact support if this is a mistake.\u0022,\u0022graceProgress\u0022:\u0022Grace period used\u0022,\u0022pageReadyTitle\u0022:\u0022Keep your account?\u0022,\u0022pageReadyBody\u0022:\u0022Your account is scheduled for deletion on {date}. Cancel it and nothing is lost.\u0022,\u0022keep\u0022:\u0022Keep my account\u0022,\u0022pageDoneTitle\u0022:\u0022Your account is safe\u0022,\u0022pageDoneBody\u0022:\u0022The deletion was cancelled. You can sign in as usual.\u0022,\u0022pageExpiredTitle\u0022:\u0022This account has been deleted\u0022,\u0022pageExpiredBody\u0022:\u0022The grace period ended and the data was removed. It cannot be recovered. You can create a new account any time.\u0022,\u0022pageInvalidTitle\u0022:\u0022This link does not work\u0022,\u0022pageInvalidBody\u0022:\u0022It may be wrong, already used, or from an older request. Sign in to check your account.\u0022,\u0022signIn\u0022:\u0022Sign in\u0022,\u0022signUp\u0022:\u0022Create a new account\u0022,\u0022goHome\u0022:\u0022Go to the home page\u0022}}'))" class="flex flex-col gap-4">
    <header class="flex flex-col gap-1.5 ">
        <h1 class="text-h2 text-foreground" x-text="title">Keep your account?</h1>
        <p class="text-body-sm text-muted-foreground" x-text="description">Your account is scheduled for deletion on October 14, 2026. Cancel it and nothing is lost.</p>
    </header>
    <div class="flex flex-col gap-4">
                    <div class="mx-auto flex size-12 items-center justify-center rounded-full [&_svg]:size-6 bg-nq-success-soft text-nq-success-text" aria-hidden="true" x-show="shown === 'cancelled'"  style="display: none" >
                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <circle cx="12" cy="12" r="10"/>
  <path d="m9 12 2 2 4-4"/>
</svg>            </div>
                    <div class="mx-auto flex size-12 items-center justify-center rounded-full [&_svg]:size-6 bg-secondary text-muted-foreground" aria-hidden="true" x-show="shown === 'expired'"  style="display: none" >
                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <circle cx="12" cy="12" r="10"/>
  <path d="M12 6v6l4 2"/>
</svg>            </div>
                    <div class="mx-auto flex size-12 items-center justify-center rounded-full [&_svg]:size-6 bg-nq-warning-soft text-nq-warning-text" aria-hidden="true" x-show="shown === 'invalid'"  style="display: none" >
                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <circle cx="12" cy="12" r="10"/>
  <line x1="12" x2="12" y1="8" y2="12"/>
  <line x1="12" x2="12.01" y1="16" y2="16"/>
</svg>            </div>
        <div class="flex flex-col gap-4" x-show="shown === 'ready'" >
                            <div class="flex items-center gap-3 rounded-card border border-border p-3">
                    <span data-slot="avatar" x-data="nqAvatar(0)"
    class="inline-flex shrink-0 select-none items-center justify-center overflow-hidden bg-secondary align-middle font-medium text-secondary-foreground size-8 text-caption rounded-full">
                    <span data-slot="avatar-fallback" class="flex size-full items-center justify-center" x-bind="fallback"
             role="img" aria-label="Sara Haddad" >SH</span>
    </span>
                    <div class="flex min-w-0 flex-col">
                        <span class="truncate text-label text-foreground">Sara Haddad</span>
                        <bdi dir="ltr" class="truncate text-caption text-muted-foreground">sara@sahab.studio</bdi>
                    </div>
                </div>
                        <button data-slot="button"
     type="button"                         x-on:click="keep()" x-bind:disabled="busy" x-bind:aria-busy="busy ? &#039;true&#039; : null" class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary text-primary-foreground hover:bg-[color-mix(in_oklab,var(--nq-action)_88%,var(--nq-fg))] h-control px-[var(--nq-control-pad)]">
        <template x-if="busy"><svg data-slot="spinner" aria-hidden="true" class="size-4 animate-spin motion-reduce:animate-none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M21 12a9 9 0 1 1-6.219-8.56"/>
</svg></template>
                <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"/>
  <path d="m9 12 2 2 4-4"/>
</svg>                Keep my account</button>
        </div>
                    <div class="flex flex-col gap-4" x-show="shown === 'cancelled' || shown === 'invalid'"  style="display: none" >
                <a data-slot="button"
     href="/sign-in"                         class="inline-flex shrink-0 select-none items-center justify-center gap-2 whitespace-nowrap rounded-control border border-transparent font-sans text-label transition-colors duration-150 ease-nq min-h-[var(--nq-touch-min,0px)] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-nq-focus disabled:pointer-events-none disabled:opacity-50 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 bg-primary text-primary-foreground hover:bg-[color-mix(in_oklab,var(--nq-action)_88%,var(--nq-fg))] h-control px-[var(--nq-control-pad)]">
        Sign in</a>
            </div>
        <template x-if="error">
            <div data-slot="alert" data-tone="danger" role="alert"
        class="relative grid grid-cols-[auto_1fr_auto] items-start gap-x-3 rounded-card border p-3 text-start border-nq-danger/30 bg-nq-danger-soft">
    <svg aria-hidden="true" data-slot="alert-icon" class="mt-0.5 size-4 text-nq-danger-text" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
  <circle cx="12" cy="12" r="10"/>
  <path d="m15 9-6 6"/>
  <path d="m9 9 6 6"/>
</svg>    <div data-slot="alert-body" class="flex min-w-0 flex-col gap-0.5">
                            <div data-slot="alert-description" class="text-body-sm text-foreground"><span x-text="error"></span></div>
            </div>
    </div>
        </template>
    </div>
</section>
</div>
```
