Initial commit: goblin.st static landing site
Static landing page for goblin.st (index, privacy, terms) with Geist fonts and brand assets. Matches the currently-deployed /opt/goblin/www. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,3 @@
|
|||||||
|
*.bak-*
|
||||||
|
.DS_Store
|
||||||
|
.claude/
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
Copyright 2024 The Geist Project Authors (https://github.com/vercel/geist-font)
|
||||||
|
|
||||||
|
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||||
|
This license is copied below, and is also available with a FAQ at:
|
||||||
|
https://openfontlicense.org
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------------------------
|
||||||
|
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||||
|
-----------------------------------------------------------
|
||||||
|
|
||||||
|
PREAMBLE
|
||||||
|
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||||
|
development of collaborative font projects, to support the font creation
|
||||||
|
efforts of academic and linguistic communities, and to provide a free and
|
||||||
|
open framework in which fonts may be shared and improved in partnership
|
||||||
|
with others.
|
||||||
|
|
||||||
|
The OFL allows the licensed fonts to be used, studied, modified and
|
||||||
|
redistributed freely as long as they are not sold by themselves. The
|
||||||
|
fonts, including any derivative works, can be bundled, embedded,
|
||||||
|
redistributed and/or sold with any software provided that any reserved
|
||||||
|
names are not used by derivative works. The fonts and derivatives,
|
||||||
|
however, cannot be released under any other type of license. The
|
||||||
|
requirement for fonts to remain under this license does not apply
|
||||||
|
to any document created using the fonts or their derivatives.
|
||||||
|
|
||||||
|
DEFINITIONS
|
||||||
|
"Font Software" refers to the set of files released by the Copyright
|
||||||
|
Holder(s) under this license and clearly marked as such. This may
|
||||||
|
include source files, build scripts and documentation.
|
||||||
|
|
||||||
|
"Reserved Font Name" refers to any names specified as such after the
|
||||||
|
copyright statement(s).
|
||||||
|
|
||||||
|
"Original Version" refers to the collection of Font Software components as
|
||||||
|
distributed by the Copyright Holder(s).
|
||||||
|
|
||||||
|
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||||
|
or substituting -- in part or in whole -- any of the components of the
|
||||||
|
Original Version, by changing formats or by porting the Font Software to a
|
||||||
|
new environment.
|
||||||
|
|
||||||
|
"Author" refers to any designer, engineer, programmer, technical
|
||||||
|
writer or other person who contributed to the Font Software.
|
||||||
|
|
||||||
|
PERMISSION & CONDITIONS
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||||
|
redistribute, and sell modified and unmodified copies of the Font
|
||||||
|
Software, subject to the following conditions:
|
||||||
|
|
||||||
|
1) Neither the Font Software nor any of its individual components,
|
||||||
|
in Original or Modified Versions, may be sold by itself.
|
||||||
|
|
||||||
|
2) Original or Modified Versions of the Font Software may be bundled,
|
||||||
|
redistributed and/or sold with any software, provided that each copy
|
||||||
|
contains the above copyright notice and this license. These can be
|
||||||
|
included either as stand-alone text files, human-readable headers or
|
||||||
|
in the appropriate machine-readable metadata fields within text or
|
||||||
|
binary files as long as those fields can be easily viewed by the user.
|
||||||
|
|
||||||
|
3) No Modified Version of the Font Software may use the Reserved Font
|
||||||
|
Name(s) unless explicit written permission is granted by the corresponding
|
||||||
|
Copyright Holder. This restriction only applies to the primary font name as
|
||||||
|
presented to the users.
|
||||||
|
|
||||||
|
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||||
|
Software shall not be used to promote, endorse or advertise any
|
||||||
|
Modified Version, except to acknowledge the contribution(s) of the
|
||||||
|
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||||
|
permission.
|
||||||
|
|
||||||
|
5) The Font Software, modified or unmodified, in part or in whole,
|
||||||
|
must be distributed entirely under this license, and must not be
|
||||||
|
distributed under any other license. The requirement for fonts to
|
||||||
|
remain under this license does not apply to any document created
|
||||||
|
using the Font Software.
|
||||||
|
|
||||||
|
TERMINATION
|
||||||
|
This license becomes null and void if any of the above conditions are
|
||||||
|
not met.
|
||||||
|
|
||||||
|
DISCLAIMER
|
||||||
|
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||||
|
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||||
|
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||||
|
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||||
|
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 37 KiB |
@@ -0,0 +1,48 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||||
|
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||||
|
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="600.000000pt" height="601.000000pt" viewBox="0 0 600.000000 601.000000"
|
||||||
|
preserveAspectRatio="xMidYMid meet">
|
||||||
|
<g transform="translate(0.000000,601.000000) scale(0.050000,-0.050000)"
|
||||||
|
fill="#000000" stroke="none">
|
||||||
|
<path d="M195 11784 c-515 -1551 98 -2966 1520 -3514 171 -66 171 -72 2 -72
|
||||||
|
-415 0 -893 215 -1273 572 -178 167 -181 163 -77 -83 478 -1130 1770 -1734
|
||||||
|
2963 -1384 283 83 309 101 420 292 376 648 1038 1116 1763 1245 l143 26 100
|
||||||
|
202 c887 1780 -911 3344 -3076 2675 l-170 -52 220 -14 c480 -32 818 -114 1118
|
||||||
|
-273 258 -137 548 -414 624 -597 l32 -76 -87 76 c-435 375 -938 524 -1557 461
|
||||||
|
-273 -28 -340 -39 -740 -120 -893 -182 -1449 24 -1756 650 l-98 200 -71 -214z"/>
|
||||||
|
<path d="M9720 10053 c0 -146 -256 -556 -441 -705 -381 -308 -766 -380 -1559
|
||||||
|
-290 -1178 133 -2048 -270 -2488 -1152 -57 -115 -92 -149 -92 -89 0 78 123
|
||||||
|
415 199 548 43 74 73 135 67 135 -25 0 -397 -184 -512 -253 -962 -578 -1594
|
||||||
|
-1675 -1594 -2767 0 -209 -2 -210 -154 -95 -393 297 -523 388 -751 525 -321
|
||||||
|
192 -571 311 -843 400 -290 95 -302 94 -242 -15 52 -95 166 -372 191 -465 9
|
||||||
|
-33 34 -121 56 -195 48 -161 120 -508 194 -935 118 -684 437 -1371 795 -1715
|
||||||
|
185 -178 324 -239 594 -262 144 -13 150 -15 147 -63 -1 -27 -14 -174 -28 -326
|
||||||
|
-83 -902 258 -1568 1037 -2024 139 -81 161 -80 127 4 -37 96 -85 369 -96 546
|
||||||
|
l-10 170 46 -60 c328 -431 869 -753 1497 -891 351 -77 1285 -67 1426 15 9 5
|
||||||
|
-104 50 -250 98 -653 218 -1499 778 -1704 1129 -43 73 -54 78 188 -79 230
|
||||||
|
-149 543 -303 750 -369 783 -249 1542 -242 2332 20 l274 91 106 -83 c298 -236
|
||||||
|
798 -328 1259 -231 197 42 196 38 32 169 -156 124 -344 356 -443 546 l-60 116
|
||||||
|
70 52 c544 408 783 906 627 1300 l-41 102 170 138 c442 355 584 624 813 1537
|
||||||
|
186 742 257 952 452 1328 l118 227 -145 -14 c-693 -68 -1425 -411 -1729 -810
|
||||||
|
-99 -130 -112 -127 -165 44 -54 175 -217 511 -308 636 -64 88 -70 91 -224 117
|
||||||
|
-419 70 -947 328 -1223 597 -98 96 -153 192 -70 122 41 -35 332 -177 487 -238
|
||||||
|
97 -38 146 -55 348 -118 335 -105 983 -129 1280 -47 1070 294 1688 1238 1761
|
||||||
|
2691 16 304 7 325 -82 190 -88 -134 -504 -535 -669 -645 -618 -412 -1228 -507
|
||||||
|
-1895 -296 -192 60 -199 77 -67 163 428 277 628 871 480 1428 -20 75 -38 98
|
||||||
|
-38 48z m-682 -4962 c306 -158 601 -1396 416 -1747 -118 -224 -283 -345 -526
|
||||||
|
-387 -455 -78 -577 227 -456 1143 96 725 320 1118 566 991z m-3115 -156 c371
|
||||||
|
-172 699 -815 799 -1565 34 -251 19 -307 -108 -422 -575 -519 -1624 -162
|
||||||
|
-1931 657 -265 709 593 1630 1240 1330z m5261 -120 c20 -377 -135 -912 -290
|
||||||
|
-995 -70 -38 -72 -35 -157 230 l-64 200 -24 -90 c-50 -192 -144 -340 -215
|
||||||
|
-340 -111 0 -316 804 -228 893 53 53 200 -130 226 -283 l14 -80 36 105 c100
|
||||||
|
293 222 333 332 109 l54 -110 35 105 c89 260 271 427 281 256z m-8491 -284
|
||||||
|
l75 -230 52 160 c89 272 210 336 295 154 126 -268 210 -757 142 -825 -44 -44
|
||||||
|
-163 120 -247 340 -12 33 -19 24 -39 -50 -89 -330 -286 -346 -374 -30 l-22 80
|
||||||
|
-35 -125 c-54 -196 -223 -428 -275 -377 -37 37 -29 448 11 608 70 276 219 524
|
||||||
|
314 524 17 0 56 -87 103 -229z m4164 -2698 c137 -310 856 -372 1401 -121 175
|
||||||
|
81 194 76 89 -23 -356 -336 -878 -447 -1310 -278 -224 88 -517 339 -517 443 0
|
||||||
|
53 140 267 212 324 l58 46 14 -152 c8 -84 31 -191 53 -239z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.2 KiB |
@@ -0,0 +1,48 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||||
|
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||||
|
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="600.000000pt" height="601.000000pt" viewBox="0 0 600.000000 601.000000"
|
||||||
|
preserveAspectRatio="xMidYMid meet">
|
||||||
|
<g transform="translate(0.000000,601.000000) scale(0.050000,-0.050000)"
|
||||||
|
fill="#ffffff" stroke="none">
|
||||||
|
<path d="M195 11784 c-515 -1551 98 -2966 1520 -3514 171 -66 171 -72 2 -72
|
||||||
|
-415 0 -893 215 -1273 572 -178 167 -181 163 -77 -83 478 -1130 1770 -1734
|
||||||
|
2963 -1384 283 83 309 101 420 292 376 648 1038 1116 1763 1245 l143 26 100
|
||||||
|
202 c887 1780 -911 3344 -3076 2675 l-170 -52 220 -14 c480 -32 818 -114 1118
|
||||||
|
-273 258 -137 548 -414 624 -597 l32 -76 -87 76 c-435 375 -938 524 -1557 461
|
||||||
|
-273 -28 -340 -39 -740 -120 -893 -182 -1449 24 -1756 650 l-98 200 -71 -214z"/>
|
||||||
|
<path d="M9720 10053 c0 -146 -256 -556 -441 -705 -381 -308 -766 -380 -1559
|
||||||
|
-290 -1209 137 -2026 -255 -2519 -1208 -78 -151 -82 -156 -72 -77 18 140 128
|
||||||
|
450 210 592 43 74 73 135 67 135 -25 0 -397 -184 -512 -253 -966 -580 -1594
|
||||||
|
-1674 -1594 -2777 0 -104 -4 -190 -10 -190 -5 0 -65 43 -132 95 -650 503
|
||||||
|
-1118 775 -1606 935 -290 95 -302 94 -242 -15 52 -95 166 -372 191 -465 9 -33
|
||||||
|
34 -121 56 -195 48 -161 120 -508 194 -935 118 -684 437 -1371 795 -1715 185
|
||||||
|
-178 324 -239 594 -262 144 -13 150 -15 147 -63 -1 -27 -14 -174 -28 -326 -83
|
||||||
|
-902 258 -1568 1037 -2024 139 -81 161 -80 127 4 -37 96 -85 369 -96 546 l-10
|
||||||
|
170 46 -60 c328 -431 869 -753 1497 -891 351 -77 1285 -67 1426 15 9 5 -104
|
||||||
|
50 -250 98 -649 217 -1341 668 -1680 1096 -81 102 -88 147 -11 78 157 -142
|
||||||
|
653 -406 925 -493 783 -249 1542 -242 2332 20 l274 91 106 -83 c298 -236 798
|
||||||
|
-328 1259 -231 197 42 196 38 32 169 -156 124 -344 356 -443 546 l-60 116 70
|
||||||
|
52 c544 408 783 906 627 1300 l-41 102 170 138 c442 355 584 624 813 1537 186
|
||||||
|
742 257 952 452 1328 l118 227 -145 -14 c-693 -68 -1425 -411 -1729 -810 -99
|
||||||
|
-130 -112 -127 -165 44 -54 175 -217 511 -308 636 -64 88 -70 91 -224 117
|
||||||
|
-314 52 -637 184 -956 390 -260 168 -509 436 -280 302 127 -74 302 -160 430
|
||||||
|
-211 97 -38 146 -55 348 -118 335 -105 983 -129 1280 -47 961 264 1554 1048
|
||||||
|
1729 2286 28 199 45 685 23 677 -9 -4 -73 -77 -141 -163 -650 -810 -1594
|
||||||
|
-1147 -2451 -873 -251 80 -246 76 -171 121 395 240 638 767 578 1253 -25 209
|
||||||
|
-77 395 -77 278z m-682 -4962 c306 -158 601 -1396 416 -1747 -118 -224 -283
|
||||||
|
-345 -526 -387 -455 -78 -577 227 -456 1143 96 725 320 1118 566 991z m-3115
|
||||||
|
-156 c371 -172 699 -815 799 -1565 34 -251 19 -307 -108 -422 -575 -519 -1624
|
||||||
|
-162 -1931 657 -265 709 593 1630 1240 1330z m5261 -120 c20 -377 -135 -912
|
||||||
|
-290 -995 -70 -38 -72 -35 -157 230 l-64 200 -24 -90 c-50 -192 -144 -340
|
||||||
|
-215 -340 -111 0 -316 804 -228 893 53 53 200 -130 226 -283 l14 -80 36 105
|
||||||
|
c100 293 222 333 332 109 l54 -110 35 105 c89 260 271 427 281 256z m-8491
|
||||||
|
-284 l75 -230 52 160 c89 272 210 336 295 154 126 -268 210 -757 142 -825 -44
|
||||||
|
-44 -163 120 -247 340 -12 33 -19 24 -39 -50 -89 -330 -286 -346 -374 -30
|
||||||
|
l-22 80 -35 -125 c-54 -196 -223 -428 -275 -377 -37 37 -29 448 11 608 70 276
|
||||||
|
219 524 314 524 17 0 56 -87 103 -229z m4164 -2698 c137 -311 883 -373 1408
|
||||||
|
-116 162 78 171 64 42 -61 -317 -305 -854 -408 -1271 -244 -223 87 -516 338
|
||||||
|
-516 442 0 53 140 267 212 324 l58 46 14 -152 c8 -84 31 -191 53 -239z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.2 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 118 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 84 KiB |
+314
@@ -0,0 +1,314 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Goblin — a private wallet for GRIN ツ</title>
|
||||||
|
<meta name="description" content="Pay a username and the payment travels as an end-to-end encrypted message over nostr, through the Nym mixnet. No files to swap, no addresses on the chain.">
|
||||||
|
<meta property="og:type" content="website">
|
||||||
|
<meta property="og:title" content="Goblin — a private wallet for GRIN ツ">
|
||||||
|
<meta property="og:description" content="Pay a username — slatepacks and the Nym mixnet handled for you. Relays only ever see ciphertext.">
|
||||||
|
<meta property="og:url" content="https://goblin.st/">
|
||||||
|
<meta property="og:image" content="https://goblin.st/assets/goblin-icon.png">
|
||||||
|
<link rel="icon" type="image/png" href="assets/goblin-icon.png">
|
||||||
|
<link rel="apple-touch-icon" href="assets/goblin-icon.png">
|
||||||
|
<link rel="stylesheet" href="styles.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="wrap">
|
||||||
|
<header class="site">
|
||||||
|
<a class="brand" href="/">
|
||||||
|
<span class="mark" aria-hidden="true"></span>
|
||||||
|
<span class="word">Goblin</span>
|
||||||
|
</a>
|
||||||
|
<nav class="site" aria-label="Site">
|
||||||
|
<a href="#features">Features</a>
|
||||||
|
<a href="#handles">Handles</a>
|
||||||
|
<a href="#downloads">Downloads</a>
|
||||||
|
<a class="gh" href="https://github.com/2ro/goblin" rel="noopener">
|
||||||
|
<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8Z"/></svg>
|
||||||
|
GitHub
|
||||||
|
</a>
|
||||||
|
</nav>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<section class="hero">
|
||||||
|
<div>
|
||||||
|
<span class="kicker">Free & open source · GRIN ツ</span>
|
||||||
|
<h1>Send grin like <span class="strike">a text.</span></h1>
|
||||||
|
<p class="lede">
|
||||||
|
Goblin is a private wallet for
|
||||||
|
<strong>GRIN</strong> — confidential digital cash with no amounts or
|
||||||
|
addresses on the chain. Pay a <span class="at">username</span> and the payment is
|
||||||
|
delivered as an end-to-end encrypted message over <strong>nostr</strong>, through
|
||||||
|
the <strong>Nym mixnet</strong>. No files to swap. No need to both be online.
|
||||||
|
</p>
|
||||||
|
<div class="cta-row">
|
||||||
|
<a class="btn-primary" href="#downloads">
|
||||||
|
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M12 3v10.6l3.3-3.3 1.4 1.4-5.7 5.7-5.7-5.7 1.4-1.4 3.3 3.3V3h2zM5 19h14v2H5v-2z"/></svg>
|
||||||
|
Get the builds
|
||||||
|
</a>
|
||||||
|
<div class="store-btns" role="note" aria-label="App stores coming soon">
|
||||||
|
<span class="store" aria-disabled="true" title="Coming soon">
|
||||||
|
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M17.05 12.54c-.03-2.89 2.36-4.28 2.47-4.35-1.35-1.97-3.44-2.24-4.18-2.27-1.78-.18-3.47 1.05-4.37 1.05-.9 0-2.29-1.02-3.77-1-1.94.03-3.72 1.13-4.72 2.86-2.01 3.49-.51 8.65 1.45 11.48.96 1.39 2.1 2.94 3.6 2.88 1.45-.06 1.99-.93 3.74-.93 1.74 0 2.24.93 3.77.9 1.56-.03 2.54-1.41 3.49-2.81 1.1-1.61 1.55-3.17 1.58-3.25-.04-.02-3.03-1.16-3.06-4.56zM14.17 4.04c.8-.97 1.34-2.32 1.19-3.66-1.15.05-2.55.77-3.38 1.74-.74.85-1.39 2.22-1.22 3.53 1.29.1 2.6-.65 3.41-1.61z"/></svg>
|
||||||
|
<span class="lines"><small>App Store</small><span>Coming soon</span></span>
|
||||||
|
<i class="soon">SOON</i>
|
||||||
|
</span>
|
||||||
|
<span class="store" aria-disabled="true" title="Coming soon">
|
||||||
|
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M3.6 1.8c-.35.37-.55.94-.55 1.68v17.07c0 .74.2 1.31.55 1.68l.09.08 9.56-9.56v-.22L3.69 1.71l-.09.09zm13.05 13.04-3.18-3.18v-.22l3.19-3.19.07.04 3.78 2.15c1.08.61 1.08 1.61 0 2.23l-3.78 2.14-.08.03zm-3.4-2.96L3.69 22.31c.36.38 1.5.42 2.13.06l11.27-6.4-3.84-4.09zm0-7.76L5.82 1.63C5.19 1.27 4.05 1.31 3.69 1.7l9.56 9.56 3.84-4.1-3.84-2.04z" transform="translate(1.5 0)"/></svg>
|
||||||
|
<span class="lines"><small>Google Play</small><span>Coming soon</span></span>
|
||||||
|
<i class="soon">SOON</i>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p class="micro">
|
||||||
|
Linux · Windows · Android today — macOS
|
||||||
|
<a href="https://github.com/2ro/goblin#build" rel="noopener">builds from source</a>.
|
||||||
|
Apache-2.0, sha256 checksums on every build.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="phone-wrap" aria-hidden="true">
|
||||||
|
<div class="phone">
|
||||||
|
<div class="notch"></div>
|
||||||
|
<div class="p-head">
|
||||||
|
<span class="w">Goblin</span>
|
||||||
|
<span class="av"></span>
|
||||||
|
</div>
|
||||||
|
<div class="balance">
|
||||||
|
<div class="eyebrow">Balance</div>
|
||||||
|
<div class="amt">4.2069<span class="tsu">ツ</span></div>
|
||||||
|
<div class="fiat">≈ $0.11 · 1ツ = $0.026</div>
|
||||||
|
</div>
|
||||||
|
<div class="pr-row">
|
||||||
|
<div class="pr pay">Pay</div>
|
||||||
|
<div class="pr req">Request</div>
|
||||||
|
</div>
|
||||||
|
<div class="act">
|
||||||
|
<div class="row">
|
||||||
|
<span class="dot" style="background:linear-gradient(135deg,#5BB0D9,#3D7FA6)"></span>
|
||||||
|
<span class="who"><b>mira</b><i>arrived sealed · just now</i></span>
|
||||||
|
<span class="val in">+0.5ツ</span>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<span class="dot" style="background:linear-gradient(135deg,#9D8BE8,#6C58C4)"></span>
|
||||||
|
<span class="who"><b>kit</b><i>delivered over Nym · 2h</i></span>
|
||||||
|
<span class="val">−1.2ツ</span>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<span class="dot" style="background:linear-gradient(135deg,#E8854B,#C25A2E)"></span>
|
||||||
|
<span class="who"><b>npub1g0b…l1n</b><i>finalized · yesterday</i></span>
|
||||||
|
<span class="val in">+2.0ツ</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="tabbar">
|
||||||
|
<span class="t"><svg viewBox="0 0 24 24"><path d="M4 10.5 12 4l8 6.5V20a1 1 0 0 1-1 1h-5v-6h-4v6H5a1 1 0 0 1-1-1v-9.5z"/></svg></span>
|
||||||
|
<span class="puck">ツ</span>
|
||||||
|
<span class="t"><svg viewBox="0 0 24 24"><path d="M4 6h16v2H4V6zm0 5h16v2H4v-2zm0 5h10v2H4v-2z"/></svg></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="rail-sec" aria-label="How a payment travels">
|
||||||
|
<div class="rail-card">
|
||||||
|
<div class="rail-title">
|
||||||
|
<h2>How a payment travels</h2>
|
||||||
|
<span class="sub">Payments are NIP-44 encrypted; relays only ever see ciphertext — never the amount, sender, or recipient. Privacy is Mimblewimble on-chain + Nym on the wire.</span>
|
||||||
|
</div>
|
||||||
|
<div class="rail">
|
||||||
|
<img class="packet" src="assets/grin-logo.png" alt="" aria-hidden="true">
|
||||||
|
<div class="stop">
|
||||||
|
<div class="pin"><svg viewBox="0 0 24 24"><circle cx="12" cy="8" r="3.4"/><path d="M5 20c.8-3.6 3.6-5.6 7-5.6s6.2 2 7 5.6"/></svg></div>
|
||||||
|
<b>You</b><i>type an amount, pick a name</i>
|
||||||
|
</div>
|
||||||
|
<div class="stop">
|
||||||
|
<div class="pin"><svg viewBox="0 0 24 24"><rect x="4" y="7" width="16" height="13" rx="2"/><path d="M4 11h16M12 7v13M9.5 7C7.5 5 8.5 3 10.5 3.5 11.7 3.8 12 5.5 12 7c0-1.5.3-3.2 1.5-3.5 2-.5 3 1.5 1 3.5"/></svg></div>
|
||||||
|
<b>Gift wrap</b><i>slatepack sealed, <a href="https://nips.nostr.com/17" rel="noopener">NIP-17</a></i>
|
||||||
|
</div>
|
||||||
|
<div class="stop">
|
||||||
|
<div class="pin"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="8.5"/><circle cx="12" cy="12" r="5.2"/><circle cx="12" cy="12" r="2"/></svg></div>
|
||||||
|
<b>Nym mixnet</b><i>5-hop, linked in-process</i>
|
||||||
|
</div>
|
||||||
|
<div class="stop">
|
||||||
|
<div class="pin"><svg viewBox="0 0 24 24"><path d="M12 21s-6.5-4.3-6.5-9.2C5.5 8 8 6 12 6s6.5 2 6.5 5.8C18.5 16.7 12 21 12 21z" transform="translate(0 -1.5)"/><path d="M9 11.5l2 2 4-4.5"/></svg></div>
|
||||||
|
<b>them</b><i>unwrapped, verified, applied</i>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="features">
|
||||||
|
<div class="sec-head">
|
||||||
|
<h2>Private by construction</h2>
|
||||||
|
<p>Pay anyone instantly and directly — an addressless, confidential
|
||||||
|
chain underneath.</p>
|
||||||
|
</div>
|
||||||
|
<div class="features">
|
||||||
|
<article class="feat">
|
||||||
|
<div class="glyph"><svg viewBox="0 0 24 24"><path d="M9.88 9.88a3 3 0 1 0 4.24 4.24"/><path d="M10.73 5.08A10.4 10.4 0 0 1 12 5c7 0 10 7 10 7a13.2 13.2 0 0 1-1.67 2.68"/><path d="M6.61 6.61A13.5 13.5 0 0 0 2 12s3 7 10 7a9.7 9.7 0 0 0 5.39-1.61"/><path d="M2 2l20 20"/></svg></div>
|
||||||
|
<h3>Confidential by design</h3>
|
||||||
|
<p>GRIN is confidential digital cash — every amount is cryptographically
|
||||||
|
hidden. Like handing someone cash, what you send stays between the two
|
||||||
|
of you.</p>
|
||||||
|
</article>
|
||||||
|
<article class="feat">
|
||||||
|
<div class="glyph"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="4"/><path d="M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-4 8"/></svg></div>
|
||||||
|
<h3>Pay a username</h3>
|
||||||
|
<p>Handles are <a href="https://nips.nostr.com/5" rel="noopener">NIP-05</a> identities at <code>goblin.st</code>. Pay
|
||||||
|
<code>mira</code> — or any raw <code>npub</code> on nostr.</p>
|
||||||
|
</article>
|
||||||
|
<article class="feat">
|
||||||
|
<div class="glyph"><svg viewBox="0 0 24 24"><rect x="3" y="5" width="18" height="14" rx="2"/><path d="M3 7l9 6 9-6"/></svg></div>
|
||||||
|
<h3>Sealed delivery</h3>
|
||||||
|
<p>The slatepack travels as a NIP-17 gift-wrapped DM (<a href="https://nostrbook.dev/kinds/1059" rel="noopener">kind 1059</a>) and is
|
||||||
|
applied automatically by the recipient's wallet — no files, no meetups.</p>
|
||||||
|
</article>
|
||||||
|
<article class="feat">
|
||||||
|
<div class="glyph"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="9"/><circle cx="12" cy="12" r="5.5"/><circle cx="12" cy="12" r="2"/></svg></div>
|
||||||
|
<h3>Mixnet, built in</h3>
|
||||||
|
<p>Your payments and identity — nostr messages, names, price and
|
||||||
|
avatars — ride the
|
||||||
|
<a href="https://nym.com" rel="noopener">Nym mixnet</a>, with the SDK
|
||||||
|
linked right into the app. Five hops of cover traffic hide who pays
|
||||||
|
whom. (The grin node connects directly — public chain data, not tied
|
||||||
|
to you.) Nothing to set up.</p>
|
||||||
|
</article>
|
||||||
|
<article class="feat">
|
||||||
|
<div class="glyph"><svg viewBox="0 0 24 24"><circle cx="8" cy="15" r="5"/><path d="M11.5 11.5 21 2"/><path d="M16.5 6.5 19 9"/><path d="M14 9l2.5 2.5"/></svg></div>
|
||||||
|
<h3>Separate from your wallet key</h3>
|
||||||
|
<p>Your nostr payment key is deliberately separate from your funds.
|
||||||
|
Rotate it any time to stay unlinkable — your grin never moves.</p>
|
||||||
|
</article>
|
||||||
|
<article class="feat">
|
||||||
|
<div class="glyph"><svg viewBox="0 0 24 24"><path d="M4 21v-7M4 10V3M12 21v-9M12 8V3M20 21v-5M20 12V3M1 14h6M9 8h6M17 16h6"/></svg></div>
|
||||||
|
<h3>Your numbers, your way</h3>
|
||||||
|
<p>Off by default. Opt into a world currency, Bitcoin, or sats and the
|
||||||
|
rate is fetched over the mixnet — nothing leaves your device otherwise.</p>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="handles">
|
||||||
|
<div class="handle-grid">
|
||||||
|
<div>
|
||||||
|
<p class="big-at">Be <span class="at-name">yourself</span>.</p>
|
||||||
|
<p>Claim a free handle in the app and friends can pay you by name.
|
||||||
|
Your handle resolves through the open <a href="https://github.com/2ro/goblin-nip05d" rel="noopener">goblin.st identity service</a> —
|
||||||
|
standard NIP-05, one name per key, yours until you release it.</p>
|
||||||
|
<p>Or remain anonymous and reset your identity whenever you want.</p>
|
||||||
|
</div>
|
||||||
|
<div class="code-card" aria-label="NIP-05 resolution example">
|
||||||
|
<span class="c-dim">$</span> curl 'https://goblin.st/.well-known/nostr.json?name=mira'<br>
|
||||||
|
{<br>
|
||||||
|
<span class="c-key">"names"</span>: {<br>
|
||||||
|
<span class="c-key">"mira"</span>: <span class="c-str">"7d2f19c0…a4c41a"</span><br>
|
||||||
|
}<br>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="downloads">
|
||||||
|
<div class="sec-head">
|
||||||
|
<h2>Downloads</h2>
|
||||||
|
<p>Fresh from the forge. Verify with the checksums file — every build ships one.</p>
|
||||||
|
</div>
|
||||||
|
<div class="dl-grid">
|
||||||
|
<div class="dl-card">
|
||||||
|
<span class="build-chip"><span class="dot"></span> latest release</span>
|
||||||
|
<div class="dl-rows">
|
||||||
|
<a href="https://github.com/2ro/goblin/releases/latest">
|
||||||
|
<svg viewBox="0 0 24 24"><path d="M12 3c-2 0-3.5 1.6-3.5 3.8 0 1.5-.6 2.7-1.5 4-1 1.4-2 3-2 5C5 19 7 21 9.5 20.4c.8-.2 1.6-.2 2.5-.2s1.7 0 2.5.2C17 21 19 19 19 15.8c0-2-1-3.6-2-5-.9-1.3-1.5-2.5-1.5-4C15.5 4.6 14 3 12 3z"/><path d="M9.5 9.8h.01M14.5 9.8h.01"/></svg>
|
||||||
|
<span class="name">Linux <span class="file">x86_64 · tar.gz</span></span>
|
||||||
|
<span class="arrow">↓</span>
|
||||||
|
</a>
|
||||||
|
<a href="https://github.com/2ro/goblin/releases/latest">
|
||||||
|
<svg viewBox="0 0 24 24"><path d="M12 3l8 4.5v9L12 21l-8-4.5v-9L12 3z"/><path d="M4 7.5l8 4.5 8-4.5M12 12v9"/></svg>
|
||||||
|
<span class="name">Linux AppImage <span class="file">x86_64 · chmod +x, run</span></span>
|
||||||
|
<span class="arrow">↓</span>
|
||||||
|
</a>
|
||||||
|
<a href="https://github.com/2ro/goblin/releases/latest">
|
||||||
|
<svg viewBox="0 0 24 24"><path d="M4 6.5 10.5 5v6H4v-4.5zM11.5 4.8 20 3.5V11h-8.5V4.8zM4 12.5h6.5v6L4 17.1v-4.6zM11.5 12.5H20v7.4l-8.5-1.3v-6.1z"/></svg>
|
||||||
|
<span class="name">Windows <span class="file">x86_64 · zip</span></span>
|
||||||
|
<span class="arrow">↓</span>
|
||||||
|
</a>
|
||||||
|
<a href="https://github.com/2ro/goblin/releases/latest">
|
||||||
|
<svg viewBox="0 0 24 24"><path d="M7 8.5C7 6 9.2 4 12 4s5 2 5 4.5M7 8.5h10M7 8.5v7a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2v-7M9 4 8 2.5M15 4l1-1.5M9.5 19.5V22M14.5 19.5V22"/></svg>
|
||||||
|
<span class="name">Android <span class="file">armv7 + arm64 · apk</span></span>
|
||||||
|
<span class="arrow">↓</span>
|
||||||
|
</a>
|
||||||
|
<a href="https://github.com/2ro/goblin/releases">
|
||||||
|
<svg viewBox="0 0 24 24"><path d="M12 4v9M12 13l-3.5-3.5M12 13l3.5-3.5M5 17h14M5 20h14"/></svg>
|
||||||
|
<span class="name">All builds & checksums <span class="file">sha256sums.txt</span></span>
|
||||||
|
<span class="arrow">→</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<p class="dl-meta">
|
||||||
|
macOS: <a href="https://github.com/2ro/goblin#build" rel="noopener">build from source</a> —
|
||||||
|
clone with <code>--recursive</code>, then <code>cargo build --release</code>.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="dl-card stores-card">
|
||||||
|
<span class="store" aria-disabled="true" title="Coming soon">
|
||||||
|
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M17.05 12.54c-.03-2.89 2.36-4.28 2.47-4.35-1.35-1.97-3.44-2.24-4.18-2.27-1.78-.18-3.47 1.05-4.37 1.05-.9 0-2.29-1.02-3.77-1-1.94.03-3.72 1.13-4.72 2.86-2.01 3.49-.51 8.65 1.45 11.48.96 1.39 2.1 2.94 3.6 2.88 1.45-.06 1.99-.93 3.74-.93 1.74 0 2.24.93 3.77.9 1.56-.03 2.54-1.41 3.49-2.81 1.1-1.61 1.55-3.17 1.58-3.25-.04-.02-3.03-1.16-3.06-4.56zM14.17 4.04c.8-.97 1.34-2.32 1.19-3.66-1.15.05-2.55.77-3.38 1.74-.74.85-1.39 2.22-1.22 3.53 1.29.1 2.6-.65 3.41-1.61z"/></svg>
|
||||||
|
<span class="lines"><small>Download on the</small><span>App Store</span></span>
|
||||||
|
<i class="soon">SOON</i>
|
||||||
|
</span>
|
||||||
|
<span class="store" aria-disabled="true" title="Coming soon">
|
||||||
|
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M3.6 1.8c-.35.37-.55.94-.55 1.68v17.07c0 .74.2 1.31.55 1.68l.09.08 9.56-9.56v-.22L3.69 1.71l-.09.09zm13.05 13.04-3.18-3.18v-.22l3.19-3.19.07.04 3.78 2.15c1.08.61 1.08 1.61 0 2.23l-3.78 2.14-.08.03zm-3.4-2.96L3.69 22.31c.36.38 1.5.42 2.13.06l11.27-6.4-3.84-4.09zm0-7.76L5.82 1.63C5.19 1.27 4.05 1.31 3.69 1.7l9.56 9.56 3.84-4.1-3.84-2.04z" transform="translate(1.5 0)"/></svg>
|
||||||
|
<span class="lines"><small>Get it on</small><span>Google Play</span></span>
|
||||||
|
<i class="soon">SOON</i>
|
||||||
|
</span>
|
||||||
|
<p>Store listings are on the way. Until then, grab the APK on the left —
|
||||||
|
it's the same wallet.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer class="site">
|
||||||
|
<div class="wrap">
|
||||||
|
<div class="foot-grid">
|
||||||
|
<div class="foot-brand">
|
||||||
|
<span class="mark" aria-hidden="true"></span>
|
||||||
|
<p>Goblin is a peer-to-peer wallet for GRIN ツ — confidential digital
|
||||||
|
cash on Mimblewimble. Keys, names and history stay on your device.</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h4>Project</h4>
|
||||||
|
<ul>
|
||||||
|
<li><a href="https://github.com/2ro/goblin" rel="noopener">Wallet on GitHub</a></li>
|
||||||
|
<li><a href="https://github.com/2ro/goblin/releases" rel="noopener">Releases</a></li>
|
||||||
|
<li><a href="https://github.com/2ro/goblin-nip05d" rel="noopener">Identity service</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h4>Network</h4>
|
||||||
|
<ul>
|
||||||
|
<li><a href="https://grin.mw" rel="noopener">GRIN ツ</a></li>
|
||||||
|
<li><a href="https://github.com/nostr-protocol/nips" rel="noopener">Nostr NIPs</a></li>
|
||||||
|
<li><a href="https://nym.com" rel="noopener">Nym</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h4>Legal</h4>
|
||||||
|
<ul>
|
||||||
|
<li><a href="terms.html">Terms of Use</a></li>
|
||||||
|
<li><a href="privacy.html">Privacy</a></li>
|
||||||
|
<li><a href="https://www.apache.org/licenses/LICENSE-2.0" rel="noopener">Apache-2.0</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="foot-bottom">
|
||||||
|
<span>© 2026 the Goblin project · Built on <a href="https://code.gri.mw/GUI/grim" rel="noopener" style="color:inherit">Grim</a> by Ardocrat</span>
|
||||||
|
<span>Money is a conversation. Keep it between friends. ツ</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
+107
@@ -0,0 +1,107 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Privacy — Goblin</title>
|
||||||
|
<meta name="robots" content="noindex">
|
||||||
|
<link rel="icon" type="image/png" href="assets/goblin-icon.png">
|
||||||
|
<link rel="stylesheet" href="styles.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="wrap">
|
||||||
|
<header class="site">
|
||||||
|
<a class="brand" href="/">
|
||||||
|
<span class="mark" aria-hidden="true"></span>
|
||||||
|
<span class="word">Goblin</span>
|
||||||
|
</a>
|
||||||
|
<nav class="site" aria-label="Site">
|
||||||
|
<a href="/#downloads">Downloads</a>
|
||||||
|
<a class="gh" href="https://github.com/2ro/goblin" rel="noopener">GitHub</a>
|
||||||
|
</nav>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main class="legal">
|
||||||
|
<h1>Privacy</h1>
|
||||||
|
<p class="updated">Last updated · June 12, 2026</p>
|
||||||
|
|
||||||
|
<div class="callout">
|
||||||
|
<strong>The short version:</strong> privacy is the product. The wallet
|
||||||
|
keeps everything on your device, this website sets no cookies and runs
|
||||||
|
no analytics, and the identity service stores only what it publishes:
|
||||||
|
the name→key mapping you asked it to publish.
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2>1. The wallet</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Your seed, keys, contacts, payment history, and settings are stored
|
||||||
|
<strong>only on your device</strong>. They are never uploaded.</li>
|
||||||
|
<li>Wallet network traffic — relay connections, name lookups, exchange
|
||||||
|
rates — is routed through the Nym mixnet. The services you reach see
|
||||||
|
mixnet exit traffic, not your IP address, and the mixnet's 5-hop design
|
||||||
|
hides who is talking to whom at the network layer.</li>
|
||||||
|
<li>Payments travel as end-to-end encrypted nostr events. Relays see
|
||||||
|
ciphertext and the recipient's ephemeral routing key — not the amount,
|
||||||
|
the sender, or the message.</li>
|
||||||
|
<li>The wallet contains no telemetry, analytics, or crash reporting.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>2. This website</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Static pages, served by us. No cookies, no analytics, no trackers,
|
||||||
|
no third-party embeds — fonts and images are served from this domain.</li>
|
||||||
|
<li>Our web server keeps standard, short-lived access logs (IP address,
|
||||||
|
request path, user agent) for security and abuse prevention.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>3. The identity service (goblin.st)</h2>
|
||||||
|
<ul>
|
||||||
|
<li>If you claim a handle, we store the data the service exists to
|
||||||
|
publish: <strong>your chosen name, your nostr public key</strong>, and —
|
||||||
|
if you upload one — your avatar image. This mapping is public by
|
||||||
|
design (that's what <a href="https://nips.nostr.com/5" rel="noopener">NIP-05</a> is).</li>
|
||||||
|
<li>Registration and release requests are authenticated by signature
|
||||||
|
(<a href="https://nips.nostr.com/98" rel="noopener">NIP-98</a>); we never see a private key.</li>
|
||||||
|
<li>Rate-limiting uses connection IP addresses transiently. Since the
|
||||||
|
wallet talks to goblin.st over the Nym mixnet, we typically see mixnet
|
||||||
|
exit addresses, not yours.</li>
|
||||||
|
<li>Release your name and it leaves public resolution immediately and
|
||||||
|
becomes available for anyone to register.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>4. The relay</h2>
|
||||||
|
<p>The project's public nostr relay stores the encrypted events it
|
||||||
|
relays (that's its job) within its retention and size limits. Event
|
||||||
|
contents are ciphertext we cannot read.</p>
|
||||||
|
|
||||||
|
<h2>5. What we don't do</h2>
|
||||||
|
<ul>
|
||||||
|
<li>No selling, sharing, or monetizing of any data.</li>
|
||||||
|
<li>No advertising, profiling, or cross-site tracking.</li>
|
||||||
|
<li>No accounts, emails, or phone numbers — there is nothing to leak.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>6. Your choices</h2>
|
||||||
|
<p>Use the wallet without a handle and the identity service learns
|
||||||
|
nothing about you. Rotate your payment key at any time to unlink your
|
||||||
|
history. Run your own node, relay, or name service — the software lets
|
||||||
|
you point at them.</p>
|
||||||
|
|
||||||
|
<h2>7. Contact</h2>
|
||||||
|
<p>Privacy questions: open an issue on
|
||||||
|
<a href="https://github.com/2ro/goblin" rel="noopener">GitHub</a>.</p>
|
||||||
|
</main>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer class="site">
|
||||||
|
<div class="wrap">
|
||||||
|
<div class="foot-bottom">
|
||||||
|
<span>© 2026 the Goblin project</span>
|
||||||
|
<span><a href="terms.html" style="color:inherit">Terms</a> · <a href="privacy.html" style="color:inherit">Privacy</a></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
+532
@@ -0,0 +1,532 @@
|
|||||||
|
/* goblin.st — midnight ledger / cheeky mascot
|
||||||
|
Dark-first, follows device theme. Accent #FFD60A on ink #0E0E0C.
|
||||||
|
Serif display (echoes the banner wordmark) + Geist UI + Geist Mono data. */
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Geist";
|
||||||
|
src: url("assets/fonts/Geist-Regular.ttf") format("truetype");
|
||||||
|
font-weight: 400; font-style: normal; font-display: swap;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: "Geist";
|
||||||
|
src: url("assets/fonts/Geist-SemiBold.ttf") format("truetype");
|
||||||
|
font-weight: 600; font-style: normal; font-display: swap;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: "Geist";
|
||||||
|
src: url("assets/fonts/Geist-Bold.ttf") format("truetype");
|
||||||
|
font-weight: 700; font-style: normal; font-display: swap;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: "Geist Mono";
|
||||||
|
src: url("assets/fonts/GeistMono-Regular.ttf") format("truetype");
|
||||||
|
font-weight: 400; font-style: normal; font-display: swap;
|
||||||
|
}
|
||||||
|
@font-face {
|
||||||
|
font-family: "Geist Mono";
|
||||||
|
src: url("assets/fonts/GeistMono-SemiBold.ttf") format("truetype");
|
||||||
|
font-weight: 600; font-style: normal; font-display: swap;
|
||||||
|
}
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--accent: #FFD60A;
|
||||||
|
--accent-deep: #E8B800;
|
||||||
|
--ink: #0E0E0C;
|
||||||
|
|
||||||
|
--bg: #0E0E0C;
|
||||||
|
--bg-raise: #14140F;
|
||||||
|
--surface: #191914;
|
||||||
|
--surface-2: #21211A;
|
||||||
|
--text: #F4F2E8;
|
||||||
|
--dim: #A9A698;
|
||||||
|
--mute: #6E6B5E;
|
||||||
|
--line: rgba(244, 242, 232, 0.1);
|
||||||
|
--shadow: rgba(0, 0, 0, 0.55);
|
||||||
|
--phone-glow: rgba(255, 214, 10, 0.07);
|
||||||
|
|
||||||
|
--serif: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, serif;
|
||||||
|
--sans: "Geist", system-ui, -apple-system, "Segoe UI", sans-serif;
|
||||||
|
--mono: "Geist Mono", ui-monospace, "SF Mono", Menlo, monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (prefers-color-scheme: light) {
|
||||||
|
:root {
|
||||||
|
--bg: #FAF8EF;
|
||||||
|
--bg-raise: #F4F1E3;
|
||||||
|
--surface: #FFFFFF;
|
||||||
|
--surface-2: #F1EDDD;
|
||||||
|
--text: #171511;
|
||||||
|
--dim: #686556;
|
||||||
|
--mute: #98947F;
|
||||||
|
--line: rgba(23, 21, 17, 0.12);
|
||||||
|
--shadow: rgba(60, 50, 10, 0.18);
|
||||||
|
--phone-glow: rgba(255, 214, 10, 0.22);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
* { box-sizing: border-box; }
|
||||||
|
|
||||||
|
html { scroll-behavior: smooth; }
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
background: var(--bg);
|
||||||
|
color: var(--text);
|
||||||
|
font-family: var(--sans);
|
||||||
|
font-size: 17px;
|
||||||
|
line-height: 1.6;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
overflow-x: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
::selection { background: var(--accent); color: var(--ink); }
|
||||||
|
|
||||||
|
a { color: inherit; }
|
||||||
|
a:focus-visible, button:focus-visible {
|
||||||
|
outline: 2px solid var(--accent);
|
||||||
|
outline-offset: 3px;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* faint grain so the dark field isn't flat */
|
||||||
|
body::before {
|
||||||
|
content: "";
|
||||||
|
position: fixed; inset: 0;
|
||||||
|
pointer-events: none;
|
||||||
|
z-index: 40;
|
||||||
|
opacity: 0.035;
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E");
|
||||||
|
}
|
||||||
|
|
||||||
|
.wrap { max-width: 1120px; margin: 0 auto; padding: 0 24px; }
|
||||||
|
|
||||||
|
/* ---------- header ---------- */
|
||||||
|
|
||||||
|
header.site {
|
||||||
|
display: flex; align-items: center; justify-content: space-between;
|
||||||
|
padding: 26px 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.brand { display: flex; align-items: center; gap: 13px; text-decoration: none; }
|
||||||
|
|
||||||
|
.brand .mark {
|
||||||
|
width: 40px; height: 40px; display: inline-block;
|
||||||
|
background: currentColor;
|
||||||
|
-webkit-mask: url("assets/goblin-mark-white.svg") center / contain no-repeat;
|
||||||
|
mask: url("assets/goblin-mark-white.svg") center / contain no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.brand .word {
|
||||||
|
font-family: var(--serif);
|
||||||
|
font-size: 27px; letter-spacing: 0.34em; font-weight: 600;
|
||||||
|
text-transform: uppercase; text-indent: 0.1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav.site { display: flex; gap: 26px; align-items: center; font-size: 15px; }
|
||||||
|
nav.site a { text-decoration: none; color: var(--dim); transition: color .15s; }
|
||||||
|
nav.site a:hover { color: var(--text); }
|
||||||
|
nav.site a.gh {
|
||||||
|
color: var(--text); border: 1px solid var(--line);
|
||||||
|
padding: 8px 16px; border-radius: 99px;
|
||||||
|
display: inline-flex; align-items: center; gap: 8px;
|
||||||
|
}
|
||||||
|
nav.site a.gh:hover { border-color: var(--accent); }
|
||||||
|
nav.site svg { width: 17px; height: 17px; fill: currentColor; }
|
||||||
|
|
||||||
|
@media (max-width: 640px) {
|
||||||
|
nav.site a:not(.gh) { display: none; }
|
||||||
|
.brand .word { font-size: 22px; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------- hero ---------- */
|
||||||
|
|
||||||
|
.hero {
|
||||||
|
position: relative;
|
||||||
|
display: grid; grid-template-columns: minmax(0, 1fr) 360px;
|
||||||
|
gap: 56px; align-items: center;
|
||||||
|
padding: 72px 0 96px;
|
||||||
|
}
|
||||||
|
@media (max-width: 920px) {
|
||||||
|
.hero { grid-template-columns: 1fr; padding: 48px 0 64px; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* watermark currency glyph */
|
||||||
|
.hero::after {
|
||||||
|
content: "ツ";
|
||||||
|
position: absolute; right: -110px; top: -150px;
|
||||||
|
font-family: var(--serif);
|
||||||
|
font-size: 560px; line-height: 1;
|
||||||
|
color: var(--text); opacity: 0.026;
|
||||||
|
transform: rotate(12deg);
|
||||||
|
pointer-events: none; user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero h1 {
|
||||||
|
font-family: var(--serif);
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: clamp(44px, 6.4vw, 76px);
|
||||||
|
line-height: 1.04;
|
||||||
|
letter-spacing: -0.01em;
|
||||||
|
margin: 18px 0 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero h1 .strike {
|
||||||
|
position: relative; white-space: nowrap;
|
||||||
|
}
|
||||||
|
.hero h1 .strike::after {
|
||||||
|
content: "";
|
||||||
|
position: absolute; left: -2%; right: -3%; bottom: 0.04em;
|
||||||
|
height: 0.16em;
|
||||||
|
background: var(--accent);
|
||||||
|
z-index: -1;
|
||||||
|
transform: skewY(-0.6deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.kicker {
|
||||||
|
font-family: var(--mono); font-size: 13px; letter-spacing: 0.18em;
|
||||||
|
text-transform: uppercase; color: var(--dim);
|
||||||
|
display: inline-flex; align-items: center; gap: 10px;
|
||||||
|
}
|
||||||
|
.kicker::before {
|
||||||
|
content: ""; width: 26px; height: 2px; background: var(--accent); display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero p.lede { color: var(--dim); font-size: 19px; max-width: 30em; margin: 0 0 34px; }
|
||||||
|
.hero p.lede strong { color: var(--text); font-weight: 600; }
|
||||||
|
.hero p.lede .at { color: var(--accent-deep); font-family: var(--mono); font-weight: 600; }
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
.hero p.lede .at { color: var(--accent); }
|
||||||
|
}
|
||||||
|
|
||||||
|
.cta-row { display: flex; flex-wrap: wrap; gap: 14px; align-items: stretch; }
|
||||||
|
|
||||||
|
.btn-primary {
|
||||||
|
display: inline-flex; align-items: center; gap: 10px;
|
||||||
|
background: var(--accent); color: var(--ink);
|
||||||
|
font-weight: 700; font-size: 16.5px; text-decoration: none;
|
||||||
|
padding: 15px 26px; border-radius: 14px;
|
||||||
|
box-shadow: 0 10px 30px -10px var(--accent-deep);
|
||||||
|
transition: transform .15s, box-shadow .15s;
|
||||||
|
}
|
||||||
|
.btn-primary:hover { transform: translateY(-2px); box-shadow: 0 16px 36px -10px var(--accent-deep); }
|
||||||
|
.btn-primary svg { width: 18px; height: 18px; fill: currentColor; }
|
||||||
|
|
||||||
|
.store-btns { display: flex; gap: 10px; }
|
||||||
|
.store {
|
||||||
|
display: inline-flex; align-items: center; gap: 10px;
|
||||||
|
border: 1px solid var(--line); border-radius: 14px;
|
||||||
|
padding: 10px 16px; min-width: 148px;
|
||||||
|
color: var(--mute); cursor: not-allowed; user-select: none;
|
||||||
|
position: relative; overflow: hidden;
|
||||||
|
background: var(--bg-raise);
|
||||||
|
}
|
||||||
|
.store svg { width: 22px; height: 22px; fill: var(--mute); flex: none; }
|
||||||
|
.store .lines { display: flex; flex-direction: column; line-height: 1.18; text-align: left; }
|
||||||
|
.store .lines small { font-size: 10.5px; letter-spacing: 0.08em; text-transform: uppercase; }
|
||||||
|
.store .lines span { font-size: 15px; font-weight: 600; }
|
||||||
|
.store .soon {
|
||||||
|
position: absolute; top: 7px; right: -26px;
|
||||||
|
background: var(--surface-2); color: var(--dim);
|
||||||
|
font-family: var(--mono); font-size: 8.5px; letter-spacing: 0.14em;
|
||||||
|
padding: 2px 28px; transform: rotate(33deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero .micro {
|
||||||
|
margin-top: 18px; font-size: 13.5px; color: var(--mute);
|
||||||
|
}
|
||||||
|
.hero .micro a { color: var(--dim); }
|
||||||
|
.hero .micro a:hover { color: var(--text); }
|
||||||
|
|
||||||
|
/* ---------- phone ---------- */
|
||||||
|
|
||||||
|
.phone-wrap { position: relative; justify-self: center; }
|
||||||
|
.phone-wrap::before {
|
||||||
|
content: "";
|
||||||
|
position: absolute; inset: -60px -40px;
|
||||||
|
background: radial-gradient(closest-side, var(--phone-glow), transparent 75%);
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
@media (max-width: 920px) { .phone-wrap { display: none; } }
|
||||||
|
|
||||||
|
.phone {
|
||||||
|
position: relative;
|
||||||
|
width: 318px; height: 642px;
|
||||||
|
border-radius: 46px;
|
||||||
|
background: var(--surface);
|
||||||
|
border: 1px solid var(--line);
|
||||||
|
box-shadow:
|
||||||
|
0 40px 80px -30px var(--shadow),
|
||||||
|
inset 0 0 0 7px var(--bg);
|
||||||
|
padding: 20px 17px;
|
||||||
|
display: flex; flex-direction: column;
|
||||||
|
transform: rotate(2.4deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.phone .notch {
|
||||||
|
width: 96px; height: 22px; border-radius: 99px;
|
||||||
|
background: var(--bg); margin: 2px auto 18px; flex: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.phone .p-head { display: flex; justify-content: space-between; align-items: center; padding: 0 8px; }
|
||||||
|
.phone .p-head .w { font-family: var(--serif); letter-spacing: 0.3em; font-size: 13px; text-transform: uppercase; }
|
||||||
|
.phone .p-head .av { width: 28px; height: 28px; border-radius: 50%; background: linear-gradient(135deg, #E8854B, #C25A2E); }
|
||||||
|
|
||||||
|
.phone .balance { text-align: center; margin: 44px 0 6px; }
|
||||||
|
.phone .balance .eyebrow { font-family: var(--mono); font-size: 10px; letter-spacing: 0.22em; color: var(--mute); text-transform: uppercase; }
|
||||||
|
.phone .balance .amt { font-size: 44px; font-weight: 700; letter-spacing: -0.02em; margin-top: 6px; }
|
||||||
|
.phone .balance .amt .tsu { color: var(--accent-deep); font-weight: 400; }
|
||||||
|
@media (prefers-color-scheme: dark) { .phone .balance .amt .tsu { color: var(--accent); } }
|
||||||
|
.phone .balance .fiat { font-family: var(--mono); font-size: 12px; color: var(--mute); margin-top: 4px; }
|
||||||
|
|
||||||
|
.phone .pr-row { display: flex; gap: 10px; margin: 26px 8px 30px; }
|
||||||
|
.phone .pr-row .pr {
|
||||||
|
flex: 1; text-align: center; padding: 13px 0; border-radius: 13px;
|
||||||
|
font-weight: 600; font-size: 15px;
|
||||||
|
}
|
||||||
|
.phone .pr-row .pay { background: var(--accent); color: var(--ink); }
|
||||||
|
.phone .pr-row .req { background: var(--surface-2); }
|
||||||
|
|
||||||
|
.phone .act { padding: 0 8px; display: flex; flex-direction: column; gap: 16px; }
|
||||||
|
.phone .act .row { display: flex; align-items: center; gap: 12px; }
|
||||||
|
.phone .act .dot { width: 34px; height: 34px; border-radius: 50%; flex: none; }
|
||||||
|
.phone .act .who { flex: 1; min-width: 0; }
|
||||||
|
.phone .act .who b { display: block; font-size: 14px; font-weight: 600; }
|
||||||
|
.phone .act .who i { display: block; font-style: normal; font-size: 11.5px; color: var(--mute); }
|
||||||
|
.phone .act .val { font-family: var(--mono); font-size: 13px; }
|
||||||
|
.phone .act .val.in { color: #58B368; }
|
||||||
|
|
||||||
|
.phone .tabbar {
|
||||||
|
margin-top: auto;
|
||||||
|
display: flex; align-items: center; justify-content: space-around;
|
||||||
|
background: var(--surface-2); border-radius: 99px; padding: 9px 12px;
|
||||||
|
}
|
||||||
|
.phone .tabbar .t { width: 20px; height: 20px; opacity: 0.45; }
|
||||||
|
.phone .tabbar .puck {
|
||||||
|
width: 44px; height: 44px; border-radius: 50%;
|
||||||
|
background: var(--accent); color: var(--ink);
|
||||||
|
display: flex; align-items: center; justify-content: center;
|
||||||
|
font-weight: 700; font-size: 19px;
|
||||||
|
box-shadow: 0 8px 18px -6px var(--accent-deep);
|
||||||
|
}
|
||||||
|
.phone .tabbar svg { width: 100%; height: 100%; fill: var(--text); }
|
||||||
|
|
||||||
|
/* ---------- ciphertext rail ---------- */
|
||||||
|
|
||||||
|
.rail-sec { padding: 30px 0 10px; }
|
||||||
|
|
||||||
|
.rail-card {
|
||||||
|
border: 1px solid var(--line); border-radius: 24px;
|
||||||
|
background: var(--bg-raise);
|
||||||
|
padding: 44px 40px 38px;
|
||||||
|
position: relative; overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rail-title { display: flex; justify-content: space-between; align-items: baseline; flex-wrap: wrap; gap: 8px; margin-bottom: 40px; }
|
||||||
|
.rail-title h2 { margin: 0; }
|
||||||
|
.rail-title .sub { color: var(--dim); font-size: 15px; }
|
||||||
|
|
||||||
|
.rail {
|
||||||
|
position: relative;
|
||||||
|
display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rail::before {
|
||||||
|
content: "";
|
||||||
|
position: absolute; left: 6%; right: 6%; top: 26px;
|
||||||
|
border-top: 2px dashed var(--line);
|
||||||
|
}
|
||||||
|
|
||||||
|
.packet {
|
||||||
|
position: absolute; top: 11px; left: 12.5%;
|
||||||
|
width: 30px; height: 30px; margin-left: -15px;
|
||||||
|
animation: hop 7s cubic-bezier(.45,0,.25,1) infinite;
|
||||||
|
filter: drop-shadow(0 4px 10px rgba(255, 214, 10, 0.45));
|
||||||
|
z-index: 2;
|
||||||
|
}
|
||||||
|
@keyframes hop {
|
||||||
|
0% { left: 12.5%; opacity: 0; }
|
||||||
|
6% { left: 12.5%; opacity: 1; }
|
||||||
|
30% { left: 37.5%; }
|
||||||
|
55% { left: 62.5%; }
|
||||||
|
80% { left: 87.5%; opacity: 1; }
|
||||||
|
92% { left: 87.5%; opacity: 0; }
|
||||||
|
100% { left: 87.5%; opacity: 0; }
|
||||||
|
}
|
||||||
|
@media (prefers-reduced-motion: reduce) {
|
||||||
|
.packet { animation: none; left: 12.5%; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.stop { text-align: center; position: relative; z-index: 1; }
|
||||||
|
.stop .pin {
|
||||||
|
width: 52px; height: 52px; margin: 0 auto 14px;
|
||||||
|
border-radius: 16px;
|
||||||
|
background: var(--surface); border: 1px solid var(--line);
|
||||||
|
display: flex; align-items: center; justify-content: center;
|
||||||
|
}
|
||||||
|
.stop .pin svg { width: 24px; height: 24px; stroke: var(--text); fill: none; stroke-width: 1.7; }
|
||||||
|
.stop b { display: block; font-size: 15px; font-weight: 600; }
|
||||||
|
.stop i { display: block; font-style: normal; font-size: 13px; color: var(--mute); margin-top: 3px; }
|
||||||
|
|
||||||
|
@media (max-width: 760px) {
|
||||||
|
.rail { grid-template-columns: repeat(2, 1fr); gap: 28px 12px; }
|
||||||
|
.rail::before, .packet { display: none; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------- sections / features ---------- */
|
||||||
|
|
||||||
|
section { padding: 64px 0; }
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-family: var(--serif); font-weight: 600;
|
||||||
|
font-size: clamp(28px, 3.6vw, 40px);
|
||||||
|
letter-spacing: -0.005em; line-height: 1.15;
|
||||||
|
margin: 0 0 10px;
|
||||||
|
}
|
||||||
|
.sec-head { max-width: 36em; margin-bottom: 44px; }
|
||||||
|
.sec-head p { color: var(--dim); margin: 8px 0 0; }
|
||||||
|
|
||||||
|
.features {
|
||||||
|
display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
|
||||||
|
gap: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.feat {
|
||||||
|
border: 1px solid var(--line); border-radius: 18px;
|
||||||
|
background: var(--bg-raise);
|
||||||
|
padding: 26px 24px 24px;
|
||||||
|
position: relative; overflow: hidden;
|
||||||
|
transition: transform .18s, border-color .18s;
|
||||||
|
}
|
||||||
|
.feat::before {
|
||||||
|
content: ""; position: absolute; top: 0; left: 24px; right: 24px; height: 2px;
|
||||||
|
background: var(--accent); opacity: 0; transition: opacity .18s;
|
||||||
|
}
|
||||||
|
.feat:hover { transform: translateY(-3px); border-color: var(--accent-deep); }
|
||||||
|
.feat:hover::before { opacity: 1; }
|
||||||
|
|
||||||
|
.feat .glyph {
|
||||||
|
width: 42px; height: 42px; border-radius: 12px;
|
||||||
|
background: var(--accent); color: var(--ink);
|
||||||
|
display: flex; align-items: center; justify-content: center;
|
||||||
|
margin-bottom: 16px;
|
||||||
|
}
|
||||||
|
.feat .glyph svg { width: 22px; height: 22px; stroke: var(--ink); fill: none; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
|
||||||
|
.feat h3 { font-size: 17.5px; font-weight: 600; margin: 0 0 6px; }
|
||||||
|
.feat p { font-size: 14.5px; color: var(--dim); margin: 0; }
|
||||||
|
.feat p code { font-family: var(--mono); font-size: 13px; color: var(--text); }
|
||||||
|
|
||||||
|
/* ---------- downloads ---------- */
|
||||||
|
|
||||||
|
.dl-grid {
|
||||||
|
display: grid; grid-template-columns: 1.25fr 1fr; gap: 14px;
|
||||||
|
align-items: stretch;
|
||||||
|
}
|
||||||
|
@media (max-width: 860px) { .dl-grid { grid-template-columns: 1fr; } }
|
||||||
|
|
||||||
|
.dl-card {
|
||||||
|
border: 1px solid var(--line); border-radius: 24px;
|
||||||
|
background: var(--bg-raise); padding: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dl-card .build-chip {
|
||||||
|
display: inline-flex; align-items: center; gap: 8px;
|
||||||
|
font-family: var(--mono); font-size: 12.5px; letter-spacing: 0.06em;
|
||||||
|
background: var(--surface-2); border-radius: 99px; padding: 5px 13px;
|
||||||
|
margin-bottom: 18px; color: var(--dim);
|
||||||
|
}
|
||||||
|
.dl-card .build-chip .dot { width: 7px; height: 7px; border-radius: 50%; background: #58B368; }
|
||||||
|
|
||||||
|
.dl-rows { display: flex; flex-direction: column; }
|
||||||
|
.dl-rows a {
|
||||||
|
display: flex; align-items: center; gap: 14px;
|
||||||
|
padding: 13px 6px; text-decoration: none;
|
||||||
|
border-bottom: 1px solid var(--line);
|
||||||
|
transition: background .12s;
|
||||||
|
}
|
||||||
|
.dl-rows a:last-child { border-bottom: 0; }
|
||||||
|
.dl-rows a:hover { background: var(--surface); border-radius: 10px; }
|
||||||
|
.dl-rows svg { width: 20px; height: 20px; stroke: var(--dim); fill: none; stroke-width: 1.6; flex: none; }
|
||||||
|
.dl-rows .name { flex: 1; font-weight: 600; font-size: 15.5px; }
|
||||||
|
.dl-rows .file { font-family: var(--mono); font-size: 12px; color: var(--mute); }
|
||||||
|
.dl-rows .arrow { color: var(--accent-deep); font-weight: 700; }
|
||||||
|
|
||||||
|
.dl-meta { margin-top: 16px; font-size: 13px; color: var(--mute); }
|
||||||
|
.dl-meta a { color: var(--dim); }
|
||||||
|
.dl-meta a:hover { color: var(--text); }
|
||||||
|
|
||||||
|
.stores-card { display: flex; flex-direction: column; gap: 12px; justify-content: center; }
|
||||||
|
.stores-card .store { min-height: 64px; }
|
||||||
|
.stores-card p { font-size: 13.5px; color: var(--mute); margin: 6px 4px 0; }
|
||||||
|
|
||||||
|
/* ---------- handle ---------- */
|
||||||
|
|
||||||
|
.handle-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 48px; align-items: center; }
|
||||||
|
@media (max-width: 860px) { .handle-grid { grid-template-columns: 1fr; gap: 28px; } }
|
||||||
|
|
||||||
|
.handle-grid .big-at {
|
||||||
|
font-family: var(--serif); font-size: clamp(40px, 5vw, 62px); line-height: 1.05;
|
||||||
|
margin: 0 0 14px;
|
||||||
|
}
|
||||||
|
.handle-grid .big-at .at-name { color: var(--accent-deep); }
|
||||||
|
@media (prefers-color-scheme: dark) { .handle-grid .big-at .at-name { color: var(--accent); } }
|
||||||
|
.handle-grid p { color: var(--dim); max-width: 30em; }
|
||||||
|
|
||||||
|
.code-card {
|
||||||
|
border: 1px solid var(--line); border-radius: 18px;
|
||||||
|
background: var(--ink); color: #EDEAD9;
|
||||||
|
font-family: var(--mono); font-size: 13.5px; line-height: 1.75;
|
||||||
|
padding: 24px 26px; overflow-x: auto;
|
||||||
|
box-shadow: 0 30px 60px -30px var(--shadow);
|
||||||
|
}
|
||||||
|
.code-card .c-dim { color: #6E6B5E; }
|
||||||
|
.code-card .c-key { color: #FFD60A; }
|
||||||
|
.code-card .c-str { color: #9CCC6B; }
|
||||||
|
|
||||||
|
/* ---------- footer ---------- */
|
||||||
|
|
||||||
|
footer.site {
|
||||||
|
border-top: 1px solid var(--line);
|
||||||
|
margin-top: 40px;
|
||||||
|
padding: 52px 0 60px;
|
||||||
|
font-size: 14.5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.foot-grid { display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; gap: 28px; }
|
||||||
|
@media (max-width: 760px) { .foot-grid { grid-template-columns: 1fr 1fr; } }
|
||||||
|
|
||||||
|
.foot-brand .mark {
|
||||||
|
width: 34px; height: 34px; display: inline-block;
|
||||||
|
background: currentColor;
|
||||||
|
-webkit-mask: url("assets/goblin-mark-white.svg") center / contain no-repeat;
|
||||||
|
mask: url("assets/goblin-mark-white.svg") center / contain no-repeat;
|
||||||
|
}
|
||||||
|
.foot-brand p { color: var(--mute); max-width: 26em; margin: 12px 0 0; }
|
||||||
|
|
||||||
|
.foot-grid h4 {
|
||||||
|
font-family: var(--mono); font-size: 11.5px; letter-spacing: 0.18em;
|
||||||
|
text-transform: uppercase; color: var(--mute); margin: 4px 0 14px; font-weight: 600;
|
||||||
|
}
|
||||||
|
.foot-grid ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 9px; }
|
||||||
|
.foot-grid a { text-decoration: none; color: var(--dim); }
|
||||||
|
.foot-grid a:hover { color: var(--text); }
|
||||||
|
|
||||||
|
.foot-bottom {
|
||||||
|
display: flex; justify-content: space-between; flex-wrap: wrap; gap: 10px;
|
||||||
|
margin-top: 44px; color: var(--mute); font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------- legal pages ---------- */
|
||||||
|
|
||||||
|
.legal { max-width: 720px; margin: 0 auto; padding: 30px 0 80px; }
|
||||||
|
.legal h1 { font-family: var(--serif); font-weight: 600; font-size: clamp(34px, 5vw, 50px); margin: 26px 0 6px; }
|
||||||
|
.legal .updated { font-family: var(--mono); font-size: 13px; color: var(--mute); margin-bottom: 38px; }
|
||||||
|
.legal h2 { font-size: 23px; margin: 40px 0 10px; }
|
||||||
|
.legal p, .legal li { color: var(--dim); font-size: 16px; }
|
||||||
|
.legal li { margin-bottom: 8px; }
|
||||||
|
.legal strong { color: var(--text); }
|
||||||
|
.legal a { color: var(--text); }
|
||||||
|
.legal .callout {
|
||||||
|
border: 1px solid var(--line); border-left: 3px solid var(--accent);
|
||||||
|
background: var(--bg-raise); border-radius: 0 12px 12px 0;
|
||||||
|
padding: 16px 20px; margin: 24px 0;
|
||||||
|
}
|
||||||
+106
@@ -0,0 +1,106 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Terms of Use — Goblin</title>
|
||||||
|
<meta name="robots" content="noindex">
|
||||||
|
<link rel="icon" type="image/png" href="assets/goblin-icon.png">
|
||||||
|
<link rel="stylesheet" href="styles.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="wrap">
|
||||||
|
<header class="site">
|
||||||
|
<a class="brand" href="/">
|
||||||
|
<span class="mark" aria-hidden="true"></span>
|
||||||
|
<span class="word">Goblin</span>
|
||||||
|
</a>
|
||||||
|
<nav class="site" aria-label="Site">
|
||||||
|
<a href="/#downloads">Downloads</a>
|
||||||
|
<a class="gh" href="https://github.com/2ro/goblin" rel="noopener">GitHub</a>
|
||||||
|
</nav>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main class="legal">
|
||||||
|
<h1>Terms of Use</h1>
|
||||||
|
<p class="updated">Last updated · June 12, 2026</p>
|
||||||
|
|
||||||
|
<div class="callout">
|
||||||
|
<strong>The short version:</strong> Goblin is free, open-source,
|
||||||
|
non-custodial software. You hold your own keys, you are responsible for
|
||||||
|
your own funds, and everything is provided as-is.
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2>1. What Goblin is</h2>
|
||||||
|
<p>Goblin is open-source wallet software for the GRIN cryptocurrency,
|
||||||
|
licensed under the <a href="https://www.apache.org/licenses/LICENSE-2.0" rel="noopener">Apache
|
||||||
|
License 2.0</a>. The software runs on your own device. The project also
|
||||||
|
operates an optional identity service at <strong>goblin.st</strong> that
|
||||||
|
maps human-readable names to nostr public keys (<a href="https://nips.nostr.com/5" rel="noopener">NIP-05</a>), and a public
|
||||||
|
nostr relay. Together these are "the Services".</p>
|
||||||
|
|
||||||
|
<h2>2. Non-custodial — your keys, your funds</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Goblin never holds, transmits custody of, or has access to your
|
||||||
|
funds, seed phrase, or private keys. They exist only on your device.</li>
|
||||||
|
<li>If you lose your seed phrase or identity backup, <strong>nobody can
|
||||||
|
recover it</strong> — not you-support, not the project, nobody.</li>
|
||||||
|
<li>Transactions on the GRIN network are irreversible. Verify amounts
|
||||||
|
and recipients before sending.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>3. The name service</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Handles are free, first-come, registered to exactly one nostr key
|
||||||
|
at a time, and yours until you release them.</li>
|
||||||
|
<li>Releasing a name is permanent and immediate — once released it is
|
||||||
|
available for anyone to register, so don't release a name you want to
|
||||||
|
keep. Name changes are limited to one every 10 minutes per key.</li>
|
||||||
|
<li>Names that impersonate others, infringe rights, or are used for
|
||||||
|
abuse may be removed. Reserved names may be withheld.</li>
|
||||||
|
<li>The name service is a convenience layer. The wallet is fully usable
|
||||||
|
without it.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2>4. Acceptable use</h2>
|
||||||
|
<p>Don't use the Services to break the law, to harm others, or to attack
|
||||||
|
the network (spam, denial of service, abuse of rate limits). We may block
|
||||||
|
traffic that does.</p>
|
||||||
|
|
||||||
|
<h2>5. No warranty</h2>
|
||||||
|
<p>The software and Services are provided <strong>"as is"</strong>,
|
||||||
|
without warranty of any kind, express or implied, including
|
||||||
|
merchantability, fitness for a particular purpose, and non-infringement.
|
||||||
|
Use them at your own risk. To the maximum extent permitted by law, the
|
||||||
|
project and its contributors are not liable for any loss of funds, data,
|
||||||
|
or profits, or any indirect, incidental, or consequential damages arising
|
||||||
|
from your use of the software or Services.</p>
|
||||||
|
|
||||||
|
<h2>6. Not financial advice</h2>
|
||||||
|
<p>Nothing here is investment, legal, or tax advice. Cryptocurrency is
|
||||||
|
volatile and may be regulated differently where you live. You are
|
||||||
|
responsible for complying with your local laws.</p>
|
||||||
|
|
||||||
|
<h2>7. Changes</h2>
|
||||||
|
<p>These terms may change as the project evolves; the current version
|
||||||
|
always lives at this page. Continued use of the Services after a change
|
||||||
|
constitutes acceptance.</p>
|
||||||
|
|
||||||
|
<h2>8. Contact</h2>
|
||||||
|
<p>Questions and reports: open an issue on
|
||||||
|
<a href="https://github.com/2ro/goblin" rel="noopener">GitHub</a>.</p>
|
||||||
|
</main>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer class="site">
|
||||||
|
<div class="wrap">
|
||||||
|
<div class="foot-bottom">
|
||||||
|
<span>© 2026 the Goblin project</span>
|
||||||
|
<span><a href="terms.html" style="color:inherit">Terms</a> · <a href="privacy.html" style="color:inherit">Privacy</a></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Reference in New Issue
Block a user