<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{title}</title>
<link rel="icon" type="image/svg+xml" href="{favicon}">
<style>{CSS}</style>
<script>{JS}</script>
</head>
<body>
<header>
<div class="header-left">
<img src="https://freenet.org/freenet_logo.svg" alt="Freenet" class="logo">
<span class="header-title">FREENET</span>
<span class="header-scope">Local Peer</span>
<span class="badge" id="version-badge" data-version="{version}">v{version}</span>
<a class="update-badge" id="update-badge" href="https://github.com/freenet/freenet-core/releases/latest" target="_blank" rel="noopener noreferrer" hidden>Update available</a>
<span class="pub-key-label">Peer ID</span>
<code class="pub-key" id="peer-id" title="Click to copy">{peer_id}</code>{peer_copy_btn}
<span class="pub-key-label">Pub key</span>
<code class="pub-key" id="pub-key" title="Click to copy">{pub_key}</code>{pub_copy_btn}
</div>
<div class="header-right">
<span class="uptime">Up {uptime}</span>
<button class="theme-btn" id="theme-btn" onclick="toggleTheme()" title="Toggle dark/light mode">
<span id="theme-icon">☀️</span>
</button>
</div>
</header>
<div class="version-banner" id="version-mismatch-banner" data-asset-version="{asset_version}" role="alert" hidden></div>
<main>
{status_card}
{peers_card}
{transfer_card}
{hosting_card}
{governance_card}
{ban_list_card}
{contracts_card}
{ops_card}
<div class="card">
<h2>Import your data</h2>
<p class="note">
Coming from a hosted "try Freenet" server? Import the
<code>freenet-data.fnsx</code> bundle you exported there to bring
your rooms, identities and other delegate data onto this peer.
The import runs live, with no need to stop this node.
</p>
<button class="import-btn import-open-btn" type="button">Import data file…</button>
</div>
<div class="card">
<h2>Freenet Links</h2>
<ul class="app-list">
<li>
<a href="/v1/contract/web/771DvtPMwt2PumPyrFvsz7fpvU1gogcmb5qtS1yYEEH9/">Atlas</a>
<p class="note">Decentralized search and recommendation engine for Freenet.</p>
</li>
<li>
<a href="/v1/contract/web/raAqMhMG7KUpXBU2SxgCQ3Vh4PYjttxdSWd9ftV7RLv/">River Chat</a>
<p class="note">You'll need an <a href="https://freenet.org/quickstart#invite-form" target="_blank" rel="noopener noreferrer">invite</a> to join the "Freenet Official" room.</p>
</li>
<li>
<a href="/v1/contract/web/122f6AR7PyF8d8mhczuNQM4xrLtBf5t8g2iB7PEVT7KC/">Freenet Mail</a>
<p class="note">Decentralized email built on Freenet. <a href="https://github.com/freenet/mail" target="_blank" rel="noopener noreferrer">Source</a>.</p>
</li>
<li>
<a href="/v1/contract/web/EqJ5YpEEV3XLqEvKWLQHFhGAac2qXzSUoE6k2zbdnXBr/">Delta</a>
<p class="note">A website builder for Freenet.</p>
</li>
<li>
<a href="/v1/contract/web/DLog47hEsrtuGT4N5XCeMBG45m4n1aWM89tBZXue2E1N/">Ghostkey Identity Vault</a>
<p class="note">Manage Ghostkey identities on Freenet.</p>
</li>
<li>
<a href="/v1/contract/web/E4m5WbaC4cdbpDjL82WfYUnrM9iMnfaaN8Tsn7UHPMjZ/">freenet.org</a>
<p class="note">The freenet.org website, mirrored on Freenet.</p>
</li>
</ul>
</div>
</main>
<div class="modal-overlay" id="import-modal" hidden>
<div class="modal-card" role="dialog" aria-modal="true" aria-labelledby="import-modal-title">
<h2 id="import-modal-title">Import your data</h2>
<p class="note">
Choose the encrypted <code>.fnsx</code> bundle and enter the
access key that protects it. It is decrypted and imported
entirely on this peer. The key never leaves your browser except
to this local node.
</p>
<label class="modal-field">
<span>Data file (.fnsx)</span>
<input type="file" id="import-file" accept=".fnsx,application/octet-stream" />
</label>
<label class="modal-field">
<span>Key type</span>
<select id="import-key-kind">
<option value="token" selected>Access key (from the hosted proxy)</option>
<option value="passphrase">Passphrase (offline export)</option>
</select>
</label>
<label class="modal-field">
<span id="import-key-label">Access key</span>
<input type="password" id="import-key" autocomplete="off" autocapitalize="off" spellcheck="false" placeholder="Paste your access key" />
</label>
<label class="modal-check">
<input type="checkbox" id="import-overwrite" />
<span>Overwrite secrets that already exist on this peer</span>
</label>
<div class="modal-status" id="import-status" role="status" aria-live="polite"></div>
<div class="modal-actions">
<button class="import-btn import-btn-secondary" type="button" id="import-cancel">Cancel</button>
<button class="import-btn import-btn-primary" type="button" id="import-submit">Import</button>
</div>
</div>
</div>
</body>
</html>