site-sirius-x: use the Sirius.X brand mark, drop trailing slashes
Star emoji swapped for the site's own 4-point sparkle mark — same SVG that ships as the favicon — everywhere it appeared: the topnav brand, the hero mark, the "you're here" pill on the family-of-.x panel, the footer, register.html, portal.html, tld.html, market/, docs/, admin/, brand/, storage/, theseus/, studio.html, site-footer.js. Anyone who opens Sirius.X now sees the acid-green sparkle instead of a browser star emoji. Internal links normalised to no trailing slash — href="./theseus/" became href="./theseus" (Theseus, docs, market, admin). Cleaner URLs in the address bar and no double-slash redirect step on the mirrors.
This commit is contained in:
parent
f84304b0f7
commit
6618b38b2d
22 changed files with 837 additions and 217 deletions
|
|
@ -93,7 +93,7 @@
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<nav class="topnav">
|
<nav class="topnav">
|
||||||
<a class="brand" href="../">⭐ <span class="g">Sirius.X</span></a>
|
<a class="brand" href="../"><svg width="18" height="18" viewBox="0 0 64 64" style="vertical-align:-4px;margin-right:6px" 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 class="g">Sirius.X</span></a>
|
||||||
<a href="../#try">Try it</a>
|
<a href="../#try">Try it</a>
|
||||||
<a href="../#search-input">✏️ Register</a>
|
<a href="../#search-input">✏️ Register</a>
|
||||||
<a href="../tld.html">🌐 TLD</a>
|
<a href="../tld.html">🌐 TLD</a>
|
||||||
|
|
@ -388,7 +388,7 @@ $("mint-btn").addEventListener("click", async () => {
|
||||||
<script src="../js/pin-escrow.js?v=20260909pin"></script>
|
<script src="../js/pin-escrow.js?v=20260909pin"></script>
|
||||||
<script src="../js/pricing.js?v=20260909tldhigh"></script>
|
<script src="../js/pricing.js?v=20260909tldhigh"></script>
|
||||||
<script defer src="../js/site-footer.js?v=20260907rel"></script>
|
<script defer src="../js/site-footer.js?v=20260907rel"></script>
|
||||||
<script defer src="../js/theme.js?v=20260910font"></script>
|
<script defer src="../js/theme.js?v=20260920compact"></script>
|
||||||
<script defer src="../js/profile-menu.js?v=20260908tabs"></script>
|
<script defer src="../js/profile-menu.js?v=20260908tabs"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -92,7 +92,7 @@
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<nav class="topnav">
|
<nav class="topnav">
|
||||||
<a class="brand" href="../">⭐ <span class="g">Sirius.X</span></a>
|
<a class="brand" href="../"><svg width="18" height="18" viewBox="0 0 64 64" style="vertical-align:-4px;margin-right:6px" 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 class="g">Sirius.X</span></a>
|
||||||
<a href="../#try">Try it</a>
|
<a href="../#try">Try it</a>
|
||||||
<a href="../#search-input">✏️ Register</a>
|
<a href="../#search-input">✏️ Register</a>
|
||||||
<a href="../tld.html">🌐 TLD</a>
|
<a href="../tld.html">🌐 TLD</a>
|
||||||
|
|
@ -234,7 +234,7 @@
|
||||||
<script src="../js/pin-escrow.js?v=20260909pin"></script>
|
<script src="../js/pin-escrow.js?v=20260909pin"></script>
|
||||||
<script src="../js/pricing.js?v=20260909tldhigh"></script>
|
<script src="../js/pricing.js?v=20260909tldhigh"></script>
|
||||||
<script defer src="../js/site-footer.js?v=20260907rel"></script>
|
<script defer src="../js/site-footer.js?v=20260907rel"></script>
|
||||||
<script defer src="../js/theme.js?v=20260910font"></script>
|
<script defer src="../js/theme.js?v=20260920compact"></script>
|
||||||
<script defer src="../js/profile-menu.js?v=20260908tabs"></script>
|
<script defer src="../js/profile-menu.js?v=20260908tabs"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -92,16 +92,16 @@
|
||||||
<script type="importmap">
|
<script type="importmap">
|
||||||
{ "imports": { "@bitauth/libauth": "https://silentmode.st/js/libauth.js" } }
|
{ "imports": { "@bitauth/libauth": "https://silentmode.st/js/libauth.js" } }
|
||||||
</script>
|
</script>
|
||||||
<script src="../js/i18n.js?v=20260920d"></script>
|
<script src="../js/i18n.js?v=20260920e"></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<nav class="topnav">
|
<nav class="topnav">
|
||||||
<a class="brand" href="../">⭐ <span class="g">Sirius.X</span></a>
|
<a class="brand" href="../"><svg width="18" height="18" viewBox="0 0 64 64" style="vertical-align:-4px;margin-right:6px" 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 class="g">Sirius.X</span></a>
|
||||||
<a href="../#try">Try it</a>
|
<a href="../#try">Try it</a>
|
||||||
<a href="../#search-input">✏️ Register</a>
|
<a href="../#search-input">✏️ Register</a>
|
||||||
<a href="../tld.html">🌐 TLD</a>
|
<a href="../tld.html">🌐 TLD</a>
|
||||||
<a href="../market.html">🛒 Market</a>
|
<a href="../market/">🛒 Market</a>
|
||||||
<a href="../theseus/"><svg width="14" height="14" viewBox="0 0 64 64" style="vertical-align:-2px;margin-right:4px" 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>Theseus</a>
|
<a href="../theseus/"><svg width="14" height="14" viewBox="0 0 64 64" style="vertical-align:-2px;margin-right:4px" 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>Theseus</a>
|
||||||
<a href="../portal.html" class="portal">🔑 Sign in</a>
|
<a href="../portal.html" class="portal">🔑 Sign in</a>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
@ -230,7 +230,7 @@
|
||||||
transaction — your certificate as input 0, the price to you as output 0 — with
|
transaction — your certificate as input 0, the price to you as output 0 — with
|
||||||
<code>SIGHASH_SINGLE | ANYONECANPAY</code>. That signature says "whoever completes this
|
<code>SIGHASH_SINGLE | ANYONECANPAY</code>. That signature says "whoever completes this
|
||||||
pays me this much"; it constrains nothing else. The gateway stores it and shows it on
|
pays me this much"; it constrains nothing else. The gateway stores it and shows it on
|
||||||
the <a href="../market.html">market</a> after checking the signature, the on-chain
|
the <a href="../market/">market</a> after checking the signature, the on-chain
|
||||||
owner and that the certificate is still unspent.</span></li>
|
owner and that the certificate is still unspent.</span></li>
|
||||||
<li><b>Buyer completes.</b>
|
<li><b>Buyer completes.</b>
|
||||||
<span>Verify the offer locally, add your coins, add the certificate output to your own
|
<span>Verify the offer locally, add your coins, add the certificate output to your own
|
||||||
|
|
@ -606,7 +606,7 @@ process.exit(0);"</pre>
|
||||||
<script src="../js/pin-escrow.js?v=20260909pin"></script>
|
<script src="../js/pin-escrow.js?v=20260909pin"></script>
|
||||||
<script src="../js/pricing.js?v=20260917market"></script>
|
<script src="../js/pricing.js?v=20260917market"></script>
|
||||||
<script defer src="../js/site-footer.js?v=20260917market"></script>
|
<script defer src="../js/site-footer.js?v=20260917market"></script>
|
||||||
<script defer src="../js/theme.js?v=20260910font"></script>
|
<script defer src="../js/theme.js?v=20260920compact"></script>
|
||||||
<script defer src="../js/profile-menu.js?v=20260920m"></script>
|
<script defer src="../js/profile-menu.js?v=20260920m"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -17,13 +17,9 @@
|
||||||
"Three things you can do right now. The registrar and TLD-registry UIs live at silentmode.st today; Sirius.X is the canonical home and will consolidate them here.": "Drei Dinge, die du sofort tun kannst. Registrar und TLD-Register laufen heute auf silentmode.st; Sirius.X ist das eigentliche Zuhause und führt sie hier zusammen.",
|
"Three things you can do right now. The registrar and TLD-registry UIs live at silentmode.st today; Sirius.X is the canonical home and will consolidate them here.": "Drei Dinge, die du sofort tun kannst. Registrar und TLD-Register laufen heute auf silentmode.st; Sirius.X ist das eigentliche Zuhause und führt sie hier zusammen.",
|
||||||
"Register a name": "Namen registrieren",
|
"Register a name": "Namen registrieren",
|
||||||
"Pick a label, search across every TLD in the registry at once, mint the name certificate straight into your own wallet. No yearly renewal.": "Wähle ein Label, durchsuche alle TLDs des Registers auf einmal und präge das Namenszertifikat direkt in dein eigenes Wallet. Keine jährliche Verlängerung.",
|
"Pick a label, search across every TLD in the registry at once, mint the name certificate straight into your own wallet. No yearly renewal.": "Wähle ein Label, durchsuche alle TLDs des Registers auf einmal und präge das Namenszertifikat direkt in dein eigenes Wallet. Keine jährliche Verlängerung.",
|
||||||
"≈ 10,000 sat service fee · 1,300 sat chain dust · < 1 ¢": "≈ 10.000 sat Servicegebühr · 1.300 sat Chain-Dust · < 1 ¢",
|
|
||||||
"Chipnet placeholder. 90 % of the service fee flows to the TLD owner, 10 % to the platform.": "Chipnet-Platzhalter. 90 % der Servicegebühr gehen an den TLD-Inhaber, 10 % an die Plattform.",
|
|
||||||
"Search a name →": "Namen suchen →",
|
"Search a name →": "Namen suchen →",
|
||||||
"Register a TLD": "TLD registrieren",
|
"Register a TLD": "TLD registrieren",
|
||||||
"A TLD is itself a certificate on the chain. Anyone can mint one — you become the registry operator for every second-level name under it, and earn 90 % of the fee on every name registered under it. Renewals are per-TLD policy set by the owner.": "Eine TLD ist selbst ein Zertifikat auf der Kette. Jeder kann eine prägen — du wirst Registerbetreiber für jeden Second-Level-Namen darunter und verdienst 90 % der Gebühr jedes darunter registrierten Namens. Verlängerungen legt der Inhaber pro TLD fest.",
|
"A TLD is itself a certificate on the chain. Anyone can mint one — you become the registry operator for every second-level name under it, and earn 90 % of the fee on every name registered under it. Renewals are per-TLD policy set by the owner.": "Eine TLD ist selbst ein Zertifikat auf der Kette. Jeder kann eine prägen — du wirst Registerbetreiber für jeden Second-Level-Namen darunter und verdienst 90 % der Gebühr jedes darunter registrierten Namens. Verlängerungen legt der Inhaber pro TLD fest.",
|
||||||
"≈ 1,250,000 sat service fee (≈ $5) · 1,300 sat chain dust": "≈ 1.250.000 sat Servicegebühr (≈ 5 $) · 1.300 sat Chain-Dust",
|
|
||||||
"Chipnet placeholder rate — mainnet will price by label length via an on-chain oracle.": "Chipnet-Platzhalterkurs — im Mainnet richtet sich der Preis per On-Chain-Orakel nach der Label-Länge.",
|
|
||||||
"Search a TLD →": "TLD suchen →",
|
"Search a TLD →": "TLD suchen →",
|
||||||
"Operator admin →": "Betreiber-Admin →",
|
"Operator admin →": "Betreiber-Admin →",
|
||||||
"Look up & verify": "Nachschlagen & prüfen",
|
"Look up & verify": "Nachschlagen & prüfen",
|
||||||
|
|
|
||||||
|
|
@ -17,13 +17,9 @@
|
||||||
"Three things you can do right now. The registrar and TLD-registry UIs live at silentmode.st today; Sirius.X is the canonical home and will consolidate them here.": "Τρία πράγματα που μπορείς να κάνεις τώρα. Ο registrar και το μητρώο TLD ζουν σήμερα στο silentmode.st· το Sirius.X είναι το κανονικό τους σπίτι και θα τα ενοποιήσει εδώ.",
|
"Three things you can do right now. The registrar and TLD-registry UIs live at silentmode.st today; Sirius.X is the canonical home and will consolidate them here.": "Τρία πράγματα που μπορείς να κάνεις τώρα. Ο registrar και το μητρώο TLD ζουν σήμερα στο silentmode.st· το Sirius.X είναι το κανονικό τους σπίτι και θα τα ενοποιήσει εδώ.",
|
||||||
"Register a name": "Καταχώρηση ονόματος",
|
"Register a name": "Καταχώρηση ονόματος",
|
||||||
"Pick a label, search across every TLD in the registry at once, mint the name certificate straight into your own wallet. No yearly renewal.": "Διάλεξε μια ετικέτα, ψάξε ταυτόχρονα σε κάθε TLD του μητρώου, κόψε το πιστοποιητικό του ονόματος κατευθείαν στο δικό σου πορτοφόλι. Χωρίς ετήσια ανανέωση.",
|
"Pick a label, search across every TLD in the registry at once, mint the name certificate straight into your own wallet. No yearly renewal.": "Διάλεξε μια ετικέτα, ψάξε ταυτόχρονα σε κάθε TLD του μητρώου, κόψε το πιστοποιητικό του ονόματος κατευθείαν στο δικό σου πορτοφόλι. Χωρίς ετήσια ανανέωση.",
|
||||||
"≈ 10,000 sat service fee · 1,300 sat chain dust · < 1 ¢": "≈ 10.000 sat τέλος υπηρεσίας · 1.300 sat σκόνη blockchain · < 1 ¢",
|
|
||||||
"Chipnet placeholder. 90 % of the service fee flows to the TLD owner, 10 % to the platform.": "Προσωρινή τιμή chipnet. Το 90 % του τέλους πάει στον κάτοχο του TLD, το 10 % στην πλατφόρμα.",
|
|
||||||
"Search a name →": "Αναζήτηση ονόματος →",
|
"Search a name →": "Αναζήτηση ονόματος →",
|
||||||
"Register a TLD": "Καταχώρηση TLD",
|
"Register a TLD": "Καταχώρηση TLD",
|
||||||
"A TLD is itself a certificate on the chain. Anyone can mint one — you become the registry operator for every second-level name under it, and earn 90 % of the fee on every name registered under it. Renewals are per-TLD policy set by the owner.": "Ένα TLD είναι κι αυτό πιστοποιητικό στο blockchain. Οποιοσδήποτε μπορεί να το κόψει — γίνεσαι διαχειριστής μητρώου για κάθε όνομα δεύτερου επιπέδου κάτω από αυτό και κερδίζεις το 90 % του τέλους κάθε ονόματος που καταχωρείται εκεί. Οι ανανεώσεις είναι πολιτική ανά TLD που ορίζει ο κάτοχος.",
|
"A TLD is itself a certificate on the chain. Anyone can mint one — you become the registry operator for every second-level name under it, and earn 90 % of the fee on every name registered under it. Renewals are per-TLD policy set by the owner.": "Ένα TLD είναι κι αυτό πιστοποιητικό στο blockchain. Οποιοσδήποτε μπορεί να το κόψει — γίνεσαι διαχειριστής μητρώου για κάθε όνομα δεύτερου επιπέδου κάτω από αυτό και κερδίζεις το 90 % του τέλους κάθε ονόματος που καταχωρείται εκεί. Οι ανανεώσεις είναι πολιτική ανά TLD που ορίζει ο κάτοχος.",
|
||||||
"≈ 1,250,000 sat service fee (≈ $5) · 1,300 sat chain dust": "≈ 1.250.000 sat τέλος υπηρεσίας (≈ 5 $) · 1.300 sat σκόνη blockchain",
|
|
||||||
"Chipnet placeholder rate — mainnet will price by label length via an on-chain oracle.": "Προσωρινή ισοτιμία chipnet — στο mainnet η τιμή θα ορίζεται από το μήκος της ετικέτας μέσω on-chain oracle.",
|
|
||||||
"Search a TLD →": "Αναζήτηση TLD →",
|
"Search a TLD →": "Αναζήτηση TLD →",
|
||||||
"Operator admin →": "Διαχείριση operator →",
|
"Operator admin →": "Διαχείριση operator →",
|
||||||
"Look up & verify": "Αναζήτηση & επαλήθευση",
|
"Look up & verify": "Αναζήτηση & επαλήθευση",
|
||||||
|
|
|
||||||
|
|
@ -17,13 +17,9 @@
|
||||||
"Three things you can do right now. The registrar and TLD-registry UIs live at silentmode.st today; Sirius.X is the canonical home and will consolidate them here.": "Tres cosas que puedes hacer ahora mismo. El registrador y el registro de TLD viven hoy en silentmode.st; Sirius.X es su hogar canónico y los consolidará aquí.",
|
"Three things you can do right now. The registrar and TLD-registry UIs live at silentmode.st today; Sirius.X is the canonical home and will consolidate them here.": "Tres cosas que puedes hacer ahora mismo. El registrador y el registro de TLD viven hoy en silentmode.st; Sirius.X es su hogar canónico y los consolidará aquí.",
|
||||||
"Register a name": "Registrar un nombre",
|
"Register a name": "Registrar un nombre",
|
||||||
"Pick a label, search across every TLD in the registry at once, mint the name certificate straight into your own wallet. No yearly renewal.": "Elige una etiqueta, búscala en todos los TLD del registro a la vez y acuña el certificado del nombre directamente en tu propia cartera. Sin renovación anual.",
|
"Pick a label, search across every TLD in the registry at once, mint the name certificate straight into your own wallet. No yearly renewal.": "Elige una etiqueta, búscala en todos los TLD del registro a la vez y acuña el certificado del nombre directamente en tu propia cartera. Sin renovación anual.",
|
||||||
"≈ 10,000 sat service fee · 1,300 sat chain dust · < 1 ¢": "≈ 10 000 sat de tarifa de servicio · 1 300 sat de polvo de cadena · < 1 ¢",
|
|
||||||
"Chipnet placeholder. 90 % of the service fee flows to the TLD owner, 10 % to the platform.": "Valor provisional de chipnet. El 90 % de la tarifa va al dueño del TLD, el 10 % a la plataforma.",
|
|
||||||
"Search a name →": "Buscar un nombre →",
|
"Search a name →": "Buscar un nombre →",
|
||||||
"Register a TLD": "Registrar un TLD",
|
"Register a TLD": "Registrar un TLD",
|
||||||
"A TLD is itself a certificate on the chain. Anyone can mint one — you become the registry operator for every second-level name under it, and earn 90 % of the fee on every name registered under it. Renewals are per-TLD policy set by the owner.": "Un TLD es en sí mismo un certificado en la cadena. Cualquiera puede acuñar uno: te conviertes en operador del registro de cada nombre de segundo nivel bajo él y ganas el 90 % de la tarifa de cada nombre registrado. Las renovaciones son una política por TLD que fija el dueño.",
|
"A TLD is itself a certificate on the chain. Anyone can mint one — you become the registry operator for every second-level name under it, and earn 90 % of the fee on every name registered under it. Renewals are per-TLD policy set by the owner.": "Un TLD es en sí mismo un certificado en la cadena. Cualquiera puede acuñar uno: te conviertes en operador del registro de cada nombre de segundo nivel bajo él y ganas el 90 % de la tarifa de cada nombre registrado. Las renovaciones son una política por TLD que fija el dueño.",
|
||||||
"≈ 1,250,000 sat service fee (≈ $5) · 1,300 sat chain dust": "≈ 1 250 000 sat de tarifa de servicio (≈ 5 $) · 1 300 sat de polvo de cadena",
|
|
||||||
"Chipnet placeholder rate — mainnet will price by label length via an on-chain oracle.": "Tasa provisional de chipnet — en mainnet el precio dependerá de la longitud de la etiqueta mediante un oráculo en cadena.",
|
|
||||||
"Search a TLD →": "Buscar un TLD →",
|
"Search a TLD →": "Buscar un TLD →",
|
||||||
"Operator admin →": "Administración del operador →",
|
"Operator admin →": "Administración del operador →",
|
||||||
"Look up & verify": "Consultar y verificar",
|
"Look up & verify": "Consultar y verificar",
|
||||||
|
|
|
||||||
|
|
@ -17,13 +17,9 @@
|
||||||
"Three things you can do right now. The registrar and TLD-registry UIs live at silentmode.st today; Sirius.X is the canonical home and will consolidate them here.": "Trois choses à faire dès maintenant. Le registrar et le registre des TLD vivent aujourd'hui sur silentmode.st ; Sirius.X est leur maison canonique et les regroupera ici.",
|
"Three things you can do right now. The registrar and TLD-registry UIs live at silentmode.st today; Sirius.X is the canonical home and will consolidate them here.": "Trois choses à faire dès maintenant. Le registrar et le registre des TLD vivent aujourd'hui sur silentmode.st ; Sirius.X est leur maison canonique et les regroupera ici.",
|
||||||
"Register a name": "Enregistrer un nom",
|
"Register a name": "Enregistrer un nom",
|
||||||
"Pick a label, search across every TLD in the registry at once, mint the name certificate straight into your own wallet. No yearly renewal.": "Choisissez un libellé, cherchez-le dans tous les TLD du registre d'un coup, frappez le certificat du nom directement dans votre propre portefeuille. Sans renouvellement annuel.",
|
"Pick a label, search across every TLD in the registry at once, mint the name certificate straight into your own wallet. No yearly renewal.": "Choisissez un libellé, cherchez-le dans tous les TLD du registre d'un coup, frappez le certificat du nom directement dans votre propre portefeuille. Sans renouvellement annuel.",
|
||||||
"≈ 10,000 sat service fee · 1,300 sat chain dust · < 1 ¢": "≈ 10 000 sat de frais de service · 1 300 sat de poussière de chaîne · < 1 ¢",
|
|
||||||
"Chipnet placeholder. 90 % of the service fee flows to the TLD owner, 10 % to the platform.": "Valeur provisoire chipnet. 90 % des frais vont au propriétaire du TLD, 10 % à la plateforme.",
|
|
||||||
"Search a name →": "Chercher un nom →",
|
"Search a name →": "Chercher un nom →",
|
||||||
"Register a TLD": "Enregistrer un TLD",
|
"Register a TLD": "Enregistrer un TLD",
|
||||||
"A TLD is itself a certificate on the chain. Anyone can mint one — you become the registry operator for every second-level name under it, and earn 90 % of the fee on every name registered under it. Renewals are per-TLD policy set by the owner.": "Un TLD est lui-même un certificat sur la chaîne. N'importe qui peut en frapper un : vous devenez l'opérateur du registre pour chaque nom de second niveau en dessous, et gagnez 90 % des frais de chaque nom enregistré. Les renouvellements sont une politique par TLD fixée par le propriétaire.",
|
"A TLD is itself a certificate on the chain. Anyone can mint one — you become the registry operator for every second-level name under it, and earn 90 % of the fee on every name registered under it. Renewals are per-TLD policy set by the owner.": "Un TLD est lui-même un certificat sur la chaîne. N'importe qui peut en frapper un : vous devenez l'opérateur du registre pour chaque nom de second niveau en dessous, et gagnez 90 % des frais de chaque nom enregistré. Les renouvellements sont une politique par TLD fixée par le propriétaire.",
|
||||||
"≈ 1,250,000 sat service fee (≈ $5) · 1,300 sat chain dust": "≈ 1 250 000 sat de frais de service (≈ 5 $) · 1 300 sat de poussière de chaîne",
|
|
||||||
"Chipnet placeholder rate — mainnet will price by label length via an on-chain oracle.": "Taux provisoire chipnet — sur mainnet, le prix dépendra de la longueur du libellé via un oracle on-chain.",
|
|
||||||
"Search a TLD →": "Chercher un TLD →",
|
"Search a TLD →": "Chercher un TLD →",
|
||||||
"Operator admin →": "Administration opérateur →",
|
"Operator admin →": "Administration opérateur →",
|
||||||
"Look up & verify": "Consulter et vérifier",
|
"Look up & verify": "Consulter et vérifier",
|
||||||
|
|
|
||||||
|
|
@ -17,13 +17,9 @@
|
||||||
"Three things you can do right now. The registrar and TLD-registry UIs live at silentmode.st today; Sirius.X is the canonical home and will consolidate them here.": "Três coisas que pode fazer agora mesmo. O registrador e o registo de TLD vivem hoje em silentmode.st; o Sirius.X é a sua casa canónica e vai consolidá-los aqui.",
|
"Three things you can do right now. The registrar and TLD-registry UIs live at silentmode.st today; Sirius.X is the canonical home and will consolidate them here.": "Três coisas que pode fazer agora mesmo. O registrador e o registo de TLD vivem hoje em silentmode.st; o Sirius.X é a sua casa canónica e vai consolidá-los aqui.",
|
||||||
"Register a name": "Registar um nome",
|
"Register a name": "Registar um nome",
|
||||||
"Pick a label, search across every TLD in the registry at once, mint the name certificate straight into your own wallet. No yearly renewal.": "Escolha uma etiqueta, pesquise em todos os TLD do registo de uma vez e cunhe o certificado do nome diretamente na sua própria carteira. Sem renovação anual.",
|
"Pick a label, search across every TLD in the registry at once, mint the name certificate straight into your own wallet. No yearly renewal.": "Escolha uma etiqueta, pesquise em todos os TLD do registo de uma vez e cunhe o certificado do nome diretamente na sua própria carteira. Sem renovação anual.",
|
||||||
"≈ 10,000 sat service fee · 1,300 sat chain dust · < 1 ¢": "≈ 10 000 sat de taxa de serviço · 1 300 sat de poeira da cadeia · < 1 ¢",
|
|
||||||
"Chipnet placeholder. 90 % of the service fee flows to the TLD owner, 10 % to the platform.": "Valor provisório da chipnet. 90 % da taxa vai para o dono do TLD, 10 % para a plataforma.",
|
|
||||||
"Search a name →": "Procurar um nome →",
|
"Search a name →": "Procurar um nome →",
|
||||||
"Register a TLD": "Registar um TLD",
|
"Register a TLD": "Registar um TLD",
|
||||||
"A TLD is itself a certificate on the chain. Anyone can mint one — you become the registry operator for every second-level name under it, and earn 90 % of the fee on every name registered under it. Renewals are per-TLD policy set by the owner.": "Um TLD é, ele próprio, um certificado na cadeia. Qualquer pessoa pode cunhar um: torna-se operador do registo de cada nome de segundo nível sob ele e ganha 90 % da taxa de cada nome registado. As renovações são uma política por TLD definida pelo dono.",
|
"A TLD is itself a certificate on the chain. Anyone can mint one — you become the registry operator for every second-level name under it, and earn 90 % of the fee on every name registered under it. Renewals are per-TLD policy set by the owner.": "Um TLD é, ele próprio, um certificado na cadeia. Qualquer pessoa pode cunhar um: torna-se operador do registo de cada nome de segundo nível sob ele e ganha 90 % da taxa de cada nome registado. As renovações são uma política por TLD definida pelo dono.",
|
||||||
"≈ 1,250,000 sat service fee (≈ $5) · 1,300 sat chain dust": "≈ 1 250 000 sat de taxa de serviço (≈ 5 $) · 1 300 sat de poeira da cadeia",
|
|
||||||
"Chipnet placeholder rate — mainnet will price by label length via an on-chain oracle.": "Taxa provisória da chipnet — na mainnet o preço dependerá do comprimento da etiqueta através de um oráculo on-chain.",
|
|
||||||
"Search a TLD →": "Procurar um TLD →",
|
"Search a TLD →": "Procurar um TLD →",
|
||||||
"Operator admin →": "Administração do operador →",
|
"Operator admin →": "Administração do operador →",
|
||||||
"Look up & verify": "Consultar e verificar",
|
"Look up & verify": "Consultar e verificar",
|
||||||
|
|
|
||||||
|
|
@ -17,13 +17,9 @@
|
||||||
"Three things you can do right now. The registrar and TLD-registry UIs live at silentmode.st today; Sirius.X is the canonical home and will consolidate them here.": "Три вещи, которые можно сделать прямо сейчас. Регистратор и реестр TLD сегодня живут на silentmode.st; Sirius.X — их основной дом, и они переедут сюда.",
|
"Three things you can do right now. The registrar and TLD-registry UIs live at silentmode.st today; Sirius.X is the canonical home and will consolidate them here.": "Три вещи, которые можно сделать прямо сейчас. Регистратор и реестр TLD сегодня живут на silentmode.st; Sirius.X — их основной дом, и они переедут сюда.",
|
||||||
"Register a name": "Зарегистрировать имя",
|
"Register a name": "Зарегистрировать имя",
|
||||||
"Pick a label, search across every TLD in the registry at once, mint the name certificate straight into your own wallet. No yearly renewal.": "Выберите метку, найдите её сразу во всех TLD реестра и выпустите сертификат имени прямо в свой кошелёк. Без ежегодного продления.",
|
"Pick a label, search across every TLD in the registry at once, mint the name certificate straight into your own wallet. No yearly renewal.": "Выберите метку, найдите её сразу во всех TLD реестра и выпустите сертификат имени прямо в свой кошелёк. Без ежегодного продления.",
|
||||||
"≈ 10,000 sat service fee · 1,300 sat chain dust · < 1 ¢": "≈ 10 000 сат сервисный сбор · 1 300 сат «пыль» блокчейна · < 1 ¢",
|
|
||||||
"Chipnet placeholder. 90 % of the service fee flows to the TLD owner, 10 % to the platform.": "Заглушка для chipnet. 90 % сервисного сбора идёт владельцу TLD, 10 % — платформе.",
|
|
||||||
"Search a name →": "Найти имя →",
|
"Search a name →": "Найти имя →",
|
||||||
"Register a TLD": "Зарегистрировать TLD",
|
"Register a TLD": "Зарегистрировать TLD",
|
||||||
"A TLD is itself a certificate on the chain. Anyone can mint one — you become the registry operator for every second-level name under it, and earn 90 % of the fee on every name registered under it. Renewals are per-TLD policy set by the owner.": "TLD — это тоже сертификат в блокчейне. Выпустить его может любой: вы становитесь оператором реестра для всех имён второго уровня под ним и получаете 90 % сбора с каждого зарегистрированного имени. Продление — политика каждого TLD, которую задаёт владелец.",
|
"A TLD is itself a certificate on the chain. Anyone can mint one — you become the registry operator for every second-level name under it, and earn 90 % of the fee on every name registered under it. Renewals are per-TLD policy set by the owner.": "TLD — это тоже сертификат в блокчейне. Выпустить его может любой: вы становитесь оператором реестра для всех имён второго уровня под ним и получаете 90 % сбора с каждого зарегистрированного имени. Продление — политика каждого TLD, которую задаёт владелец.",
|
||||||
"≈ 1,250,000 sat service fee (≈ $5) · 1,300 sat chain dust": "≈ 1 250 000 сат сервисный сбор (≈ $5) · 1 300 сат «пыль» блокчейна",
|
|
||||||
"Chipnet placeholder rate — mainnet will price by label length via an on-chain oracle.": "Курс-заглушка для chipnet — в mainnet цена будет зависеть от длины метки через ончейн-оракул.",
|
|
||||||
"Search a TLD →": "Найти TLD →",
|
"Search a TLD →": "Найти TLD →",
|
||||||
"Operator admin →": "Панель оператора →",
|
"Operator admin →": "Панель оператора →",
|
||||||
"Look up & verify": "Найти и проверить",
|
"Look up & verify": "Найти и проверить",
|
||||||
|
|
|
||||||
20
index.html
20
index.html
|
|
@ -133,17 +133,17 @@
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<nav class="topnav">
|
<nav class="topnav">
|
||||||
<a class="brand" href="./">⭐ <span class="g">Sirius.X</span></a>
|
<a class="brand" href="./"><svg width="18" height="18" viewBox="0 0 64 64" style="vertical-align:-4px;margin-right:6px" 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 class="g">Sirius.X</span></a>
|
||||||
<a href="#try">Try it</a>
|
<a href="#try">Try it</a>
|
||||||
<a href="./#search-input">✏️ Register</a>
|
<a href="./#search-input">✏️ Register</a>
|
||||||
<a href="./tld.html">🌐 TLD</a>
|
<a href="./tld.html">🌐 TLD</a>
|
||||||
<a href="./market/">🛒 Market</a>
|
<a href="./market">🛒 Market</a>
|
||||||
<a href="./theseus/"><svg width="14" height="14" viewBox="0 0 64 64" style="vertical-align:-2px;margin-right:4px" 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>Theseus<span class="g">.X</span></a>
|
<a href="./theseus"><svg width="14" height="14" viewBox="0 0 64 64" style="vertical-align:-2px;margin-right:4px" 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>Theseus<span class="g">.X</span></a>
|
||||||
<a href="./portal.html" class="portal">🔑 Sign in</a>
|
<a href="./portal.html" class="portal">🔑 Sign in</a>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<header class="hero">
|
<header class="hero">
|
||||||
<div class="mark">⭐</div>
|
<div class="mark"><svg width="56" height="56" 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></div>
|
||||||
<h1>Names on the <span class="g">chain</span>.</h1>
|
<h1>Names on the <span class="g">chain</span>.</h1>
|
||||||
<p class="tag">Sirius.X is the entry point for BCNR — Bitcoin Cash Name Registry.
|
<p class="tag">Sirius.X is the entry point for BCNR — Bitcoin Cash Name Registry.
|
||||||
Register a top-level domain, register a name under one, look up records,
|
Register a top-level domain, register a name under one, look up records,
|
||||||
|
|
@ -163,7 +163,7 @@
|
||||||
|
|
||||||
<div class="cta" style="margin-top:1.4rem">
|
<div class="cta" style="margin-top:1.4rem">
|
||||||
<a class="btn ghost" href="#try">Or browse what you can do →</a>
|
<a class="btn ghost" href="#try">Or browse what you can do →</a>
|
||||||
<a class="btn ghost" href="./docs/">Read the docs</a>
|
<a class="btn ghost" href="./docs">Read the docs</a>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
|
|
@ -320,7 +320,7 @@
|
||||||
fee on every name registered under it. Renewals are per-TLD policy that you control.</p>
|
fee on every name registered under it. Renewals are per-TLD policy that you control.</p>
|
||||||
<div class="cta">
|
<div class="cta">
|
||||||
<a class="btn acid" href="./tld.html">Search a TLD →</a>
|
<a class="btn acid" href="./tld.html">Search a TLD →</a>
|
||||||
<a class="btn ghost" href="./admin/">Operator admin →</a>
|
<a class="btn ghost" href="./admin">Operator admin →</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card">
|
<div class="card">
|
||||||
|
|
@ -339,7 +339,7 @@
|
||||||
<h3><span class="dot d-chain"></span> 🧭 Theseus Navigator</h3>
|
<h3><span class="dot d-chain"></span> 🧭 Theseus Navigator</h3>
|
||||||
<p>The browser that speaks BCNR natively. Open <code>hello.bch</code> in the address bar —
|
<p>The browser that speaks BCNR natively. Open <code>hello.bch</code> in the address bar —
|
||||||
it just resolves. TLS verified against on-chain fingerprints, no OS trust-store install.</p>
|
it just resolves. TLS verified against on-chain fingerprints, no OS trust-store install.</p>
|
||||||
<div class="cta"><a class="btn ghost" href="./theseus/">Download →</a></div>
|
<div class="cta"><a class="btn ghost" href="./theseus">Download →</a></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
@ -350,7 +350,7 @@
|
||||||
mainnet pricing, verification, and the operator runbook pointer — live on their own page so
|
mainnet pricing, verification, and the operator runbook pointer — live on their own page so
|
||||||
they can grow without cluttering the landing.</p>
|
they can grow without cluttering the landing.</p>
|
||||||
<div class="cta" style="justify-content:flex-start;margin-top:1rem">
|
<div class="cta" style="justify-content:flex-start;margin-top:1rem">
|
||||||
<a class="btn acid" href="./docs/">📚 Open the docs →</a>
|
<a class="btn acid" href="./docs">📚 Open the docs →</a>
|
||||||
<a class="btn ghost" href="https://silentmode.st/tlds/">Current TLD list</a>
|
<a class="btn ghost" href="https://silentmode.st/tlds/">Current TLD list</a>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
@ -380,7 +380,7 @@
|
||||||
<div class="cta"><a class="btn ghost" href="https://silentmode.st/bns/silentmode.x/" rel="noopener">Open →</a></div>
|
<div class="cta"><a class="btn ghost" href="https://silentmode.st/bns/silentmode.x/" rel="noopener">Open →</a></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<h3><span class="dot d-chain"></span> ⭐ Sirius.X <span class="pill">you're here</span></h3>
|
<h3><span class="dot d-chain"></span> <svg width="16" height="16" viewBox="0 0 64 64" style="vertical-align:-3px;margin-right:4px" 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>Sirius.X <span class="pill">you're here</span></h3>
|
||||||
<p>Names on Bitcoin Cash — register, resolve, verify, manage. This site.</p>
|
<p>Names on Bitcoin Cash — register, resolve, verify, manage. This site.</p>
|
||||||
<div class="cta"><a class="btn ghost" href="./">Home →</a></div>
|
<div class="cta"><a class="btn ghost" href="./">Home →</a></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -388,7 +388,7 @@
|
||||||
<h3><span class="dot d-chain"></span> 🧭 Theseus.X</h3>
|
<h3><span class="dot d-chain"></span> 🧭 Theseus.X</h3>
|
||||||
<p>The browser that speaks BCNR natively — Chromium build with the resolver baked in,
|
<p>The browser that speaks BCNR natively — Chromium build with the resolver baked in,
|
||||||
no OS-level daemon or root-store install.</p>
|
no OS-level daemon or root-store install.</p>
|
||||||
<div class="cta"><a class="btn ghost" href="./theseus/">Learn more →</a></div>
|
<div class="cta"><a class="btn ghost" href="./theseus">Learn more →</a></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<h3><span class="dot d-srv"></span> 🔥 Hephaestus.X</h3>
|
<h3><span class="dot d-srv"></span> 🔥 Hephaestus.X</h3>
|
||||||
|
|
|
||||||
|
|
@ -666,7 +666,7 @@ function paintSell() {
|
||||||
st.className = "status ok"; st.textContent = "This name is listed on the market.";
|
st.className = "status ok"; st.textContent = "This name is listed on the market.";
|
||||||
$("sell-form").classList.add("hidden"); $("sell-active").classList.remove("hidden");
|
$("sell-form").classList.add("hidden"); $("sell-active").classList.remove("hidden");
|
||||||
const p = BigInt(activeListing.price_sats);
|
const p = BigInt(activeListing.price_sats);
|
||||||
$("sell-kv").innerHTML = [["Price", `${fmtInt(p)} sat (≈ ${esc(fmtUsd(Math.round(Number(p) / RATE() * 100) / 100))})`], ["Listed", esc(new Date(activeListing.created_at).toLocaleString())], ["Offer", `<code>${esc(activeListing.partial_tx.slice(0, 40))}…</code>`], ["Market page", `<a href="./market.html" target="_blank" rel="noopener">open →</a>`]]
|
$("sell-kv").innerHTML = [["Price", `${fmtInt(p)} sat (≈ ${esc(fmtUsd(Math.round(Number(p) / RATE() * 100) / 100))})`], ["Listed", esc(new Date(activeListing.created_at).toLocaleString())], ["Offer", `<code>${esc(activeListing.partial_tx.slice(0, 40))}…</code>`], ["Market page", `<a href="./market/" target="_blank" rel="noopener">open →</a>`]]
|
||||||
.map(([k, v]) => `<div class="k">${k}</div><div class="v">${v}</div>`).join("");
|
.map(([k, v]) => `<div class="k">${k}</div><div class="v">${v}</div>`).join("");
|
||||||
} else {
|
} else {
|
||||||
st.className = "status"; st.textContent = "Not for sale. Set a price to list it.";
|
st.className = "status"; st.textContent = "Not for sale. Set a price to list it.";
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@
|
||||||
(function () {
|
(function () {
|
||||||
var STORE = "sirius-lang";
|
var STORE = "sirius-lang";
|
||||||
var CACHE = "sirius-i18n:";
|
var CACHE = "sirius-i18n:";
|
||||||
var VERSION = "20260920d"; // bump when dictionaries change
|
var VERSION = "20260920e"; // bump when dictionaries change
|
||||||
var LANGS = {
|
var LANGS = {
|
||||||
en: "English",
|
en: "English",
|
||||||
de: "Deutsch",
|
de: "Deutsch",
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@
|
||||||
mount.innerHTML = `
|
mount.innerHTML = `
|
||||||
<div class="cols">
|
<div class="cols">
|
||||||
<div class="brand-col">
|
<div class="brand-col">
|
||||||
<div class="mark">⭐</div>
|
<div class="mark"><svg width="56" height="56" 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></div>
|
||||||
<h4>Sirius<span class="g">.X</span></h4>
|
<h4>Sirius<span class="g">.X</span></h4>
|
||||||
<p>The home for names on Bitcoin Cash. Register a TLD, register a name, verify anything against the chain.</p>
|
<p>The home for names on Bitcoin Cash. Register a TLD, register a name, verify anything against the chain.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -33,7 +33,7 @@
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="${s("#search-input")}">✏️ Register a name</a></li>
|
<li><a href="${s("#search-input")}">✏️ Register a name</a></li>
|
||||||
<li><a href="${s("tld.html")}">🌐 Register a TLD</a></li>
|
<li><a href="${s("tld.html")}">🌐 Register a TLD</a></li>
|
||||||
<li><a href="${s("market.html")}">🛒 Names for sale</a></li>
|
<li><a href="${s("market/")}">🛒 Names for sale</a></li>
|
||||||
<li><a href="${s("portal.html")}">🔑 My names portal</a></li>
|
<li><a href="${s("portal.html")}">🔑 My names portal</a></li>
|
||||||
<li><a href="${s("theseus/")}">🧭 Theseus browser</a></li>
|
<li><a href="${s("theseus/")}">🧭 Theseus browser</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
||||||
66
js/theme.js
66
js/theme.js
|
|
@ -15,28 +15,64 @@
|
||||||
var initial = saved === "ubuntu" ? "ubuntu" : "fraunces";
|
var initial = saved === "ubuntu" ? "ubuntu" : "fraunces";
|
||||||
if (initial === "ubuntu") document.documentElement.setAttribute("data-font-cmp", "ubuntu");
|
if (initial === "ubuntu") document.documentElement.setAttribute("data-font-cmp", "ubuntu");
|
||||||
|
|
||||||
// Inject the picker into the topnav's right side when one exists.
|
// Inject the picker's own base + positioning styles once, so pages
|
||||||
// Falls back to a fixed-position pill (bottom-right) for pages without
|
// that never declared `.font-picker` in their stylesheet still render
|
||||||
// a topnav, so the choice is always available.
|
// the widget correctly (previously the toggle appeared as raw browser
|
||||||
|
// buttons on pages that forgot to copy the CSS block). The styles are
|
||||||
|
// scoped to `.font-picker-float` so pages that DO define their own
|
||||||
|
// `.font-picker` styling win via source-order (this block runs first).
|
||||||
|
(function ensureStyles() {
|
||||||
|
if (document.getElementById("sirius-font-picker-style")) return;
|
||||||
|
var css =
|
||||||
|
// Every dimension is reset explicitly (bottom/left/height/width auto,
|
||||||
|
// margin 0, line-height 1) so this block wins over any per-page
|
||||||
|
// `.font-picker`/`.font-picker-float` styling — earlier pages declared
|
||||||
|
// .font-picker-float with bottom:20px, which combined with top:56px
|
||||||
|
// stretched the pill down the full viewport height.
|
||||||
|
".font-picker-float{" +
|
||||||
|
"position:fixed !important;top:56px !important;right:20px !important;" +
|
||||||
|
"bottom:auto !important;left:auto !important;" +
|
||||||
|
"height:auto !important;width:auto !important;margin:0 !important;" +
|
||||||
|
"z-index:30 !important;" +
|
||||||
|
"display:inline-flex !important;align-items:center;gap:2px;padding:2px !important;" +
|
||||||
|
"background:rgba(11,14,20,.82) !important;border:1px solid rgba(255,255,255,.08) !important;" +
|
||||||
|
"border-radius:999px !important;backdrop-filter:blur(10px);" +
|
||||||
|
"box-shadow:0 6px 20px rgba(0,0,0,.35);" +
|
||||||
|
"font-family:'JetBrains Mono',ui-monospace,monospace !important;" +
|
||||||
|
"font-size:10px !important;line-height:1 !important;" +
|
||||||
|
"letter-spacing:.12em !important;text-transform:uppercase !important" +
|
||||||
|
"}" +
|
||||||
|
".font-picker-float button{" +
|
||||||
|
"background:transparent !important;border:none !important;color:#6a7488 !important;" +
|
||||||
|
"padding:4px 10px !important;margin:0 !important;border-radius:999px !important;cursor:pointer;" +
|
||||||
|
"font-family:inherit !important;font-size:inherit !important;line-height:1 !important;" +
|
||||||
|
"letter-spacing:inherit !important;" +
|
||||||
|
"text-transform:inherit !important;transition:color .12s" +
|
||||||
|
"}" +
|
||||||
|
".font-picker-float button:hover{color:#f1f4fa !important}" +
|
||||||
|
".font-picker-float button.active{background:#d6ff3d !important;color:#050810 !important;font-weight:600 !important}" +
|
||||||
|
"@media (max-width:520px){.font-picker-float{top:auto !important;bottom:14px !important;right:14px !important}}";
|
||||||
|
var el = document.createElement("style");
|
||||||
|
el.id = "sirius-font-picker-style";
|
||||||
|
el.textContent = css;
|
||||||
|
document.head.appendChild(el);
|
||||||
|
})();
|
||||||
|
|
||||||
|
// Mount the picker as a floating pill in the page's top-right corner,
|
||||||
|
// just under the sticky nav's sign-in button. Was previously injected
|
||||||
|
// inline in the topnav; that placement crowded the nav on narrow
|
||||||
|
// viewports and left users hunting for the toggle. A fixed-position
|
||||||
|
// widget keeps the choice equally reachable on every page — including
|
||||||
|
// ones without a topnav — and does not participate in nav layout.
|
||||||
function paintPicker() {
|
function paintPicker() {
|
||||||
var nav = document.querySelector(".topnav");
|
|
||||||
var host = nav || document.body;
|
|
||||||
var mount = document.createElement("div");
|
var mount = document.createElement("div");
|
||||||
mount.className = "font-picker";
|
mount.className = "font-picker font-picker-float";
|
||||||
mount.setAttribute("role", "group");
|
mount.setAttribute("role", "group");
|
||||||
mount.setAttribute("aria-label", "Reading font");
|
mount.setAttribute("aria-label", "Reading font");
|
||||||
mount.innerHTML =
|
mount.innerHTML =
|
||||||
'<button data-font="fraunces" title="Silent Mode family (Fraunces)">Fraunces</button>' +
|
'<button data-font="fraunces" title="Silent Mode family (Fraunces)">Fraunces</button>' +
|
||||||
'<button data-font="ubuntu" title="Bitcoin Cash brand font (Ubuntu)">Ubuntu</button>';
|
'<button data-font="ubuntu" title="Bitcoin Cash brand font (Ubuntu)">Ubuntu</button>';
|
||||||
if (nav) {
|
document.body.appendChild(mount);
|
||||||
// Put it just before the sign-in link if present, else append.
|
|
||||||
var portalLink = nav.querySelector("a.portal");
|
|
||||||
if (portalLink) nav.insertBefore(mount, portalLink);
|
|
||||||
else nav.appendChild(mount);
|
|
||||||
} else {
|
|
||||||
mount.classList.add("font-picker-float");
|
|
||||||
host.appendChild(mount);
|
|
||||||
}
|
|
||||||
var btns = mount.querySelectorAll("button");
|
var btns = mount.querySelectorAll("button");
|
||||||
function refresh(v) {
|
function refresh(v) {
|
||||||
for (var i = 0; i < btns.length; i++) {
|
for (var i = 0; i < btns.length; i++) {
|
||||||
|
|
|
||||||
141
market.html
141
market.html
|
|
@ -1,138 +1,7 @@
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<title>Sirius.X market</title>
|
||||||
<title>Market — names for sale on Sirius.X</title>
|
<link rel="canonical" href="./market">
|
||||||
<meta name="description" content="Buy and sell BCNR names. Every sale is one Bitcoin Cash transaction: the seller is paid in the same transaction that hands you the certificate, or not at all.">
|
<meta http-equiv="refresh" content="0; url=./market/">
|
||||||
<link rel="icon" href="./assets/favicon.svg" type="image/svg+xml">
|
<script>location.replace("./market/" + location.search + location.hash);</script>
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
<p>Moved to <a href="./market">./market/</a>.</p>
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,600&family=DM+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
|
|
||||||
<style>
|
|
||||||
:root{--bg:#050810;--panel:#141a24;--panel2:#0a0f1c;--line:rgba(255,255,255,.06);--sky-mid:#0a0f1c;--sky-rim:#131a2a;
|
|
||||||
--ink:#f1f4fa;--mut:#b8c2d4;--dim:#6a7488;--acid:#d6ff3d;--ok:#4fd1a5;--taken:#f6768a;--warn:#ffc75f;
|
|
||||||
--serif:'Fraunces',Georgia,serif;--sans:'DM Sans',system-ui,sans-serif;--mono:'JetBrains Mono',ui-monospace,monospace}
|
|
||||||
*{box-sizing:border-box}
|
|
||||||
body{margin:0;background:radial-gradient(ellipse 1200px 600px at 50% -5%,var(--sky-rim) 0%,transparent 60%),var(--bg);background-attachment:fixed;color:var(--ink);font:15px/1.55 var(--sans);min-height:100vh}
|
|
||||||
h1,h2,h3{font-family:var(--serif)}
|
|
||||||
a{color:var(--acid)}
|
|
||||||
.topnav{position:sticky;top:0;z-index:20;display:flex;gap:2px;align-items:center;flex-wrap:wrap;padding:10px 1.2rem;background:rgba(11,14,20,.82);backdrop-filter:blur(10px)}
|
|
||||||
.topnav .brand{font-weight:600;color:var(--ink);text-decoration:none;margin-right:14px;font-size:15px}
|
|
||||||
.topnav .brand .g{color:var(--acid)}
|
|
||||||
.topnav a{color:var(--mut);text-decoration:none;padding:6px 12px;border-radius:8px;font-size:14px}
|
|
||||||
.topnav a:hover{color:var(--ink);background:var(--panel)}
|
|
||||||
.topnav a.here{color:var(--acid);background:rgba(214,255,61,.08)}
|
|
||||||
.topnav a.portal{margin-left:auto;background:rgba(214,255,61,.10);color:var(--acid);font-weight:500}
|
|
||||||
.wrap{max-width:900px;margin:0 auto;padding:0 1.2rem 3rem}
|
|
||||||
header.hero{text-align:center;padding:3rem 1.2rem 1rem}
|
|
||||||
.mark{font-size:44px;line-height:1}
|
|
||||||
h1{font-size:clamp(1.6rem,4.5vw,2.2rem);margin:.3rem 0}
|
|
||||||
h1 .g{color:var(--acid)}
|
|
||||||
.tag{color:var(--mut);max-width:620px;margin:0 auto}
|
|
||||||
.toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:18px 0 8px}
|
|
||||||
input[type=text],select{padding:9px 12px;border-radius:10px;border:1px solid #ffffff22;background:#0e131b;color:var(--ink);font:inherit;font-size:14px;outline:none}
|
|
||||||
select{appearance:auto}
|
|
||||||
.status{background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:10px 14px;font-size:13px;color:var(--mut);margin-top:10px}
|
|
||||||
.status.err{border-left:3px solid var(--taken);color:var(--taken)}
|
|
||||||
.row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:10px 16px;align-items:center;padding:14px 16px;background:var(--panel2);border:1px solid var(--line);border-radius:12px;margin-top:8px}
|
|
||||||
.row .n{font-family:var(--mono);font-size:16px}
|
|
||||||
.row .n .tld{color:var(--acid)}
|
|
||||||
.row .price{font-family:var(--mono);text-align:right}
|
|
||||||
.row .price b{font-size:16px}
|
|
||||||
.row .price span{display:block;color:var(--dim);font-size:12px}
|
|
||||||
.row .meta{grid-column:1/-1;color:var(--dim);font-size:12px;display:flex;gap:10px;flex-wrap:wrap}
|
|
||||||
.btn{display:inline-flex;align-items:center;gap:6px;padding:9px 16px;border-radius:10px;background:#4b7bec;color:#fff;font:inherit;font-size:14px;border:none;cursor:pointer;text-decoration:none;line-height:1.2}
|
|
||||||
.btn.acid{background:var(--acid);color:#0b0e14;font-weight:600}
|
|
||||||
.btn.ghost{background:transparent;border:1px solid var(--line);color:var(--ink)}
|
|
||||||
.btn.small{padding:6px 11px;font-size:12.5px}
|
|
||||||
.btn:disabled{opacity:.45;cursor:not-allowed}
|
|
||||||
.badge{display:inline-block;font-size:11px;padding:2px 9px;border-radius:999px;font-weight:600;background:rgba(214,255,61,.14);color:var(--acid)}
|
|
||||||
.empty{padding:28px;text-align:center;color:var(--mut);border:1px dashed var(--line);border-radius:12px;margin-top:10px}
|
|
||||||
.empty.big{padding:40px 24px;border-style:solid;background:var(--panel2)}
|
|
||||||
.empty.big .ico{font-size:34px;line-height:1;opacity:.8}
|
|
||||||
.empty.big h3{margin:.6rem 0 .3rem;font-family:var(--serif);font-size:1.25rem;color:var(--ink)}
|
|
||||||
.empty.big p{margin:0 auto;max-width:460px;font-size:14px}
|
|
||||||
.empty.big .cta{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin-top:18px}
|
|
||||||
.toolbar[hidden],.status[hidden]{display:none}
|
|
||||||
@media (max-width:560px){.row > div:nth-child(3){grid-column:1/-1}.row > div:nth-child(3) .btn{width:100%;justify-content:center}}
|
|
||||||
.note{background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--acid);border-radius:10px;padding:14px 18px;color:var(--mut);font-size:14px;margin-top:1.6rem}
|
|
||||||
.note b{color:var(--ink)}
|
|
||||||
/* buy dialog */
|
|
||||||
.modal{position:fixed;inset:0;background:rgba(6,9,14,.85);backdrop-filter:blur(3px);display:none;align-items:flex-start;justify-content:center;padding:4vh 1rem;overflow-y:auto;z-index:50}
|
|
||||||
.modal.open{display:flex}
|
|
||||||
.sheet{background:var(--panel);border:1px solid var(--line);border-radius:16px;max-width:560px;width:100%;padding:24px 26px;position:relative}
|
|
||||||
.sheet h3{margin:0 0 .3rem;font-family:var(--mono);font-size:1.2rem}
|
|
||||||
.sheet .sub{color:var(--mut);font-size:13px;margin:0 0 1rem}
|
|
||||||
.sheet .x{position:absolute;top:14px;right:16px;background:none;border:none;color:var(--dim);font-size:22px;cursor:pointer}
|
|
||||||
.kv{display:grid;grid-template-columns:150px 1fr;gap:6px 12px;font-size:13.5px}
|
|
||||||
.kv .k{color:var(--dim)} .kv .v{font-family:var(--mono);word-break:break-all}
|
|
||||||
.steps{margin-top:12px;font-family:var(--mono);font-size:12px;color:var(--mut);background:#0e131b;border:1px solid var(--line);border-radius:8px;padding:10px 12px;max-height:150px;overflow:auto;display:none}
|
|
||||||
.steps.on{display:block}
|
|
||||||
.steps div::before{content:"› ";color:var(--acid)}
|
|
||||||
.msg{font-size:13px;margin-top:12px} .msg.err{color:var(--taken)} .msg.ok{color:var(--ok)}
|
|
||||||
.actions{display:flex;gap:10px;justify-content:flex-end;margin-top:16px}
|
|
||||||
footer{border-top:1px solid var(--line);padding:2rem 0 3rem;color:var(--dim);font-size:13px;text-align:center;margin-top:2.5rem}
|
|
||||||
@media (max-width:560px){.row{grid-template-columns:1fr auto}.row .price{grid-column:1/-1;text-align:left}}
|
|
||||||
</style>
|
|
||||||
<script src="./js/i18n.js?v=20260920d"></script>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<nav class="topnav">
|
|
||||||
<a class="brand" href="./">⭐ <span class="g">Sirius.X</span></a>
|
|
||||||
<a href="./#try">Try it</a>
|
|
||||||
<a href="./#search-input">✏️ Register</a>
|
|
||||||
<a href="./tld.html">🌐 TLD</a>
|
|
||||||
<a href="./market.html" class="here">🛒 Market</a>
|
|
||||||
<a href="./theseus/"><svg width="14" height="14" viewBox="0 0 64 64" style="vertical-align:-2px;margin-right:4px" 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>Theseus</a>
|
|
||||||
<a href="./portal.html" class="portal">🔑 Sign in</a>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
<header class="hero">
|
|
||||||
<div class="mark">🛒</div>
|
|
||||||
<h1>Names <span class="g">for sale</span></h1>
|
|
||||||
<p class="tag">Every sale is a single Bitcoin Cash transaction. The seller signed an offer that pays them only when the
|
|
||||||
certificate moves to you — you add your coins, sign, broadcast. No escrow, no middleman, no way for either side to cheat.</p>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<div class="wrap">
|
|
||||||
<div class="toolbar">
|
|
||||||
<input type="text" id="q" placeholder="Filter names…" autocomplete="off" style="max-width:300px">
|
|
||||||
<select id="sort"><option value="price">Sort: price</option><option value="name">Sort: name</option><option value="new">Sort: newest</option></select>
|
|
||||||
<select id="tld"><option value="">All TLDs</option></select>
|
|
||||||
<span id="count" style="color:var(--dim);font-size:12.5px"></span>
|
|
||||||
</div>
|
|
||||||
<div class="status" id="status">Loading listings…</div>
|
|
||||||
<div id="list"></div>
|
|
||||||
|
|
||||||
<div class="note"><b>Selling a name?</b> Open it in your <a href="./portal.html">dashboard</a>, choose <b>Sell</b>, set a price. The listing is a signed offer stored by the gateway; cancelling it moves your certificate once so the old offer can never be used.</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="modal" id="buy">
|
|
||||||
<div class="sheet">
|
|
||||||
<button class="x" id="buy-close" title="close">×</button>
|
|
||||||
<h3 id="buy-name">—</h3>
|
|
||||||
<p class="sub">One transaction: your coins pay the seller, the certificate lands in your wallet, and the registry is told about the new owner. Records stay as they are — you can change them in the dashboard right after.</p>
|
|
||||||
<div class="kv" id="buy-kv"></div>
|
|
||||||
<div class="steps" id="buy-steps"></div>
|
|
||||||
<div class="msg" id="buy-msg"></div>
|
|
||||||
<div class="actions">
|
|
||||||
<button class="btn ghost" id="buy-cancel">Cancel</button>
|
|
||||||
<a class="btn ghost" id="buy-signin" href="./portal.html" hidden>Sign in to buy →</a>
|
|
||||||
<button class="btn acid" id="buy-go" disabled>Buy — sign & broadcast</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<footer id="site-footer"></footer>
|
|
||||||
|
|
||||||
<script type="importmap">
|
|
||||||
{ "imports": { "@bitauth/libauth": "https://silentmode.st/js/libauth.js" } }
|
|
||||||
</script>
|
|
||||||
<script src="./js/session.js?v=20260917dash"></script>
|
|
||||||
<script src="./js/pricing.js?v=20260917market"></script>
|
|
||||||
<script type="module" src="./js/market.js?v=20260920m"></script>
|
|
||||||
<script defer src="./js/theme.js?v=20260910font"></script>
|
|
||||||
<script defer src="./js/site-footer.js?v=20260917market"></script>
|
|
||||||
<script defer src="./js/profile-menu.js?v=20260920m"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
|
||||||
161
market/index.html
Normal file
161
market/index.html
Normal file
|
|
@ -0,0 +1,161 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Market — names for sale on Sirius.X</title>
|
||||||
|
<meta name="description" content="Buy and sell BCNR names. Every sale is one Bitcoin Cash transaction: the seller is paid in the same transaction that hands you the certificate, or not at all.">
|
||||||
|
<link rel="icon" href="../assets/favicon.svg" type="image/svg+xml">
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,600&family=DM+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&family=Ubuntu:wght@400;500;700&display=swap" rel="stylesheet">
|
||||||
|
<style>
|
||||||
|
:root{--bg:#050810;--panel:#141a24;--panel2:#0a0f1c;--line:rgba(255,255,255,.06);--sky-mid:#0a0f1c;--sky-rim:#131a2a;
|
||||||
|
--ink:#f1f4fa;--mut:#b8c2d4;--dim:#6a7488;--acid:#d6ff3d;--ok:#4fd1a5;--taken:#f6768a;--warn:#ffc75f;
|
||||||
|
--serif:'Fraunces',Georgia,serif;--sans:'DM Sans',system-ui,sans-serif;--mono:'JetBrains Mono',ui-monospace,monospace}
|
||||||
|
*{box-sizing:border-box}
|
||||||
|
body{margin:0;background:radial-gradient(ellipse 1200px 600px at 50% -5%,var(--sky-rim) 0%,transparent 60%),var(--bg);background-attachment:fixed;color:var(--ink);font:15px/1.55 var(--sans);min-height:100vh}
|
||||||
|
h1,h2,h3{font-family:var(--serif)}
|
||||||
|
a{color:var(--acid)}
|
||||||
|
/* Ubuntu reader-alt — swap when <html data-font-cmp="ubuntu"> */
|
||||||
|
html[data-font-cmp="ubuntu"] body,
|
||||||
|
html[data-font-cmp="ubuntu"] h1, html[data-font-cmp="ubuntu"] h2, html[data-font-cmp="ubuntu"] h3,
|
||||||
|
html[data-font-cmp="ubuntu"] p, html[data-font-cmp="ubuntu"] a, html[data-font-cmp="ubuntu"] button,
|
||||||
|
html[data-font-cmp="ubuntu"] span, html[data-font-cmp="ubuntu"] div,
|
||||||
|
html[data-font-cmp="ubuntu"] label, html[data-font-cmp="ubuntu"] input, html[data-font-cmp="ubuntu"] li{
|
||||||
|
font-family:'Ubuntu',system-ui,sans-serif !important
|
||||||
|
}
|
||||||
|
html[data-font-cmp="ubuntu"] code, html[data-font-cmp="ubuntu"] .mono{
|
||||||
|
font-family:var(--mono) !important
|
||||||
|
}
|
||||||
|
/* Font picker pill — floats in the top-right corner of the page,
|
||||||
|
just under the sticky nav's sign-in button. */
|
||||||
|
.font-picker{display:inline-flex;align-items:center;gap:2px;padding:2px;
|
||||||
|
background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.08);border-radius:999px;
|
||||||
|
font-family:var(--mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase}
|
||||||
|
.font-picker button{background:transparent;border:none;color:var(--dim);
|
||||||
|
padding:4px 10px;border-radius:999px;cursor:pointer;font-family:inherit;font-size:inherit;
|
||||||
|
letter-spacing:inherit;text-transform:inherit;transition:color .12s}
|
||||||
|
.font-picker button:hover{color:var(--ink)}
|
||||||
|
.font-picker button.active{background:var(--acid);color:var(--bg);font-weight:600}
|
||||||
|
.font-picker-float{position:fixed;top:56px;right:20px;z-index:30;
|
||||||
|
background:rgba(11,14,20,.82);backdrop-filter:blur(10px);box-shadow:0 6px 20px rgba(0,0,0,.35)}
|
||||||
|
.topnav{position:sticky;top:0;z-index:20;display:flex;gap:2px;align-items:center;flex-wrap:wrap;padding:10px 1.2rem;background:rgba(11,14,20,.82);backdrop-filter:blur(10px)}
|
||||||
|
.topnav .brand{font-weight:600;color:var(--ink);text-decoration:none;margin-right:14px;font-size:15px}
|
||||||
|
.topnav .brand .g{color:var(--acid)}
|
||||||
|
.topnav a{color:var(--mut);text-decoration:none;padding:6px 12px;border-radius:8px;font-size:14px}
|
||||||
|
.topnav a:hover{color:var(--ink);background:var(--panel)}
|
||||||
|
.topnav a.here{color:var(--acid);background:rgba(214,255,61,.08)}
|
||||||
|
.topnav a.portal{margin-left:auto;background:rgba(214,255,61,.10);color:var(--acid);font-weight:500}
|
||||||
|
.wrap{max-width:900px;margin:0 auto;padding:0 1.2rem 3rem}
|
||||||
|
header.hero{text-align:center;padding:3rem 1.2rem 1rem}
|
||||||
|
.mark{font-size:44px;line-height:1}
|
||||||
|
h1{font-size:clamp(1.6rem,4.5vw,2.2rem);margin:.3rem 0}
|
||||||
|
h1 .g{color:var(--acid)}
|
||||||
|
.tag{color:var(--mut);max-width:620px;margin:0 auto}
|
||||||
|
.toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:18px 0 8px}
|
||||||
|
input[type=text],select{padding:9px 12px;border-radius:10px;border:1px solid #ffffff22;background:#0e131b;color:var(--ink);font:inherit;font-size:14px;outline:none}
|
||||||
|
select{appearance:auto}
|
||||||
|
.status{background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:10px 14px;font-size:13px;color:var(--mut);margin-top:10px}
|
||||||
|
.status.err{border-left:3px solid var(--taken);color:var(--taken)}
|
||||||
|
.row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:10px 16px;align-items:center;padding:14px 16px;background:var(--panel2);border:1px solid var(--line);border-radius:12px;margin-top:8px}
|
||||||
|
.row .n{font-family:var(--mono);font-size:16px}
|
||||||
|
.row .n .tld{color:var(--acid)}
|
||||||
|
.row .price{font-family:var(--mono);text-align:right}
|
||||||
|
.row .price b{font-size:16px}
|
||||||
|
.row .price span{display:block;color:var(--dim);font-size:12px}
|
||||||
|
.row .meta{grid-column:1/-1;color:var(--dim);font-size:12px;display:flex;gap:10px;flex-wrap:wrap}
|
||||||
|
.btn{display:inline-flex;align-items:center;gap:6px;padding:9px 16px;border-radius:10px;background:#4b7bec;color:#fff;font:inherit;font-size:14px;border:none;cursor:pointer;text-decoration:none;line-height:1.2}
|
||||||
|
.btn.acid{background:var(--acid);color:#0b0e14;font-weight:600}
|
||||||
|
.btn.ghost{background:transparent;border:1px solid var(--line);color:var(--ink)}
|
||||||
|
.btn.small{padding:6px 11px;font-size:12.5px}
|
||||||
|
.btn:disabled{opacity:.45;cursor:not-allowed}
|
||||||
|
.badge{display:inline-block;font-size:11px;padding:2px 9px;border-radius:999px;font-weight:600;background:rgba(214,255,61,.14);color:var(--acid)}
|
||||||
|
.empty{padding:28px;text-align:center;color:var(--mut);border:1px dashed var(--line);border-radius:12px;margin-top:10px}
|
||||||
|
.empty.big{padding:40px 24px;border-style:solid;background:var(--panel2)}
|
||||||
|
.empty.big .ico{font-size:34px;line-height:1;opacity:.8}
|
||||||
|
.empty.big h3{margin:.6rem 0 .3rem;font-family:var(--serif);font-size:1.25rem;color:var(--ink)}
|
||||||
|
.empty.big p{margin:0 auto;max-width:460px;font-size:14px}
|
||||||
|
.empty.big .cta{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin-top:18px}
|
||||||
|
.toolbar[hidden],.status[hidden]{display:none}
|
||||||
|
@media (max-width:560px){.row > div:nth-child(3){grid-column:1/-1}.row > div:nth-child(3) .btn{width:100%;justify-content:center}}
|
||||||
|
.note{background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--acid);border-radius:10px;padding:14px 18px;color:var(--mut);font-size:14px;margin-top:1.6rem}
|
||||||
|
.note b{color:var(--ink)}
|
||||||
|
/* buy dialog */
|
||||||
|
.modal{position:fixed;inset:0;background:rgba(6,9,14,.85);backdrop-filter:blur(3px);display:none;align-items:flex-start;justify-content:center;padding:4vh 1rem;overflow-y:auto;z-index:50}
|
||||||
|
.modal.open{display:flex}
|
||||||
|
.sheet{background:var(--panel);border:1px solid var(--line);border-radius:16px;max-width:560px;width:100%;padding:24px 26px;position:relative}
|
||||||
|
.sheet h3{margin:0 0 .3rem;font-family:var(--mono);font-size:1.2rem}
|
||||||
|
.sheet .sub{color:var(--mut);font-size:13px;margin:0 0 1rem}
|
||||||
|
.sheet .x{position:absolute;top:14px;right:16px;background:none;border:none;color:var(--dim);font-size:22px;cursor:pointer}
|
||||||
|
.kv{display:grid;grid-template-columns:150px 1fr;gap:6px 12px;font-size:13.5px}
|
||||||
|
.kv .k{color:var(--dim)} .kv .v{font-family:var(--mono);word-break:break-all}
|
||||||
|
.steps{margin-top:12px;font-family:var(--mono);font-size:12px;color:var(--mut);background:#0e131b;border:1px solid var(--line);border-radius:8px;padding:10px 12px;max-height:150px;overflow:auto;display:none}
|
||||||
|
.steps.on{display:block}
|
||||||
|
.steps div::before{content:"› ";color:var(--acid)}
|
||||||
|
.msg{font-size:13px;margin-top:12px} .msg.err{color:var(--taken)} .msg.ok{color:var(--ok)}
|
||||||
|
.actions{display:flex;gap:10px;justify-content:flex-end;margin-top:16px}
|
||||||
|
footer{border-top:1px solid var(--line);padding:2rem 0 3rem;color:var(--dim);font-size:13px;text-align:center;margin-top:2.5rem}
|
||||||
|
@media (max-width:560px){.row{grid-template-columns:1fr auto}.row .price{grid-column:1/-1;text-align:left}}
|
||||||
|
</style>
|
||||||
|
<script src="../js/i18n.js?v=20260920e"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<nav class="topnav">
|
||||||
|
<a class="brand" href="../"><svg width="18" height="18" viewBox="0 0 64 64" style="vertical-align:-4px;margin-right:6px" 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 class="g">Sirius.X</span></a>
|
||||||
|
<a href="../#try">Try it</a>
|
||||||
|
<a href="../#search-input">✏️ Register</a>
|
||||||
|
<a href="../tld.html">🌐 TLD</a>
|
||||||
|
<a href="./" class="here">🛒 Market</a>
|
||||||
|
<a href="../theseus/"><svg width="14" height="14" viewBox="0 0 64 64" style="vertical-align:-2px;margin-right:4px" 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>Theseus</a>
|
||||||
|
<a href="../portal.html" class="portal">🔑 Sign in</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<header class="hero">
|
||||||
|
<div class="mark">🛒</div>
|
||||||
|
<h1>Names <span class="g">for sale</span></h1>
|
||||||
|
<p class="tag">Every sale is a single Bitcoin Cash transaction. The seller signed an offer that pays them only when the
|
||||||
|
certificate moves to you — you add your coins, sign, broadcast. No escrow, no middleman, no way for either side to cheat.</p>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<div class="wrap">
|
||||||
|
<div class="toolbar">
|
||||||
|
<input type="text" id="q" placeholder="Filter names…" autocomplete="off" style="max-width:300px">
|
||||||
|
<select id="sort"><option value="price">Sort: price</option><option value="name">Sort: name</option><option value="new">Sort: newest</option></select>
|
||||||
|
<select id="tld"><option value="">All TLDs</option></select>
|
||||||
|
<span id="count" style="color:var(--dim);font-size:12.5px"></span>
|
||||||
|
</div>
|
||||||
|
<div class="status" id="status">Loading listings…</div>
|
||||||
|
<div id="list"></div>
|
||||||
|
|
||||||
|
<div class="note"><b>Selling a name?</b> Open it in your <a href="../portal.html">dashboard</a>, choose <b>Sell</b>, set a price. The listing is a signed offer stored by the gateway; cancelling it moves your certificate once so the old offer can never be used.</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="modal" id="buy">
|
||||||
|
<div class="sheet">
|
||||||
|
<button class="x" id="buy-close" title="close">×</button>
|
||||||
|
<h3 id="buy-name">—</h3>
|
||||||
|
<p class="sub">One transaction: your coins pay the seller, the certificate lands in your wallet, and the registry is told about the new owner. Records stay as they are — you can change them in the dashboard right after.</p>
|
||||||
|
<div class="kv" id="buy-kv"></div>
|
||||||
|
<div class="steps" id="buy-steps"></div>
|
||||||
|
<div class="msg" id="buy-msg"></div>
|
||||||
|
<div class="actions">
|
||||||
|
<button class="btn ghost" id="buy-cancel">Cancel</button>
|
||||||
|
<a class="btn ghost" id="buy-signin" href="../portal.html" hidden>Sign in to buy →</a>
|
||||||
|
<button class="btn acid" id="buy-go" disabled>Buy — sign & broadcast</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer id="site-footer"></footer>
|
||||||
|
|
||||||
|
<script type="importmap">
|
||||||
|
{ "imports": { "@bitauth/libauth": "https://silentmode.st/js/libauth.js" } }
|
||||||
|
</script>
|
||||||
|
<script src="../js/session.js?v=20260917dash"></script>
|
||||||
|
<script src="../js/pricing.js?v=20260917market"></script>
|
||||||
|
<script type="module" src="../js/market.js?v=20260920m"></script>
|
||||||
|
<script defer src="../js/theme.js?v=20260920compact"></script>
|
||||||
|
<script defer src="../js/site-footer.js?v=20260917market"></script>
|
||||||
|
<script defer src="../js/profile-menu.js?v=20260920m"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
16
portal.html
16
portal.html
|
|
@ -259,17 +259,17 @@
|
||||||
.addrow{grid-template-columns:1fr 1fr}
|
.addrow{grid-template-columns:1fr 1fr}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script src="./js/i18n.js?v=20260920d"></script>
|
<script src="./js/i18n.js?v=20260920e"></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<nav class="topnav">
|
<nav class="topnav">
|
||||||
<a class="brand" href="./">⭐ <span class="g">Sirius.X</span></a>
|
<a class="brand" href="./"><svg width="18" height="18" viewBox="0 0 64 64" style="vertical-align:-4px;margin-right:6px" 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 class="g">Sirius.X</span></a>
|
||||||
<a href="./#try">Try it</a>
|
<a href="./#try">Try it</a>
|
||||||
<a href="./#search-input">✏️ Register</a>
|
<a href="./#search-input">✏️ Register</a>
|
||||||
<a href="./tld.html">🌐 TLD</a>
|
<a href="./tld.html">🌐 TLD</a>
|
||||||
<a href="./market.html">🛒 Market</a>
|
<a href="./market">🛒 Market</a>
|
||||||
<a href="./theseus/"><svg width="14" height="14" viewBox="0 0 64 64" style="vertical-align:-2px;margin-right:4px" 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>Theseus</a>
|
<a href="./theseus"><svg width="14" height="14" viewBox="0 0 64 64" style="vertical-align:-2px;margin-right:4px" 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>Theseus</a>
|
||||||
<a href="./portal.html" class="portal here">🔑 Sign in</a>
|
<a href="./portal.html" class="portal here">🔑 Sign in</a>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
|
@ -306,7 +306,7 @@
|
||||||
<button class="item" data-go="tlds"><span class="ic">🏷</span>My TLDs<span class="cnt" id="cnt-tlds">0</span></button>
|
<button class="item" data-go="tlds"><span class="ic">🏷</span>My TLDs<span class="cnt" id="cnt-tlds">0</span></button>
|
||||||
<div class="sep"></div>
|
<div class="sep"></div>
|
||||||
<button class="item" data-go="settings"><span class="ic">⚙</span>Settings</button>
|
<button class="item" data-go="settings"><span class="ic">⚙</span>Settings</button>
|
||||||
<a class="item hidden" id="side-admin" href="./admin/"><span class="ic">🛠</span>Admin panel</a>
|
<a class="item hidden" id="side-admin" href="./admin"><span class="ic">🛠</span>Admin panel</a>
|
||||||
<button class="item" id="side-signout"><span class="ic">🚪</span>Sign out</button>
|
<button class="item" id="side-signout"><span class="ic">🚪</span>Sign out</button>
|
||||||
</aside>
|
</aside>
|
||||||
|
|
||||||
|
|
@ -359,7 +359,7 @@
|
||||||
<div class="sub" data-sub="sell" hidden>
|
<div class="sub" data-sub="sell" hidden>
|
||||||
<div class="card" style="margin-top:0">
|
<div class="card" style="margin-top:0">
|
||||||
<h3>Sell this name</h3>
|
<h3>Sell this name</h3>
|
||||||
<p class="hint">You sign an offer once: "whoever pays me this price gets the certificate". The offer is stored by the gateway and shown on the <a href="./market.html" target="_blank" rel="noopener">market</a>. A buyer completes it in one transaction — you are paid in the same transaction that moves the name, or not at all. No escrow, nothing to trust.</p>
|
<p class="hint">You sign an offer once: "whoever pays me this price gets the certificate". The offer is stored by the gateway and shown on the <a href="./market" target="_blank" rel="noopener">market</a>. A buyer completes it in one transaction — you are paid in the same transaction that moves the name, or not at all. No escrow, nothing to trust.</p>
|
||||||
<div class="status" id="sell-status">Checking the market…</div>
|
<div class="status" id="sell-status">Checking the market…</div>
|
||||||
<div id="sell-form">
|
<div id="sell-form">
|
||||||
<div class="row" style="align-items:flex-end">
|
<div class="row" style="align-items:flex-end">
|
||||||
|
|
@ -602,7 +602,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<h3>Reading, language & help</h3>
|
<h3>Reading, language & help</h3>
|
||||||
<p class="hint">Font pill and language picker live in the top bar; both are remembered per browser. The technical documentation is at <a href="./docs/" target="_blank" rel="noopener">sirius-x/docs</a>.</p>
|
<p class="hint">Font pill and language picker live in the top bar; both are remembered per browser. The technical documentation is at <a href="./docs" target="_blank" rel="noopener">sirius-x/docs</a>.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<h3>This device</h3>
|
<h3>This device</h3>
|
||||||
|
|
@ -679,7 +679,7 @@
|
||||||
<script src="./js/pin-escrow.js?v=20260909pin"></script>
|
<script src="./js/pin-escrow.js?v=20260909pin"></script>
|
||||||
<script src="./js/pricing.js?v=20260917market"></script>
|
<script src="./js/pricing.js?v=20260917market"></script>
|
||||||
<script type="module" src="./js/dashboard.js?v=20260917bal"></script>
|
<script type="module" src="./js/dashboard.js?v=20260917bal"></script>
|
||||||
<script defer src="./js/theme.js?v=20260910font"></script>
|
<script defer src="./js/theme.js?v=20260920compact"></script>
|
||||||
<script defer src="./js/site-footer.js?v=20260917market"></script>
|
<script defer src="./js/site-footer.js?v=20260917market"></script>
|
||||||
<script type="module" src="./js/register-flow.js?v=20260917bal"></script>
|
<script type="module" src="./js/register-flow.js?v=20260917bal"></script>
|
||||||
<script defer src="./js/profile-menu.js?v=20260920m"></script>
|
<script defer src="./js/profile-menu.js?v=20260920m"></script>
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div>
|
<div>
|
||||||
<div class="mark">⭐</div>
|
<div class="mark"><svg width="56" height="56" 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></div>
|
||||||
<p>Redirecting to <a href="./">Sirius.X</a>…</p>
|
<p>Redirecting to <a href="./">Sirius.X</a>…</p>
|
||||||
<p style="font-size:12.5px;color:#5e6678;margin-top:1rem">Name search moved to the home page.</p>
|
<p style="font-size:12.5px;color:#5e6678;margin-top:1rem">Name search moved to the home page.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
578
storage/index.html
Normal file
578
storage/index.html
Normal file
|
|
@ -0,0 +1,578 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Storage — Sirius.X (wireframe)</title>
|
||||||
|
<meta name="description" content="Wireframe for the Sirius.X portal Storage tab. Per-user Sia storage on Hephaestus. Not wired to a backend.">
|
||||||
|
<link rel="icon" href="../assets/favicon.svg" type="image/svg+xml">
|
||||||
|
<link rel="mask-icon" href="../assets/favicon.svg" color="#d6ff3d">
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,300;9..144,400;9..144,500;9..144,600;9..144,700&family=DM+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
|
||||||
|
<style>
|
||||||
|
:root{
|
||||||
|
--bg:#050810; --panel:#141a24; --panel2:#0a0f1c; --line:rgba(255,255,255,.06);
|
||||||
|
--sky-mid:#0a0f1c; --sky-rim:#131a2a;
|
||||||
|
--ink:#f1f4fa; --mut:#b8c2d4; --dim:#6a7488; --acid:#d6ff3d;
|
||||||
|
--chain-native:#0AC18E; --forge:#ff8c00;
|
||||||
|
--ok:#4fd1a5; --taken:#f6768a; --warn:#ffc75f;
|
||||||
|
--serif:'Fraunces',Georgia,serif;
|
||||||
|
--sans:'DM Sans','Inter',system-ui,sans-serif;
|
||||||
|
--mono:'JetBrains Mono',ui-monospace,monospace;
|
||||||
|
}
|
||||||
|
*{box-sizing:border-box}
|
||||||
|
body{margin:0;
|
||||||
|
background:radial-gradient(ellipse 1200px 600px at 50% -5%,var(--sky-rim) 0%,transparent 60%),
|
||||||
|
radial-gradient(ellipse 900px 500px at 100% 100%,var(--sky-mid) 0%,transparent 55%),
|
||||||
|
radial-gradient(ellipse 900px 500px at 0% 100%,#0c1424 0%,transparent 55%),
|
||||||
|
var(--bg);
|
||||||
|
background-attachment:fixed;
|
||||||
|
color:var(--ink);font:15px/1.55 var(--sans);min-height:100vh;font-feature-settings:"ss01","ss02"}
|
||||||
|
h1,h2,h3{font-family:var(--serif);font-feature-settings:"ss01","ss02"}
|
||||||
|
code,.mono{font-family:var(--mono)}
|
||||||
|
a{color:var(--acid);text-decoration:none}
|
||||||
|
|
||||||
|
/* topnav (matches portal) */
|
||||||
|
.topnav{position:sticky;top:0;z-index:20;display:flex;gap:2px;align-items:center;flex-wrap:wrap;
|
||||||
|
padding:10px 1.2rem;background:rgba(11,14,20,.82);backdrop-filter:blur(10px)}
|
||||||
|
.topnav .brand{font-weight:600;color:var(--ink);text-decoration:none;margin-right:14px;font-size:15px;letter-spacing:.2px}
|
||||||
|
.topnav .brand .g{color:var(--acid)}
|
||||||
|
.topnav a{color:var(--mut);text-decoration:none;padding:6px 12px;border-radius:8px;font-size:14px}
|
||||||
|
.topnav a:hover{color:var(--ink);background:var(--panel)}
|
||||||
|
.topnav a.here{color:var(--acid);background:rgba(214,255,61,.08)}
|
||||||
|
.topnav a.portal{margin-left:auto;background:rgba(214,255,61,.10);color:var(--acid);font-weight:500}
|
||||||
|
|
||||||
|
/* dashboard shell */
|
||||||
|
.dash{display:grid;grid-template-columns:236px minmax(0,1fr);gap:26px;max-width:1200px;margin:0 auto;padding:1.4rem 1.2rem 3rem}
|
||||||
|
@media (min-width:1280px){
|
||||||
|
.dash{max-width:1720px;grid-template-columns:260px minmax(0,1fr);gap:34px;padding:1.6rem 2rem 3rem}
|
||||||
|
}
|
||||||
|
@media (max-width:800px){
|
||||||
|
.dash{grid-template-columns:1fr;gap:14px}
|
||||||
|
.side{position:static}
|
||||||
|
}
|
||||||
|
|
||||||
|
.side{position:sticky;top:68px;align-self:start;display:flex;flex-direction:column;gap:4px}
|
||||||
|
.side .who{padding:12px 14px;border-radius:12px;background:var(--panel);border:1px solid var(--line);margin-bottom:8px}
|
||||||
|
.side .who .lbl{font-family:var(--mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--dim)}
|
||||||
|
.side .who .addr{font-family:var(--mono);font-size:12px;color:var(--ink);word-break:break-all;margin-top:4px}
|
||||||
|
.side .who .net{font-size:11.5px;color:var(--dim);margin-top:4px}
|
||||||
|
.side .grp{font-family:var(--mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--dim);padding:12px 14px 4px}
|
||||||
|
.side .sep{height:1px;background:var(--line);margin:8px 6px}
|
||||||
|
.side button.item,.side a.item{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:9px 12px;border-radius:10px;
|
||||||
|
background:transparent;border:1px solid transparent;color:var(--mut);font:inherit;font-size:14px;cursor:pointer;text-decoration:none;transition:all .12s}
|
||||||
|
.side .item .ic{width:20px;text-align:center;flex:none;opacity:.9}
|
||||||
|
.side .item .cnt{margin-left:auto;font-family:var(--mono);font-size:11px;padding:1px 7px;border-radius:999px;background:rgba(255,255,255,.08);color:var(--ink)}
|
||||||
|
.side .item:hover{color:var(--ink);background:rgba(255,255,255,.04)}
|
||||||
|
.side .item.active{color:var(--acid);background:rgba(214,255,61,.08);border-color:rgba(214,255,61,.18)}
|
||||||
|
.side .item.active .cnt{background:rgba(214,255,61,.2);color:var(--acid)}
|
||||||
|
|
||||||
|
/* content shared */
|
||||||
|
.content{min-width:0}
|
||||||
|
.ph{display:flex;flex-wrap:wrap;gap:14px;justify-content:space-between;align-items:flex-start;margin-bottom:14px}
|
||||||
|
.ph h2{font-size:1.35rem;margin:0}
|
||||||
|
.ph p{color:var(--mut);margin:.3rem 0 0;max-width:640px}
|
||||||
|
|
||||||
|
.card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:20px 22px}
|
||||||
|
.card + .card{margin-top:14px}
|
||||||
|
|
||||||
|
.btn{display:inline-flex;align-items:center;gap:6px;text-decoration:none;padding:9px 16px;border-radius:10px;background:#4b7bec;color:#fff;font-size:14px;border:none;cursor:pointer;font-family:inherit;line-height:1.2}
|
||||||
|
.btn.ghost{background:transparent;border:1px solid var(--line);color:var(--ink)}
|
||||||
|
.btn.acid{background:var(--acid);color:#0b0e14;font-weight:600}
|
||||||
|
.btn.danger{background:rgba(246,118,138,.14);color:var(--taken);border:1px solid rgba(246,118,138,.35)}
|
||||||
|
.btn.small{padding:6px 11px;font-size:12.5px}
|
||||||
|
.btn:hover{filter:brightness(1.12)}
|
||||||
|
.btn:disabled{opacity:.45;cursor:not-allowed;filter:none}
|
||||||
|
|
||||||
|
.badge{display:inline-block;font-size:11px;padding:2px 9px;border-radius:999px;font-weight:600;line-height:1.6}
|
||||||
|
.b-x{background:rgba(214,255,61,.14);color:var(--acid)}
|
||||||
|
.b-warn{background:rgba(255,199,95,.14);color:var(--warn)}
|
||||||
|
.b-ok{background:rgba(79,209,165,.14);color:var(--ok)}
|
||||||
|
.b-off{background:rgba(246,118,138,.14);color:var(--taken)}
|
||||||
|
.b-dim{background:rgba(255,255,255,.06);color:var(--mut)}
|
||||||
|
.b-native{background:rgba(10,193,142,.14);color:var(--chain-native)}
|
||||||
|
.b-forge{background:rgba(255,140,0,.14);color:var(--forge)}
|
||||||
|
|
||||||
|
.muted{color:var(--mut);font-size:13px}
|
||||||
|
.dim{color:var(--dim);font-size:12.5px}
|
||||||
|
.hidden{display:none !important}
|
||||||
|
|
||||||
|
/* ---------- storage layout ---------- */
|
||||||
|
.quota{display:flex;flex-direction:column;gap:14px}
|
||||||
|
.quota-hdr{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap}
|
||||||
|
.quota-hdr .tier-name{font-family:var(--serif);font-size:1.35rem;font-weight:500}
|
||||||
|
.quota-hdr .quota-line{font-family:var(--mono);color:var(--mut);font-size:14px}
|
||||||
|
.quota-hdr .quota-line b{color:var(--ink);font-weight:500}
|
||||||
|
.quota-hdr .renew{font-size:12.5px;color:var(--dim);margin-left:auto}
|
||||||
|
|
||||||
|
.bar{width:100%;height:10px;border-radius:999px;background:rgba(255,255,255,.04);overflow:hidden;border:1px solid var(--line)}
|
||||||
|
.bar > .fill{height:100%;background:linear-gradient(90deg,var(--acid),#a8e600);border-radius:999px;transition:width .3s}
|
||||||
|
.bar.warn > .fill{background:linear-gradient(90deg,var(--warn),#f59d00)}
|
||||||
|
.bar.over > .fill{background:linear-gradient(90deg,var(--taken),#e04e4e)}
|
||||||
|
|
||||||
|
.quota-detail{display:flex;gap:20px;flex-wrap:wrap;font-size:12.5px;color:var(--dim)}
|
||||||
|
.quota-detail b{color:var(--mut);font-weight:500;font-family:var(--mono)}
|
||||||
|
|
||||||
|
/* file browser */
|
||||||
|
.browser{display:grid;grid-template-columns:180px minmax(0,1fr);gap:16px;margin-top:14px}
|
||||||
|
@media (max-width:640px){.browser{grid-template-columns:1fr}}
|
||||||
|
|
||||||
|
.folders{display:flex;flex-direction:column;gap:2px;padding:4px 0}
|
||||||
|
.folders .fh{font-family:var(--mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--dim);padding:6px 10px 4px}
|
||||||
|
.folders button{display:flex;align-items:center;gap:8px;padding:7px 10px;border-radius:8px;background:transparent;border:1px solid transparent;color:var(--mut);font:inherit;font-size:13.5px;cursor:pointer;text-align:left;width:100%}
|
||||||
|
.folders button .ic{width:16px;text-align:center;opacity:.85}
|
||||||
|
.folders button:hover{color:var(--ink);background:rgba(255,255,255,.04)}
|
||||||
|
.folders button.active{color:var(--acid);background:rgba(214,255,61,.06);border-color:rgba(214,255,61,.15)}
|
||||||
|
.folders button .cnt{margin-left:auto;font-family:var(--mono);font-size:11px;color:var(--dim)}
|
||||||
|
|
||||||
|
.files{display:flex;flex-direction:column;gap:1px;background:var(--panel2);border:1px solid var(--line);border-radius:12px;overflow:hidden}
|
||||||
|
.files .toolbar{display:flex;gap:8px;padding:10px 14px;border-bottom:1px solid var(--line);align-items:center;background:rgba(255,255,255,.02)}
|
||||||
|
.files .toolbar .path{font-family:var(--mono);font-size:12.5px;color:var(--mut);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
||||||
|
.files .toolbar .path .sep{color:var(--dim);margin:0 4px}
|
||||||
|
.files .toolbar .path .lock{color:var(--acid);margin-right:6px}
|
||||||
|
.files .toolbar .path .globe{color:var(--chain-native);margin-right:6px}
|
||||||
|
.files .row{display:grid;grid-template-columns:1fr 90px 110px 40px;gap:12px;align-items:center;padding:10px 14px;transition:background .1s}
|
||||||
|
.files .row:hover{background:rgba(255,255,255,.03)}
|
||||||
|
.files .row + .row{border-top:1px solid rgba(255,255,255,.03)}
|
||||||
|
.files .row.head{color:var(--dim);font-family:var(--mono);font-size:10.5px;letter-spacing:.15em;text-transform:uppercase;padding:8px 14px}
|
||||||
|
.files .row.head:hover{background:transparent}
|
||||||
|
.files .row .name{display:flex;gap:8px;align-items:center;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
||||||
|
.files .row .name .ic{width:18px;text-align:center;flex:none}
|
||||||
|
.files .row .size{font-family:var(--mono);font-size:12px;color:var(--mut);text-align:right}
|
||||||
|
.files .row .date{font-family:var(--mono);font-size:12px;color:var(--dim)}
|
||||||
|
.files .row .more{color:var(--dim);cursor:pointer;text-align:right;padding:0 4px;user-select:none}
|
||||||
|
.files .row .more:hover{color:var(--ink)}
|
||||||
|
|
||||||
|
.drop{margin:12px 14px 14px;border:1.5px dashed rgba(255,255,255,.12);border-radius:10px;padding:22px;text-align:center;color:var(--mut);font-size:13.5px;transition:all .15s}
|
||||||
|
.drop.active{border-color:var(--acid);background:rgba(214,255,61,.03);color:var(--ink)}
|
||||||
|
.drop b{color:var(--acid);font-weight:500}
|
||||||
|
.drop .k{font-family:var(--mono);color:var(--dim);font-size:12px;display:block;margin-top:4px}
|
||||||
|
|
||||||
|
/* upgrade modal */
|
||||||
|
.modal-scrim{position:fixed;inset:0;z-index:100;background:rgba(4,6,11,.72);backdrop-filter:blur(6px);display:none;align-items:center;justify-content:center;padding:20px}
|
||||||
|
.modal-scrim.show{display:flex}
|
||||||
|
.modal{background:var(--panel);border:1px solid var(--line);border-radius:16px;max-width:640px;width:100%;max-height:calc(100vh - 40px);overflow:auto;padding:22px 26px}
|
||||||
|
.modal h2{margin:0 0 6px;font-size:1.4rem}
|
||||||
|
.modal .close{float:right;background:none;border:0;color:var(--dim);font-size:22px;cursor:pointer;line-height:1;padding:0 4px;margin:-4px -8px 0 0}
|
||||||
|
.modal .close:hover{color:var(--ink)}
|
||||||
|
.plans{display:flex;flex-direction:column;gap:10px;margin:14px 0 18px}
|
||||||
|
.plan{display:flex;align-items:center;gap:14px;padding:14px 16px;border-radius:12px;border:1px solid var(--line);cursor:pointer;transition:all .12s;background:var(--panel2)}
|
||||||
|
.plan:hover{border-color:rgba(214,255,61,.28)}
|
||||||
|
.plan.sel{border-color:var(--acid);background:rgba(214,255,61,.05)}
|
||||||
|
.plan .radio{width:16px;height:16px;border-radius:50%;border:1.5px solid var(--dim);flex:none;position:relative}
|
||||||
|
.plan.sel .radio{border-color:var(--acid)}
|
||||||
|
.plan.sel .radio::after{content:'';position:absolute;inset:3px;background:var(--acid);border-radius:50%}
|
||||||
|
.plan .nm{flex:1;font-family:var(--serif);font-size:1.05rem;font-weight:500}
|
||||||
|
.plan .size{font-family:var(--mono);font-size:12.5px;color:var(--mut);width:130px}
|
||||||
|
.plan .price{font-family:var(--mono);font-size:14px;color:var(--ink);font-weight:500;width:80px;text-align:right}
|
||||||
|
.plan.current{opacity:.6;cursor:default}
|
||||||
|
.plan.current .nm::after{content:' — current';color:var(--dim);font-family:var(--sans);font-size:12px;font-weight:400}
|
||||||
|
.plan .save{font-family:var(--mono);font-size:10.5px;color:var(--acid);letter-spacing:.1em;margin-left:8px}
|
||||||
|
|
||||||
|
.pay-box{padding:18px 20px;border-radius:12px;background:linear-gradient(135deg,rgba(214,255,61,.04),rgba(10,193,142,.02));border:1px solid rgba(214,255,61,.16)}
|
||||||
|
.pay-box .amt{font-family:var(--serif);font-size:2rem;color:var(--acid);font-weight:400;letter-spacing:-.02em}
|
||||||
|
.pay-box .amt sub{font-family:var(--mono);font-size:12px;color:var(--mut);letter-spacing:0;vertical-align:baseline;margin-left:6px}
|
||||||
|
.pay-box .oracle{font-family:var(--mono);font-size:11.5px;color:var(--dim);margin-top:4px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
|
||||||
|
.pay-box .dot{width:6px;height:6px;border-radius:50%;background:var(--ok);animation:pulse 2s infinite ease-in-out}
|
||||||
|
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.35}}
|
||||||
|
|
||||||
|
.modal .actions{display:flex;gap:10px;margin-top:16px;flex-wrap:wrap;align-items:center}
|
||||||
|
.modal .actions .btn{flex:1;justify-content:center;padding:12px 18px;font-size:14.5px}
|
||||||
|
.modal .actions .btn.acid{flex:2}
|
||||||
|
.modal .alt{font-size:12px;color:var(--dim);margin-top:12px;text-align:center}
|
||||||
|
.modal .alt a{color:var(--mut)}
|
||||||
|
|
||||||
|
/* confirmation banner */
|
||||||
|
.banner{padding:14px 18px;border-radius:12px;background:rgba(79,209,165,.06);border:1px solid rgba(79,209,165,.24);color:var(--ink);margin-bottom:14px;display:flex;gap:12px;align-items:center}
|
||||||
|
.banner.warn{background:rgba(255,199,95,.06);border-color:rgba(255,199,95,.24)}
|
||||||
|
.banner.err{background:rgba(246,118,138,.06);border-color:rgba(246,118,138,.24)}
|
||||||
|
.banner .ic{font-size:20px;flex:none}
|
||||||
|
.banner .txt{flex:1;font-size:13.5px;color:var(--mut)}
|
||||||
|
.banner .txt b{color:var(--ink);font-weight:500}
|
||||||
|
.banner .close{background:none;border:0;color:var(--dim);font-size:18px;cursor:pointer;padding:0 4px}
|
||||||
|
.banner .close:hover{color:var(--ink)}
|
||||||
|
|
||||||
|
/* wireframe state picker (dev-only) */
|
||||||
|
.wf-picker{position:fixed;bottom:16px;right:16px;z-index:50;padding:8px 10px;border-radius:12px;background:rgba(20,26,36,.94);border:1px solid var(--line);font-family:var(--mono);font-size:11px;color:var(--dim);display:flex;flex-direction:column;gap:4px;backdrop-filter:blur(10px)}
|
||||||
|
.wf-picker .h{color:var(--acid);text-transform:uppercase;letter-spacing:.15em;font-size:9.5px;margin-bottom:2px}
|
||||||
|
.wf-picker button{background:transparent;border:0;color:var(--mut);cursor:pointer;font-family:inherit;font-size:11.5px;padding:3px 6px;border-radius:6px;text-align:left}
|
||||||
|
.wf-picker button:hover{color:var(--ink);background:rgba(255,255,255,.04)}
|
||||||
|
.wf-picker button.active{color:var(--acid);background:rgba(214,255,61,.08)}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<nav class="topnav">
|
||||||
|
<a class="brand" href="../"><svg width="18" height="18" viewBox="0 0 64 64" style="vertical-align:-4px;margin-right:6px" 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 class="g">Sirius.X</span></a>
|
||||||
|
<a href="../#try">Try it</a>
|
||||||
|
<a href="../#search-input">✏️ Register</a>
|
||||||
|
<a href="../tld.html">🌐 TLD</a>
|
||||||
|
<a href="../market/">🛒 Market</a>
|
||||||
|
<a href="../portal.html" class="portal here">🔑 Storage</a>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div class="dash">
|
||||||
|
|
||||||
|
<!-- ============ sidebar ============ -->
|
||||||
|
<aside class="side" aria-label="Dashboard menu">
|
||||||
|
<div class="who">
|
||||||
|
<div class="lbl">Signed in</div>
|
||||||
|
<div class="addr">bitcoincash:qzrp…4qtx</div>
|
||||||
|
<div class="net">chipnet · 42,180 sat</div>
|
||||||
|
</div>
|
||||||
|
<button class="item"><span class="ic">🎨</span>Web-Builder</button>
|
||||||
|
<button class="item"><span class="ic">🌐</span>Domain names<span class="cnt">3</span></button>
|
||||||
|
<button class="item"><span class="ic">🏷</span>My TLDs<span class="cnt">1</span></button>
|
||||||
|
<button class="item active"><span class="ic">📦</span>Storage<span class="cnt" id="side-quota">120M</span></button>
|
||||||
|
<div class="sep"></div>
|
||||||
|
<button class="item"><span class="ic">⚙</span>Settings</button>
|
||||||
|
<button class="item"><span class="ic">🚪</span>Sign out</button>
|
||||||
|
</aside>
|
||||||
|
|
||||||
|
<!-- ============ content ============ -->
|
||||||
|
<main class="content">
|
||||||
|
|
||||||
|
<!-- Confirmation banners appear here based on wireframe state -->
|
||||||
|
<div id="banner-confirming" class="banner warn hidden">
|
||||||
|
<div class="ic">⏳</div>
|
||||||
|
<div class="txt"><b>Confirming payment.</b> 0.0462 BCH received — waiting for 1 confirmation (~10 min). Your plan activates automatically.</div>
|
||||||
|
<button class="close" onclick="dismissBanner(this)">×</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="banner-upgraded" class="banner hidden">
|
||||||
|
<div class="ic">✓</div>
|
||||||
|
<div class="txt"><b>Silent Max is active.</b> Quota bumped to 50 GB private. Renews 2026-10-20.</div>
|
||||||
|
<button class="close" onclick="dismissBanner(this)">×</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="banner-grace" class="banner err hidden">
|
||||||
|
<div class="ic">⚠</div>
|
||||||
|
<div class="txt"><b>Over quota.</b> Files are read-only for 27 more days. Upgrade or delete files to restore write access.</div>
|
||||||
|
<button class="close" onclick="dismissBanner(this)">×</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="ph">
|
||||||
|
<div>
|
||||||
|
<h2>Storage</h2>
|
||||||
|
<p id="hdr-sub">Files you host on Silent Mode's Sia backend. Public files get a URL anyone can open;
|
||||||
|
private files are encrypted in your browser with a key only your wallet can derive.</p>
|
||||||
|
</div>
|
||||||
|
<div style="display:flex;gap:8px;flex-wrap:wrap">
|
||||||
|
<button class="btn ghost small">↻ Refresh</button>
|
||||||
|
<button class="btn acid small" id="upgrade-btn" onclick="openModal()">Upgrade</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Quota card -->
|
||||||
|
<section class="card">
|
||||||
|
<div class="quota">
|
||||||
|
<div class="quota-hdr">
|
||||||
|
<span class="tier-name" id="tier-name">Silent Free</span>
|
||||||
|
<span class="badge b-dim" id="tier-badge">Free</span>
|
||||||
|
<span class="quota-line"><b id="q-used">120 MB</b> / <span id="q-cap">500 MB</span> private</span>
|
||||||
|
<span class="renew" id="renew-line" style="display:none">renews <b id="renew-date">2026-10-20</b></span>
|
||||||
|
</div>
|
||||||
|
<div class="bar" id="q-bar"><div class="fill" id="q-fill" style="width:24%"></div></div>
|
||||||
|
<div class="quota-detail">
|
||||||
|
<span>Public: <b>2.4 GB</b> · unlimited</span>
|
||||||
|
<span>Files: <b>47</b></span>
|
||||||
|
<span>Encryption: <b>on</b> for private</span>
|
||||||
|
<span id="credit-line" style="display:none">Credit: <b>$0.00</b></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- File browser -->
|
||||||
|
<section class="card" style="padding:14px 14px 0">
|
||||||
|
<div class="browser">
|
||||||
|
<nav class="folders">
|
||||||
|
<div class="fh">Folders</div>
|
||||||
|
<button class="active" data-folder="private">
|
||||||
|
<span class="ic" style="color:var(--acid)">🔒</span>Private
|
||||||
|
<span class="cnt">12</span>
|
||||||
|
</button>
|
||||||
|
<button data-folder="public">
|
||||||
|
<span class="ic" style="color:var(--chain-native)">🌐</span>Public
|
||||||
|
<span class="cnt">35</span>
|
||||||
|
</button>
|
||||||
|
<button data-folder="shared">
|
||||||
|
<span class="ic">🔗</span>Shared
|
||||||
|
<span class="cnt">2</span>
|
||||||
|
</button>
|
||||||
|
<div class="fh" style="margin-top:8px">Actions</div>
|
||||||
|
<button><span class="ic">+</span>New folder</button>
|
||||||
|
<button><span class="ic">↑</span>Upload</button>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<div class="files">
|
||||||
|
<div class="toolbar">
|
||||||
|
<div class="path">
|
||||||
|
<span class="lock">🔒</span>
|
||||||
|
<span>private</span>
|
||||||
|
<span class="sep">/</span>
|
||||||
|
<span>projects</span>
|
||||||
|
</div>
|
||||||
|
<button class="btn ghost small">Share</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row head">
|
||||||
|
<span>Name</span>
|
||||||
|
<span class="size" style="text-align:right">Size</span>
|
||||||
|
<span class="date">Modified</span>
|
||||||
|
<span></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<span class="name"><span class="ic">📁</span>silentmode-notes</span>
|
||||||
|
<span class="size">—</span>
|
||||||
|
<span class="date">3d ago</span>
|
||||||
|
<span class="more">⋯</span>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<span class="name"><span class="ic">📁</span>contracts</span>
|
||||||
|
<span class="size">—</span>
|
||||||
|
<span class="date">1w ago</span>
|
||||||
|
<span class="more">⋯</span>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<span class="name"><span class="ic">📄</span>hestia-outline.md</span>
|
||||||
|
<span class="size">14 KB</span>
|
||||||
|
<span class="date">just now</span>
|
||||||
|
<span class="more">⋯</span>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<span class="name"><span class="ic">📄</span>oracle-notes.txt</span>
|
||||||
|
<span class="size">4 KB</span>
|
||||||
|
<span class="date">2h ago</span>
|
||||||
|
<span class="more">⋯</span>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<span class="name"><span class="ic">🗄</span>backup-2026-09-18.tar.gz</span>
|
||||||
|
<span class="size">86 MB</span>
|
||||||
|
<span class="date">2d ago</span>
|
||||||
|
<span class="more">⋯</span>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<span class="name"><span class="ic">🖼</span>diagram.png</span>
|
||||||
|
<span class="size">220 KB</span>
|
||||||
|
<span class="date">4d ago</span>
|
||||||
|
<span class="more">⋯</span>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<span class="name"><span class="ic">🔑</span>keys.json.gpg</span>
|
||||||
|
<span class="size">2 KB</span>
|
||||||
|
<span class="date">2w ago</span>
|
||||||
|
<span class="more">⋯</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="drop" id="drop">
|
||||||
|
Drag files here, or <b>click to browse</b>
|
||||||
|
<span class="k">Encrypted in your browser before upload · max 100 MB per file on Free</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- CLI hint -->
|
||||||
|
<section class="card" style="margin-top:14px">
|
||||||
|
<div style="display:flex;gap:10px;align-items:baseline;justify-content:space-between;flex-wrap:wrap">
|
||||||
|
<div>
|
||||||
|
<h3 style="margin:0 0 4px">CLI access</h3>
|
||||||
|
<p class="muted" style="margin:0">Upload from a script or CI with your Silent Mode PAT.
|
||||||
|
Encryption still happens client-side.</p>
|
||||||
|
</div>
|
||||||
|
<span class="badge b-dim" id="cli-tier">Free — via gateway</span>
|
||||||
|
</div>
|
||||||
|
<pre style="margin:12px 0 0;padding:12px 14px;background:var(--panel2);border:1px solid var(--line);border-radius:10px;font-family:var(--mono);font-size:12.5px;color:var(--mut);overflow:auto;line-height:1.6"><span style="color:var(--dim)"># upload a private file</span>
|
||||||
|
curl -H "Authorization: token $HESTIA_PAT" \
|
||||||
|
--data-binary @notes.md \
|
||||||
|
https://storage.silentmode.st/u/48291/private/notes.md
|
||||||
|
|
||||||
|
<span style="color:var(--dim)"># list your files</span>
|
||||||
|
curl -H "Authorization: token $HESTIA_PAT" \
|
||||||
|
https://storage.silentmode.st/u/48291/list</pre>
|
||||||
|
<p class="muted" id="cli-hint" style="margin:10px 0 0;font-size:12.5px">
|
||||||
|
<span class="badge b-warn">Pro / Max</span> get their own S3 credentials for direct
|
||||||
|
<code>rclone</code> / <code>aws s3</code> use.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</main>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- ============ upgrade modal ============ -->
|
||||||
|
<div class="modal-scrim" id="modal">
|
||||||
|
<div class="modal">
|
||||||
|
<button class="close" onclick="closeModal()">×</button>
|
||||||
|
<h2>Plans</h2>
|
||||||
|
<p class="muted">Priced in USD, paid in BCH at the live oracle rate. All plans include unlimited public storage. Encryption is client-side, wallet-derived, always on for private files.</p>
|
||||||
|
|
||||||
|
<div class="plans" id="plans">
|
||||||
|
<div class="plan current" data-tier="free">
|
||||||
|
<span class="radio"></span>
|
||||||
|
<span class="nm">Silent Free</span>
|
||||||
|
<span class="size">500 MB private</span>
|
||||||
|
<span class="price">$0</span>
|
||||||
|
</div>
|
||||||
|
<div class="plan" data-tier="pro" onclick="selectPlan('pro')">
|
||||||
|
<span class="radio"></span>
|
||||||
|
<span class="nm">Silent Pro</span>
|
||||||
|
<span class="size">2 GB private</span>
|
||||||
|
<span class="price">$3<span class="save">·25% off GH</span></span>
|
||||||
|
</div>
|
||||||
|
<div class="plan sel" data-tier="max" onclick="selectPlan('max')">
|
||||||
|
<span class="radio"></span>
|
||||||
|
<span class="nm">Silent Max</span>
|
||||||
|
<span class="size">50 GB private</span>
|
||||||
|
<span class="price">$16<span class="save">·24% off GH</span></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="pay-box">
|
||||||
|
<div style="display:flex;justify-content:space-between;align-items:baseline">
|
||||||
|
<div>
|
||||||
|
<div class="dim" style="font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;font-size:10px">Pay for 1 month</div>
|
||||||
|
<div class="amt" id="pay-amt">0.0462 BCH<sub>≈ $16.00</sub></div>
|
||||||
|
</div>
|
||||||
|
<span class="badge b-native" id="pay-tier">Silent Max</span>
|
||||||
|
</div>
|
||||||
|
<div class="oracle">
|
||||||
|
<span class="dot"></span>
|
||||||
|
<span>live oracle at <b style="color:var(--mut)" id="oracle-rate">$346.40</b> / BCH</span>
|
||||||
|
<span>·</span>
|
||||||
|
<span id="oracle-age">quoted 00:14 ago</span>
|
||||||
|
<span>·</span>
|
||||||
|
<span>refreshes in <span id="oracle-refresh">04:46</span></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="actions">
|
||||||
|
<button class="btn ghost" onclick="closeModal()">Cancel</button>
|
||||||
|
<button class="btn acid" onclick="mockPay()">Pay from wallet →</button>
|
||||||
|
</div>
|
||||||
|
<div class="alt">
|
||||||
|
also accepts: <a href="#">QR code</a> · <a href="#">external wallet</a> · <a href="#">on-chain address</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- ============ wireframe state picker (dev only) ============ -->
|
||||||
|
<div class="wf-picker">
|
||||||
|
<div class="h">Wireframe state</div>
|
||||||
|
<button class="active" onclick="setState('free')">Free · default</button>
|
||||||
|
<button onclick="setState('confirming')">Free · confirming</button>
|
||||||
|
<button onclick="setState('max-fresh')">Max · just upgraded</button>
|
||||||
|
<button onclick="setState('max-half')">Max · half full</button>
|
||||||
|
<button onclick="setState('grace')">Free · over quota</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
const PLAN = {
|
||||||
|
free: {name:'Silent Free', badge:'Free', badgeCls:'b-dim', used:120, cap:500, capUnit:'MB', price:0, bch:0},
|
||||||
|
pro: {name:'Silent Pro', badge:'Pro', badgeCls:'b-forge', used:1200, cap:2, capUnit:'GB', price:3, bch:0.00866},
|
||||||
|
max: {name:'Silent Max', badge:'Max', badgeCls:'b-native',used:24800, cap:50, capUnit:'GB', price:16, bch:0.04620},
|
||||||
|
};
|
||||||
|
let currentTier = 'free';
|
||||||
|
let selectedTier = 'max';
|
||||||
|
|
||||||
|
function selectPlan(t){
|
||||||
|
selectedTier = t;
|
||||||
|
document.querySelectorAll('.plan').forEach(p=>p.classList.toggle('sel', p.dataset.tier === t));
|
||||||
|
const p = PLAN[t];
|
||||||
|
document.getElementById('pay-amt').innerHTML = p.bch.toFixed(5) + ' BCH<sub>≈ $' + p.price.toFixed(2) + '</sub>';
|
||||||
|
document.getElementById('pay-tier').className = 'badge ' + p.badgeCls;
|
||||||
|
document.getElementById('pay-tier').textContent = p.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
function openModal(){ document.getElementById('modal').classList.add('show'); }
|
||||||
|
function closeModal(){ document.getElementById('modal').classList.remove('show'); }
|
||||||
|
function dismissBanner(el){ el.parentElement.classList.add('hidden'); }
|
||||||
|
|
||||||
|
function mockPay(){
|
||||||
|
closeModal();
|
||||||
|
setState('confirming');
|
||||||
|
// fake the SSE flow: confirming → upgraded after 3s
|
||||||
|
setTimeout(() => setState('max-fresh'), 3000);
|
||||||
|
}
|
||||||
|
|
||||||
|
function fmtBytes(x, unit){
|
||||||
|
if (unit === 'MB') return x < 1024 ? x + ' MB' : (x/1024).toFixed(1) + ' GB';
|
||||||
|
if (unit === 'GB') return x < 1 ? Math.round(x*1024) + ' MB' : x + ' GB';
|
||||||
|
return x + ' ' + unit;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setState(s){
|
||||||
|
// reset banners
|
||||||
|
['confirming','upgraded','grace'].forEach(k =>
|
||||||
|
document.getElementById('banner-' + k).classList.add('hidden'));
|
||||||
|
|
||||||
|
// reset state-picker button
|
||||||
|
document.querySelectorAll('.wf-picker button').forEach(b => b.classList.remove('active'));
|
||||||
|
(document.querySelector(`.wf-picker button[onclick*="${s}"]`) || {classList:{add:()=>{}}}).classList.add('active');
|
||||||
|
|
||||||
|
let tier='free', usedMB=120, capMB=500, capLabel='500 MB', tierLabel='Silent Free',
|
||||||
|
badgeCls='b-dim', badgeLbl='Free', renew=false, credit=false, cliBadge='Free — via gateway';
|
||||||
|
|
||||||
|
if (s === 'confirming') {
|
||||||
|
document.getElementById('banner-confirming').classList.remove('hidden');
|
||||||
|
}
|
||||||
|
if (s === 'max-fresh') {
|
||||||
|
tier='max'; usedMB=120; capMB=50*1024; capLabel='50 GB'; tierLabel='Silent Max';
|
||||||
|
badgeCls='b-native'; badgeLbl='Max'; renew=true;
|
||||||
|
cliBadge='Max — direct S3';
|
||||||
|
document.getElementById('banner-upgraded').classList.remove('hidden');
|
||||||
|
}
|
||||||
|
if (s === 'max-half') {
|
||||||
|
tier='max'; usedMB=25*1024; capMB=50*1024; capLabel='50 GB'; tierLabel='Silent Max';
|
||||||
|
badgeCls='b-native'; badgeLbl='Max'; renew=true;
|
||||||
|
cliBadge='Max — direct S3';
|
||||||
|
}
|
||||||
|
if (s === 'grace') {
|
||||||
|
tier='free'; usedMB=580; capMB=500; capLabel='500 MB'; tierLabel='Silent Free';
|
||||||
|
badgeCls='b-dim'; badgeLbl='Free (over quota)'; credit=true;
|
||||||
|
document.getElementById('banner-grace').classList.remove('hidden');
|
||||||
|
}
|
||||||
|
|
||||||
|
currentTier = tier;
|
||||||
|
document.getElementById('tier-name').textContent = tierLabel;
|
||||||
|
document.getElementById('tier-badge').className = 'badge ' + badgeCls;
|
||||||
|
document.getElementById('tier-badge').textContent = badgeLbl;
|
||||||
|
|
||||||
|
const pct = Math.min(100, Math.round((usedMB / capMB) * 100));
|
||||||
|
document.getElementById('q-used').textContent = usedMB < 1024 ? usedMB + ' MB' : (usedMB/1024).toFixed(1) + ' GB';
|
||||||
|
document.getElementById('q-cap').textContent = capLabel;
|
||||||
|
document.getElementById('q-fill').style.width = pct + '%';
|
||||||
|
document.getElementById('q-bar').className = 'bar' + (pct >= 100 ? ' over' : pct >= 85 ? ' warn' : '');
|
||||||
|
document.getElementById('side-quota').textContent = usedMB < 1024 ? usedMB + 'M' : (usedMB/1024).toFixed(1) + 'G';
|
||||||
|
|
||||||
|
document.getElementById('renew-line').style.display = renew ? '' : 'none';
|
||||||
|
document.getElementById('credit-line').style.display = credit ? '' : 'none';
|
||||||
|
document.getElementById('cli-tier').textContent = cliBadge;
|
||||||
|
document.getElementById('cli-tier').className = 'badge ' + (tier === 'free' ? 'b-dim' : tier === 'pro' ? 'b-forge' : 'b-native');
|
||||||
|
|
||||||
|
// update available plans in modal (highlight current, remove .current from others)
|
||||||
|
document.querySelectorAll('.plan').forEach(p => {
|
||||||
|
p.classList.toggle('current', p.dataset.tier === tier);
|
||||||
|
if (p.dataset.tier === tier) p.classList.remove('sel');
|
||||||
|
});
|
||||||
|
if (tier === 'free') selectPlan('max');
|
||||||
|
else if (tier === 'pro') selectPlan('max');
|
||||||
|
else selectPlan('max');
|
||||||
|
}
|
||||||
|
|
||||||
|
// fake oracle refresh countdown (visual only)
|
||||||
|
let refreshLeft = 286;
|
||||||
|
setInterval(() => {
|
||||||
|
refreshLeft = refreshLeft > 0 ? refreshLeft - 1 : 300;
|
||||||
|
const m = Math.floor(refreshLeft / 60);
|
||||||
|
const s = refreshLeft % 60;
|
||||||
|
const el = document.getElementById('oracle-refresh');
|
||||||
|
if (el) el.textContent = String(m).padStart(2,'0') + ':' + String(s).padStart(2,'0');
|
||||||
|
}, 1000);
|
||||||
|
|
||||||
|
setState('free');
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
@ -131,11 +131,11 @@
|
||||||
.muted{color:var(--mut);font-size:13px}
|
.muted{color:var(--mut);font-size:13px}
|
||||||
code{font-family:var(--mono);background:#0e131b;border:1px solid var(--line);border-radius:6px;padding:1px 6px;font-size:12px}
|
code{font-family:var(--mono);background:#0e131b;border:1px solid var(--line);border-radius:6px;padding:1px 6px;font-size:12px}
|
||||||
</style>
|
</style>
|
||||||
<script src="./js/i18n.js?v=20260920d"></script>
|
<script src="./js/i18n.js?v=20260920e"></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="bar">
|
<div class="bar">
|
||||||
<a class="brand" href="./portal.html#studio">⭐ <span class="g">Sirius</span> Studio</a>
|
<a class="brand" href="./portal.html#studio"><svg width="18" height="18" viewBox="0 0 64 64" style="vertical-align:-4px;margin-right:6px" 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 class="g">Sirius</span> Studio</a>
|
||||||
<span class="name" id="site-name">—</span>
|
<span class="name" id="site-name">—</span>
|
||||||
<select class="sel" id="tpl-select" title="Start from a template">
|
<select class="sel" id="tpl-select" title="Start from a template">
|
||||||
<option value="">Templates…</option>
|
<option value="">Templates…</option>
|
||||||
|
|
|
||||||
|
|
@ -101,11 +101,11 @@
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<nav class="topnav">
|
<nav class="topnav">
|
||||||
<a class="brand" href="../">⭐ <span class="g">Sirius.X</span></a>
|
<a class="brand" href="../"><svg width="18" height="18" viewBox="0 0 64 64" style="vertical-align:-4px;margin-right:6px" 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 class="g">Sirius.X</span></a>
|
||||||
<a href="../#try">Try it</a>
|
<a href="../#try">Try it</a>
|
||||||
<a href="../#search-input">✏️ Register</a>
|
<a href="../#search-input">✏️ Register</a>
|
||||||
<a href="../tld.html">🌐 TLD</a>
|
<a href="../tld.html">🌐 TLD</a>
|
||||||
<a href="../market.html">🛒 Market</a>
|
<a href="../market/">🛒 Market</a>
|
||||||
<a href="./" class="here"><svg width="14" height="14" viewBox="0 0 64 64" style="vertical-align:-2px;margin-right:4px" 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>Theseus</a>
|
<a href="./" class="here"><svg width="14" height="14" viewBox="0 0 64 64" style="vertical-align:-2px;margin-right:4px" 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>Theseus</a>
|
||||||
<a href="../portal.html" class="portal">🔑 Sign in</a>
|
<a href="../portal.html" class="portal">🔑 Sign in</a>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
@ -186,7 +186,7 @@ sha256sum <downloaded-file>.exe</pre>
|
||||||
<script src="../js/pin-escrow.js?v=20260909pin"></script>
|
<script src="../js/pin-escrow.js?v=20260909pin"></script>
|
||||||
<script src="../js/pricing.js?v=20260909tldhigh"></script>
|
<script src="../js/pricing.js?v=20260909tldhigh"></script>
|
||||||
<script defer src="../js/site-footer.js?v=20260907rel"></script>
|
<script defer src="../js/site-footer.js?v=20260907rel"></script>
|
||||||
<script defer src="../js/theme.js?v=20260910font"></script>
|
<script defer src="../js/theme.js?v=20260920compact"></script>
|
||||||
<script defer src="../js/profile-menu.js?v=20260908tabs"></script>
|
<script defer src="../js/profile-menu.js?v=20260908tabs"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
10
tld.html
10
tld.html
|
|
@ -115,17 +115,17 @@
|
||||||
<script type="importmap">
|
<script type="importmap">
|
||||||
{ "imports": { "@bitauth/libauth": "https://silentmode.st/js/libauth.js" } }
|
{ "imports": { "@bitauth/libauth": "https://silentmode.st/js/libauth.js" } }
|
||||||
</script>
|
</script>
|
||||||
<script src="./js/i18n.js?v=20260920d"></script>
|
<script src="./js/i18n.js?v=20260920e"></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<nav class="topnav">
|
<nav class="topnav">
|
||||||
<a class="brand" href="./">⭐ <span class="g">Sirius.X</span></a>
|
<a class="brand" href="./"><svg width="18" height="18" viewBox="0 0 64 64" style="vertical-align:-4px;margin-right:6px" 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 class="g">Sirius.X</span></a>
|
||||||
<a href="./#try">Try it</a>
|
<a href="./#try">Try it</a>
|
||||||
<a href="./#search-input">✏️ Register</a>
|
<a href="./#search-input">✏️ Register</a>
|
||||||
<a href="./tld.html" class="here">🌐 TLD</a>
|
<a href="./tld.html" class="here">🌐 TLD</a>
|
||||||
<a href="./market.html">🛒 Market</a>
|
<a href="./market">🛒 Market</a>
|
||||||
<a href="./theseus/"><svg width="14" height="14" viewBox="0 0 64 64" style="vertical-align:-2px;margin-right:4px" 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>Theseus</a>
|
<a href="./theseus"><svg width="14" height="14" viewBox="0 0 64 64" style="vertical-align:-2px;margin-right:4px" 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>Theseus</a>
|
||||||
<a href="./portal.html" class="portal">🔑 Sign in</a>
|
<a href="./portal.html" class="portal">🔑 Sign in</a>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
|
@ -307,7 +307,7 @@
|
||||||
<script src="./js/pricing.js?v=20260917market"></script>
|
<script src="./js/pricing.js?v=20260917market"></script>
|
||||||
<script src="./js/session.js?v=20260917dash"></script>
|
<script src="./js/session.js?v=20260917dash"></script>
|
||||||
<script src="./js/pin-escrow.js?v=20260909pin"></script>
|
<script src="./js/pin-escrow.js?v=20260909pin"></script>
|
||||||
<script defer src="./js/theme.js?v=20260910font"></script>
|
<script defer src="./js/theme.js?v=20260920compact"></script>
|
||||||
<script defer src="./js/site-footer.js?v=20260917market"></script>
|
<script defer src="./js/site-footer.js?v=20260917market"></script>
|
||||||
<script defer src="./js/profile-menu.js?v=20260920m"></script>
|
<script defer src="./js/profile-menu.js?v=20260920m"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue