@privateclaw/privateclaw-relay 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay-web.js","sourceRoot":"","sources":["../src/relay-web.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" aria-hidden="true">
2
+ <path fill="#f5f7ff" d="M12 .5C5.65.5.5 5.66.5 12.03c0 5.1 3.3 9.42 7.87 10.95.58.11.79-.25.79-.56 0-.28-.01-1.19-.02-2.16-3.2.7-3.88-1.37-3.88-1.37-.52-1.34-1.28-1.69-1.28-1.69-1.05-.72.08-.71.08-.71 1.16.08 1.78 1.2 1.78 1.2 1.03 1.77 2.71 1.26 3.37.97.1-.75.4-1.26.72-1.55-2.55-.29-5.22-1.28-5.22-5.67 0-1.25.45-2.28 1.18-3.08-.12-.29-.51-1.47.11-3.06 0 0 .97-.31 3.17 1.18a10.9 10.9 0 0 1 5.78 0c2.2-1.49 3.16-1.18 3.16-1.18.63 1.59.24 2.77.12 3.06.74.8 1.18 1.83 1.18 3.08 0 4.4-2.67 5.37-5.24 5.66.41.36.78 1.08.78 2.18 0 1.57-.01 2.83-.01 3.22 0 .31.21.68.8.56A11.55 11.55 0 0 0 23.5 12.03C23.5 5.66 18.35.5 12 .5Z"/>
3
+ </svg>
@@ -0,0 +1,6 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" aria-hidden="true">
2
+ <path fill="#4285F4" d="M23.49 12.27c0-.79-.07-1.55-.2-2.27H12v4.3h6.45a5.52 5.52 0 0 1-2.39 3.63v3.02h3.87c2.27-2.09 3.56-5.18 3.56-8.68Z"/>
3
+ <path fill="#34A853" d="M12 24c3.24 0 5.95-1.07 7.94-2.91l-3.87-3.02c-1.07.72-2.45 1.14-4.07 1.14-3.13 0-5.79-2.11-6.74-4.95H1.26v3.12A12 12 0 0 0 12 24Z"/>
4
+ <path fill="#FBBC05" d="M5.26 14.26A7.2 7.2 0 0 1 4.88 12c0-.79.14-1.56.38-2.26V6.62H1.26A12 12 0 0 0 0 12c0 1.94.46 3.77 1.26 5.38l4-3.12Z"/>
5
+ <path fill="#EA4335" d="M12 4.77c1.76 0 3.33.61 4.57 1.8l3.43-3.43C17.94 1.18 15.24 0 12 0A12 12 0 0 0 1.26 6.62l4 3.12c.95-2.84 3.61-4.97 6.74-4.97Z"/>
6
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" aria-hidden="true">
2
+ <path fill="#229ED9" d="M12 0C5.373 0 0 5.373 0 12s5.373 12 12 12 12-5.373 12-12S18.627 0 12 0Zm5.894 8.163-1.969 9.287c-.149.659-.538.822-1.09.512l-3.014-2.221-1.454 1.4c-.161.161-.296.296-.605.296l.216-3.076 5.598-5.056c.243-.216-.054-.338-.378-.122L8.283 13.54l-2.978-.929c-.647-.204-.659-.647.135-.957l11.64-4.487c.54-.203 1.012.122.814.996Z"/>
3
+ </svg>
@@ -0,0 +1,196 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <meta name="theme-color" content="#0b1020" />
7
+ <meta name="description" content="PrivateClaw web chat." />
8
+ <title>PrivateClaw Web Chat</title>
9
+ <link rel="icon" type="image/png" href="../assets/privateclaw_app_icon.png?v=20260314-2" />
10
+ <link rel="stylesheet" href="../styles.css?v=20260316-3" />
11
+ </head>
12
+ <body class="chat-page">
13
+ <div class="aurora aurora-a"></div>
14
+ <div class="aurora aurora-b"></div>
15
+ <div class="aurora aurora-c"></div>
16
+ <div class="noise-layer"></div>
17
+
18
+ <div class="chat-shell">
19
+ <header class="chat-header glass-panel">
20
+ <div class="chat-header-left">
21
+ <a class="brand-mark compact" href="../">
22
+ <span class="brand-icon-wrap">
23
+ <img src="../assets/privateclaw_app_icon.png?v=20260314-2" alt="PrivateClaw" class="brand-icon" />
24
+ </span>
25
+ <span class="brand-copy">
26
+ <strong>PrivateClaw</strong>
27
+ <span data-i18n="chat.headerTagline"></span>
28
+ </span>
29
+ </a>
30
+ </div>
31
+
32
+ <div class="chat-header-actions">
33
+ <a class="ghost-button subtle-button icon-link" href="https://github.com/topcheer/PrivateClaw" target="_blank" rel="noreferrer">
34
+ <img src="../assets/icon-github.svg?v=20260314-1" alt="" class="icon-link-image" />
35
+ <span class="sr-only" data-i18n="site.navGithub"></span>
36
+ </a>
37
+ <span class="status-pill" id="status-pill"></span>
38
+ <label class="locale-picker" for="chat-locale-select">
39
+ <span class="sr-only" data-i18n="site.languageLabel"></span>
40
+ <select id="chat-locale-select" aria-label="Language"></select>
41
+ </label>
42
+ <button id="disconnect-button" class="ghost-button subtle-button hidden" type="button" hidden>
43
+ <span data-i18n="chat.disconnectButton"></span>
44
+ </button>
45
+ </div>
46
+ </header>
47
+
48
+ <main class="chat-main">
49
+ <section class="session-sidebar glass-panel" id="session-sidebar">
50
+ <div class="desktop-note hidden" id="desktop-note" hidden>
51
+ <strong data-i18n="chat.desktopNoteTitle"></strong>
52
+ <p data-i18n="chat.desktopNoteBody"></p>
53
+ </div>
54
+
55
+ <div class="session-card-header">
56
+ <div>
57
+ <span class="section-kicker" data-i18n="chat.connectKicker"></span>
58
+ <h1 data-i18n="chat.connectTitle"></h1>
59
+ <p data-i18n="chat.connectBody"></p>
60
+ </div>
61
+ <button id="toggle-invite-button" class="ghost-button subtle-button hidden" type="button" hidden>
62
+ <span data-i18n="chat.changeInviteButton"></span>
63
+ </button>
64
+ </div>
65
+
66
+ <div class="status-panel" id="status-panel">
67
+ <div class="status-panel-icon">&#128274;</div>
68
+ <div>
69
+ <div class="status-panel-title" data-i18n="chat.statusPanelTitle"></div>
70
+ <div class="status-panel-copy" id="status-copy"></div>
71
+ </div>
72
+ </div>
73
+
74
+ <form id="connect-form" class="connect-form">
75
+ <label class="field-label" for="invite-input" data-i18n="chat.inviteInputLabel"></label>
76
+ <textarea id="invite-input" rows="4" spellcheck="false"></textarea>
77
+ <p class="field-help" data-i18n="chat.inviteInputHelp"></p>
78
+ <div class="connect-aux-row">
79
+ <button id="scan-button" class="ghost-button" type="button">
80
+ <span data-i18n="chat.scanButton"></span>
81
+ </button>
82
+ <button id="scan-image-button" class="ghost-button" type="button">
83
+ <span data-i18n="chat.scanImageButton"></span>
84
+ </button>
85
+ <input id="invite-scan-input" type="file" accept="image/*" hidden />
86
+ </div>
87
+ <p class="field-help" id="scan-help" data-i18n="chat.scanHelp"></p>
88
+ <button class="primary-button full-width" id="connect-button" type="submit">
89
+ <span data-i18n="chat.connectButton"></span>
90
+ </button>
91
+ </form>
92
+
93
+ <div class="session-meta hidden" id="session-meta" hidden>
94
+ <div class="meta-grid">
95
+ <div class="meta-item">
96
+ <span class="meta-label" data-i18n="chat.providerLabel"></span>
97
+ <strong id="provider-label">-</strong>
98
+ </div>
99
+ <div class="meta-item">
100
+ <span class="meta-label" data-i18n="chat.expiresLabel"></span>
101
+ <strong id="expires-label">-</strong>
102
+ </div>
103
+ <div class="meta-item">
104
+ <span class="meta-label" data-i18n="chat.modeLabel"></span>
105
+ <strong id="mode-label">-</strong>
106
+ </div>
107
+ <div class="meta-item">
108
+ <span class="meta-label" data-i18n="chat.relayLabel"></span>
109
+ <strong id="relay-label">-</strong>
110
+ </div>
111
+ <div class="meta-item">
112
+ <span class="meta-label" data-i18n="chat.identityLabel"></span>
113
+ <strong id="identity-label">-</strong>
114
+ </div>
115
+ </div>
116
+ <div class="participant-section">
117
+ <div class="participant-header">
118
+ <span data-i18n="chat.participantsLabel"></span>
119
+ <span class="participant-count" id="participant-count">0</span>
120
+ </div>
121
+ <div class="participant-chips" id="participant-chips"></div>
122
+ </div>
123
+ </div>
124
+
125
+ <a class="ghost-button full-width beta-link" href="https://groups.google.com/g/gg-studio-ai-products" target="_blank" rel="noreferrer" data-i18n="chat.betaGroupButton"></a>
126
+ </section>
127
+
128
+ <section class="chat-card glass-panel">
129
+ <div class="messages-scroll" id="messages-scroll">
130
+ <div class="empty-state" id="empty-state">
131
+ <div class="empty-icon">&#10024;</div>
132
+ <h2 data-i18n="chat.emptyTitle"></h2>
133
+ <p data-i18n="chat.emptyBody"></p>
134
+ </div>
135
+ <div class="message-list" id="message-list"></div>
136
+ </div>
137
+
138
+ <div class="draft-strip hidden" id="draft-strip" hidden>
139
+ <div class="draft-strip-header">
140
+ <span data-i18n="chat.draftAttachmentsLabel"></span>
141
+ </div>
142
+ <div class="draft-chip-row" id="draft-chip-row"></div>
143
+ </div>
144
+
145
+ <form class="composer" id="composer-form">
146
+ <input id="file-input" type="file" multiple hidden />
147
+ <button id="attach-button" class="icon-button" type="button" aria-label="Attach file">&#43;</button>
148
+ <button id="command-button" class="icon-button" type="button" aria-label="Slash commands">&#47;</button>
149
+ <textarea id="composer-input" rows="1" spellcheck="true"></textarea>
150
+ <button id="send-button" class="primary-button send-button" type="submit">
151
+ <span data-i18n="chat.sendButton"></span>
152
+ </button>
153
+ </form>
154
+ </section>
155
+ </main>
156
+ </div>
157
+
158
+ <div class="sheet-overlay hidden" id="command-sheet" hidden>
159
+ <div class="sheet-card glass-panel">
160
+ <div class="sheet-header">
161
+ <strong data-i18n="chat.commandSheetTitle"></strong>
162
+ <button id="close-command-sheet" class="ghost-button subtle-button" type="button">Close</button>
163
+ </div>
164
+ <div class="command-list" id="command-list"></div>
165
+ </div>
166
+ </div>
167
+
168
+ <div class="sheet-overlay hidden" id="scanner-sheet" hidden>
169
+ <div class="sheet-card glass-panel scanner-sheet-card">
170
+ <div class="sheet-header">
171
+ <div>
172
+ <strong data-i18n="chat.scannerTitle"></strong>
173
+ <p class="field-help scanner-body" data-i18n="chat.scannerBody"></p>
174
+ </div>
175
+ <button id="close-scanner-sheet" class="ghost-button subtle-button" type="button">
176
+ <span data-i18n="chat.scannerCloseButton"></span>
177
+ </button>
178
+ </div>
179
+ <div class="scanner-preview-frame">
180
+ <video id="scanner-video" class="scanner-video" playsinline muted></video>
181
+ <div class="scanner-guides" aria-hidden="true"></div>
182
+ </div>
183
+ <p class="scanner-status" id="scanner-status" data-i18n="chat.scannerStatusStarting"></p>
184
+ <div class="scanner-actions">
185
+ <button id="scanner-upload-button" class="ghost-button full-width" type="button">
186
+ <span data-i18n="chat.scanImageButton"></span>
187
+ </button>
188
+ </div>
189
+ </div>
190
+ </div>
191
+
192
+ <div class="toast-stack" id="toast-stack"></div>
193
+
194
+ <script type="module" src="../scripts/chat.js?v=20260316-3"></script>
195
+ </body>
196
+ </html>
@@ -0,0 +1,174 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <meta name="theme-color" content="#0b1020" />
7
+ <meta name="description" content="PrivateClaw gives you beautiful, private rooms for the people you trust around one shared OpenClaw." />
8
+ <title>PrivateClaw</title>
9
+ <link rel="icon" type="image/png" href="./assets/privateclaw_app_icon.png?v=20260314-2" />
10
+ <link rel="stylesheet" href="./styles.css?v=20260316-3" />
11
+ </head>
12
+ <body class="marketing-page">
13
+ <div class="aurora aurora-a"></div>
14
+ <div class="aurora aurora-b"></div>
15
+ <div class="aurora aurora-c"></div>
16
+ <div class="noise-layer"></div>
17
+
18
+ <div class="site-shell">
19
+ <header class="topbar glass-panel">
20
+ <a class="brand-mark" href="./" aria-label="PrivateClaw home">
21
+ <span class="brand-icon-wrap">
22
+ <img src="./assets/privateclaw_app_icon.png?v=20260314-2" alt="PrivateClaw" class="brand-icon" />
23
+ </span>
24
+ <span class="brand-copy">
25
+ <strong>PrivateClaw</strong>
26
+ <span data-i18n="site.brandTagline"></span>
27
+ </span>
28
+ </a>
29
+
30
+ <nav class="topbar-actions">
31
+ <a class="ghost-button icon-link" href="https://github.com/topcheer/PrivateClaw" target="_blank" rel="noreferrer">
32
+ <img src="./assets/icon-github.svg?v=20260314-1" alt="" class="icon-link-image" />
33
+ <span class="sr-only" data-i18n="site.navGithub"></span>
34
+ </a>
35
+ <a class="ghost-button icon-link google-icon-link" href="https://groups.google.com/g/gg-studio-ai-products" target="_blank" rel="noreferrer">
36
+ <img src="./assets/icon-google-group.svg?v=20260314-1" alt="" class="icon-link-image" />
37
+ <span class="sr-only" data-i18n="site.navBetaGroup"></span>
38
+ </a>
39
+ <a class="ghost-button icon-link" href="https://t.me/+W3RUKxEO9kIxMmZl" target="_blank" rel="noreferrer">
40
+ <img src="./assets/icon-telegram.svg?v=20260314-1" alt="" class="icon-link-image" />
41
+ <span class="sr-only" data-i18n="site.navTelegramGroup"></span>
42
+ </a>
43
+ <label class="locale-picker" for="locale-select">
44
+ <span class="sr-only" data-i18n="site.languageLabel"></span>
45
+ <select id="locale-select" aria-label="Language"></select>
46
+ </label>
47
+ </nav>
48
+ </header>
49
+
50
+ <main>
51
+ <section class="hero-grid">
52
+ <div class="hero-copy-column">
53
+ <div class="eyebrow-pill" data-i18n="site.heroBadge"></div>
54
+ <h1 class="hero-title" data-i18n="site.heroTitle"></h1>
55
+ <p class="hero-body" data-i18n="site.heroBody"></p>
56
+
57
+ <div class="hero-cta-row">
58
+ <a id="web-entry" class="primary-button" href="./chat/">
59
+ <span data-i18n="site.heroPrimaryCta"></span>
60
+ </a>
61
+ <a class="ghost-button" href="https://groups.google.com/g/gg-studio-ai-products" target="_blank" rel="noreferrer" data-i18n="site.heroSecondaryCta"></a>
62
+ </div>
63
+
64
+ <div class="device-hint card-inline">
65
+ <p id="device-hint-copy" data-i18n="site.heroDesktopHint"></p>
66
+ </div>
67
+
68
+ <div class="coming-soon-row">
69
+ <span class="coming-soon-badge" data-i18n="site.appComingSoon"></span>
70
+ <div class="store-button-grid">
71
+ <a
72
+ class="store-button store-button-live"
73
+ href="https://testflight.apple.com/join/XvgJ9c33"
74
+ target="_blank"
75
+ rel="noreferrer"
76
+ >
77
+ <span class="store-button-label" data-i18n="site.iosComingSoon"></span>
78
+ </a>
79
+ <a
80
+ class="store-button store-button-live"
81
+ href="https://play.google.com/store/apps/details?id=gg.ai.privateclaw"
82
+ target="_blank"
83
+ rel="noreferrer"
84
+ >
85
+ <span class="store-button-label" data-i18n="site.androidComingSoon"></span>
86
+ </a>
87
+ </div>
88
+ <p class="community-footnote" data-i18n="site.androidBetaNote"></p>
89
+ </div>
90
+
91
+ <div class="hero-stats" id="hero-stats"></div>
92
+ </div>
93
+
94
+ <div class="hero-stage-column">
95
+ <div class="hero-stage-frame">
96
+ <div class="hero-stage-backdrop"></div>
97
+ <img src="./assets/privateclaw_feature_graphic.png?v=20260314-1" alt="PrivateClaw feature graphic" class="hero-stage-art" />
98
+ <div class="phone-shell">
99
+ <div class="phone-notch"></div>
100
+ <div class="phone-screen">
101
+ <div class="preview-status-pill" data-i18n="site.previewStatus"></div>
102
+ <h2 class="preview-title" data-i18n="site.previewTitle"></h2>
103
+ <p class="preview-body" data-i18n="site.previewBody"></p>
104
+ <div class="preview-chat" id="preview-chat"></div>
105
+ </div>
106
+ </div>
107
+ </div>
108
+ </div>
109
+ </section>
110
+
111
+ <section class="section-block">
112
+ <div class="section-heading">
113
+ <span class="section-kicker" data-i18n="site.featuresKicker"></span>
114
+ <h2 data-i18n="site.featuresTitle"></h2>
115
+ <p data-i18n="site.featuresBody"></p>
116
+ </div>
117
+ <div class="feature-grid" id="feature-grid"></div>
118
+ </section>
119
+
120
+ <section class="section-block scenic-section">
121
+ <div class="section-heading">
122
+ <span class="section-kicker" data-i18n="site.scenariosKicker"></span>
123
+ <h2 data-i18n="site.scenariosTitle"></h2>
124
+ <p data-i18n="site.scenariosBody"></p>
125
+ </div>
126
+ <div class="scenario-grid" id="scenario-grid"></div>
127
+ </section>
128
+
129
+ <section class="section-block setup-section">
130
+ <div class="section-heading">
131
+ <span class="section-kicker" data-i18n="site.setupKicker"></span>
132
+ <h2 data-i18n="site.setupTitle"></h2>
133
+ <p data-i18n="site.setupBody"></p>
134
+ </div>
135
+ <div class="setup-grid" id="setup-grid"></div>
136
+ </section>
137
+
138
+ <section class="section-block community-section">
139
+ <div class="community-card glass-panel">
140
+ <div>
141
+ <span class="section-kicker" data-i18n="site.betaKicker"></span>
142
+ <h2 data-i18n="site.betaTitle"></h2>
143
+ <p data-i18n="site.betaBody"></p>
144
+ </div>
145
+ <div class="community-actions">
146
+ <a class="primary-button" href="https://groups.google.com/g/gg-studio-ai-products" target="_blank" rel="noreferrer" data-i18n="site.betaPrimaryCta"></a>
147
+ <a class="ghost-button" href="https://t.me/+W3RUKxEO9kIxMmZl" target="_blank" rel="noreferrer" data-i18n="site.betaTelegramCta"></a>
148
+ <span class="community-footnote" data-i18n="site.betaFootnote"></span>
149
+ </div>
150
+ </div>
151
+ </section>
152
+ </main>
153
+
154
+ <footer class="footer-bar glass-panel">
155
+ <div class="footer-copy">
156
+ <strong>PrivateClaw</strong>
157
+ <p data-i18n="site.footerLine"></p>
158
+ <p class="footer-note" data-i18n="site.footerDisclaimer"></p>
159
+ <div class="footer-links">
160
+ <a href="./privacy/" data-i18n="site.footerPrivacy"></a>
161
+ <a href="./terms/" data-i18n="site.footerTerms"></a>
162
+ </div>
163
+ </div>
164
+ <div class="footer-meta footer-legal">
165
+ <span>privateclaw.us</span>
166
+ <span data-i18n="site.footerSupport"></span>
167
+ <span data-i18n="site.footerCopyright"></span>
168
+ </div>
169
+ </footer>
170
+ </div>
171
+
172
+ <script type="module" src="./scripts/site.js?v=20260316-3"></script>
173
+ </body>
174
+ </html>
@@ -0,0 +1,83 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <meta name="theme-color" content="#0b1020" />
7
+ <meta name="description" content="PrivateClaw privacy policy." />
8
+ <title>PrivateClaw Privacy</title>
9
+ <link rel="icon" type="image/png" href="../assets/privateclaw_app_icon.png?v=20260314-2" />
10
+ <link rel="stylesheet" href="../styles.css?v=20260316-3" />
11
+ </head>
12
+ <body class="marketing-page policy-page" data-policy-page="privacy">
13
+ <div class="aurora aurora-a"></div>
14
+ <div class="aurora aurora-b"></div>
15
+ <div class="aurora aurora-c"></div>
16
+ <div class="noise-layer"></div>
17
+
18
+ <div class="site-shell">
19
+ <header class="topbar glass-panel">
20
+ <a class="brand-mark" href="../" aria-label="PrivateClaw home">
21
+ <span class="brand-icon-wrap">
22
+ <img src="../assets/privateclaw_app_icon.png?v=20260314-2" alt="PrivateClaw" class="brand-icon" />
23
+ </span>
24
+ <span class="brand-copy">
25
+ <strong>PrivateClaw</strong>
26
+ <span data-i18n="site.brandTagline"></span>
27
+ </span>
28
+ </a>
29
+
30
+ <nav class="topbar-actions">
31
+ <a class="ghost-button icon-link" href="https://github.com/topcheer/PrivateClaw" target="_blank" rel="noreferrer">
32
+ <img src="../assets/icon-github.svg?v=20260314-1" alt="" class="icon-link-image" />
33
+ <span class="sr-only" data-i18n="site.navGithub"></span>
34
+ </a>
35
+ <a class="ghost-button icon-link google-icon-link" href="https://groups.google.com/g/gg-studio-ai-products" target="_blank" rel="noreferrer">
36
+ <img src="../assets/icon-google-group.svg?v=20260314-1" alt="" class="icon-link-image" />
37
+ <span class="sr-only" data-i18n="site.navBetaGroup"></span>
38
+ </a>
39
+ <a class="ghost-button icon-link" href="https://t.me/+W3RUKxEO9kIxMmZl" target="_blank" rel="noreferrer">
40
+ <img src="../assets/icon-telegram.svg?v=20260314-1" alt="" class="icon-link-image" />
41
+ <span class="sr-only" data-i18n="site.navTelegramGroup"></span>
42
+ </a>
43
+ <label class="locale-picker" for="locale-select">
44
+ <span class="sr-only" data-i18n="site.languageLabel"></span>
45
+ <select id="locale-select" aria-label="Language"></select>
46
+ </label>
47
+ </nav>
48
+ </header>
49
+
50
+ <main class="policy-main">
51
+ <section class="policy-hero glass-panel">
52
+ <span class="section-kicker" id="policy-kicker"></span>
53
+ <h1 id="policy-title"></h1>
54
+ <p class="hero-body" id="policy-body"></p>
55
+ <div class="policy-updated">
56
+ <strong id="policy-updated-label"></strong>
57
+ <span id="policy-updated-value"></span>
58
+ </div>
59
+ </section>
60
+ <section class="policy-sections" id="policy-sections"></section>
61
+ </main>
62
+
63
+ <footer class="footer-bar glass-panel">
64
+ <div class="footer-copy">
65
+ <strong>PrivateClaw</strong>
66
+ <p data-i18n="site.footerLine"></p>
67
+ <p class="footer-note" data-i18n="site.footerDisclaimer"></p>
68
+ <div class="footer-links">
69
+ <a href="../privacy/" data-i18n="site.footerPrivacy"></a>
70
+ <a href="../terms/" data-i18n="site.footerTerms"></a>
71
+ </div>
72
+ </div>
73
+ <div class="footer-meta footer-legal">
74
+ <span>privateclaw.us</span>
75
+ <span data-i18n="site.footerSupport"></span>
76
+ <span data-i18n="site.footerCopyright"></span>
77
+ </div>
78
+ </footer>
79
+ </div>
80
+
81
+ <script type="module" src="../scripts/policy.js?v=20260316-3"></script>
82
+ </body>
83
+ </html>