From 924dbe1441e2a0a32784dc688853520a8b79ad88 Mon Sep 17 00:00:00 2001 From: "Dr. Awesome Doge" Date: Sat, 13 Dec 2025 00:50:15 +0800 Subject: [PATCH 01/13] =?UTF-8?q?=E5=8A=A0=E5=85=A5=20tailwind.config.js?= =?UTF-8?q?=20=E8=A8=AD=E5=AE=9A=E6=AA=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tailwind.config.js | 192 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 tailwind.config.js diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..c5b2ee1 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,192 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + './_includes/**/*.html', + './_layouts/**/*.html', + './_posts/**/*.{html,md}', + './_products/**/*.{html,md}', + './markdown/**/*.{html,md}', + './blog/**/*.html', + './*.{html,md}', + ], + darkMode: 'class', + theme: { + extend: { + // Cypherpunk 色彩系統 + colors: { + // 主色 - 柔和駭客綠(降低飽和度,更護眼) + 'cp-green': { + DEFAULT: '#4ade80', + 50: '#f0fdf4', + 100: '#dcfce7', + 200: '#bbf7d0', + 300: '#86efac', + 400: '#4ade80', + 500: '#22c55e', + 600: '#16a34a', + 700: '#15803d', + 800: '#166534', + 900: '#14532d', + }, + // 背景色系 + 'cp-dark': { + DEFAULT: '#0a0a0a', + 50: '#1a1a1a', + 100: '#0d1117', + 200: '#161b22', + 300: '#21262d', + 400: '#30363d', + 500: '#484f58', + 600: '#6e7681', + 700: '#8b949e', + 800: '#c9d1d9', + 900: '#f0f6fc', + }, + // 強調色 + 'cp-accent': { + red: '#ff6b6b', + orange: '#ffa500', + cyan: '#00ffff', + purple: '#bf00ff', + }, + }, + // 字體 + fontFamily: { + 'mono': ['JetBrains Mono', 'Fira Code', 'Monaco', 'Consolas', 'monospace'], + 'sans': ['Inter', 'Noto Sans TC', 'system-ui', 'sans-serif'], + }, + // 動畫 + animation: { + 'matrix-rain': 'matrix-rain 20s linear infinite', + 'typewriter': 'typewriter 3s steps(40) 1s forwards', + 'cursor-blink': 'cursor-blink 1s step-end infinite', + 'glow': 'glow 2s ease-in-out infinite alternate', + 'scanline': 'scanline 8s linear infinite', + 'flicker': 'flicker 0.15s infinite', + }, + keyframes: { + 'matrix-rain': { + '0%': { transform: 'translateY(-100%)' }, + '100%': { transform: 'translateY(100%)' }, + }, + 'typewriter': { + 'from': { width: '0' }, + 'to': { width: '100%' }, + }, + 'cursor-blink': { + '0%, 100%': { opacity: '1' }, + '50%': { opacity: '0' }, + }, + 'glow': { + 'from': { + textShadow: '0 0 4px rgba(74, 222, 128, 0.4)', + }, + 'to': { + textShadow: '0 0 8px rgba(74, 222, 128, 0.5)', + }, + }, + 'scanline': { + '0%': { transform: 'translateY(0)' }, + '100%': { transform: 'translateY(100vh)' }, + }, + 'flicker': { + '0%': { opacity: '0.97' }, + '50%': { opacity: '1' }, + '100%': { opacity: '0.98' }, + }, + }, + // 陰影 - 柔和光暈 + boxShadow: { + 'glow-green': '0 0 6px rgba(74, 222, 128, 0.3), 0 0 12px rgba(74, 222, 128, 0.15)', + 'glow-green-lg': '0 0 10px rgba(74, 222, 128, 0.4), 0 0 20px rgba(74, 222, 128, 0.2)', + }, + // 背景 + backgroundImage: { + 'grid-pattern': `linear-gradient(rgba(74, 222, 128, 0.03) 1px, transparent 1px), + linear-gradient(90deg, rgba(74, 222, 128, 0.03) 1px, transparent 1px)`, + 'gradient-radial': 'radial-gradient(ellipse at center, var(--tw-gradient-stops))', + }, + backgroundSize: { + 'grid': '50px 50px', + }, + // 排版 + typography: (theme) => ({ + DEFAULT: { + css: { + color: theme('colors.cp-dark.800'), + a: { + color: theme('colors.cp-green.500'), + '&:hover': { + color: theme('colors.cp-green.400'), + }, + }, + 'code::before': { + content: '""', + }, + 'code::after': { + content: '""', + }, + }, + }, + // 深色模式排版 + invert: { + css: { + color: theme('colors.cp-dark.800'), + a: { + color: theme('colors.cp-green.500'), + '&:hover': { + color: theme('colors.cp-green.400'), + textShadow: '0 0 6px rgba(74, 222, 128, 0.3)', + }, + }, + strong: { + color: theme('colors.cp-green.400'), + }, + h1: { + color: theme('colors.cp-green.500'), + }, + h2: { + color: theme('colors.cp-green.500'), + }, + h3: { + color: theme('colors.cp-green.400'), + }, + h4: { + color: theme('colors.cp-green.400'), + }, + code: { + color: theme('colors.cp-green.400'), + backgroundColor: theme('colors.cp-dark.200'), + padding: '0.25rem 0.5rem', + borderRadius: '0.25rem', + }, + 'pre code': { + backgroundColor: 'transparent', + padding: '0', + }, + pre: { + backgroundColor: theme('colors.cp-dark.100'), + border: `1px solid ${theme('colors.cp-dark.400')}`, + }, + blockquote: { + borderLeftColor: theme('colors.cp-green.600'), + color: theme('colors.cp-dark.700'), + }, + hr: { + borderColor: theme('colors.cp-dark.400'), + }, + 'ul > li::marker': { + color: theme('colors.cp-green.500'), + }, + 'ol > li::marker': { + color: theme('colors.cp-green.500'), + }, + }, + }, + }), + }, + }, + plugins: [ + require('@tailwindcss/typography'), + ], +} From 92711d34c7417e5250b1a4a34f43dc82ba9b893b Mon Sep 17 00:00:00 2001 From: "Dr. Awesome Doge" Date: Sat, 13 Dec 2025 00:51:38 +0800 Subject: [PATCH 02/13] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20GitHub=20Actions=20w?= =?UTF-8?q?orkflow=20=E6=94=AF=E6=8F=B4=20Tailwind=20CSS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/run.yml | 154 +++++++++++++++++++++++++++++++++----- 1 file changed, 136 insertions(+), 18 deletions(-) diff --git a/.github/workflows/run.yml b/.github/workflows/run.yml index 2b55420..8dd5ffc 100644 --- a/.github/workflows/run.yml +++ b/.github/workflows/run.yml @@ -1,33 +1,151 @@ -name: Build and deploy Jekyll site to GitHub Pages +name: Build and Deploy Cypherpunks Taiwan V2.0 on: push: branches: - master + pull_request: + branches: + - master + +# Sets permissions of the GITHUB_TOKEN +permissions: + contents: write + pages: write + id-token: write + +# Allow only one concurrent deployment +concurrency: + group: "pages" + cancel-in-progress: true jobs: - build-and-deploy: - runs-on: ubuntu-22.04 - permissions: - contents: write + build: + runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - name: Set up Ruby + - name: Checkout repository + uses: actions/checkout@v4 + + # Setup Node.js for Tailwind CSS + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'npm' + + - name: Install Node dependencies + run: npm ci || npm install + + - name: Build Tailwind CSS + run: npm run css:build + + # Setup Ruby for Jekyll + - name: Setup Ruby uses: ruby/setup-ruby@v1 with: - ruby-version: '3.0' + ruby-version: '3.2' bundler-cache: true - - name: Install dependencies + + - name: Install Ruby dependencies run: | - bundle config unset deployment - sudo gem install bundler:2.2.15 - bundle install - bundle add kramdown-parser-gfm - bundle install - - name: Build site + bundle config set --local path 'vendor/bundle' + bundle install --jobs 4 --retry 3 + + - name: Build Jekyll site run: bundle exec jekyll build + env: + JEKYLL_ENV: production + + - name: Build Pagefind search index + run: npx pagefind --site _site --output-path _site/pagefind + + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: ./_site + + deploy: + if: github.ref == 'refs/heads/master' + needs: build + runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: - name: Deploy to GitHub Pages - uses: peaceiris/actions-gh-pages@v3 + id: deployment + uses: actions/deploy-pages@v4 + + # Quality Checks (run on PRs) + quality-check: + if: github.event_name == 'pull_request' + needs: build + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Download artifact + uses: actions/download-artifact@v4 with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./_site \ No newline at end of file + name: github-pages + path: _site + + - name: Extract artifact + run: | + cd _site + tar -xvf artifact.tar + rm artifact.tar + + # Link Checker + - name: Check links + uses: lycheeverse/lychee-action@v1 + with: + args: --verbose --no-progress --accept 999 './_site/**/*.html' + fail: false + + # HTML Validation + - name: Setup Node.js for html-validate + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Install html-validate + run: npm install -g html-validate + + - name: Validate HTML + run: | + html-validate --config .htmlvalidate.json "_site/**/*.html" || true + continue-on-error: true + + # Accessibility Check + - name: Install pa11y + run: npm install -g pa11y-ci + + - name: Run accessibility check + run: | + pa11y-ci --config .pa11yci.json || true + continue-on-error: true + + # Image Compression (run on PRs with image changes) + compress-images: + if: github.event_name == 'pull_request' + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Compress Images + id: compress + uses: calibreapp/image-actions@main + with: + githubToken: ${{ secrets.GITHUB_TOKEN }} + compressOnly: true + ignorePaths: 'node_modules/**,vendor/**,_site/**' + continue-on-error: true + + - name: Create image compression summary + if: steps.compress.outputs.markdown != '' + run: | + echo "## Image Compression Results" >> $GITHUB_STEP_SUMMARY + echo "${{ steps.compress.outputs.markdown }}" >> $GITHUB_STEP_SUMMARY From 51f11231f78f2a9c6b2143bf8e4f8251ef3a4b75 Mon Sep 17 00:00:00 2001 From: "Dr. Awesome Doge" Date: Sat, 13 Dec 2025 00:53:26 +0800 Subject: [PATCH 03/13] =?UTF-8?q?=E8=A7=B8=E7=99=BC=E9=87=8D=E6=96=B0?= =?UTF-8?q?=E9=83=A8=E7=BD=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From 0f1b0f570ed547f1d34fc4484a52f1476008ee98 Mon Sep 17 00:00:00 2001 From: "Dr. Awesome Doge" Date: Sat, 13 Dec 2025 00:55:42 +0800 Subject: [PATCH 04/13] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20package.json=20?= =?UTF-8?q?=E5=92=8C=20lock=20=E6=AA=94=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 1066 ++++++++++++++++++++++++++++++++++++++++++++- package.json | 33 +- 2 files changed, 1080 insertions(+), 19 deletions(-) diff --git a/package-lock.json b/package-lock.json index 420701a..4893e2f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,1063 @@ { - "name": "bulma-clean-theme", - "version": "1.0.0", - "lockfileVersion": 1, + "name": "cypherpunks-taiwan", + "version": "2.0.0", + "lockfileVersion": 3, "requires": true, - "dependencies": { - "bulma": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/bulma/-/bulma-0.7.4.tgz", - "integrity": "sha512-krG2rP6eAX1WE0sf6O0SC/FUVSOBX4m1PBC2+GKLpb2pX0qanaDqcv9U2nu75egFrsHkI0zdWYuk/oGwoszVWg==" + "packages": { + "": { + "name": "cypherpunks-taiwan", + "version": "2.0.0", + "license": "MIT", + "devDependencies": { + "@tailwindcss/typography": "^0.5.10", + "tailwindcss": "^3.4.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@tailwindcss/typography": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.19.tgz", + "integrity": "sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "6.0.10" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nested/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sucrase": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz", + "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.7", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" } } } diff --git a/package.json b/package.json index 562db92..1ea74fb 100644 --- a/package.json +++ b/package.json @@ -1,15 +1,26 @@ { - "name": "bulma-clean-theme", - "description": "This is a clean and simple Jekyll Theme built with the Bulma framework, providing a modern looking site to start with.", - "version": "1.0.0", - "main": "index.js", - "devDependencies": {}, + "name": "cypherpunks-taiwan", + "version": "2.0.0", + "description": "Cypherpunks Taiwan - Cryptography makes freedom and privacy great again", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "css:build": "tailwindcss -i ./assets/css/main.css -o ./assets/css/app.css --minify", + "css:watch": "tailwindcss -i ./assets/css/main.css -o ./assets/css/app.css --watch", + "search:index": "pagefind --site _site --output-path _site/pagefind", + "build": "npm run css:build", + "postbuild": "npm run search:index", + "dev": "npm run css:watch" }, - "author": "chrisrhymes", - "license": "MIT", - "dependencies": { - "bulma": "^0.7.4" - } + "devDependencies": { + "tailwindcss": "^3.4.0", + "@tailwindcss/typography": "^0.5.10", + "pagefind": "^1.0.0" + }, + "keywords": [ + "cypherpunk", + "bitcoin", + "privacy", + "cryptography" + ], + "author": "Cypherpunks Taiwan", + "license": "MIT" } From 8cffa2ddea328203b0ef0943530a38fbb69eb1f0 Mon Sep 17 00:00:00 2001 From: "Dr. Awesome Doge" Date: Sat, 13 Dec 2025 00:57:23 +0800 Subject: [PATCH 05/13] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E7=BC=BA=E5=B0=91?= =?UTF-8?q?=E7=9A=84=E6=AA=94=E6=A1=88=EF=BC=9Aindex.html=E3=80=81includes?= =?UTF-8?q?=E3=80=81=E5=9C=96=E7=89=87=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .htmlvalidate.json | 22 ++ .pa11yci.json | 18 ++ _includes/search-modal.html | 110 +++++++++ _includes/sidebar.html | 70 ++++++ _includes/toc.html | 101 ++++++++ img/bip-guide.svg | 48 ++++ img/bitcoin-dev-guide.svg | 39 +++ img/learn-me-bitcoin.svg | 57 +++++ img/schnorr-taproot.svg | 48 ++++ index.html | 459 ++++++++++++++++++++++++++++++++++++ 10 files changed, 972 insertions(+) create mode 100644 .htmlvalidate.json create mode 100644 .pa11yci.json create mode 100644 _includes/search-modal.html create mode 100644 _includes/sidebar.html create mode 100644 _includes/toc.html create mode 100644 img/bip-guide.svg create mode 100644 img/bitcoin-dev-guide.svg create mode 100644 img/learn-me-bitcoin.svg create mode 100644 img/schnorr-taproot.svg create mode 100644 index.html diff --git a/.htmlvalidate.json b/.htmlvalidate.json new file mode 100644 index 0000000..953c93f --- /dev/null +++ b/.htmlvalidate.json @@ -0,0 +1,22 @@ +{ + "extends": ["html-validate:recommended"], + "rules": { + "no-trailing-whitespace": "off", + "void-style": "off", + "prefer-native-element": "off", + "no-inline-style": "off", + "require-sri": "off", + "script-type": "off", + "attribute-allowed-values": "off", + "element-permitted-content": "warn", + "no-unknown-elements": "warn", + "wcag/h30": "warn", + "wcag/h32": "warn", + "wcag/h36": "warn", + "wcag/h37": "warn", + "wcag/h67": "warn" + }, + "transform": { + "^.*\\.html$": "html-validate:plain" + } +} diff --git a/.pa11yci.json b/.pa11yci.json new file mode 100644 index 0000000..e4a8134 --- /dev/null +++ b/.pa11yci.json @@ -0,0 +1,18 @@ +{ + "defaults": { + "timeout": 30000, + "wait": 500, + "standard": "WCAG2AA", + "runners": ["axe"], + "chromeLaunchConfig": { + "args": ["--no-sandbox", "--disable-setuid-sandbox"] + } + }, + "urls": [ + "http://localhost:4000/", + "http://localhost:4000/blog/", + "http://localhost:4000/tags/", + "http://localhost:4000/categories/", + "http://localhost:4000/archive/" + ] +} diff --git a/_includes/search-modal.html b/_includes/search-modal.html new file mode 100644 index 0000000..c1fdf83 --- /dev/null +++ b/_includes/search-modal.html @@ -0,0 +1,110 @@ + + + + + diff --git a/_includes/sidebar.html b/_includes/sidebar.html new file mode 100644 index 0000000..b1e621a --- /dev/null +++ b/_includes/sidebar.html @@ -0,0 +1,70 @@ + + diff --git a/_includes/toc.html b/_includes/toc.html new file mode 100644 index 0000000..5d52d4e --- /dev/null +++ b/_includes/toc.html @@ -0,0 +1,101 @@ + + + + diff --git a/img/bip-guide.svg b/img/bip-guide.svg new file mode 100644 index 0000000..6526f27 --- /dev/null +++ b/img/bip-guide.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + BIP 32 + HD Wallets + + + + BIP 39 + Mnemonic + + + + BIP 141 + SegWit + + + + BIP 340 + Schnorr + + + + BIP 341 + Taproot + + + + BIP 342 + Tapscript + + + + 中文導讀 + + + BIP 精選導讀 + diff --git a/img/bitcoin-dev-guide.svg b/img/bitcoin-dev-guide.svg new file mode 100644 index 0000000..2d46b06 --- /dev/null +++ b/img/bitcoin-dev-guide.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + developer.bitcoin.org + + + $ bitcoin-cli + getblockchaininfo + { + "chain" + : + "main" + "blocks" + : + 820000 + "headers" + : + 820000 + } + + + BITCOIN + Developer Guide + diff --git a/img/learn-me-bitcoin.svg b/img/learn-me-bitcoin.svg new file mode 100644 index 0000000..ee48993 --- /dev/null +++ b/img/learn-me-bitcoin.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + Block N-2 + #820001 + + + + + + + + Block N-1 + #820002 + + + + + + + + Block N + #820003 + + + + Transaction + + + + Input + + + + + + + Output + + + + 💡 + + + Learn Me a Bitcoin + Visual Bitcoin Education + diff --git a/img/schnorr-taproot.svg b/img/schnorr-taproot.svg new file mode 100644 index 0000000..7f7f9b3 --- /dev/null +++ b/img/schnorr-taproot.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + Root + + + + + + + + Key + + + + Script + + + + + + + + + + + 2-of-3 + HTLC + Time + + + s = k + e·x + Schnorr Signature + + + Schnorr + & Taproot + diff --git a/index.html b/index.html new file mode 100644 index 0000000..58f3e00 --- /dev/null +++ b/index.html @@ -0,0 +1,459 @@ +--- +title: Cypherpunks Taiwan +subtitle: 密碼學使自由和隱私再次偉大 +layout: default +hide_hero: true +show_sidebar: false +description: 密碼學使自由和隱私再次偉大。Cryptography makes freedom and privacy great again. +--- + + +
+ +
+ + +
+ + +
+ +
+ + +
+ + TAIWAN + +
+ + +
+

+ _ +

+

+ _ +

+
+ + +
+ + + + + + + +
+
+
+ 0 +
+
文章
+
+
+
+
+ 0 +
+
書籍
+
+
+
+
+ 0 +
+
成立
+
+
+
+ +
+ + +
+ + + +
+
+ + +
+
+

+ // Interactive Terminal +

+ +
+ +
+
+ + + +
+ bitcoin-cli — cypherpunks@taiwan +
+ + +
+
+ Welcome to Cypherpunks Taiwan Terminal v2.2 +
+
+ Type help to see available commands. +
+
+ ─────────────────────────────────────────── +
+
+ + +
+ bitcoin-cli> +
+ + +
+
+
+ +

+ 試試輸入: help, about, btc, manifesto +

+
+
+ + +
+
+

+ // Cypherpunk 歷史 +

+ +
+ +
+ + +
+
+
+ 1992 +

Cypherpunks 郵件列表成立

+

Eric Hughes, Timothy C. May, John Gilmore 創立了 Cypherpunks 郵件列表,開啟了密碼龐克運動。

+
+
+ +
+
+
+ 1993 +

A Cypherpunk's Manifesto

+

Eric Hughes 發表《密碼龐克宣言》,宣告「隱私對於電子時代的開放社會是必要的」。

+
+
+ +
+
+
+ 1997 +

HashCash 提出

+

Adam Back 提出 HashCash,工作量證明 (PoW) 概念首次出現,後成為比特幣的基礎。

+
+
+ +
+
+
+ 1998 +

B-Money & Bit Gold

+

Wei Dai 提出 b-money,Nick Szabo 提出 Bit Gold,這些概念深深影響了比特幣的設計。

+
+
+ +
+
+
+ 2008 +

Bitcoin 白皮書發布

+

Satoshi Nakamoto 發布《Bitcoin: A Peer-to-Peer Electronic Cash System》,密碼龐克的夢想開始實現。

+
+
+ +
+
+
+ 2009 +

Bitcoin 創世區塊

+

比特幣創世區塊被挖出,區塊包含訊息:「The Times 03/Jan/2009 Chancellor on brink of second bailout for banks」

+
+
+ +
+
+
+ 2019 +

Cypherpunks Taiwan 成立

+

致力於推廣密碼學與隱私技術,連結全球 Cypherpunk 社群與台灣開發者。

+
+
+
+
+
+ + +
+
+
+

+ // Cypherpunk's Manifesto +

+

Eric Hughes, 1993

+
+ +
+
"
+

+ Privacy is necessary for an open society in the electronic age. Privacy is not secrecy. + A private matter is something one doesn't want the whole world to know, but a secret matter + is something one doesn't want anybody to know. Privacy is the power to selectively reveal + oneself to the world. +

+
+ — A Cypherpunk's Manifesto +
+
+ +
+

+ "Cypherpunks write code." +

+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+
+

+ // 合作夥伴 +

+ + +
+
+ + + +
+
+

+ // 加入我們 +

+ + +
+
From 7c6392b192e81edbfe46b594ec841dd5e71c2c30 Mon Sep 17 00:00:00 2001 From: "Dr. Awesome Doge" Date: Sat, 13 Dec 2025 01:00:30 +0800 Subject: [PATCH 06/13] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E6=89=80=E6=9C=89?= =?UTF-8?q?=E8=A8=AD=E5=AE=9A=E6=AA=94=E5=92=8C=20layouts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Gemfile | 24 +- Gemfile.lock | 268 ++++++++++++++++----- _data/navigation.yml | 58 +++-- _includes/admonition.html | 66 +++++ _includes/comments.html | 52 ++++ _includes/footer.html | 160 +++++++++++-- _includes/head.html | 237 +++++++++++++++++- _includes/header.html | 151 +++++++++--- _includes/hero.html | 96 +++++++- _includes/image.html | 74 ++++++ _includes/share-buttons.html | 75 ++++++ _layouts/blog.html | 143 ++++++++++- _layouts/page.html | 22 +- _layouts/product-category.html | 424 ++++++--------------------------- 14 files changed, 1340 insertions(+), 510 deletions(-) create mode 100644 _includes/admonition.html create mode 100644 _includes/comments.html create mode 100644 _includes/image.html create mode 100644 _includes/share-buttons.html diff --git a/Gemfile b/Gemfile index 9313e6c..a7644a9 100644 --- a/Gemfile +++ b/Gemfile @@ -1,12 +1,26 @@ # frozen_string_literal: true source "https://rubygems.org" -gemspec +# Jekyll 4.x +gem "jekyll", "~> 4.3" + +# Jekyll plugins group :jekyll_plugins do - gem "jekyll-feed", "~> 0.6" - gem "jekyll-sitemap" - gem "jekyll-paginate" - gem "jekyll-seo-tag" + gem "jekyll-feed", "~> 0.17" + gem "jekyll-sitemap", "~> 1.4" + gem "jekyll-paginate", "~> 1.1" + gem "jekyll-seo-tag", "~> 2.8" + gem "kramdown-parser-gfm", "~> 1.1" +end + +# Performance +gem "webrick", "~> 1.8" # Required for Ruby 3.0+ + +# Windows specific +platforms :mingw, :x64_mingw, :mswin, :jruby do + gem "tzinfo", ">= 1", "< 3" + gem "tzinfo-data" end +gem "wdm", "~> 0.1", :platforms => [:mingw, :x64_mingw, :mswin] diff --git a/Gemfile.lock b/Gemfile.lock index 77c7103..6c9d3cf 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,89 +1,249 @@ -PATH - remote: . - specs: - bulma-clean-theme (0.5.7) - jekyll (~> 3.8) - jekyll-feed (~> 0.11) - jekyll-paginate (~> 1.1) - jekyll-seo-tag (~> 2.5) - jekyll-sitemap (~> 1.2) - kramdown (>= 1.17, < 3.0) - rouge (~> 3.3) - GEM remote: https://rubygems.org/ specs: - addressable (2.8.1) - public_suffix (>= 2.0.2, < 6.0) + addressable (2.8.8) + public_suffix (>= 2.0.2, < 8.0) + base64 (0.3.0) + bigdecimal (3.3.1) colorator (1.1.0) - concurrent-ruby (1.1.8) - em-websocket (0.5.2) + concurrent-ruby (1.3.5) + csv (3.3.5) + em-websocket (0.5.3) eventmachine (>= 0.12.9) - http_parser.rb (~> 0.6.0) + http_parser.rb (~> 0) eventmachine (1.2.7) - ffi (1.15.0) + ffi (1.17.2) + ffi (1.17.2-aarch64-linux-gnu) + ffi (1.17.2-aarch64-linux-musl) + ffi (1.17.2-arm-linux-gnu) + ffi (1.17.2-arm-linux-musl) + ffi (1.17.2-arm64-darwin) + ffi (1.17.2-x86-linux-gnu) + ffi (1.17.2-x86-linux-musl) + ffi (1.17.2-x86_64-darwin) + ffi (1.17.2-x86_64-linux-gnu) + ffi (1.17.2-x86_64-linux-musl) forwardable-extended (2.6.0) - http_parser.rb (0.6.0) - i18n (0.9.5) + google-protobuf (4.33.2) + bigdecimal + rake (>= 13) + google-protobuf (4.33.2-aarch64-linux-gnu) + bigdecimal + rake (>= 13) + google-protobuf (4.33.2-aarch64-linux-musl) + bigdecimal + rake (>= 13) + google-protobuf (4.33.2-arm64-darwin) + bigdecimal + rake (>= 13) + google-protobuf (4.33.2-x86-linux-gnu) + bigdecimal + rake (>= 13) + google-protobuf (4.33.2-x86-linux-musl) + bigdecimal + rake (>= 13) + google-protobuf (4.33.2-x86_64-darwin) + bigdecimal + rake (>= 13) + google-protobuf (4.33.2-x86_64-linux-gnu) + bigdecimal + rake (>= 13) + google-protobuf (4.33.2-x86_64-linux-musl) + bigdecimal + rake (>= 13) + http_parser.rb (0.8.0) + i18n (1.14.7) concurrent-ruby (~> 1.0) - jekyll (3.9.1) + jekyll (4.4.1) addressable (~> 2.4) + base64 (~> 0.2) colorator (~> 1.0) + csv (~> 3.0) em-websocket (~> 0.5) - i18n (~> 0.7) - jekyll-sass-converter (~> 1.0) + i18n (~> 1.0) + jekyll-sass-converter (>= 2.0, < 4.0) jekyll-watch (~> 2.0) - kramdown (>= 1.17, < 3) + json (~> 2.6) + kramdown (~> 2.3, >= 2.3.1) + kramdown-parser-gfm (~> 1.0) liquid (~> 4.0) - mercenary (~> 0.3.3) + mercenary (~> 0.3, >= 0.3.6) pathutil (~> 0.9) - rouge (>= 1.7, < 4) + rouge (>= 3.0, < 5.0) safe_yaml (~> 1.0) - jekyll-feed (0.15.1) + terminal-table (>= 1.8, < 4.0) + webrick (~> 1.7) + jekyll-feed (0.17.0) jekyll (>= 3.7, < 5.0) jekyll-paginate (1.1.0) - jekyll-sass-converter (1.5.2) - sass (~> 3.4) - jekyll-seo-tag (2.7.1) + jekyll-sass-converter (3.1.0) + sass-embedded (~> 1.75) + jekyll-seo-tag (2.8.0) jekyll (>= 3.8, < 5.0) jekyll-sitemap (1.4.0) jekyll (>= 3.7, < 5.0) jekyll-watch (2.2.1) listen (~> 3.0) - kramdown (2.4.0) - rexml - liquid (4.0.3) - listen (3.5.1) + json (2.18.0) + kramdown (2.5.1) + rexml (>= 3.3.9) + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) + liquid (4.0.4) + listen (3.9.0) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) - mercenary (0.3.6) + mercenary (0.4.0) pathutil (0.16.2) forwardable-extended (~> 2.6) - public_suffix (5.0.0) - rake (12.3.3) - rb-fsevent (0.10.4) - rb-inotify (0.10.1) + public_suffix (7.0.0) + rake (13.3.1) + rb-fsevent (0.11.2) + rb-inotify (0.11.1) ffi (~> 1.0) - rexml (3.2.5) - rouge (3.26.0) + rexml (3.4.4) + rouge (4.6.1) safe_yaml (1.0.5) - sass (3.7.4) - sass-listen (~> 4.0.0) - sass-listen (4.0.0) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) + sass-embedded (1.96.0) + google-protobuf (~> 4.31) + rake (>= 13) + sass-embedded (1.96.0-aarch64-linux-android) + google-protobuf (~> 4.31) + sass-embedded (1.96.0-aarch64-linux-gnu) + google-protobuf (~> 4.31) + sass-embedded (1.96.0-aarch64-linux-musl) + google-protobuf (~> 4.31) + sass-embedded (1.96.0-arm-linux-androideabi) + google-protobuf (~> 4.31) + sass-embedded (1.96.0-arm-linux-gnueabihf) + google-protobuf (~> 4.31) + sass-embedded (1.96.0-arm-linux-musleabihf) + google-protobuf (~> 4.31) + sass-embedded (1.96.0-arm64-darwin) + google-protobuf (~> 4.31) + sass-embedded (1.96.0-riscv64-linux-android) + google-protobuf (~> 4.31) + sass-embedded (1.96.0-riscv64-linux-gnu) + google-protobuf (~> 4.31) + sass-embedded (1.96.0-riscv64-linux-musl) + google-protobuf (~> 4.31) + sass-embedded (1.96.0-x86_64-darwin) + google-protobuf (~> 4.31) + sass-embedded (1.96.0-x86_64-linux-android) + google-protobuf (~> 4.31) + sass-embedded (1.96.0-x86_64-linux-gnu) + google-protobuf (~> 4.31) + sass-embedded (1.96.0-x86_64-linux-musl) + google-protobuf (~> 4.31) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) + unicode-display_width (2.6.0) + webrick (1.9.2) PLATFORMS + aarch64-linux-android + aarch64-linux-gnu + aarch64-linux-musl + arm-linux-androideabi + arm-linux-gnu + arm-linux-gnueabihf + arm-linux-musl + arm-linux-musleabihf + arm64-darwin + riscv64-linux-android + riscv64-linux-gnu + riscv64-linux-musl ruby + x86-linux-gnu + x86-linux-musl + x86_64-darwin + x86_64-linux-android + x86_64-linux-gnu + x86_64-linux-musl DEPENDENCIES - bulma-clean-theme! - bundler (~> 2.0) - jekyll-feed (~> 0.6) - jekyll-paginate - jekyll-seo-tag - jekyll-sitemap - rake (~> 12.0) + jekyll (~> 4.3) + jekyll-feed (~> 0.17) + jekyll-paginate (~> 1.1) + jekyll-seo-tag (~> 2.8) + jekyll-sitemap (~> 1.4) + kramdown-parser-gfm (~> 1.1) + tzinfo (>= 1, < 3) + tzinfo-data + wdm (~> 0.1) + webrick (~> 1.8) + +CHECKSUMS + addressable (2.8.8) sha256=7c13b8f9536cf6364c03b9d417c19986019e28f7c00ac8132da4eb0fe393b057 + base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b + bigdecimal (3.3.1) sha256=eaa01e228be54c4f9f53bf3cc34fe3d5e845c31963e7fcc5bedb05a4e7d52218 + colorator (1.1.0) sha256=e2f85daf57af47d740db2a32191d1bdfb0f6503a0dfbc8327d0c9154d5ddfc38 + concurrent-ruby (1.3.5) sha256=813b3e37aca6df2a21a3b9f1d497f8cbab24a2b94cab325bffe65ee0f6cbebc6 + csv (3.3.5) sha256=6e5134ac3383ef728b7f02725d9872934f523cb40b961479f69cf3afa6c8e73f + em-websocket (0.5.3) sha256=f56a92bde4e6cb879256d58ee31f124181f68f8887bd14d53d5d9a292758c6a8 + eventmachine (1.2.7) sha256=994016e42aa041477ba9cff45cbe50de2047f25dd418eba003e84f0d16560972 + ffi (1.17.2) sha256=297235842e5947cc3036ebe64077584bff583cd7a4e94e9a02fdec399ef46da6 + ffi (1.17.2-aarch64-linux-gnu) sha256=c910bd3cae70b76690418cce4572b7f6c208d271f323d692a067d59116211a1a + ffi (1.17.2-aarch64-linux-musl) sha256=69e6556b091d45df83e6c3b19d3c54177c206910965155a6ec98de5e893c7b7c + ffi (1.17.2-arm-linux-gnu) sha256=d4a438f2b40224ae42ec72f293b3ebe0ba2159f7d1bd47f8417e6af2f68dbaa5 + ffi (1.17.2-arm-linux-musl) sha256=977dfb7f3a6381206dbda9bc441d9e1f9366bf189a634559c3b7c182c497aaa3 + ffi (1.17.2-arm64-darwin) sha256=54dd9789be1d30157782b8de42d8f887a3c3c345293b57ffb6b45b4d1165f813 + ffi (1.17.2-x86-linux-gnu) sha256=95d8f9ebea23c39888e2ab85a02c98f54acb2f4e79b829250d7267ce741dc7b0 + ffi (1.17.2-x86-linux-musl) sha256=41741449bab2b9530f42a47baa5c26263925306fad0ac2d60887f51af2e3b24c + ffi (1.17.2-x86_64-darwin) sha256=981f2d4e32ea03712beb26e55e972797c2c5a7b0257955d8667ba58f2da6440e + ffi (1.17.2-x86_64-linux-gnu) sha256=05d2026fc9dbb7cfd21a5934559f16293815b7ce0314846fee2ac8efbdb823ea + ffi (1.17.2-x86_64-linux-musl) sha256=97c0eb3981414309285a64dc4d466bd149e981c279a56371ef811395d68cb95c + forwardable-extended (2.6.0) sha256=1bec948c469bbddfadeb3bd90eb8c85f6e627a412a3e852acfd7eaedbac3ec97 + google-protobuf (4.33.2) sha256=748150d6c642fd655ef39efa23ecf2abe6d616020039a6d1c1764be1da530315 + google-protobuf (4.33.2-aarch64-linux-gnu) sha256=822b2dcb707e94e652cd994642c31035935fca021adfac6164772c511eb7acd4 + google-protobuf (4.33.2-aarch64-linux-musl) sha256=c4b64428183cfd1953ec8c37beec1036668c8ec0865cfb0b18df21181ca397ee + google-protobuf (4.33.2-arm64-darwin) sha256=6d0ac185fed18768e5f16338455b1e4b7c38a97fc46f352e709f7a3007b64e1d + google-protobuf (4.33.2-x86-linux-gnu) sha256=82612c425d7a0b0f8f299d8e595a367984fcd22a155b8ac5861eea0e76ca1a93 + google-protobuf (4.33.2-x86-linux-musl) sha256=cc7e322228967c230f3b9c47a76de4e59fb47001900f4cbdf9056d1de92199ab + google-protobuf (4.33.2-x86_64-darwin) sha256=87cde586234674562cf099e2b708a65e376e2d39b0f0f48281f4b4ea182b47f8 + google-protobuf (4.33.2-x86_64-linux-gnu) sha256=73cba041477afcac92ff383fcbdec195ea28d96b994876d1deaa944d18f91786 + google-protobuf (4.33.2-x86_64-linux-musl) sha256=97cdf4f772c5540f9274603b00f1474ed5e6e2238b1d8b1585e77f941a36bd2c + http_parser.rb (0.8.0) sha256=5a0932f1fa82ce08a8516a2685d5a86031c000560f89946913c555a0697544be + i18n (1.14.7) sha256=ceba573f8138ff2c0915427f1fc5bdf4aa3ab8ae88c8ce255eb3ecf0a11a5d0f + jekyll (4.4.1) sha256=4c1144d857a5b2b80d45b8cf5138289579a9f8136aadfa6dd684b31fe2bc18c1 + jekyll-feed (0.17.0) sha256=689aab16c877949bb9e7a5c436de6278318a51ecb974792232fd94d8b3acfcc3 + jekyll-paginate (1.1.0) sha256=880aadf4b02529a93541d508c5cbb744f014cbfc071d0263a31f25ec9066eb64 + jekyll-sass-converter (3.1.0) sha256=83925d84f1d134410c11d0c6643b0093e82e3a3cf127e90757a85294a3862443 + jekyll-seo-tag (2.8.0) sha256=3f2ed1916d56f14ebfa38e24acde9b7c946df70cb183af2cb5f0598f21ae6818 + jekyll-sitemap (1.4.0) sha256=0de08c5debc185ea5a8f980e1025c7cd3f8e0c35c8b6ef592f15c46235cf4218 + jekyll-watch (2.2.1) sha256=bc44ed43f5e0a552836245a54dbff3ea7421ecc2856707e8a1ee203a8387a7e1 + json (2.18.0) sha256=b10506aee4183f5cf49e0efc48073d7b75843ce3782c68dbeb763351c08fd505 + kramdown (2.5.1) sha256=87bbb6abd9d3cebe4fc1f33e367c392b4500e6f8fa19dd61c0972cf4afe7368c + kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729 + liquid (4.0.4) sha256=4fcfebb1a045e47918388dbb7a0925e7c3893e58d2bd6c3b3c73ec17a2d8fdb3 + listen (3.9.0) sha256=db9e4424e0e5834480385197c139cb6b0ae0ef28cc13310cfd1ca78377d59c67 + mercenary (0.4.0) sha256=b25a1e4a59adca88665e08e24acf0af30da5b5d859f7d8f38fba52c28f405138 + pathutil (0.16.2) sha256=e43b74365631cab4f6d5e4228f812927efc9cb2c71e62976edcb252ee948d589 + public_suffix (7.0.0) sha256=f7090b5beb0e56f9f10d79eed4d5fbe551b3b425da65877e075dad47a6a1b095 + rake (13.3.1) sha256=8c9e89d09f66a26a01264e7e3480ec0607f0c497a861ef16063604b1b08eb19c + rb-fsevent (0.11.2) sha256=43900b972e7301d6570f64b850a5aa67833ee7d87b458ee92805d56b7318aefe + rb-inotify (0.11.1) sha256=a0a700441239b0ff18eb65e3866236cd78613d6b9f78fea1f9ac47a85e47be6e + rexml (3.4.4) sha256=19e0a2c3425dfbf2d4fc1189747bdb2f849b6c5e74180401b15734bc97b5d142 + rouge (4.6.1) sha256=5075346d5797d6864be93f7adc75a16047a7dbfa572c63c502419ffa582c77de + safe_yaml (1.0.5) sha256=a6ac2d64b7eb027bdeeca1851fe7e7af0d668e133e8a88066a0c6f7087d9f848 + sass-embedded (1.96.0) sha256=a124de2a3451827dcf936bd54918265e414da623f1671c14f268d7cbdab56504 + sass-embedded (1.96.0-aarch64-linux-android) sha256=1c15e27ee6170ea54daa079de961869bf2f4d68a3796bf9a1661629323a0b026 + sass-embedded (1.96.0-aarch64-linux-gnu) sha256=b3cc3f96b2d2989c38f8c6dfdb438c8aa1a3a319f3e92ce2b013c03fa104e50c + sass-embedded (1.96.0-aarch64-linux-musl) sha256=e3d1a743b83b75a04d5c62e5d1ff53a7da4db5beb847900c046e47246e7a8714 + sass-embedded (1.96.0-arm-linux-androideabi) sha256=3cfba81f918956b88120fdd121c333833b3dcb5d0713e237d6e87fdfeb27ee77 + sass-embedded (1.96.0-arm-linux-gnueabihf) sha256=834704287fd696745c8bd2e87f49c917584abb1465bfc2ece3eb75b6b197336f + sass-embedded (1.96.0-arm-linux-musleabihf) sha256=6e1065e177982cae929797930b64e290f1bb9ee70a38cd3d7a9a747858f5ff4d + sass-embedded (1.96.0-arm64-darwin) sha256=c267a0c41d0e0ae2fcdf3b4afad5498599f5401c7d0d4a04a0b3379cde5eff20 + sass-embedded (1.96.0-riscv64-linux-android) sha256=6f634ce97fcfba4a8af86cca0872043d68001682dc55e3e173af470f00543153 + sass-embedded (1.96.0-riscv64-linux-gnu) sha256=8eec6915c1433ddbd99e978b35b0710030ae25c37b45dec1bc1ca67408abd1b9 + sass-embedded (1.96.0-riscv64-linux-musl) sha256=74f407df2d3ff0bfb03d1b6bcbb7bf9387f8cf18b93170f8c0017dd0057cc91a + sass-embedded (1.96.0-x86_64-darwin) sha256=eaa06f87663641bc9848e949abfa33ade83373417339c772f34b32f1533903fb + sass-embedded (1.96.0-x86_64-linux-android) sha256=e99d58e8df3bac29026b16606d7de46910e4228098f81da0313b98575506c363 + sass-embedded (1.96.0-x86_64-linux-gnu) sha256=e505697c06504ed687786f97024b94131c9a76bd92a61c8f10352a62c785c1b4 + sass-embedded (1.96.0-x86_64-linux-musl) sha256=881620de159faf68f46db7a289193c61e35443163fdac7f789023e26e7bd6570 + terminal-table (3.0.2) sha256=f951b6af5f3e00203fb290a669e0a85c5dd5b051b3b023392ccfd67ba5abae91 + unicode-display_width (2.6.0) sha256=12279874bba6d5e4d2728cef814b19197dbb10d7a7837a869bab65da943b7f5a + webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131 BUNDLED WITH - 2.2.15 + 4.0.1 diff --git a/_data/navigation.yml b/_data/navigation.yml index 4e43017..a53c6b6 100644 --- a/_data/navigation.yml +++ b/_data/navigation.yml @@ -1,31 +1,51 @@ -- name: '資源' +# V2.1 簡化導航 - 2025年更新 +# 完整的資源頁面導航,包含所有新增內容 + +- name: 'Blog' + link: /blog/ + +- name: '學習資源' link: /# dropdown: - - name: 比特幣 | Bitcoin + - name: Bitcoin 比特幣 link: /markdown/resources/resources-bitcoin/ - - name: 閃電網路 | Lightning network + - name: Lightning Network 閃電網路 link: /markdown/resources/resources-ln/ - - name: 區塊隱私 | Blockchain privacy - link: /markdown/resources/resources-blockchain-privacy/ - - name: Schnorr 簽名 | Schnorr Signature + - name: Bitcoin Layer 2 + link: /markdown/resources/resources-bitcoin-layer2/ + - name: Schnorr & Taproot link: /markdown/resources/resources-schnorr-signature/ - - name: 以太坊 | Ethereum - link: /markdown/resources/resources-ethereum/ - + - name: 隱私技術 + link: /markdown/resources/resources-blockchain-privacy/ + - name: Nostr 協議 + link: /markdown/resources/resources-nostr/ + - name: 自託管工具 + link: /markdown/resources/resources-self-custody/ + - name: 開發者工具箱 + link: /markdown/resources/resources-developer-tools/ + - name: 書籍 & 論文 + link: /markdown/products/ + - name: '知識庫' link: /# dropdown: - - name: 比特幣 | Bitcoin + - name: 術語詞彙表 + link: /markdown/knowledge/glossary/ + - name: 密碼龐克歷史 + link: /markdown/resources/resources-cypherpunk-history/ + - name: Bitcoin 知識庫 link: /markdown/knowledge/knowledge-bitcoin/ - - name: 以太坊 | Ethereum + - name: Ethereum 知識庫 link: /markdown/knowledge/knowledge-ethereum/ -- name: '書籍 & 論文' - link: /markdown/products/ -- name: 衛星計畫 - link: /markdown/SatelliteProject/ -- name: Blog - link: /blog/ + +- name: '專案' + link: /# + dropdown: + - name: 衛星計畫 + link: /markdown/SatelliteProject/ + - name: GitHub + link: https://github.com/cypherpunks-core + external: true + - name: '關於' link: /markdown/about/ -- name: '分類' - link: /classification \ No newline at end of file diff --git a/_includes/admonition.html b/_includes/admonition.html new file mode 100644 index 0000000..870739c --- /dev/null +++ b/_includes/admonition.html @@ -0,0 +1,66 @@ +{% comment %} +Admonition Component - 警告區塊組件 + +Usage: +{% include admonition.html type="note" title="注意" content="這是一個注意事項。" %} +{% include admonition.html type="tip" title="提示" content="這是一個有用的提示。" %} +{% include admonition.html type="warning" title="警告" content="請注意這個警告。" %} +{% include admonition.html type="danger" title="危險" content="這是危險操作!" %} +{% include admonition.html type="info" title="資訊" content="這是一些資訊。" %} + +Parameters: +- type: note | tip | warning | danger | info (default: note) +- title: The title text (optional, will use default if not provided) +- content: The content text (required) +{% endcomment %} + +{% assign admon_type = include.type | default: "note" %} +{% assign admon_title = include.title %} + +{% if admon_title == nil %} + {% case admon_type %} + {% when "note" %} + {% assign admon_title = "注意" %} + {% when "tip" %} + {% assign admon_title = "提示" %} + {% when "warning" %} + {% assign admon_title = "警告" %} + {% when "danger" %} + {% assign admon_title = "危險" %} + {% when "info" %} + {% assign admon_title = "資訊" %} + {% else %} + {% assign admon_title = "注意" %} + {% endcase %} +{% endif %} + +
+
+ {% case admon_type %} + {% when "note" %} + + + + {% when "tip" %} + + + + {% when "warning" %} + + + + {% when "danger" %} + + + + {% when "info" %} + + + + {% endcase %} + {{ admon_title }} +
+
+ {{ include.content | markdownify }} +
+
diff --git a/_includes/comments.html b/_includes/comments.html new file mode 100644 index 0000000..26d131e --- /dev/null +++ b/_includes/comments.html @@ -0,0 +1,52 @@ + +{% if site.comments.provider == 'giscus' %} +
+ +
+ + + + +{% else %} + +
+

+ 留言系統尚未設置 +

+

+ 請在 _config.yml 中配置 Giscus +

+
+{% endif %} diff --git a/_includes/footer.html b/_includes/footer.html index 83476c0..2030cd4 100644 --- a/_includes/footer.html +++ b/_includes/footer.html @@ -1,20 +1,148 @@ -