browser-cookie-bridge 1.0.0 → 1.2.0
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.
- package/README.md +67 -31
- package/THIRD_PARTY_NOTICES.md +11 -0
- package/extension-template/manifest.json +1 -1
- package/macos-app/Info.plist +3 -3
- package/macos-app/Resources/BrowserIcons/browserless.svg +6 -0
- package/macos-app/Sources/BraveCodexSyncApp/BraveCodexSyncApp.swift +222 -43
- package/macos-app/Sources/BraveCodexSyncApp/SyncModel.swift +247 -27
- package/package.json +23 -7
- package/src/browserless-runner.js +13 -0
- package/src/browserless.js +108 -0
- package/src/cli.js +109 -4
- package/src/config.js +49 -14
- package/src/paths.js +1 -1
- package/src/updater.js +89 -27
package/README.md
CHANGED
|
@@ -4,15 +4,16 @@
|
|
|
4
4
|
|
|
5
5
|
<h1>Browser Cookie Bridge</h1>
|
|
6
6
|
|
|
7
|
-
<strong>Move
|
|
7
|
+
<strong>Move signed-in sessions locally—or explicitly upload one to Browserless Cloud.</strong>
|
|
8
8
|
|
|
9
|
-
<p>Brave, Chrome, Edge, Arc, Vivaldi, Opera, and Comet ·
|
|
9
|
+
<p>Brave, Chrome, Edge, Arc, Vivaldi, Opera, and Comet · ChatGPT Codex import · optional Browserless authenticated profiles.</p>
|
|
10
10
|
|
|
11
11
|
<p>
|
|
12
|
-
<img src="https://img.shields.io/badge/macOS-13%2B-111111?logo=apple&logoColor=white" alt="macOS 13+" />
|
|
12
|
+
<img src="https://img.shields.io/badge/macOS-13.5%2B-111111?logo=apple&logoColor=white" alt="macOS 13.5+" />
|
|
13
13
|
<img src="https://img.shields.io/badge/Swift-6-8E2735?logo=swift&logoColor=white" alt="Swift 6" />
|
|
14
|
-
<img src="https://img.shields.io/badge/Node.js-
|
|
15
|
-
<img src="https://img.shields.io/
|
|
14
|
+
<img src="https://img.shields.io/badge/Node.js-24%2B-3C873A?logo=nodedotjs&logoColor=white" alt="Node.js 24+" />
|
|
15
|
+
<a href="https://www.npmjs.com/package/browser-cookie-bridge"><img src="https://img.shields.io/npm/v/browser-cookie-bridge?logo=npm&color=CB3837" alt="browser-cookie-bridge on npm" /></a>
|
|
16
|
+
<img src="https://img.shields.io/badge/local--first-cloud%20optional-C68B3C" alt="Local-first, cloud optional" />
|
|
16
17
|
<img src="https://img.shields.io/github/stars/apoorvdarshan/browser-cookie-bridge?logo=github&color=C68B3C" alt="GitHub stars" />
|
|
17
18
|
<a href="https://www.producthunt.com/products/browser-cookie-bridge"><img src="https://img.shields.io/badge/Product%20Hunt-View%20launch-DA552F?logo=producthunt&logoColor=white" alt="Browser Cookie Bridge on Product Hunt" /></a>
|
|
18
19
|
<img src="https://img.shields.io/badge/license-MIT-3DA639" alt="MIT License" />
|
|
@@ -20,6 +21,8 @@
|
|
|
20
21
|
|
|
21
22
|
<p>
|
|
22
23
|
<a href="#installation"><b>Install</b></a> ·
|
|
24
|
+
<a href="https://github.com/apoorvdarshan/browser-cookie-bridge/releases/latest">DMG</a> ·
|
|
25
|
+
<a href="https://www.npmjs.com/package/browser-cookie-bridge">npm</a> ·
|
|
23
26
|
<a href="#how-it-works">How it works</a> ·
|
|
24
27
|
<a href="#security--privacy">Security</a> ·
|
|
25
28
|
<a href="CONTRIBUTING.md">Contribute</a> ·
|
|
@@ -28,7 +31,10 @@
|
|
|
28
31
|
<a href="#support">Support</a>
|
|
29
32
|
</p>
|
|
30
33
|
|
|
31
|
-
<p
|
|
34
|
+
<p>
|
|
35
|
+
<a href="https://github.com/apoorvdarshan/browser-cookie-bridge/releases/latest/download/Browser-Cookie-Bridge-arm64.dmg"><b>Download for Apple silicon</b></a>
|
|
36
|
+
· <a href="https://github.com/apoorvdarshan/browser-cookie-bridge/releases/latest/download/Browser-Cookie-Bridge-x64.dmg">Download for Intel</a>
|
|
37
|
+
</p>
|
|
32
38
|
|
|
33
39
|
<br />
|
|
34
40
|
|
|
@@ -38,24 +44,25 @@
|
|
|
38
44
|
|
|
39
45
|
---
|
|
40
46
|
|
|
41
|
-
> **
|
|
47
|
+
> **Version 1.2.0 adds an optional Browserless Cloud destination.** It is destination-only, manual-only, and visually separated from local transfers. Importing into ChatGPT Codex remains an intentionally unsupported direct integration and requires Codex to be completely closed.
|
|
42
48
|
|
|
43
49
|
## Why Browser Cookie Bridge
|
|
44
50
|
|
|
45
51
|
Signing into the same sites across several browsers is repetitive. Export files are awkward, password managers do not move active sessions, and ChatGPT Codex does not currently offer a Brave import button.
|
|
46
52
|
|
|
47
|
-
Browser Cookie Bridge gives those
|
|
53
|
+
Browser Cookie Bridge gives those browser profiles a small, native control panel. Local browser and Codex transfers stay on the Mac. If you explicitly select Browserless Cloud and click Upload, the app can instead send authenticated profile state to your own Browserless account.
|
|
48
54
|
|
|
49
55
|
## Features
|
|
50
56
|
|
|
51
57
|
- 🍪 **Cookie and session transfer** — cookies are enabled by default, including supported domain, path, expiry, security, `SameSite`, and partition attributes.
|
|
52
58
|
- 🌐 **Seven Chromium browsers** — Brave, Chrome, Edge, Arc, Vivaldi, Opera, and Perplexity Comet can be sources or destinations.
|
|
53
59
|
- ✨ **ChatGPT Codex import** — merge selected local browser data into Codex's built-in browser; Codex is destination-only.
|
|
60
|
+
- ☁️ **Optional Browserless upload** — create or refresh a Browserless authenticated profile with cookies, local storage, and IndexedDB; Browserless is destination-only and manual-only.
|
|
54
61
|
- 🕘 **Background automation** — sync when you sign in, at a fixed daily time, or whenever you choose.
|
|
55
62
|
- ◉ **Native menu-bar app** — closing the window removes the Dock icon while the helper continues running.
|
|
56
63
|
- 🧯 **Backup and rollback** — Codex's database is backed up, modified on a separate copy, integrity-checked, and restored if replacement fails.
|
|
57
|
-
- ⬆️ **Built-in updates** —
|
|
58
|
-
- 🔒 **Local-first** — no account, analytics,
|
|
64
|
+
- ⬆️ **Built-in updates** — checks for GitHub releases, verifies the DMG checksum, installs in place, and relaunches the app.
|
|
65
|
+
- 🔒 **Local-first** — local paths use no account, analytics, cookie logs, or remote relay; the separate Browserless path runs only after explicit selection and confirmation.
|
|
59
66
|
|
|
60
67
|
## What it transfers
|
|
61
68
|
|
|
@@ -63,6 +70,7 @@ Browser Cookie Bridge gives those local browser profiles a small, native control
|
|
|
63
70
|
|---|---:|---|
|
|
64
71
|
| **Cookies and sessions** | ✅ Default | Transfers supported cookie values and attributes |
|
|
65
72
|
| **History URLs** | ◐ Optional | Original visit times and page titles cannot be preserved |
|
|
73
|
+
| **Local storage and IndexedDB** | ◐ Browserless only | Included only in an explicit Browserless authenticated-profile upload |
|
|
66
74
|
| **Passwords** | — Never | Chromium extensions cannot read the browser password store |
|
|
67
75
|
| **Bookmarks, autofill, payments** | — Never | Not requested or accessed |
|
|
68
76
|
| **iCloud Keychain** | — Never | Remains completely separate |
|
|
@@ -71,27 +79,23 @@ Some websites bind sessions to a specific device or browser and may ask you to s
|
|
|
71
79
|
|
|
72
80
|
## Requirements
|
|
73
81
|
|
|
74
|
-
- **macOS 13
|
|
75
|
-
- **Node.js 22.5+**
|
|
76
|
-
- **Xcode Command Line Tools** — install with `xcode-select --install`
|
|
82
|
+
- **macOS 13.5+**
|
|
77
83
|
- A supported Chromium browser, or ChatGPT Codex as the destination
|
|
78
84
|
|
|
85
|
+
The DMG is self-contained. Node.js 24+ and Xcode Command Line Tools are required only for npm or source installation.
|
|
86
|
+
|
|
79
87
|
## Installation
|
|
80
88
|
|
|
81
|
-
###
|
|
89
|
+
### Download a DMG — recommended
|
|
82
90
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
cd browser-cookie-bridge
|
|
86
|
-
npm test
|
|
87
|
-
npm run build:app
|
|
88
|
-
```
|
|
91
|
+
- **[Apple silicon DMG](https://github.com/apoorvdarshan/browser-cookie-bridge/releases/latest/download/Browser-Cookie-Bridge-arm64.dmg)** — M1, M2, M3, M4, and newer
|
|
92
|
+
- **[Intel DMG](https://github.com/apoorvdarshan/browser-cookie-bridge/releases/latest/download/Browser-Cookie-Bridge-x64.dmg)** — Intel-based Macs
|
|
89
93
|
|
|
90
|
-
|
|
94
|
+
Open the DMG, drag **Browser Cookie Bridge** onto **Applications**, then open it from Applications. The current public build is checksum-verified and ad-hoc signed but not Apple-notarized, so macOS may require **Control-click → Open** on first launch. It does not require Node.js, Xcode, Terminal, or an administrator password.
|
|
91
95
|
|
|
92
96
|
### Via npm
|
|
93
97
|
|
|
94
|
-
|
|
98
|
+
Run the published package directly:
|
|
95
99
|
|
|
96
100
|
```bash
|
|
97
101
|
npx browser-cookie-bridge install-app
|
|
@@ -99,6 +103,21 @@ npx browser-cookie-bridge install-app
|
|
|
99
103
|
|
|
100
104
|
No administrator password is needed. The app is built from source on your Mac and installed in your user Applications folder unless an existing writable system Applications copy is being updated.
|
|
101
105
|
|
|
106
|
+
Both installation methods use the same bundle identifier and the same settings under `~/Library/Application Support/BraveCodexCookieSync`. Installing the DMG after npm does not create a separate product identity: the system Applications copy becomes canonical, and a stale matching user Applications copy is moved to the Trash on launch. Future updates replace that same app in place.
|
|
107
|
+
|
|
108
|
+
**[View `browser-cookie-bridge` on npm →](https://www.npmjs.com/package/browser-cookie-bridge)**
|
|
109
|
+
|
|
110
|
+
### From source
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
git clone https://github.com/apoorvdarshan/browser-cookie-bridge.git
|
|
114
|
+
cd browser-cookie-bridge
|
|
115
|
+
npm test
|
|
116
|
+
npm run build:app
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
The final command compiles the native SwiftUI app, enables **Open at login**, **Sync at login**, and the **menu-bar helper**, then launches it. A first install uses `~/Applications/Browser Cookie Bridge.app` without requesting administrator access. If an existing `/Applications/Browser Cookie Bridge.app` is present, later builds and updates keep using that system Applications copy instead of creating a duplicate. Daily sync stays off until you enable it.
|
|
120
|
+
|
|
102
121
|
## Setup
|
|
103
122
|
|
|
104
123
|
### Browser → ChatGPT Codex
|
|
@@ -123,21 +142,34 @@ Browser-to-browser transfers use a small unpacked extension at each selected end
|
|
|
123
142
|
|
|
124
143
|
Generated extensions live under `~/Library/Application Support/BraveCodexCookieSync/` and contain a random, user-only local broker token. Do not share those folders.
|
|
125
144
|
|
|
145
|
+
### Browser → Browserless Cloud (optional)
|
|
146
|
+
|
|
147
|
+
This path uses the official Browserless CLI and is deliberately separate from local sync.
|
|
148
|
+
|
|
149
|
+
1. Select **Browserless Cloud** as the destination.
|
|
150
|
+
2. Enter your Browserless API token, cloud profile name, region, and optional domain allowlist. The token is stored in macOS Keychain; it is never written to the app configuration or command arguments.
|
|
151
|
+
3. Quit the selected source browser so its profile can be copied consistently.
|
|
152
|
+
4. Review the cloud warning and click **Upload now**.
|
|
153
|
+
|
|
154
|
+
The upload creates the named Browserless profile the first time and refreshes it on later runs. It may contain cookies, local storage, and IndexedDB; history and saved passwords are excluded. Browserless uploads never run from Daily sync or Sync at login. Browser Cookie Bridge disables Browserless CLI telemetry for this integration. Comet is not currently supported by the Browserless capture CLI.
|
|
155
|
+
|
|
156
|
+
The official CLI records the Browserless upload-disclaimer acceptance timestamp in `~/.browserless/config.json`. Browser Cookie Bridge does not store its API token there.
|
|
157
|
+
|
|
126
158
|
## Usage
|
|
127
159
|
|
|
128
160
|
| Control | What it does |
|
|
129
161
|
|---|---|
|
|
130
162
|
| **Export from** | Selects the browser whose data will be read |
|
|
131
|
-
| **Import into** | Selects a different browser
|
|
163
|
+
| **Import into** | Selects a different browser, ChatGPT Codex, or optional Browserless Cloud |
|
|
132
164
|
| **Cookies** | Moves cookies and supported session attributes; on by default |
|
|
133
165
|
| **History URLs** | Adds visited URLs without their original timestamps or titles |
|
|
134
166
|
| **Daily sync** | Runs at one fixed local time; off by default |
|
|
135
167
|
| **Sync at login** | Runs once whenever you sign in; on by default |
|
|
136
168
|
| **Open at login** | Starts the background app after macOS login; on by default |
|
|
137
169
|
| **Show in menu bar** | Keeps sync, status, updates, and support actions close at hand |
|
|
138
|
-
| **Check for updates** | Finds a newer
|
|
170
|
+
| **Check for updates** | Finds a newer GitHub release, verifies its DMG, and offers install + relaunch |
|
|
139
171
|
|
|
140
|
-
Automation
|
|
172
|
+
Automation uses the saved source, destination, and data choices for local transfers. A scheduled Codex sync safely exits without making changes when Codex is open. Browserless cloud uploads are always manual and require an explicit upload action.
|
|
141
173
|
|
|
142
174
|
## CLI
|
|
143
175
|
|
|
@@ -145,7 +177,7 @@ Automation always uses the source, destination, and data choices currently saved
|
|
|
145
177
|
browser-cookie-bridge install-app [--no-open]
|
|
146
178
|
browser-cookie-bridge setup [--hour 9] [--minute 0] [--no-schedule]
|
|
147
179
|
browser-cookie-bridge preferences --source brave --target codex --cookies on --history off
|
|
148
|
-
browser-cookie-bridge sync [--timeout 300]
|
|
180
|
+
browser-cookie-bridge sync [--timeout 300] [--allow-cloud-upload]
|
|
149
181
|
browser-cookie-bridge doctor
|
|
150
182
|
browser-cookie-bridge enable-login-sync
|
|
151
183
|
browser-cookie-bridge disable-login-sync
|
|
@@ -154,7 +186,7 @@ browser-cookie-bridge disable-app-login
|
|
|
154
186
|
browser-cookie-bridge remove-schedule
|
|
155
187
|
```
|
|
156
188
|
|
|
157
|
-
Supported source IDs are `brave`, `chrome`, `edge`, `arc`, `vivaldi`, `opera`, and `comet`. Target IDs are the same plus `codex`. The same browser cannot be both endpoints.
|
|
189
|
+
Supported source IDs are `brave`, `chrome`, `edge`, `arc`, `vivaldi`, `opera`, and `comet`. Target IDs are the same plus `codex` and `browserless`. The same browser cannot be both endpoints. Browserless requires `BROWSERLESS_TOKEN` and the explicit `--allow-cloud-upload` flag; the native app supplies the token from Keychain without placing it in the OS command line or app configuration.
|
|
158
190
|
|
|
159
191
|
## How it works
|
|
160
192
|
|
|
@@ -162,6 +194,7 @@ Supported source IDs are `brave`, `chrome`, `edge`, `arc`, `vivaldi`, `opera`, a
|
|
|
162
194
|
|---|---|
|
|
163
195
|
| **Browser → browser** | Unpacked extensions connect to a short-lived broker on IPv4 loopback. Selected data stays in memory and is never written to logs. |
|
|
164
196
|
| **Browser → Codex** | The app reads the selected local Chromium profile, creates a consistent Codex SQLite backup, merges into a working copy, validates it, then replaces the destination atomically. |
|
|
197
|
+
| **Browser → Browserless** | The bundled official Browserless CLI copies a closed local profile, captures cookies/local storage/IndexedDB, and uploads it directly to the selected Browserless region. |
|
|
165
198
|
|
|
166
199
|
The broker validates a random token and extension origin, limits payload size, and normally exits after five minutes. Only the endpoints selected in the app respond to a transfer.
|
|
167
200
|
|
|
@@ -173,6 +206,7 @@ The broker validates a random token and extension origin, limits payload size, a
|
|
|
173
206
|
- The app refuses unknown Codex database schemas instead of guessing.
|
|
174
207
|
- Imported Codex rows use an empty `encrypted_value` because OpenAI's Safe Storage key is protected by a private macOS Keychain access group. Those imported rows can therefore remain readable to software running as your macOS user until the website refreshes them.
|
|
175
208
|
- Anyone who can use your logged-in macOS account or modify a generated extension may be able to access transferred browser sessions.
|
|
209
|
+
- The optional Browserless destination sends authenticated state to Browserless under their terms and privacy practices. Its API token is stored in macOS Keychain, uploads are manual, and Browserless CLI telemetry is disabled by the app.
|
|
176
210
|
|
|
177
211
|
Cookies are credentials. Review the source, protect your macOS account, and transfer only between profiles you trust.
|
|
178
212
|
|
|
@@ -180,12 +214,12 @@ Found a vulnerability? Read [SECURITY.md](SECURITY.md) and report it privately.
|
|
|
180
214
|
|
|
181
215
|
## Releases
|
|
182
216
|
|
|
183
|
-
Pushing a semantic version tag runs tests, validates that package and app versions match, publishes to npm, and creates a GitHub Release with the tarball attached.
|
|
217
|
+
Pushing a semantic version tag runs tests, validates that package and app versions match, builds separate Apple-silicon and Intel DMGs, publishes to npm, and creates a GitHub Release with the tarball, DMGs, and SHA-256 files attached.
|
|
184
218
|
|
|
185
219
|
```bash
|
|
186
220
|
npm run release:check
|
|
187
|
-
git tag
|
|
188
|
-
git push origin
|
|
221
|
+
git tag vX.Y.Z
|
|
222
|
+
git push origin vX.Y.Z
|
|
189
223
|
```
|
|
190
224
|
|
|
191
225
|
A normal branch push does not publish anything.
|
|
@@ -199,6 +233,8 @@ Contributions are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for local setu
|
|
|
199
233
|
If Browser Cookie Bridge is useful to you:
|
|
200
234
|
|
|
201
235
|
- ⭐ **Star** the repository
|
|
236
|
+
- ⬇️ **[Download the latest DMG](https://github.com/apoorvdarshan/browser-cookie-bridge/releases/latest)**
|
|
237
|
+
- 📦 **[Install from npm](https://www.npmjs.com/package/browser-cookie-bridge)**
|
|
202
238
|
- 🐛 **[Report a bug](https://github.com/apoorvdarshan/browser-cookie-bridge/issues/new?template=bug_report.yml)** — never include cookie values or tokens
|
|
203
239
|
- ☕ **[Support on Ko-fi](https://ko-fi.com/apoorvdarshan)**
|
|
204
240
|
- 𝕏 **Follow [@apoorvdarshan](https://x.com/apoorvdarshan)**
|
|
@@ -218,4 +254,4 @@ npm run web
|
|
|
218
254
|
|
|
219
255
|
[MIT](LICENSE) © 2026 [Apoorv Darshan](https://github.com/apoorvdarshan)
|
|
220
256
|
|
|
221
|
-
<sub>Not affiliated with Brave, Google, Microsoft, The Browser Company, Vivaldi, Opera, Perplexity, or
|
|
257
|
+
<sub>Not affiliated with Brave, Google, Microsoft, The Browser Company, Vivaldi, Opera, Perplexity, OpenAI, or Browserless. Their names and marks belong to their respective owners.</sub>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Third-party notices
|
|
2
|
+
|
|
3
|
+
Browser Cookie Bridge includes the official Browserless CLI for the optional, user-initiated Browserless Cloud destination.
|
|
4
|
+
|
|
5
|
+
## @browserless.io/cli
|
|
6
|
+
|
|
7
|
+
- Version: 0.3.0
|
|
8
|
+
- License: MIT
|
|
9
|
+
- Source: https://github.com/browserless/browserless-cli
|
|
10
|
+
|
|
11
|
+
The Browserless CLI's license and the licenses shipped with its npm dependencies remain included inside `node_modules` in self-contained app builds. Browser Cookie Bridge disables Browserless CLI telemetry for uploads started through this app.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifest_version": 3,
|
|
3
3
|
"name": "Browser Cookie Bridge",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.2.0",
|
|
5
5
|
"description": "Transfers selected browser data locally between supported browsers and into ChatGPT Codex.",
|
|
6
6
|
"key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5o6lDkXzU/23Jm2QRk4mfuxNnr3VlEIjRHcZr93Gdo7PI7asHJQhigaMGT6UOz0lkaTn1F+TGIPlsJo9GNBSsxbCfxWoBSXcFQFrPolY5LEfKaMtZQQ6eb4UAnp+bbUwb1den4On0piWU47Yzl6i0Jcdg4EG5H1kCSF/6nJsbKgF7OTaR/3drULu40yRvflzSXRhly3UDO7c5mgHJsaMwVV+VILsxbcPOoRINjuo3zDC737HFs67dpf38xF3tjSVL0HURAWKKobMvfABiDfVEm5O0Lvf+57d1Ib12QLT2qtVXNDy3iYwX+w2S0wH2vIMsfvoFPlRdmeqft70kZOqXwIDAQAB",
|
|
7
7
|
"permissions": ["alarms", "cookies", "history"],
|
package/macos-app/Info.plist
CHANGED
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
<key>CFBundleInfoDictionaryVersion</key><string>6.0</string>
|
|
11
11
|
<key>CFBundleName</key><string>Browser Cookie Bridge</string>
|
|
12
12
|
<key>CFBundlePackageType</key><string>APPL</string>
|
|
13
|
-
<key>CFBundleShortVersionString</key><string>1.
|
|
14
|
-
<key>CFBundleVersion</key><string>
|
|
15
|
-
<key>LSMinimumSystemVersion</key><string>13.
|
|
13
|
+
<key>CFBundleShortVersionString</key><string>1.2.0</string>
|
|
14
|
+
<key>CFBundleVersion</key><string>26</string>
|
|
15
|
+
<key>LSMinimumSystemVersion</key><string>13.5</string>
|
|
16
16
|
<key>NSHighResolutionCapable</key><true/>
|
|
17
17
|
</dict>
|
|
18
18
|
</plist>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="256px" height="256px" viewBox="0 0 256 256">
|
|
3
|
+
<style>.s0{fill:black}@media (prefers-color-scheme:dark){.s0{fill:white}}</style>
|
|
4
|
+
<path class="s0" d="M 60.96875 0 C 61.0625 0.03125 67.5625 3.75 89.75 16.625 L 89.75 119.5625 C 89.75 217.46875 89.78125 222.5 90.1875 222.375 C 90.4375 222.3125 107.625 213.875 166.21875 185.125 L 166.25 169.6875 C 166.25 157.4375 166.1875 154.28125 165.9375 154.34375 C 165.78125 154.40625 155.03125 159.34375 142.0625 165.34375 C 129.09375 171.34375 118.4375 176.21875 118.375 176.1875 C 118.3125 176.15625 118.3125 144.09375 118.375 33.78125 L 147.25 50.78125 L 147.53125 114.875 L 195.375 142.71875 L 195.5 203.625 L 142.21875 229.75 C 112.9375 244.125 88.75 255.90625 88.53125 255.9375 C 88.3125 256 81.90625 251.875 60.46875 237.625 L 60.5 163.5 C 60.5 122.71875 60.5625 69.28125 60.6875 44.6875 C 60.75 20.09375 60.90625 0 60.96875 0 Z" />
|
|
5
|
+
</svg>
|
|
6
|
+
|