The page was generated by a one-off script that no longer exists, so a text change meant rebuilding the tooling first. build/build.mjs turns whitepaper.md into index.html byte-for-byte as published; the page chrome and the two diagrams are checked in beside it (the folder needs an exception from the generic build/ ignore rule). README.md records the publishing steps for both mirrors and the editorial decisions the text follows.
146 lines
8.7 KiB
HTML
146 lines
8.7 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<title>Whitepaper — Theseus.X</title>
|
|
<meta name="description" content="How Theseus Navigator resolves Bitcoin Cash names without a registrar or a resolver in the middle, how content and records are published and verified, the protections it ships on by default, the wallet and extension model, and the security model as it stands.">
|
|
<link rel="icon" href="../brand/favicon.svg" type="image/svg+xml">
|
|
<meta property="og:type" content="article">
|
|
<meta property="og:site_name" content="Theseus.X">
|
|
<meta property="og:title" content="Theseus Navigator Whitepaper">
|
|
<meta property="og:description" content="A browser in which a site's name is a record on the Bitcoin Cash blockchain, not an entry in a registrar's database.">
|
|
<meta property="og:url" content="https://theseus.x/whitepaper/">
|
|
<style>
|
|
:root{ --bg:#0b0e14; --panel:#141a24; --panel2:#18202c; --line:rgba(255,255,255,.09);
|
|
--ink:#e7eaf1; --mut:#8b98a9; --dim:#5e6678; --acid:#d6ff3d; }
|
|
*{box-sizing:border-box}
|
|
html{scroll-behavior:smooth}
|
|
body{margin:0;background:radial-gradient(1100px 560px at 50% -12%,#16202e,var(--bg));color:var(--ink);
|
|
font:16px/1.7 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;min-height:100vh;padding-top:52px}
|
|
a{color:var(--acid)}
|
|
.topnav{position:fixed;top:0;left:0;right:0;z-index:20;display:flex;gap:2px;align-items:center;flex-wrap:wrap;
|
|
padding:10px 1.2rem;background:rgba(11,14,20,.88);backdrop-filter:blur(10px)}
|
|
.topnav .brand{font-weight:600;color:var(--ink);text-decoration:none;margin-right:14px;font-size:15px;letter-spacing:.2px;display:flex;align-items:center;gap:8px}
|
|
.topnav .brand .g{color:var(--acid)}
|
|
.topnav .brand svg{width:20px;height:20px}
|
|
.topnav a{color:var(--mut);text-decoration:none;padding:6px 12px;border-radius:8px;font-size:14px;display:inline-flex;align-items:center;gap:6px}
|
|
.topnav a:hover{color:var(--ink);background:var(--panel)}
|
|
.topnav a.here{color:var(--acid);background:rgba(214,255,61,.08)}
|
|
.topnav a.get{margin-left:auto;background:rgba(214,255,61,.10);color:var(--acid);font-weight:500}
|
|
.topnav a.get:hover{background:rgba(214,255,61,.18)}
|
|
.topnav a .g{color:var(--acid)}
|
|
.topnav a svg.tabicon{width:15px;height:15px;flex:none}
|
|
|
|
/* Mobile hamburger — matches the home-page pattern. */
|
|
.topnav .menu{display:none}
|
|
@media (max-width:720px){
|
|
.topnav{flex-wrap:nowrap;padding:10px 1rem}
|
|
.topnav .brand{margin-right:0}
|
|
.topnav > a:not(.brand){display:none}
|
|
.topnav .menu{display:block;margin-left:auto;position:relative}
|
|
.topnav .menu > summary{list-style:none;cursor:pointer;padding:8px 10px;
|
|
border-radius:8px;color:var(--mut);display:inline-flex;align-items:center;gap:6px}
|
|
.topnav .menu > summary::-webkit-details-marker{display:none}
|
|
.topnav .menu > summary svg{width:22px;height:22px;display:block}
|
|
.topnav .menu > summary:hover,
|
|
.topnav .menu[open] > summary{color:var(--ink);background:var(--panel)}
|
|
.topnav .menu .menu-panel{position:absolute;top:calc(100% + 6px);right:0;
|
|
background:var(--bg);border:1px solid var(--line);border-radius:12px;
|
|
padding:6px;min-width:220px;display:flex;flex-direction:column;gap:2px;
|
|
box-shadow:0 10px 32px rgba(0,0,0,.55)}
|
|
.topnav .menu .menu-panel a{padding:10px 14px;border-radius:8px;font-size:14.5px;
|
|
color:var(--mut);text-decoration:none;display:flex;align-items:center;gap:8px}
|
|
.topnav .menu .menu-panel a:hover{color:var(--ink);background:var(--panel)}
|
|
}
|
|
.wrap{max-width:1040px;margin:0 auto;padding:0 1.2rem}
|
|
.layout{display:grid;grid-template-columns:220px minmax(0,760px);gap:48px;justify-content:center;align-items:start}
|
|
header.hero{padding:3rem 0 1rem}
|
|
h1{font-size:clamp(1.8rem,4.6vw,2.5rem);line-height:1.15;margin:0 0 .5rem}
|
|
h1 .g{color:var(--acid)}
|
|
.byline{color:var(--mut);font-size:.95rem;margin:0}
|
|
.toc{position:sticky;top:72px;font-size:13.5px;padding-top:3.4rem}
|
|
.toc a{display:block;color:var(--mut);text-decoration:none;padding:5px 10px;border-left:2px solid var(--line);line-height:1.35}
|
|
.toc a:hover{color:var(--ink)}
|
|
.toc a.active{color:var(--acid);border-left-color:var(--acid)}
|
|
article h2{font-size:1.45rem;margin:2.6rem 0 .8rem;padding-top:1.4rem;border-top:1px solid var(--line);scroll-margin-top:70px}
|
|
article h2:first-of-type{border-top:none;margin-top:1rem;padding-top:0}
|
|
article p{margin:0 0 1rem;max-width:72ch}
|
|
article b{color:var(--ink)}
|
|
article ul,article ol{padding-left:1.4rem;margin:0 0 1rem;max-width:72ch}
|
|
article li{margin:0 0 .45rem}
|
|
article table{border-collapse:collapse;width:100%;margin:.4rem 0 1.4rem;font-size:14px;background:var(--panel);border:1px solid var(--line);border-radius:12px;overflow:hidden}
|
|
article th,article td{padding:9px 12px;border-top:1px solid var(--line);text-align:left;vertical-align:top}
|
|
article thead th{border-top:none;background:var(--panel2);color:var(--mut);font-weight:600;font-size:12.5px;letter-spacing:.04em;text-transform:uppercase}
|
|
article td:first-child{white-space:nowrap;color:var(--ink)}
|
|
code{background:#0e131b;border:1px solid var(--line);border-radius:6px;padding:1px 6px;font-family:ui-monospace,monospace;font-size:12.5px;word-break:break-word}
|
|
figure.diagram{margin:1.2rem 0 1.6rem;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:10px 12px 6px}
|
|
figure.diagram svg{width:100%;height:auto;display:block}
|
|
figure.diagram figcaption{color:var(--dim);font-size:12.5px;padding:6px 6px 4px}
|
|
footer{border-top:1px solid var(--line);padding:2rem 0 3rem;color:var(--dim);font-size:13px;text-align:center;margin-top:3rem}
|
|
@media (max-width:900px){ .layout{grid-template-columns:minmax(0,1fr)} .toc{position:static;padding-top:0;display:flex;flex-wrap:wrap;gap:4px} .toc a{border-left:none;border:1px solid var(--line);border-radius:8px;padding:4px 9px} article td:first-child{white-space:normal} }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<nav class="topnav">
|
|
<a class="brand" href="../">
|
|
<svg viewBox="0 0 64 64" aria-hidden="true">
|
|
<rect width="64" height="64" rx="12" fill="#0b0e14"/>
|
|
<path d="M32 6 L38 32 L26 32 Z" fill="#e04e4e"/>
|
|
<path d="M38 32 L32 58 L26 32 Z" fill="#d6ff3d"/>
|
|
<path d="M6 32 L32 27 L58 32 L32 37 Z" fill="#d6ff3d" opacity=".55"/>
|
|
<circle cx="32" cy="32" r="3" fill="#0b0e14"/>
|
|
</svg>
|
|
<span>Theseus<span class="g">.X</span></span>
|
|
</a>
|
|
<a href="../plug-ins/">Plug-ins</a>
|
|
<a href="../extensions/">Extensions</a>
|
|
<a href="../dev/">Developers</a>
|
|
<a href="//sirius.x/" title="Register a BCNR name"><svg class="tabicon" viewBox="0 0 64 64" aria-hidden="true"><rect width="64" height="64" rx="12" fill="#0b0e14"/><path d="M32 4 L36.4 27.6 L60 32 L36.4 36.4 L32 60 L27.6 36.4 L4 32 L27.6 27.6 Z" fill="#d6ff3d"/></svg><span>Sirius<span class="g">.X</span></span></a>
|
|
<a class="get" href="../#download">Get Theseus</a>
|
|
<details class="menu">
|
|
<summary aria-label="Open menu">
|
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" aria-hidden="true"><path d="M4 7h16M4 12h16M4 17h16"/></svg>
|
|
</summary>
|
|
<div class="menu-panel">
|
|
<a href="../plug-ins/">Plug-ins</a>
|
|
<a href="../extensions/">Extensions</a>
|
|
<a href="../dev/">Developers</a>
|
|
<a href="//sirius.x/">Sirius.X</a>
|
|
</div>
|
|
</details>
|
|
</nav>
|
|
|
|
<div class="wrap">
|
|
<div class="layout">
|
|
<aside class="toc" aria-label="Contents">
|
|
{{toc}}
|
|
</aside>
|
|
<main>
|
|
<header class="hero">
|
|
<h1>{{title}}</h1>
|
|
<p class="byline">{{byline}}</p>
|
|
</header>
|
|
<article>
|
|
{{article}}
|
|
</article>
|
|
</main>
|
|
</div>
|
|
</div>
|
|
|
|
<footer>
|
|
<p>theseus.x is a BCNR name resolving to a Sia-hosted static site.
|
|
Source and issues: <a href="https://silentmode.st/">silentmode.st</a>.
|
|
Alpha software on a test network.</p>
|
|
<p>This paper is published under <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>.
|
|
Theseus Navigator is free software under the <a href="https://code.silentmode.st/silentmode/theseus/src/branch/master/LICENSE">Mozilla Public License 2.0</a>;
|
|
its <a href="https://code.silentmode.st/silentmode/theseus/src/branch/master/THIRD-PARTY-NOTICES.md">third-party notices</a> and
|
|
<a href="https://code.silentmode.st/silentmode/theseus/src/branch/master/TRADEMARKS.md">trademark note</a> are in the source repository.</p>
|
|
</footer>
|
|
<script>
|
|
const links = [...document.querySelectorAll('.toc a')], heads = links.map(a => document.getElementById(a.getAttribute('href').slice(1)));
|
|
const mark = () => { let cur = 0; heads.forEach((h, i) => { if (h && h.getBoundingClientRect().top < 90) cur = i; }); links.forEach((a, i) => a.classList.toggle('active', i === cur)); };
|
|
addEventListener('scroll', mark, { passive: true }); mark();
|
|
</script>
|
|
</body>
|
|
</html>
|