diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
new file mode 100644
index 0000000..5743524
--- /dev/null
+++ b/.github/workflows/deploy.yml
@@ -0,0 +1,52 @@
+name: Deploy Sphinx to GitHub Pages
+
+on:
+ push:
+ branches: [main]
+ pull_request:
+ branches: [main]
+ workflow_dispatch:
+
+permissions:
+ contents: read
+ pages: write
+ id-token: write
+
+concurrency:
+ group: "pages"
+ cancel-in-progress: false
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: actions/setup-python@v5
+ with:
+ python-version: '3.12'
+
+ - name: Install dependencies
+ run: pip install -r requirements.txt
+
+ - name: Build Sphinx
+ run: sphinx-build -b html docs/source _site
+
+ - name: Add CNAME for custom domain
+ run: echo "docs.cryptnox.com" > _site/CNAME
+
+ - uses: actions/upload-pages-artifact@v3
+ with:
+ path: _site
+
+ deploy:
+ # Only deploy on push to main or manual trigger — not on PR builds
+ if: github.event_name == 'push' || github.event_name == 'workflow_dispatch'
+ environment:
+ name: github-pages
+ url: ${{ steps.deployment.outputs.page_url }}
+ runs-on: ubuntu-latest
+ needs: build
+ steps:
+ - id: deployment
+ uses: actions/deploy-pages@v4
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b8887a7
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+docs/build/
+*.swp
+__pycache__/
+*.pyc
\ No newline at end of file
diff --git a/docs/Makefile b/docs/Makefile
new file mode 100644
index 0000000..26c0cd6
--- /dev/null
+++ b/docs/Makefile
@@ -0,0 +1,12 @@
+SPHINXOPTS ?=
+SPHINXBUILD ?= sphinx-build
+SOURCEDIR = source
+BUILDDIR = _build
+
+help:
+ @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
+
+.PHONY: help Makefile
+
+%: Makefile
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
diff --git a/docs/source/_static/custom.css b/docs/source/_static/custom.css
new file mode 100644
index 0000000..2e25140
--- /dev/null
+++ b/docs/source/_static/custom.css
@@ -0,0 +1,337 @@
+/* ── Reset ───────────────────────────────────────────────────────────── */
+*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
+
+:root {
+ --bg: #111827;
+ --bg-card: #1E2133;
+ --bg-card-hover: #263046;
+ --text: #F8FAFC;
+ --text-muted: #94A3B8;
+ --accent: #06B6D4;
+ --accent-hover: #0891B2;
+ --border: #374151;
+ --indigo: #6366F1;
+}
+
+/* ── Base ────────────────────────────────────────────────────────────── */
+html, body {
+ background: var(--bg);
+ color: var(--text);
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, sans-serif;
+ min-height: 100vh;
+ display: flex;
+ flex-direction: column;
+}
+
+/* ── Sphinx basic theme layout overrides ─────────────────────────────── */
+div.document {
+ max-width: 1100px;
+ margin: 0 auto;
+ padding: 2.5rem 2rem 4rem;
+ width: 100%;
+ flex: 1;
+}
+
+div.documentwrapper {
+ width: 100%;
+ float: none;
+}
+
+div.bodywrapper {
+ margin: 0;
+}
+
+div.body {
+ background: transparent;
+ color: var(--text);
+ padding: 0;
+ min-width: unset;
+ max-width: unset;
+ font-size: 1rem;
+}
+
+/* Hide sidebar and prev/next footer generated by basic theme */
+div.sphinxsidebar,
+div.sphinxsidebarwrapper,
+div.related,
+div.footer { display: none; }
+
+/* ── Page title (h1) ─────────────────────────────────────────────────── */
+/* Hide Sphinx heading anchor symbols */
+a.headerlink { display: none; }
+
+div.body h1 {
+ font-size: 1.5rem;
+ font-weight: 700;
+ letter-spacing: -0.02em;
+ color: var(--text);
+ border-bottom: none;
+ padding-bottom: 0;
+ margin-bottom: 2rem;
+}
+
+/* ── Cards grid ──────────────────────────────────────────────────────── */
+
+/* The top-level section becomes the grid container */
+#cryptnox-product-documentation {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 1.5rem;
+}
+
+/* Title, toctree, and hr span full width and sit outside the card grid */
+#cryptnox-product-documentation > h1,
+#cryptnox-product-documentation > .toctree-wrapper {
+ grid-column: 1 / -1;
+}
+
+/* Hide RST transition rulers and toctree block */
+#cryptnox-product-documentation > hr,
+#cryptnox-product-documentation > .toctree-wrapper {
+ display: none;
+}
+
+/* ── Product cards ───────────────────────────────────────────────────── */
+#cryptnox-hardware-wallet,
+#cryptnox-cli,
+#cryptnox-sdk-for-python {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: 12px;
+ padding: 2rem;
+ display: flex;
+ flex-direction: column;
+ gap: 0.75rem;
+ position: relative;
+ overflow: hidden;
+ transition: border-color 0.2s, background 0.2s, transform 0.2s;
+}
+
+/* ── Card icon ───────────────────────────────────────────────────────── */
+.card-icon {
+ width: 44px;
+ height: 44px;
+ background: rgba(6, 182, 212, 0.1);
+ border: 1px solid rgba(6, 182, 212, 0.25);
+ border-radius: 10px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: var(--accent);
+ flex-shrink: 0;
+ margin-bottom: 0.25rem;
+}
+
+.card-icon svg {
+ width: 22px;
+ height: 22px;
+ stroke: var(--accent);
+}
+
+/* Top accent line on hover */
+#cryptnox-hardware-wallet::before,
+#cryptnox-cli::before,
+#cryptnox-sdk-for-python::before {
+ content: '';
+ position: absolute;
+ top: 0; left: 0; right: 0;
+ height: 2px;
+ background: linear-gradient(90deg, var(--accent), var(--indigo));
+ opacity: 0;
+ transition: opacity 0.2s;
+}
+
+#cryptnox-hardware-wallet:hover,
+#cryptnox-cli:hover,
+#cryptnox-sdk-for-python:hover {
+ border-color: var(--accent);
+ background: var(--bg-card-hover);
+ transform: translateY(-2px);
+}
+
+#cryptnox-hardware-wallet:hover::before,
+#cryptnox-cli:hover::before,
+#cryptnox-sdk-for-python:hover::before {
+ opacity: 1;
+}
+
+/* ── Card heading (h2) ───────────────────────────────────────────────── */
+div.body h2 {
+ font-size: 1.15rem;
+ font-weight: 700;
+ letter-spacing: -0.02em;
+ color: var(--text);
+ border-bottom: none;
+ padding-bottom: 0;
+ margin-bottom: 0.25rem;
+}
+
+/* ── Card description (p) ────────────────────────────────────────────── */
+div.body section p,
+div.body .section p {
+ color: var(--text-muted);
+ font-size: 0.9rem;
+ line-height: 1.65;
+ margin-bottom: 0;
+}
+
+/* ── Card link list ──────────────────────────────────────────────────── */
+div.body section ul,
+div.body .section ul {
+ list-style: none;
+ padding-left: 0;
+ margin-top: auto;
+ padding-top: 0.5rem;
+}
+
+div.body section ul li,
+div.body .section ul li {
+ margin: 0;
+}
+
+div.body section ul li p,
+div.body .section ul li p {
+ color: var(--text-muted);
+ margin: 0;
+}
+
+/* ── Links ───────────────────────────────────────────────────────────── */
+div.body a {
+ color: var(--accent);
+ text-decoration: none;
+ font-weight: 600;
+ transition: color 0.2s;
+}
+
+div.body a:hover {
+ color: var(--accent-hover);
+ text-decoration: none;
+}
+
+/* ── Other resources section ─────────────────────────────────────────── */
+#other-resources {
+ grid-column: 1 / -1;
+ background: transparent;
+ border: none;
+ border-top: 1px solid var(--border);
+ border-radius: 0;
+ padding: 1.5rem 0 0;
+ gap: 0.5rem;
+ transform: none !important;
+}
+
+#other-resources:hover {
+ border-color: var(--border);
+ background: transparent;
+ transform: none;
+}
+
+#other-resources::before { display: none; }
+
+#other-resources h2 {
+ font-size: 0.875rem !important;
+ font-weight: 600;
+ color: var(--text-muted) !important;
+ text-transform: uppercase;
+ letter-spacing: 0.08em;
+ margin-bottom: 0.75rem;
+}
+
+#other-resources ul {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 1.5rem;
+ padding-top: 0;
+ margin-top: 0;
+}
+
+#other-resources ul li p {
+ margin: 0;
+}
+
+#other-resources a {
+ color: var(--text-muted) !important;
+ font-size: 0.875rem;
+ font-weight: 400 !important;
+}
+
+#other-resources a:hover {
+ color: var(--accent) !important;
+}
+
+/* ── Custom Header ───────────────────────────────────────────────────── */
+.cnx-header {
+ border-bottom: 1px solid var(--border);
+ padding: 1.25rem 2rem;
+ display: flex;
+ align-items: center;
+ background: var(--bg);
+}
+
+.cryptnox-logo {
+ display: flex;
+ align-items: center;
+ text-decoration: none;
+}
+
+.cryptnox-logo svg {
+ height: 32px;
+ width: auto;
+}
+
+.cnx-header nav {
+ margin-left: auto;
+ display: flex;
+ gap: 1.5rem;
+}
+
+.cnx-header nav a {
+ color: var(--text-muted);
+ text-decoration: none;
+ font-size: 0.875rem;
+ font-weight: 400;
+ transition: color 0.2s;
+}
+
+.cnx-header nav a:hover {
+ color: var(--accent);
+}
+
+/* ── Custom Footer ───────────────────────────────────────────────────── */
+.cnx-footer {
+ border-top: 1px solid var(--border);
+ padding: 1.25rem 2rem;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ background: var(--bg);
+ margin-top: auto;
+}
+
+.footer-address {
+ display: flex;
+ align-items: center;
+ gap: 0.75rem;
+}
+
+.footer-copyright {
+ color: var(--text-muted);
+ font-size: 0.8rem;
+}
+
+.footer-flag img {
+ width: 24px;
+ height: 24px;
+ display: block;
+ flex-shrink: 0;
+}
+
+/* ── Responsive ──────────────────────────────────────────────────────── */
+@media (max-width: 860px) {
+ #cryptnox-product-documentation {
+ grid-template-columns: 1fr;
+ }
+ .cnx-header nav { display: none; }
+ .cnx-footer { flex-direction: column; align-items: flex-start; gap: 0.5rem; }
+ div.document { padding: 1.5rem 1rem 3rem; }
+}
diff --git a/docs/source/_templates/layout.html b/docs/source/_templates/layout.html
new file mode 100644
index 0000000..07136e2
--- /dev/null
+++ b/docs/source/_templates/layout.html
@@ -0,0 +1,123 @@
+{% extends "!layout.html" %}
+
+{# ── SEO / head ────────────────────────────────────────────────────── #}
+{% block extrahead %}
+{{ super() }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% endblock %}
+
+{# ── Custom header ─────────────────────────────────────────────────── #}
+{% block header %}
+