···8888 switch (info.flavor) {
8989 case 'pds-operator': {
9090 const caps: string[] = [
9191- 'Documents, spreadsheets, slides, diagrams, forms, and calendar',
9191+ 'Documents, spreadsheets, diagrams, forms, and calendar',
9292 'Data stored locally in your browser',
9393 'Sign in with your Bluesky account',
9494 ];
···115115 title: 'Self-Hosted Instance',
116116 summary: 'You are running your own instance of Atmosphere Office. You have full control over your data and configuration.',
117117 capabilities: [
118118- 'Documents, spreadsheets, slides, diagrams, forms, and calendar',
118118+ 'Documents, spreadsheets, diagrams, forms, and calendar',
119119 'Data stored locally in your browser',
120120 'Full control over configuration and data',
121121 'Sign in with your Bluesky account',
···132132 title: 'Atmosphere Office',
133133 summary: 'A local-only office suite for the AT Protocol ecosystem. All your data stays in this browser — nothing is sent to a server.',
134134 capabilities: [
135135- 'Documents, spreadsheets, slides, diagrams, forms, and calendar',
135135+ 'Documents, spreadsheets, diagrams, forms, and calendar',
136136 'All data stored locally in your browser',
137137 'Sign in with your Bluesky account',
138138 'Export and import documents for backup',
+11-19
src/lib/key-warning.ts
···9494function copyForLevel(level: KeyLossRiskLevel): ModalCopy {
9595 switch (level) {
9696 case 'anonymous':
9797- return {
9898- title: 'Save this link before you close the tab',
9999- body:
100100- 'This document is end-to-end encrypted. The decryption key lives in the URL after the "#". ' +
101101- 'If you lose this URL, nothing can recover the document. ' +
102102- 'Sign in to save the key to your device, or copy the link somewhere safe.',
103103- cta: 'I understand',
104104- tone: 'warn',
105105- };
10697 case 'at-risk':
10798 return {
108108- title: "Back up this document's key",
9999+ title: 'This document is stored locally',
109100 body:
110110- "This document is end-to-end encrypted. The key hasn't been saved to your device yet. " +
111111- 'Keep this tab open until the key saves, or copy the URL as a manual backup.',
112112- cta: 'Got it',
101101+ 'Your data only exists in this browser. If you clear your browser data, ' +
102102+ 'use a different device, or are in a private/incognito window, your document will be lost. ' +
103103+ 'Export your work when you are done.',
104104+ cta: 'I understand',
113105 tone: 'warn',
114106 };
115107 case 'safe':
116108 return {
117117- title: 'Your document is safely encrypted',
109109+ title: 'This document is stored locally',
118110 body:
119119- 'This document is end-to-end encrypted. Its key is saved on this device. ' +
120120- 'Export your keys regularly to protect against browser data loss.',
111111+ 'Your data only exists in this browser on this device. ' +
112112+ 'Export your work regularly to protect against browser data loss.',
121113 cta: 'Close',
122114 tone: 'info',
123115 };
···261253 const updateTitle = (): void => {
262254 const level = classifyKeyLossRisk({ user: current.user, hasLocalKey: current.hasLocalKey });
263255 const titles: Record<KeyLossRiskLevel, string> = {
264264- anonymous: 'End-to-end encrypted \u2014 save this link to keep access',
265265- 'at-risk': 'End-to-end encrypted \u2014 key not yet saved',
266266- safe: 'End-to-end encrypted \u2014 key saved on this device',
256256+ anonymous: 'Stored locally \u2014 export your work to keep it safe',
257257+ 'at-risk': 'Stored locally \u2014 export your work to keep it safe',
258258+ safe: 'Stored locally on this device',
267259 };
268260 btn.title = titles[level];
269261 };