From 880746ef3a37c3df0c7bd7a843a7f76b14f4d10d Mon Sep 17 00:00:00 2001 From: Preetham Kyanam <37784174+pkyanam@users.noreply.github.com> Date: Wed, 28 Oct 2026 10:50:39 +0000 Subject: [PATCH] Redesign hstack.sh in Paper Mono and link the third-party notices. The public site is black, white, and green. The footer links the MIT license and THIRD_PARTY_NOTICES. Install, the archive, and the Vercel and Pages host rules stay in place. --- .github/social-preview.png | Bin 28723 -> 37832 bytes PARITY.md | 2 +- site/_headers | 4 + site/content/changelog.md | 13 + site/content/docs/addons.md | 36 +++ site/content/docs/index.md | 20 ++ site/content/docs/install.md | 67 +++++ site/content/integrations.md | 27 ++ site/fonts/LICENSE.txt | 98 ++++++ site/fonts/PaperMono[wght].woff2 | Bin 0 -> 53276 bytes site/fonts/inter-bold.woff2 | Bin 25264 -> 0 bytes site/fonts/inter-regular.woff2 | Bin 24732 -> 0 bytes site/index.html | 158 ---------- site/package-lock.json | 16 +- site/package.json | 3 +- site/public/404.html | 20 -- site/public/favicon.svg | 10 +- site/scripts/build.mjs | 76 +---- site/scripts/check-no-html.mjs | 71 ++++- site/scripts/preview.mjs | 56 ++-- site/scripts/render.mjs | 496 +++++++++++++++++++++++++++++++ site/scripts/shoot.mjs | 188 ++++++++---- site/src/glass.js | 182 ------------ site/src/main.js | 178 ----------- site/src/site.css | 438 +++++++++++++++++++++++++++ site/src/site.js | 107 +++++++ site/src/styles.css | 462 ---------------------------- site/vercel.json | 7 + 28 files changed, 1574 insertions(+), 1161 deletions(-) create mode 100644 site/content/changelog.md create mode 100644 site/content/docs/addons.md create mode 100644 site/content/docs/index.md create mode 100644 site/content/docs/install.md create mode 100644 site/content/integrations.md create mode 100644 site/fonts/LICENSE.txt create mode 100644 site/fonts/PaperMono[wght].woff2 delete mode 100644 site/fonts/inter-bold.woff2 delete mode 100644 site/fonts/inter-regular.woff2 delete mode 100644 site/index.html delete mode 100644 site/public/404.html create mode 100644 site/scripts/render.mjs delete mode 100644 site/src/glass.js delete mode 100644 site/src/main.js create mode 100644 site/src/site.css create mode 100644 site/src/site.js delete mode 100644 site/src/styles.css diff --git a/.github/social-preview.png b/.github/social-preview.png index d8344b7a0cb7b754e1249889bce2d422307b627b..5e90be66cf93c3df1d6c67b3393fc821841661bb 100644 GIT binary patch literal 37832 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 literal 28723 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 HTHXB*7=4p} diff --git a/PARITY.md b/PARITY.md index 05d244d..82bed85 100644 --- a/PARITY.md +++ b/PARITY.md @@ -11,7 +11,7 @@ Measured from the checkouts named in [RESEARCH.md](RESEARCH.md), on 28 October 2 | [cursor/plugins](https://github.com/cursor/plugins) `pstack/` | `c742dd61706fbacc1b95f1a20b7b988cf096ce6c` | 58 skills, 23 playbooks, Benny automations, agents, `watch-pr`, statechart scripts | | [NousResearch/hermes-agent](https://github.com/NousResearch/hermes-agent) | `ee7e0f517232fb619c72e49d7e648436bddc598e` | Skills, plugins, MCP, hooks, memory, cron, delegation, browser, terminal backends | -All three stacks are MIT. This repo still does not copy their skill text, word lists, or scripts. No `NOTICE` file until a substantial portion is included. The helpers in the build that follows this file are original. +All three stacks are MIT. This repo still does not copy their skill text, word lists, or scripts. MIT notices for the adapted material are in [THIRD_PARTY_NOTICES](https://github.com/Belweave/hstack/blob/main/THIRD_PARTY_NOTICES). The helpers in the build that follows this file are original. ## How a row is typed diff --git a/site/_headers b/site/_headers index 6f297a1..d2dfa54 100644 --- a/site/_headers +++ b/site/_headers @@ -37,3 +37,7 @@ /dl/hstack-v0.1.0.tar.gz.sha256 Content-Type: text/plain; charset=utf-8 Cache-Control: public, max-age=31536000, immutable + +/fonts/* + Access-Control-Allow-Origin: * + Cache-Control: public, max-age=31536000, immutable diff --git a/site/content/changelog.md b/site/content/changelog.md new file mode 100644 index 0000000..8d9beb7 --- /dev/null +++ b/site/content/changelog.md @@ -0,0 +1,13 @@ +--- +title: Changelog +description: HStack 0.1.0. Twelve skills, an idle index of 204 tokens, optional add-ons, and a sha256-checked install from hstack.sh. +--- + +## 0.1.0 + +28 October 2026. + +- Twelve skills. The idle index is 204 tokens, including the `hstack` category header. The planning path is `hstack`, `reframe`, and `shape` at 965 tokens. All `SKILL.md` bodies are 3,820. +- One router loads a single playbook from `skills/hstack/hstack/references/`. The parity inventory is 520 rows: 67 skills, 260 playbooks, 3 Hermes tools, 15 helper scripts, and 175 skips. +- Optional add-ons, off by default: `browser`, `github`, `docs`, `search`, `perf`, `test`, `security`, `trail`. `--with` and `--uninstall` can name one add-on. +- `install.sh` and `install.ps1` download the archive from hstack.sh, check sha256, and reject absolute paths, `..`, and symlink members. `HSTACK_VERSION=0.1.0` pins the archive. `HSTACK_BASE_URL` points at another host. diff --git a/site/content/docs/addons.md b/site/content/docs/addons.md new file mode 100644 index 0000000..e113cf7 --- /dev/null +++ b/site/content/docs/addons.md @@ -0,0 +1,36 @@ +--- +title: Add-ons +description: Optional HStack add-ons for browser, GitHub, docs, search, perf, test, security, and a decision trail. Off unless you pass --with. +--- + +A default install is skills only. Pass `--with` to turn on helpers and MCP entries. The installer does not download Playwright, gitleaks, or osv-scanner. + +:::tabs +:::tab macOS / Linux +```sh install.sh +sh install.sh --with browser,github,docs,search,perf,test,security,trail +sh install.sh --dry-run --with browser +sh install.sh --uninstall --with browser +``` +:::tab Windows +```powershell install.ps1 +powershell -ExecutionPolicy Bypass -File .\install.ps1 --with browser,github,docs,search,perf,test,security,trail +powershell -ExecutionPolicy Bypass -File .\install.ps1 --dry-run --with browser +powershell -ExecutionPolicy Bypass -File .\install.ps1 --uninstall --with browser +``` +::: + +Helpers are copied to `$HERMES_HOME/hstack/bin`. MCP entries use an `hstack_` prefix in `config.yaml`. `--dry-run` writes nothing. `--uninstall` without `--with` removes the skills and every add-on this installer created. + +| Flag | What you get | +|---|---| +| `browser` | Playwright MCP at `@playwright/mcp@0.0.83`, plus `hstack-visdiff` | +| `github` | `hstack-pr`, one `gh` snapshot | +| `docs` | Context7 MCP, URL only | +| `search` | DeepWiki MCP, URL only | +| `perf` | `hstack-bench` | +| `test` | `hstack-test` | +| `security` | `hstack-scan`, only if gitleaks or osv-scanner is already installed | +| `trail` | `hstack-decisions` | + +The browser server is `npx -y @playwright/mcp@0.0.83` under `mcp_servers.hstack_playwright`. Docs and search store a URL and no token: `https://mcp.context7.com/mcp` and `https://mcp.deepwiki.com/mcp`. diff --git a/site/content/docs/index.md b/site/content/docs/index.md new file mode 100644 index 0000000..90820ad --- /dev/null +++ b/site/content/docs/index.md @@ -0,0 +1,20 @@ +--- +title: Getting started +description: Twelve Hermes Agent skills. One router stays in the index. A playbook loads only when the task needs it. +--- + +HStack is twelve skills for Hermes Agent. Frame the job, shape the change, prove it, and open the pull request. The index stays small because only the router is required reading. + +Skills land in `~/.hermes/skills/hstack/`. Set `HERMES_HOME` when Hermes lives somewhere else. A default install is skills only. Browser, GitHub, docs, search, benchmarks, tests, security scans, and the decision trail stay off until you name them. + +`/hstack` is the one to remember. It loads a catalog, picks one playbook, and stops. Name another skill when you already know the step. + +```text session +/hstack the export drops rows over 10 MB +/reframe +/ship +``` + +The planning path is `hstack`, `reframe`, and `shape`: 965 tokens, under 2% of GStack's planning load on Hermes. The idle index is 204 tokens. All twelve `SKILL.md` bodies are 3,820. Counts use Hermes's estimator, `ceil(bytes / 4)`. + +Playbooks live under `skills/hstack/hstack/references/` and load one at a time. The [skills index](/skills) lists each skill. [Parity](/parity) has one row for every GStack, TStack, and PStack feature that was inventoried. diff --git a/site/content/docs/install.md b/site/content/docs/install.md new file mode 100644 index 0000000..33fc7d2 --- /dev/null +++ b/site/content/docs/install.md @@ -0,0 +1,67 @@ +--- +title: Install +description: Install HStack from hstack.sh on macOS, Linux, or Windows. Dry-run, uninstall, and version pin use the same flags. +--- + +The installer downloads `install.sh` and the skill archive from hstack.sh, checks the sha256, and extracts into the Hermes skills directory. It does not clone the repository. + +:::tabs +:::tab macOS / Linux +```sh install.sh +# archive is checked with sha256 before extract +curl -fsSL https://hstack.sh/install | sh +``` +:::tab Windows +```powershell install.ps1 +irm https://hstack.sh/install.ps1 -OutFile install.ps1 +powershell -ExecutionPolicy Bypass -File .\install.ps1 +``` +::: + +:::note +`irm | iex` does not pass `--dry-run`, `--uninstall`, or `--with`. `install.ps1` reads those flags from `$args` when PowerShell runs the file with `-File`. +::: + +From a checkout of the repo, `sh install.sh` installs the skills beside the script. A second run replaces the HStack skills and leaves every other skill alone. + +## Dry-run + +Dry-run prints the plan and writes nothing. + +:::tabs +:::tab macOS / Linux +```sh install.sh +curl -fsSL https://hstack.sh/install | sh -s -- --dry-run +``` +:::tab Windows +```powershell install.ps1 +powershell -ExecutionPolicy Bypass -File .\install.ps1 --dry-run +``` +::: + +## Uninstall + +Uninstall removes `skills/hstack` only when this installer created it, and it removes add-ons this installer created. `--uninstall --with browser` removes only that add-on. + +:::tabs +:::tab macOS / Linux +```sh install.sh +curl -fsSL https://hstack.sh/install | sh -s -- --uninstall +``` +:::tab Windows +```powershell install.ps1 +powershell -ExecutionPolicy Bypass -File .\install.ps1 --uninstall +``` +::: + +## Version and host + +`HSTACK_VERSION=0.1.0` pins `hstack-v0.1.0.tar.gz` instead of the latest alias. `HSTACK_BASE_URL` points the download at another host, such as a `*.vercel.app` URL before DNS is in place. + +```sh install.sh +curl -fsSL https://hstack.sh/install | HSTACK_VERSION=0.1.0 sh +``` + +The archive is one directory. Inside it: the skills, `scripts/apply_addons.py`, and the `bin/` helpers. The published checksum files are `HEX filename`, two spaces. A mismatch stops the install and does not write skills. + +WSL can run `install.sh`. The Windows script takes the same flags and the same archive. diff --git a/site/content/integrations.md b/site/content/integrations.md new file mode 100644 index 0000000..fd0c80f --- /dev/null +++ b/site/content/integrations.md @@ -0,0 +1,27 @@ +--- +title: Integrations +description: What HStack connects to Hermes. Skills are the default. Browser, GitHub, Context7, DeepWiki, and the helper scripts are opt-in. +--- + +Hermes already has a browser, a terminal, delegation, and a bundled GitHub skill. HStack does not replace those. Optional add-ons sit beside them and remove cleanly. + +| Flag | Configured name | Removes cleanly | +|---|---|---| +| `browser` | `mcp_servers.hstack_playwright`, `bin/hstack-visdiff` | yes | +| `github` | `bin/hstack-pr` | yes | +| `docs` | `mcp_servers.hstack_context7` | yes | +| `search` | `mcp_servers.hstack_deepwiki` | yes | +| `perf` | `bin/hstack-bench` | yes | +| `test` | `bin/hstack-test` | yes | +| `security` | `bin/hstack-scan` | yes | +| `trail` | `bin/hstack-decisions` | yes | + +`browser` points at `npx -y @playwright/mcp@0.0.83`. Hermes `browser_exec` stays the default browser. The add-on adds accessibility snapshots and a visual diff helper. + +`github` wraps the GitHub CLI. Hermes docs prefer `gh` over the GitHub MCP server. `hstack-pr` takes one snapshot. + +`docs` and `search` are URL-only. Context7 is `https://mcp.context7.com/mcp`. DeepWiki is `https://mcp.deepwiki.com/mcp`. No token is written. Local code search stays Hermes `search_files`. + +`security` runs gitleaks or osv-scanner only when one of them is already on `PATH`. The installer does not fetch either binary. It also does not download Playwright. + +Commands, dry-run, and the Windows `-File` form are on the [add-ons](/docs/addons) page. Upstream inventories are [GStack](https://github.com/garrytan/gstack), [TStack](https://github.com/t3dotgg/tstack), and [PStack](https://github.com/cursor/plugins/tree/main/pstack). Hermes itself is documented at [hermes-agent.nousresearch.com](https://hermes-agent.nousresearch.com/docs/). diff --git a/site/fonts/LICENSE.txt b/site/fonts/LICENSE.txt new file mode 100644 index 0000000..5e23939 --- /dev/null +++ b/site/fonts/LICENSE.txt @@ -0,0 +1,98 @@ +Paper Mono +Copyright (c) 2025 Lost Coast Labs, Inc. (Paper Design) + +Based on Geist Mono +Copyright (c) 2023 Vercel, in collaboration with basement.studio + +----------------------------------------------------------- + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION AND CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/site/fonts/PaperMono[wght].woff2 b/site/fonts/PaperMono[wght].woff2 new file mode 100644 index 0000000000000000000000000000000000000000..80e9f101575413215b3acf7855a654dd88af471c GIT binary patch literal 53276 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≷DmCkoMa|H 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 H&}#z#+vps{ diff --git a/site/fonts/inter-regular.woff2 b/site/fonts/inter-regular.woff2 deleted file mode 100644 index 9348abcd6101ad411ab6f33bf7eade756898ed48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24732 zcmV)TK(W7fPew8T0RR910AQQ|5dZ)H0RT7v0AM=+1OP$+00000000000000000000 z0000QY8(7o9JX`@U;u_h2!aF&oD2~N3WAI@f$b*&HUcCAi*O5tdH@6<1%h}7APj+T z8;k5Gn43B(sNZb^Du{*h?QdMdrUSn;JvSPipr$yp12H%cL|w4|L)riTpO{o+%%(un zuEW7`UR8~rB$uL)rU=VuO;M##Dhets18I`icX?qu?!D?(Ff2{pA(JCJ|1hG%1yNdX z-*;!yZCtBXDfe+04@kJ%04?};$qiiYZ5G5D$@Ne7$@Y3*1KM_n4G8#b?mN{@nLw z*^Dv9ShgVsW6731jWt@Nq1Doc#`2{xCXFS@M_RrlUqeWiX%pr9LZ$X^%bz4^6Mbpf zwS2!1{D15Xcg}rfH?8PQRJ!n``MAVYG{z!4M&Up>EW#3D!S1&{)$FUPyJrRBV%53u_^Kv8L4qP7*{0mCc3xVU^L7n;#tg%f0obOP6Ejw>tQm!oL!tx= z3nWZLL~4g9;Ia0c;&L{nhf> z(r=f&?e+XivXVYOeaHu}1%UtgF_Qw}pJ-er>;-iXD#gtSE9NpN? z?D#FX6xBZcSC;R%2=5qb~sGON~;%};}KxR+W5M!p)f>Z)Al7H8Y4+ONy7K;P;r9;kRS@CVH&1k8m8Ug z1SATgVH&1k8m8eW`2Tb3eU}gz?o9|8epO`EK8egY_?RSl-TK3$w!dsQ-U!rp+8}QbHkX?4c@= zvbov6`7g6nVDNpN{X6%=cU&M821xrVQzNrgktYkrsq(yba&thBux?*3h4E!Tiz7vLCUm0DMBDmSgW+AbQGjs@U5k`O@U}0XO5%&GCEFARC z`MV?u_!s;kHWB!jj?!e{BLJp}(7GkaOMa0g1Je|^+bT~)If-3D!b3GN4I5$xEV;g3 zu{7m5d`0ow z$UEXsPJNk-H^4feVA6v1Rd;m-S0=jocBLT&9g@U8(yZDAzX@aOle~!#YTA`HN}( z-iv-DpiskskX8>c%~@pOi(yej4V=?;;wux~e7pWJY~i{PK>0px&5L<#WwSV@cyykT5TbG9ce8-%40vok|QKdG0q zwpJ#mm8`#lGr%H@w2&N?sxbkNrMBn*`g3nU@xt3J0Z ziFF=>cpWd;*^PC&hUa#-)MtQ|!T)WjJYZ|o7$*~6@$l9(AK(43#DD&?%>QOB4|A
- - - HStack - - - GitHub -
-
-
-
-
-

Everything Hermes needs. Nothing it doesn't.

-
- curl -fsSL https://hstack.sh/install | sh - -
-
    -
  • MIT
  • -
  • Designed for Hermes Agent
  • -
  • 12 skills
  • -
  • ~204 idle tokens
  • -
-
- -
-

-
-
-
-

HStack
planning load

-

965tokens

-
-
- -
-

GStack
planning load

-

62,514tokens

-
-
-

Under 2% of the context. Built for Hermes.

-

A community project. Not affiliated with Nous Research.

-
-
-
- -
-

The index stays small.

-

Hermes reads every skill description on each turn. HStack keeps one short router there. A playbook loads only when the task needs it. Counts use Hermes's estimator, ceil(bytes / 4).

- -
- -
-

Twelve skills.

-

One line in the index. The body loads when you ask for that skill.

-
-
- -
-

One router. One playbook.

-

/hstack is the skill to remember. It opens the route catalog and loads one playbook. Everything else stays on disk.

-
    -
  1. frameDeciding what to build. Load reframe, then stop or hand off.
  2. -
  3. featureNew or changed behavior. Shape it, implement it, prove it.
  4. -
  5. fixSomething is broken. Use systematic-debugging, then prove the fix.
  6. -
  7. checkThe diff needs a hard look. Council only if you asked for other models.
  8. -
  9. landThe work should become a pull request. Load ship.
  10. -
-

A one-line edit does not need a playbook. If you name another HStack skill, that skill loads and the router steps aside.

-
- -
-

Use it in the session.

-

Hermes lists the skills under hstack. Ask with the skill name.

-
/hstack the export drops rows over 10 MB
-/reframe
-/ship
-/council
-
- -
-

Install

-

macOS and Linux. The script is safe to run twice. It only replaces a tree it created.

-
-
-
-

Install

- -
-
curl -fsSL https://hstack.sh/install | sh
-
-
-
-

Dry run

- -
-
curl -fsSL https://hstack.sh/install | sh -s -- --dry-run
-
-
-
-

Uninstall

- -
-
curl -fsSL https://hstack.sh/install | sh -s -- --uninstall
-
-
-

From a checkout of the repo, sh install.sh installs the skills next to the script. HSTACK_BASE_URL points the curl form at another host, which is how you try a *.vercel.app URL before DNS. Optional add-ons stay off until you pass --with.

-
-
-
-

HStack is a community project made for the Hermes Agent community. It is not affiliated with, endorsed by, or an official product of Nous Research.

-

belweave/hstack

-
- - - diff --git a/site/package-lock.json b/site/package-lock.json index 0d07097..33acd46 100644 --- a/site/package-lock.json +++ b/site/package-lock.json @@ -6,7 +6,8 @@ "": { "name": "hstack-site", "devDependencies": { - "esbuild": "0.25.10" + "esbuild": "0.25.10", + "marked": "^15.0.12" } }, "node_modules/@esbuild/aix-ppc64": { @@ -492,6 +493,19 @@ "@esbuild/win32-ia32": "0.25.10", "@esbuild/win32-x64": "0.25.10" } + }, + "node_modules/marked": { + "version": "15.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", + "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } } } } diff --git a/site/package.json b/site/package.json index a011fa6..d8905a0 100644 --- a/site/package.json +++ b/site/package.json @@ -8,6 +8,7 @@ "check": "node scripts/check-no-html.mjs && node scripts/check-pages.mjs && node scripts/check-vercel.mjs" }, "devDependencies": { - "esbuild": "0.25.10" + "esbuild": "0.25.10", + "marked": "15.0.12" } } diff --git a/site/public/404.html b/site/public/404.html deleted file mode 100644 index 4a84425..0000000 --- a/site/public/404.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - Not found · HStack - - - - -
-

That page is not here.

-

Back to HStack

-
- - diff --git a/site/public/favicon.svg b/site/public/favicon.svg index f0a64b1..1b69fb8 100644 --- a/site/public/favicon.svg +++ b/site/public/favicon.svg @@ -1,8 +1,8 @@ - - - - - + + + + + diff --git a/site/scripts/build.mjs b/site/scripts/build.mjs index d30583d..ecde0a7 100644 --- a/site/scripts/build.mjs +++ b/site/scripts/build.mjs @@ -4,8 +4,7 @@ import { tmpdir } from "node:os"; import path from "node:path"; import { execFileSync } from "node:child_process"; import crypto from "node:crypto"; -import zlib from "node:zlib"; -import esbuild from "esbuild"; +import { emitSite } from "./render.mjs"; const site = path.resolve(import.meta.dirname, ".."); const root = path.resolve(site, ".."); @@ -41,20 +40,6 @@ function field(md, key, file) { return match[1].trim(); } -function fmt(value) { - return new Intl.NumberFormat("en-US").format(value); -} - -function esc(value) { - return value.replace(/[&<>"']/g, (ch) => ({ - "&": "&", - "<": "<", - ">": ">", - '"': """, - "'": "'", - }[ch])); -} - const skills = ORDER.map((name) => { const file = path.join(skillsRoot, name, "SKILL.md"); const md = readFileSync(file, "utf8"); @@ -88,59 +73,18 @@ if (idle !== 204 || planning !== 965 || bodies !== 3820) { throw new Error(`measured idle ${idle}, planning ${planning}, bodies ${bodies}`); } -const stack = skills.map((skill) => { - const label = `${skill.name}. ${skill.description} ${skill.idle} idle tokens, ${fmt(skill.body)} body tokens.`; - return `

${esc(skill.description)}

`; -}).join(""); - -const grid = skills.map((skill) => { - return `

${esc(skill.name)}

${esc(skill.description)}

${skill.idle} idle · ${fmt(skill.body)} body

`; -}).join(""); - -function meter(title, hstack, gstack) { - const share = (hstack / gstack).toFixed(6); - return `

${title}

HStack
${fmt(hstack)}
GStack
${fmt(gstack)}
`; -} - -const compare = `
${meter("Idle, every turn", idle, GSTACK.idle)}${meter("Planning load", planning, GSTACK.planning)}${meter("All skill bodies", bodies, GSTACK.bodies)}
`; - -const css = await esbuild.transform(readFileSync(path.join(site, "src", "styles.css"), "utf8"), { - loader: "css", - minify: true, -}); - -let html = readFileSync(path.join(site, "index.html"), "utf8"); -html = html.replace("/*__CSS__*/", () => css.code); -html = html.replace("", () => stack); -html = html.replace("", () => grid); -html = html.replace("", () => compare); -if (html.includes("__")) throw new Error("unreplaced template marker"); - rmSync(dist, { recursive: true, force: true }); -mkdirSync(path.join(dist, "assets"), { recursive: true }); -mkdirSync(path.join(dist, "dl"), { recursive: true }); -mkdirSync(path.join(dist, "fonts"), { recursive: true }); -writeFileSync(path.join(dist, "index.html"), html); -cpSync(path.join(site, "public"), dist, { recursive: true }); -cpSync(path.join(site, "fonts"), path.join(dist, "fonts"), { recursive: true }); -copyFileSync(path.join(root, ".github", "social-preview.png"), path.join(dist, "social-preview.png")); -copyFileSync(path.join(root, "install.sh"), path.join(dist, "install.sh")); -copyFileSync(path.join(root, "install.ps1"), path.join(dist, "install.ps1")); -copyFileSync(path.join(site, "_headers"), path.join(dist, "_headers")); -copyFileSync(path.join(site, "_redirects"), path.join(dist, "_redirects")); - -await esbuild.build({ - entryPoints: [path.join(site, "src", "main.js")], - bundle: true, - minify: true, - format: "esm", - target: "es2020", - outfile: path.join(dist, "assets", "app.js"), +const jsGzip = await emitSite({ + site, + root, + dist, + skills, + idle, + planning, + bodies, + gstack: GSTACK, }); -const jsGzip = zlib.gzipSync(readFileSync(path.join(dist, "assets", "app.js"))).length; -if (jsGzip > 250 * 1024) throw new Error(`app.js is ${jsGzip} bytes gzipped`); - const helpers = [ "hstack-bench", "hstack-decisions", diff --git a/site/scripts/check-no-html.mjs b/site/scripts/check-no-html.mjs index d89967d..8afddd6 100644 --- a/site/scripts/check-no-html.mjs +++ b/site/scripts/check-no-html.mjs @@ -1,9 +1,8 @@ -import { readFileSync } from "node:fs"; +import { readFileSync, readdirSync, statSync } from "node:fs"; import path from "node:path"; import { createPreview } from "./preview.mjs"; const dist = path.resolve(import.meta.dirname, "..", "dist"); -const html = readFileSync(path.join(dist, "index.html"), "utf8"); const server = createPreview(); await new Promise((resolve) => server.listen(0, "127.0.0.1", resolve)); const { port } = server.address(); @@ -14,19 +13,61 @@ function fail(message) { process.exitCode = 1; } -const urls = new Set(["/favicon.svg", "/social-preview.png", "/install", "/install/", "/install.sh", "/install.ps1"]); -for (const match of html.matchAll(/(?:src|href)="(\/[^"]+)"/g)) urls.add(match[1]); -const style = html.match(/ + + +
+
+

HStack

+

Everything Hermes needs.
Nothing it doesn't.

+
+
+
Idle${fmt(idle)}
+
Planning${fmt(planning)}
+
Bodies${fmt(bodies)}
+
+
+ + +`; +} + +export async function emitSite({ site, root, dist, skills, idle, planning, bodies, gstack }) { + const skillsRoot = path.join(root, "skills", "hstack"); + const md = createMarkdown(); + mkdirSync(path.join(dist, "assets"), { recursive: true }); + mkdirSync(path.join(dist, "dl"), { recursive: true }); + mkdirSync(path.join(dist, "fonts"), { recursive: true }); + cpSync(path.join(site, "public"), dist, { recursive: true }); + cpSync(path.join(site, "fonts"), path.join(dist, "fonts"), { recursive: true }); + cpSync(path.join(root, ".github", "social-preview.png"), path.join(dist, "social-preview.png")); + cpSync(path.join(root, "install.sh"), path.join(dist, "install.sh")); + cpSync(path.join(root, "install.ps1"), path.join(dist, "install.ps1")); + cpSync(path.join(site, "_headers"), path.join(dist, "_headers")); + cpSync(path.join(site, "_redirects"), path.join(dist, "_redirects")); + + const css = await esbuild.transform(readFileSync(path.join(site, "src", "site.css"), "utf8"), { + loader: "css", + minify: true, + }); + writeFileSync(path.join(dist, "assets", "site.css"), css.code); + await esbuild.build({ + entryPoints: [path.join(site, "src", "site.js")], + bundle: true, + minify: true, + format: "esm", + target: "es2020", + outfile: path.join(dist, "assets", "site.js"), + }); + const jsGzip = zlib.gzipSync(readFileSync(path.join(dist, "assets", "site.js"))).length; + if (jsGzip > 250 * 1024) throw new Error(`site.js is ${jsGzip} bytes gzipped`); + + function write(pathname, html) { + const rel = pathname === "/" ? "index.html" : `${pathname.slice(1)}/index.html`; + const file = path.join(dist, rel); + mkdirSync(path.dirname(file), { recursive: true }); + writeFileSync(file, html); + } + + write("/", home({ skills, idle, planning, bodies, gstack })); + + const contentDir = path.join(site, "content"); + const pages = [ + ["/docs", path.join(contentDir, "docs", "index.md"), "Docs"], + ["/docs/install", path.join(contentDir, "docs", "install.md"), "Docs"], + ["/docs/addons", path.join(contentDir, "docs", "addons.md"), "Docs"], + ["/integrations", path.join(contentDir, "integrations.md"), null], + ["/changelog", path.join(contentDir, "changelog.md"), null], + ]; + for (const [pathname, file, section] of pages) { + const { meta, body } = readContent(file); + const article = `

${esc(section || meta.title)}

${esc(meta.title)}

${md.parse(body)}
`; + const main = section ? sheet(side(DOCS, pathname, "Docs"), article) : `
${article}
`; + write(pathname, layout({ + pathname, + title: meta.title, + description: meta.description, + main, + })); + } + + const skillLinks = skills.map((skill) => [`/skills/${skill.name}`, skill.name]); + const indexItems = skills.map((skill, index) => `
  • ${String(index + 1).padStart(2, "0")}${esc(skill.name)}${esc(skill.description)}${fmt(skill.body)} body
  • `).join(""); + write("/skills", layout({ + pathname: "/skills", + title: "Skills", + description: "Twelve HStack skills. The router is hstack. The others are reframe, shape, prove, council, ship, takeover, modernize, blast, swarm, arena, and principles.", + main: sheet(side(skillLinks, "/skills", "Skills"), `

    Skills

    Skills

    Idle cost is the index row. Body tokens are the full SKILL.md, loaded only when that skill is opened.

      ${indexItems}
    `), + })); + + const plays = references(skillsRoot); + for (const skill of skills) { + const file = path.join(skillsRoot, skill.name, "SKILL.md"); + const raw = readFileSync(file, "utf8"); + const { body } = frontmatter(raw); + const stripped = body.replace(/^\s*#\s+.+\n+/, ""); + let extra = ""; + if (skill.name === "hstack") { + extra = plays.map((play) => `
    ${md.parse(play.md, 1)}
    `).join(""); + } + const pathname = `/skills/${skill.name}`; + write(pathname, layout({ + pathname, + title: skill.name, + description: skill.description, + main: sheet(side(skillLinks, pathname, "Skills"), `

    Skill

    ${esc(skill.name)}

    ${skill.idle} idle · ${fmt(skill.body)} body · v0.1.0

    ${md.parse(stripped)}${extra}
    `), + })); + } + + const parityMd = readFileSync(path.join(root, "PARITY.md"), "utf8"); + const splitAt = parityMd.indexOf("\n## Feature table"); + const narrative = parityMd.slice(0, splitAt).replace(/^#\s+.+\n+/, ""); + write("/parity", layout({ + pathname: "/parity", + title: "Parity", + description: "520-row inventory of GStack, TStack, and PStack features, and where each one went in HStack.", + wide: true, + main: `

    Inventory

    Parity

    ${md.parse(narrative)}${parityTable(parityMd.slice(splitAt))}
    `, + })); + + function legal(pathname, title, description, file) { + const text = readFileSync(path.join(root, file), "utf8"); + write(pathname, layout({ + pathname, + title, + description, + main: `

    License

    ${esc(title)}

    `, + })); + } + legal("/license", "MIT License", "MIT license for HStack. Copyright (c) 2026 Preetham Kyanam / belweave.", "LICENSE"); + legal("/notices", "Third-party notices", "MIT notices for GStack and TStack material adapted by HStack.", "THIRD_PARTY_NOTICES"); + + const missing = layout({ + pathname: "/404", + title: "Page not found", + description: "That page is not on hstack.sh.", + main: `

    404

    Page not found

    That URL is not on this site.

    Home · Docs

    `, + }); + writeFileSync(path.join(dist, "404.html"), missing); + writeFileSync(path.join(dist, "og.html"), ogDocument({ idle, planning, bodies })); + return jsGzip; +} diff --git a/site/scripts/shoot.mjs b/site/scripts/shoot.mjs index bfb87c8..e79dd99 100644 --- a/site/scripts/shoot.mjs +++ b/site/scripts/shoot.mjs @@ -1,16 +1,18 @@ import { spawn } from "node:child_process"; import { mkdirSync, writeFileSync } from "node:fs"; +import path from "node:path"; -const base = process.env.SHOT_URL || "http://127.0.0.1:4173/"; -const outDir = process.env.SHOT_DIR || "/tmp/hstack-shots"; +const base = process.env.SHOT_URL || "http://127.0.0.1:4173"; +const outDir = process.env.SHOT_DIR || "/opt/cursor/artifacts"; mkdirSync(outDir, { recursive: true }); const chrome = spawn("google-chrome", [ "--headless=new", "--no-sandbox", "--disable-gpu", - "--remote-debugging-port=9222", - "--user-data-dir=/tmp/chrome-hstack-shots", + "--hide-scrollbars", + "--remote-debugging-port=9333", + "--user-data-dir=/tmp/chrome-hstack-redesign", "about:blank", ], { stdio: "ignore" }); @@ -19,9 +21,9 @@ function sleep(ms) { } async function browserSocket() { - for (let i = 0; i < 40; i += 1) { + for (let i = 0; i < 50; i += 1) { try { - const version = await (await fetch("http://127.0.0.1:9222/json/version")).json(); + const version = await (await fetch("http://127.0.0.1:9333/json/version")).json(); return version.webSocketDebuggerUrl; } catch { await sleep(150); @@ -30,10 +32,9 @@ async function browserSocket() { throw new Error("chrome did not open a debugging port"); } -let id = 0; +let seq = 0; function cdp(ws) { const pending = new Map(); - const events = new Map(); ws.addEventListener("message", (event) => { const message = JSON.parse(event.data); if (message.id && pending.has(message.id)) { @@ -41,26 +42,14 @@ function cdp(ws) { pending.delete(message.id); if (message.error) reject(new Error(JSON.stringify(message.error))); else resolve(message.result); - } else if (message.method) { - for (const fn of events.get(message.method) || []) fn(message.params); } }); return { call(method, params = {}) { return new Promise((resolve, reject) => { - const next = ++id; - pending.set(next, { resolve, reject }); - ws.send(JSON.stringify({ id: next, method, params })); - }); - }, - once(method) { - return new Promise((resolve) => { - const list = events.get(method) || []; - list.push((params) => { - events.set(method, (events.get(method) || []).filter((fn) => fn !== list[list.length - 1])); - resolve(params); - }); - events.set(method, list); + const id = ++seq; + pending.set(id, { resolve, reject }); + ws.send(JSON.stringify({ id, method, params })); }); }, }; @@ -70,49 +59,148 @@ const browser = new WebSocket(await browserSocket()); await new Promise((resolve) => browser.addEventListener("open", resolve)); const send = cdp(browser); const { targetId } = await send.call("Target.createTarget", { url: "about:blank" }); -const { webSocketDebuggerUrl } = (await (await fetch("http://127.0.0.1:9222/json/list")).json()) +const { webSocketDebuggerUrl } = (await (await fetch("http://127.0.0.1:9333/json/list")).json()) .find((target) => target.id === targetId); const page = new WebSocket(webSocketDebuggerUrl); await new Promise((resolve) => page.addEventListener("open", resolve)); const call = cdp(page); await call.call("Page.enable"); await call.call("Runtime.enable"); +try { + await call.call("Browser.grantPermissions", { + origin: base, + permissions: ["clipboardReadWrite", "clipboardSanitizedWrite"], + }); +} catch { + // Clipboard is best-effort in this headless session. +} + +async function evaluate(expression) { + const result = await call.call("Runtime.evaluate", { + expression, + awaitPromise: true, + returnByValue: true, + }); + if (result.exceptionDetails) { + const detail = result.exceptionDetails.exception?.description || result.exceptionDetails.text; + throw new Error(detail || "page exception"); + } + return result.result?.value; +} -async function shot(name, width, height, fan) { +async function open(urlPath, width, height, mobile) { await call.call("Emulation.setDeviceMetricsOverride", { width, height, deviceScaleFactor: 1, - mobile: width < 500, + mobile, }); - const loaded = call.once("Page.loadEventFired"); - const url = fan ? `${base}?spread=1` : base; - await call.call("Page.navigate", { url }); - await loaded; - await call.call("Runtime.evaluate", { - expression: `document.fonts.ready.then(() => new Promise((resolve) => { - const started = performance.now(); - const tick = () => { - const live = document.querySelector(".stage")?.classList.contains("is-live"); - if (live || performance.now() - started > 2500) resolve(live ? "live" : "poster"); - else requestAnimationFrame(tick); - }; - tick(); - }))`, - awaitPromise: true, - }); - await sleep(fan ? 700 : 1200); - const shot = await call.call("Page.captureScreenshot", { format: "png" }); - const file = `${outDir}/${name}.png`; - writeFileSync(file, Buffer.from(shot.data, "base64")); + await call.call("Page.navigate", { url: `${base}${urlPath}` }); + await call.call("Page.loadEventFired").catch(() => {}); + for (let i = 0; i < 40; i += 1) { + const ready = await evaluate("document.readyState"); + if (ready === "complete") break; + await sleep(50); + } + await evaluate("document.fonts.ready"); + await sleep(40); +} + +async function shot(name) { + const { data } = await call.call("Page.captureScreenshot", { format: "png" }); + const file = path.join(outDir, `${name}.png`); + writeFileSync(file, Buffer.from(data, "base64")); console.log(file); } +function assert(condition, message) { + if (!condition) throw new Error(message); +} + try { - await shot("desktop-hero", 1440, 900, false); - await shot("desktop-fan", 1440, 900, true); - await shot("mobile-hero", 390, 844, false); - await shot("mobile-fan", 390, 844, true); +const pages = [ + ["/ ", "home"], + ["/docs", "docs"], + ["/skills/reframe", "skill"], + ["/parity", "parity"], +]; + +for (const [urlPath, name] of pages) { + const route = urlPath.trim(); + await open(route, 1440, 900, false); + if (name === "parity") { + await evaluate("(() => { const el = document.querySelector('.filters'); window.scrollTo(0, el.getBoundingClientRect().top + window.scrollY - 80); })()"); + } + await shot(`${name}-desktop`); + await open(route, 390, 844, true); + if (name === "parity") { + await evaluate("(() => { const el = document.querySelector('.filters'); window.scrollTo(0, el.getBoundingClientRect().top + window.scrollY - 64); })()"); + } + await shot(`${name}-mobile`); +} + +await open("/", 1440, 900, false); +const fontReady = await evaluate("document.fonts.check('16px \"Paper Mono\"')"); +assert(fontReady === true, "Paper Mono did not load"); +const windows = await evaluate(` + document.querySelector("#tab-1-1").click(); + const selected = document.querySelector("#tab-1-1").getAttribute("aria-selected"); + const text = document.querySelector("#panel-1-1").innerText; + selected === "true" && text.includes("install.ps1") && document.querySelector("#panel-1-0").hidden === true +`); +assert(windows === true, "install tabs did not switch to Windows"); +const copied = await evaluate(` + (async () => { + const button = document.querySelector("#panel-1-1 [data-copy]"); + button.click(); + await new Promise((resolve) => setTimeout(resolve, 50)); + const wrote = await navigator.clipboard.readText(); + return button.textContent === "Copied" && wrote.includes("install.ps1"); + })() +`); +assert(copied === true, "copy button did not write the Windows command"); + +await open("/parity", 1440, 900, false); +const filtered = await evaluate(`(() => { + const input = document.querySelector("#parity-q"); + input.value = "canary"; + input.dispatchEvent(new Event("input", { bubbles: true })); + const text = document.querySelector("#parity-count").textContent; + const shown = [...document.querySelectorAll("[data-parity-row]")].filter((row) => !row.hidden).length; + return text.includes("of 520") && shown > 0 && shown < 520; +})()`); +assert(filtered === true, "parity search did not filter"); +const source = await evaluate(`(() => { + const input = document.querySelector("#parity-q"); + input.value = ""; + input.dispatchEvent(new Event("input", { bubbles: true })); + document.querySelector('[data-filter="source"][data-value="tstack"]').click(); + const pressed = document.querySelector('[data-filter="source"][data-value="tstack"]').getAttribute("aria-pressed"); + const shown = [...document.querySelectorAll("[data-parity-row]")].filter((row) => !row.hidden).length; + return pressed === "true" && shown > 0 && shown < 520; +})()`); +assert(source === true, "parity source filter did not apply"); + +await open("/docs", 390, 844, true); +const menu = await evaluate(` + const button = document.querySelector(".menu"); + const before = getComputedStyle(document.querySelector(".top nav")).display; + button.click(); + const after = getComputedStyle(document.querySelector(".top nav")).display; + before === "none" && after !== "none" && button.getAttribute("aria-expanded") === "true" +`); +assert(menu === true, "mobile menu did not open"); +await shot("docs-mobile-menu"); + +await open("/og.html", 1280, 640, false); +const { data } = await call.call("Page.captureScreenshot", { format: "png", clip: { x: 0, y: 0, width: 1280, height: 640, scale: 1 } }); +const og = Buffer.from(data, "base64"); +writeFileSync(path.join(outDir, "social-preview.png"), og); +writeFileSync("/workspace/.github/social-preview.png", og); +writeFileSync("/workspace/site/dist/social-preview.png", og); +console.log("social-preview.png"); + +console.log("shots ok"); } finally { browser.close(); page.close(); diff --git a/site/src/glass.js b/site/src/glass.js deleted file mode 100644 index 56f8c60..0000000 --- a/site/src/glass.js +++ /dev/null @@ -1,182 +0,0 @@ -const VERT = `#version 300 es -layout(location=0) in vec2 aPos; -layout(location=1) in vec2 aUv; -out vec2 vUv; -void main() { - vUv = aUv; - gl_Position = vec4(aPos, 0.0, 1.0); -} -`; - -const FRAG = `#version 300 es -precision highp float; -in vec2 vUv; -uniform float uSeed; -uniform float uTime; -uniform float uHover; -uniform float uMode; -uniform vec2 uSize; -out vec4 frag; - -void main() { - if (uMode < 0.5) { - vec2 q = (vUv - 0.5) * vec2(1.15, 0.72); - float d = length(q); - float a = smoothstep(0.52, 0.12, d) * 0.22; - vec3 ink = vec3(0.22, 0.16, 0.10); - frag = vec4(ink * a, a); - return; - } - - vec2 p = vUv * 2.0 - 1.0; - float rad = min(uSize.y * 0.5, 18.0); - vec2 box = uSize * 0.5; - vec2 q = abs(p * box) - (box - rad); - float sdf = length(max(q, 0.0)) + min(max(q.x, q.y), 0.0) - rad; - if (sdf > 0.6) discard; - - float edge = smoothstep(-16.0, 0.5, sdf); - float film = vUv.x * 1.35 + vUv.y * 0.45 + uSeed * 0.23 + uTime * 0.05; - vec3 irid = 0.58 + 0.42 * cos(6.2831853 * (vec3(film) + vec3(0.0, 0.33, 0.66))); - vec3 frost = vec3(0.965, 0.955, 0.94); - vec3 col = mix(frost, irid, 0.34 + edge * 0.5); - float streak = sin((p.x + uSeed) * 7.0 + uTime * 0.35); - col += irid * smoothstep(0.2, 1.0, streak) * 0.12; - col += vec3(1.0, 0.99, 0.96) * smoothstep(0.35, 0.0, vUv.y) * 0.18; - col *= mix(0.88, 1.0, smoothstep(0.95, 0.4, vUv.y)); - col = mix(col, vec3(1.0), uHover * 0.05); - float alpha = (0.8 + edge * 0.12 + uHover * 0.04) * smoothstep(0.6, -0.8, sdf); - frag = vec4(col * alpha, alpha); -} -`; - -function compile(gl, type, source) { - const shader = gl.createShader(type); - gl.shaderSource(shader, source); - gl.compileShader(shader); - if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) { - gl.deleteShader(shader); - return null; - } - return shader; -} - -export function mountGlass(stage) { - const canvas = stage.querySelector("canvas"); - const gl = canvas.getContext("webgl2", { - alpha: true, - antialias: true, - premultipliedAlpha: true, - powerPreference: "high-performance", - }); - if (!gl) return null; - - const vs = compile(gl, gl.VERTEX_SHADER, VERT); - const fs = compile(gl, gl.FRAGMENT_SHADER, FRAG); - if (!vs || !fs) return null; - const program = gl.createProgram(); - gl.attachShader(program, vs); - gl.attachShader(program, fs); - gl.linkProgram(program); - if (!gl.getProgramParameter(program, gl.LINK_STATUS)) return null; - - const buffer = gl.createBuffer(); - gl.bindBuffer(gl.ARRAY_BUFFER, buffer); - gl.useProgram(program); - gl.enable(gl.BLEND); - gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); - const loc = { - seed: gl.getUniformLocation(program, "uSeed"), - time: gl.getUniformLocation(program, "uTime"), - hover: gl.getUniformLocation(program, "uHover"), - mode: gl.getUniformLocation(program, "uMode"), - size: gl.getUniformLocation(program, "uSize"), - }; - - const plates = () => [...stage.querySelectorAll(".plate")]; - - function draw(time, hoverIndex) { - const cssW = stage.clientWidth; - const cssH = stage.clientHeight; - if (cssW < 2 || cssH < 2) return; - const dpr = Math.min(window.devicePixelRatio || 1, 1.75); - const w = Math.round(cssW * dpr); - const h = Math.round(cssH * dpr); - if (canvas.width !== w || canvas.height !== h) { - canvas.width = w; - canvas.height = h; - } - gl.viewport(0, 0, w, h); - gl.clearColor(0, 0, 0, 0); - gl.clear(gl.COLOR_BUFFER_BIT); - - const box = stage.getBoundingClientRect(); - const list = plates(); - const rects = list.map((plate) => { - const r = plate.getBoundingClientRect(); - return { - x: (r.left - box.left) * dpr, - y: (r.top - box.top) * dpr, - w: r.width * dpr, - h: r.height * dpr, - }; - }); - - const union = rects.reduce( - (acc, r) => ({ - x: Math.min(acc.x, r.x), - y: Math.min(acc.y, r.y), - r: Math.max(acc.r, r.x + r.w), - b: Math.max(acc.b, r.y + r.h), - }), - { x: w, y: h, r: 0, b: 0 }, - ); - drawQuad(gl, buffer, loc, union.x - 24 * dpr, union.b - 8 * dpr, union.r - union.x + 48 * dpr, 54 * dpr, w, h, { - mode: 0, - seed: 0, - time, - hover: 0, - }); - - for (let i = rects.length - 1; i >= 0; i -= 1) { - const r = rects[i]; - const padX = 6 * dpr; - const padY = 1.5 * dpr; - drawQuad(gl, buffer, loc, r.x - padX, r.y - padY, r.w + padX * 2, r.h + padY * 2, w, h, { - mode: 1, - seed: i * 1.37, - time, - hover: hoverIndex === i ? 1 : 0, - }); - } - } - - return { draw }; -} - -function drawQuad(gl, buffer, loc, x, y, bw, bh, w, h, style) { - const x0 = (x / w) * 2 - 1; - const x1 = ((x + bw) / w) * 2 - 1; - const y0 = 1 - (y / h) * 2; - const y1 = 1 - ((y + bh) / h) * 2; - const data = new Float32Array([ - x0, y0, 0, 0, - x1, y0, 1, 0, - x0, y1, 0, 1, - x0, y1, 0, 1, - x1, y0, 1, 0, - x1, y1, 1, 1, - ]); - gl.bindBuffer(gl.ARRAY_BUFFER, buffer); - gl.bufferData(gl.ARRAY_BUFFER, data, gl.DYNAMIC_DRAW); - gl.enableVertexAttribArray(0); - gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 16, 0); - gl.enableVertexAttribArray(1); - gl.vertexAttribPointer(1, 2, gl.FLOAT, false, 16, 8); - gl.uniform1f(loc.mode, style.mode); - gl.uniform1f(loc.seed, style.seed); - gl.uniform1f(loc.time, style.time); - gl.uniform1f(loc.hover, style.hover); - gl.uniform2f(loc.size, bw, bh); - gl.drawArrays(gl.TRIANGLES, 0, 6); -} diff --git a/site/src/main.js b/site/src/main.js deleted file mode 100644 index 1af9841..0000000 --- a/site/src/main.js +++ /dev/null @@ -1,178 +0,0 @@ -import { mountGlass } from "./glass.js"; - -const reduced = window.matchMedia("(prefers-reduced-motion: reduce)").matches; -const stage = document.querySelector(".stage"); -const pin = document.querySelector(".pin"); -const stack = document.querySelector(".stack"); -const plates = [...document.querySelectorAll(".plate")]; -const live = document.querySelector("#plate-live"); -const glass = mountGlass(stage); - -let pointerX = 0; -let pointerY = 0; -let hover = -1; -let spread = 0; -let running = false; - -function clamp(value, min, max) { - return Math.min(max, Math.max(min, value)); -} - -function format(value) { - return new Intl.NumberFormat("en-US").format(value); -} - -function applySpread(value) { - spread = value; - stack.style.setProperty("--spread", value.toFixed(4)); -} - -const forcedSpread = new URLSearchParams(window.location.search).get("spread"); - -function readSpread() { - if (forcedSpread != null && forcedSpread !== "") { - const value = Number(forcedSpread); - if (Number.isFinite(value)) return clamp(value, 0, 1); - } - if (!pin) return 0; - const rect = pin.getBoundingClientRect(); - const distance = pin.offsetHeight - window.innerHeight; - if (distance <= 0) return 0; - return clamp(-rect.top / distance, 0, 1); -} - -function draw(now) { - if (!glass) return; - const t = reduced ? 0 : now / 1000; - const driftX = reduced ? pointerX : pointerX + Math.sin(t * 0.35) * 0.12; - const driftY = reduced ? pointerY : pointerY + Math.cos(t * 0.28) * 0.08; - stack.style.setProperty("--px", driftX.toFixed(4)); - stack.style.setProperty("--py", driftY.toFixed(4)); - glass.draw(t, hover); -} - -function frame(now) { - applySpread(readSpread()); - draw(now); - if (running) requestAnimationFrame(frame); -} - -function start() { - if (glass) stage.classList.add("is-live"); - if (reduced) { - applySpread(readSpread()); - draw(0); - return; - } - running = true; - requestAnimationFrame(frame); -} - -stage.addEventListener("pointermove", (event) => { - if (reduced) return; - const rect = stage.getBoundingClientRect(); - pointerX = clamp((event.clientX - rect.left) / rect.width - 0.5, -0.5, 0.5); - pointerY = clamp((event.clientY - rect.top) / rect.height - 0.5, -0.5, 0.5); -}); - -stage.addEventListener("pointerleave", () => { - pointerX = 0; - pointerY = 0; - hover = -1; - if (reduced) draw(0); -}); - -plates.forEach((plate, index) => { - plate.addEventListener("pointerenter", () => { - hover = index; - if (reduced) draw(0); - }); - plate.addEventListener("focus", () => { - hover = index; - if (live) live.textContent = plate.getAttribute("aria-label") || ""; - if (reduced) draw(0); - }); - plate.addEventListener("click", () => { - const open = plate.classList.toggle("is-open"); - plate.setAttribute("aria-expanded", open ? "true" : "false"); - plates.forEach((other) => { - if (other !== plate) { - other.classList.remove("is-open"); - other.setAttribute("aria-expanded", "false"); - } - }); - if (live) live.textContent = open ? plate.getAttribute("aria-label") || "" : ""; - hover = index; - if (reduced) draw(0); - }); -}); - -document.querySelectorAll("[data-copy]").forEach((button) => { - button.addEventListener("click", async () => { - const text = button.getAttribute("data-copy") || ""; - try { - await navigator.clipboard.writeText(text); - } catch { - return; - } - const previous = button.getAttribute("aria-label"); - button.classList.add("is-copied"); - button.setAttribute("aria-label", "Copied"); - window.setTimeout(() => { - button.classList.remove("is-copied"); - if (previous) button.setAttribute("aria-label", previous); - }, 1400); - }); -}); - -function countUp(el) { - const target = Number(el.getAttribute("data-count")); - if (!Number.isFinite(target)) return; - if (reduced) { - el.textContent = format(target); - return; - } - const started = performance.now(); - const duration = 900; - function tick(now) { - const t = clamp((now - started) / duration, 0, 1); - const eased = 1 - (1 - t) ** 3; - el.textContent = format(Math.round(target * eased)); - if (t < 1) requestAnimationFrame(tick); - } - requestAnimationFrame(tick); -} - -const counts = [...document.querySelectorAll("[data-count]")]; -if ("IntersectionObserver" in window) { - const seen = new WeakSet(); - const observer = new IntersectionObserver((entries) => { - entries.forEach((entry) => { - if (!entry.isIntersecting || seen.has(entry.target)) return; - seen.add(entry.target); - countUp(entry.target); - }); - }, { threshold: 0.6 }); - counts.forEach((el) => observer.observe(el)); -} else { - counts.forEach(countUp); -} - -window.addEventListener("scroll", () => { - if (!reduced) return; - applySpread(readSpread()); - draw(0); -}, { passive: true }); - -window.addEventListener("resize", () => { - if (reduced) { - applySpread(readSpread()); - draw(0); - } -}); - -if (document.fonts && document.fonts.ready) { - document.fonts.ready.then(start); -} else { - start(); -} diff --git a/site/src/site.css b/site/src/site.css new file mode 100644 index 0000000..b7fdc04 --- /dev/null +++ b/site/src/site.css @@ -0,0 +1,438 @@ +@font-face { + font-family: "Paper Mono"; + src: url("/fonts/PaperMono%5Bwght%5D.woff2") format("woff2"); + font-weight: 100 800; + font-style: normal; + font-display: swap; +} + +:root { + --bg: #0c100e; + --surface: #141a17; + --line: #2c3833; + --text: #f4f7f5; + --muted: #a7b2ac; + --accent: #7ddcb2; + color-scheme: dark; +} + +* { box-sizing: border-box; } +html { background: var(--bg); } +body { + margin: 0; + background: var(--bg); + color: var(--text); + font-family: "Paper Mono", ui-monospace, monospace; + font-size: 16px; + font-weight: 400; + line-height: 1.55; + font-feature-settings: "ss02" 1, "ss03" 1; + text-rendering: optimizeLegibility; +} +code, pre, kbd, .code, .fig, td.fig { + font-feature-settings: "zero" 1; +} + +:focus { outline: none; } +:focus-visible { + outline: 1px solid var(--accent); + outline-offset: 3px; +} +::selection { background: #1c3a2e; color: var(--text); } + +.skip { + position: absolute; + left: 16px; + top: -48px; + z-index: 8; + background: var(--accent); + color: var(--bg); + padding: 10px 14px; + text-decoration: none; +} +.skip:focus { top: 12px; } + +.top { + position: sticky; + top: 0; + z-index: 5; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + gap: 0 24px; + padding: 0 28px; + background: var(--bg); + border-bottom: 1px solid var(--line); +} +.brand { + display: inline-flex; + align-items: center; + gap: 10px; + min-height: 56px; + color: var(--text); + text-decoration: none; + letter-spacing: 0.14em; + text-transform: uppercase; + font-size: 14px; +} +.brand svg { display: block; } +.menu { + display: none; + min-height: 44px; + min-width: 44px; + padding: 0 4px; + border: 0; + background: transparent; + color: var(--text); + font: inherit; + font-size: 13px; + letter-spacing: 0.08em; + text-transform: uppercase; + cursor: pointer; +} +.top nav { + display: flex; + align-items: center; + gap: 4px; +} +.top nav a { + display: inline-flex; + align-items: center; + min-height: 56px; + padding: 0 12px; + color: var(--muted); + text-decoration: none; + font-size: 13px; + letter-spacing: 0.08em; + text-transform: uppercase; +} +.top nav a[aria-current="page"] { + color: var(--accent); + box-shadow: inset 0 -1px 0 var(--accent); +} + +.band { + display: grid; + grid-template-columns: 88px minmax(0, 1fr); + border-bottom: 1px solid var(--line); +} +.idx { + padding: 36px 0 0 28px; + color: var(--muted); + font-size: 13px; + letter-spacing: 0.08em; + border-right: 1px solid var(--line); +} +.band-body { + padding: 36px 32px 48px; + max-width: 980px; +} +h1, h2, h3, h4 { font-weight: 400; letter-spacing: -0.03em; line-height: 1.05; } +h1 { + margin: 0; + font-size: clamp(28px, 4.4vw, 64px); + max-width: 22em; +} +h2 { margin: 0 0 16px; font-size: clamp(28px, 3vw, 40px); max-width: 22ch; } +h3 { margin: 28px 0 8px; font-size: 20px; letter-spacing: -0.02em; } +h4 { margin: 22px 0 8px; font-size: 16px; letter-spacing: 0; } +.kicker { + margin: 0 0 16px; + color: var(--accent); + font-size: 13px; + letter-spacing: 0.12em; + text-transform: uppercase; +} +.lede { + margin: 24px 0 0; + max-width: 42ch; + font-size: 18px; + line-height: 1.45; + color: var(--text); +} +.prose { max-width: 68ch; } +.prose > :first-child { margin-top: 0; } +.prose p, .prose li { color: var(--text); } +.prose p { margin: 0 0 16px; } +.prose ul, .prose ol { margin: 0 0 16px; padding-left: 1.25em; } +.prose li { margin: 4px 0; } +.prose a, .site-foot a, .page > p a { + color: var(--accent); + text-underline-offset: 3px; +} +.muted { color: var(--muted); } +.page > .kicker { margin-top: 0; } + +.sheet { + display: grid; + grid-template-columns: 220px minmax(0, 1fr); + align-items: start; + min-height: calc(100vh - 220px); +} +.side { + position: sticky; + top: 57px; + max-height: calc(100vh - 57px); + overflow: auto; + padding: 20px 8px 32px 20px; + border-right: 1px solid var(--line); +} +.side .kicker { padding-left: 8px; } +.side a { + display: flex; + align-items: center; + min-height: 44px; + padding: 0 8px; + color: var(--muted); + text-decoration: none; + font-size: 14px; +} +.side a[aria-current="page"] { color: var(--accent); box-shadow: inset 2px 0 0 var(--accent); } +.page { padding: 36px 32px 72px; min-width: 0; } +.page.wide .prose { max-width: none; } + +.roster { list-style: none; margin: 8px 0 0; padding: 0; } +.roster a { + display: grid; + grid-template-columns: 36px 132px minmax(0, 1fr) auto; + gap: 12px 16px; + align-items: baseline; + min-height: 44px; + padding: 12px 0; + border-top: 1px solid var(--line); + color: inherit; + text-decoration: none; +} +.roster li:last-child a { border-bottom: 1px solid var(--line); } +.roster .num, .roster .tok { color: var(--muted); font-size: 13px; } +.roster .name { color: var(--text); } +.roster a:hover .name, .roster a:focus-visible .name { color: var(--accent); } + +table { + width: 100%; + border-collapse: collapse; + font-size: 14px; + line-height: 1.45; +} +caption { + caption-side: bottom; + padding: 12px 0 0; + text-align: left; + color: var(--muted); + font-size: 13px; +} +th, td { + padding: 10px 12px; + border-bottom: 1px solid var(--line); + text-align: left; + vertical-align: top; +} +th { + color: var(--muted); + font-weight: 400; + font-size: 13px; + letter-spacing: 0.06em; + text-transform: uppercase; +} +td.fig, .fig { color: var(--accent); } +.table-wrap { overflow-x: auto; margin: 8px 0 20px; } +.parity { min-width: 1120px; } +.parity th, .parity td { white-space: nowrap; } +.parity th:last-child, .parity td:last-child { white-space: normal; min-width: 420px; } + +.filters { margin: 8px 0 20px; } +.filters label { + display: block; + margin-bottom: 8px; + color: var(--muted); + font-size: 13px; + letter-spacing: 0.08em; + text-transform: uppercase; +} +input[type="search"] { + width: min(100%, 440px); + min-height: 44px; + padding: 0 12px; + border: 1px solid var(--line); + border-radius: 0; + background: var(--bg); + color: var(--text); + font: inherit; +} +.groups { display: flex; flex-wrap: wrap; gap: 18px 28px; margin-top: 16px; } +.group { display: flex; flex-wrap: wrap; gap: 0; } +.group button { + min-height: 44px; + padding: 0 12px; + border: 0; + border-bottom: 1px solid transparent; + border-radius: 0; + background: transparent; + color: var(--muted); + font: inherit; + font-size: 13px; + letter-spacing: 0.04em; + cursor: pointer; +} +.group button[aria-pressed="true"] { + color: var(--accent); + border-bottom-color: var(--accent); +} +#parity-count { margin: 12px 0 0; color: var(--muted); font-size: 13px; } + +.tabs { margin: 20px 0; border: 1px solid var(--line); background: var(--surface); } +[role="tablist"] { display: flex; border-bottom: 1px solid var(--line); } +[role="tab"] { + min-height: 44px; + padding: 0 16px; + border: 0; + border-bottom: 1px solid transparent; + border-radius: 0; + background: transparent; + color: var(--muted); + font: inherit; + font-size: 13px; + letter-spacing: 0.06em; + text-transform: uppercase; + cursor: pointer; + margin-bottom: -1px; +} +[role="tab"][aria-selected="true"] { + color: var(--accent); + border-bottom-color: var(--accent); +} +[role="tabpanel"] { padding: 0 0 4px; } +[role="tabpanel"] figure.code { border: 0; background: transparent; margin: 0; } + +figure.code { + margin: 20px 0; + border: 1px solid var(--line); + background: var(--surface); +} +figure.code figcaption { + display: flex; + align-items: stretch; + justify-content: space-between; + min-height: 44px; + border-bottom: 1px solid var(--line); + color: var(--muted); + font-size: 13px; + letter-spacing: 0.04em; +} +figure.code figcaption span { + display: flex; + align-items: center; + padding: 0 14px; +} +button[data-copy] { + min-height: 44px; + min-width: 72px; + padding: 0 14px; + border: 0; + border-left: 1px solid var(--line); + border-radius: 0; + background: transparent; + color: var(--text); + font: inherit; + font-size: 13px; + letter-spacing: 0.06em; + text-transform: uppercase; + cursor: pointer; +} +pre { + margin: 0; + padding: 16px 14px 18px; + overflow: auto; + font-size: 14px; + line-height: 1.55; +} +code { font-family: inherit; font-size: 0.92em; } +pre code { font-size: 14px; } +.prose :not(pre) > code { + padding: 0 0.2em; + color: var(--text); +} +.cm { color: var(--muted); } +.st { color: var(--accent); } +.kw { color: var(--text); } +.fl { color: #d5e2db; } +.nu { color: #d5e2db; } + +aside.note { + margin: 20px 0; + padding: 2px 0 2px 16px; + border-left: 1px solid var(--accent); +} +aside.note .kicker { margin-bottom: 8px; } +aside.note p:last-child { margin-bottom: 0; } + +pre.legal { + margin: 0; + white-space: pre-wrap; + font-size: 13px; + line-height: 1.55; + color: var(--text); +} + +.site-foot { + padding: 28px 28px 40px; + border-top: 1px solid var(--line); +} +.foot-links { + display: flex; + flex-wrap: wrap; + gap: 8px 22px; + margin-bottom: 16px; +} +.foot-links a { font-size: 14px; } +.disclaimer, .colophon { + max-width: 78ch; + margin: 0; + color: var(--muted); + font-size: 13px; + line-height: 1.5; +} +.colophon { margin-top: 12px; } +.colophon a { color: var(--muted); } + +.playbook { margin-top: 36px; padding-top: 8px; border-top: 1px solid var(--line); } + +@media (max-width: 860px) { + .menu { display: inline-flex; align-items: center; justify-content: center; } + .top { padding: 0 20px; } + .top nav { + display: none; + flex-direction: column; + align-items: stretch; + width: 100%; + padding-bottom: 8px; + } + .top.is-open nav { display: flex; } + .top nav a { + min-height: 44px; + padding: 0; + border-top: 1px solid var(--line); + } + .band { grid-template-columns: 1fr; } + .idx { + padding: 12px 20px; + border-right: 0; + border-bottom: 1px solid var(--line); + } + .band-body, .page { padding: 28px 20px 40px; } + .sheet { grid-template-columns: 1fr; } + .side { + position: static; + max-height: none; + display: flex; + flex-wrap: wrap; + gap: 0 8px; + padding: 8px 12px 12px; + border-right: 0; + border-bottom: 1px solid var(--line); + } + .side .kicker { width: 100%; padding: 12px 8px 0; } + .roster a { grid-template-columns: 32px 1fr auto; } + .roster .desc { grid-column: 2 / -1; } +} diff --git a/site/src/site.js b/site/src/site.js new file mode 100644 index 0000000..d680c7a --- /dev/null +++ b/site/src/site.js @@ -0,0 +1,107 @@ +const menu = document.querySelector(".menu"); +const top = document.querySelector(".top"); + +function setMenu(open) { + if (!menu || !top) return; + menu.setAttribute("aria-expanded", String(open)); + menu.textContent = open ? "Close" : "Menu"; + top.classList.toggle("is-open", open); +} + +menu?.addEventListener("click", () => { + setMenu(menu.getAttribute("aria-expanded") !== "true"); +}); + +document.querySelector(".top nav")?.addEventListener("click", (event) => { + if (event.target.closest("a")) setMenu(false); +}); + +document.addEventListener("keydown", (event) => { + if (event.key === "Escape" && menu?.getAttribute("aria-expanded") === "true") { + setMenu(false); + menu.focus(); + } + const tab = event.target.closest?.("[role=tab]"); + if (!tab) return; + const tabs = [...tab.closest("[role=tablist]").querySelectorAll("[role=tab]")]; + const index = tabs.indexOf(tab); + let next = null; + if (event.key === "ArrowRight") next = tabs[(index + 1) % tabs.length]; + if (event.key === "ArrowLeft") next = tabs[(index - 1 + tabs.length) % tabs.length]; + if (event.key === "Home") next = tabs[0]; + if (event.key === "End") next = tabs[tabs.length - 1]; + if (!next) return; + event.preventDefault(); + selectTab(next); + next.focus(); +}); + +function selectTab(tab) { + const tabs = [...tab.closest("[role=tablist]").querySelectorAll("[role=tab]")]; + for (const item of tabs) { + const on = item === tab; + item.setAttribute("aria-selected", String(on)); + item.tabIndex = on ? 0 : -1; + const panel = document.getElementById(item.getAttribute("aria-controls")); + if (panel) panel.hidden = !on; + } +} + +document.addEventListener("click", (event) => { + const tab = event.target.closest?.("[role=tab]"); + if (tab) selectTab(tab); + const copy = event.target.closest?.("[data-copy]"); + if (copy) copyCode(copy); + const filter = event.target.closest?.("[data-filter]"); + if (filter) applyFilter(filter); +}); + +async function copyCode(button) { + const code = button.closest("figure")?.querySelector("code"); + if (!code || !navigator.clipboard) return; + try { + await navigator.clipboard.writeText(code.textContent); + } catch { + return; + } + const previous = button.textContent; + button.textContent = "Copied"; + window.setTimeout(() => { + button.textContent = previous; + }, 1200); +} + +const rows = [...document.querySelectorAll("[data-parity-row]")]; +const query = document.querySelector("#parity-q"); +const count = document.querySelector("#parity-count"); +const parity = { source: "", disposition: "", text: "" }; + +function applyFilter(button) { + const group = button.parentElement; + for (const item of group.querySelectorAll("[data-filter]")) { + item.setAttribute("aria-pressed", String(item === button)); + } + parity[button.dataset.filter] = button.dataset.value; + renderParity(); +} + +function renderParity() { + if (!rows.length || !count) return; + const needle = parity.text.trim().toLowerCase(); + let shown = 0; + for (const row of rows) { + const ok = (!parity.source || row.dataset.source === parity.source) + && (!parity.disposition || row.dataset.disposition === parity.disposition) + && (!needle || row.dataset.text.includes(needle)); + row.hidden = !ok; + if (ok) shown += 1; + } + count.textContent = shown === rows.length + ? `${rows.length} rows` + : `${shown} of ${rows.length} rows`; +} + +query?.addEventListener("input", () => { + parity.text = query.value; + renderParity(); +}); diff --git a/site/src/styles.css b/site/src/styles.css deleted file mode 100644 index b1f019d..0000000 --- a/site/src/styles.css +++ /dev/null @@ -1,462 +0,0 @@ -@font-face { - font-family: Inter; - src: url("/fonts/inter-regular.woff2") format("woff2"); - font-weight: 400; - font-style: normal; - font-display: swap; -} -@font-face { - font-family: Inter; - src: url("/fonts/inter-bold.woff2") format("woff2"); - font-weight: 700; - font-style: normal; - font-display: swap; -} - -:root { - --paper: #f7f4ef; - --ink: #16140f; - --muted: #433e37; - --soft: #6d675e; - --pill: #1c1a16; - --card: #fffcf8; - --line: rgba(22, 20, 15, 0.08); - --spread: 0; - --px: 0; - --py: 0; - color-scheme: light; -} - -* { box-sizing: border-box; } -html { scroll-behavior: smooth; } -body { - margin: 0; - background: var(--paper); - color: var(--ink); - font-family: Inter, ui-sans-serif, system-ui, sans-serif; - font-size: 17px; - line-height: 1.5; -} -img, svg { display: block; } -a { color: inherit; } -button, input { font: inherit; } -code, .mono { font-family: ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace; } - -.skip { - position: absolute; - left: 12px; - top: -40px; - background: var(--ink); - color: var(--paper); - padding: 8px 12px; - z-index: 20; -} -.skip:focus { top: 12px; } - -.top { - position: sticky; - top: 0; - z-index: 6; - display: grid; - grid-template-columns: 1fr auto 1fr; - align-items: center; - gap: 16px; - padding: 16px 28px; - background: #f7f4ef; - border-bottom: 1px solid transparent; -} -.brand { - display: inline-flex; - align-items: center; - gap: 10px; - font-weight: 700; - letter-spacing: -0.04em; - text-decoration: none; - font-size: 18px; -} -.brand svg { width: 22px; height: 22px; } -.top nav { - display: flex; - gap: 22px; - justify-content: center; -} -.top nav a { - text-decoration: none; - color: var(--muted); - font-size: 15px; -} -.top nav a:hover { color: var(--ink); } -.gh { - justify-self: end; - text-decoration: none; - border: 1px solid rgba(22, 20, 15, 0.16); - border-radius: 999px; - padding: 8px 14px; - font-size: 14px; - background: #fff; -} - -.hero { padding: 28px 24px 8px; } -.hero-copy, .plan-card, .kicker, .aside, .section { - width: min(1080px, 100%); - margin-inline: auto; -} -h1 { - margin: 4px auto 14px; - text-align: center; - font-size: clamp(30px, 3.15vw, 46px); - line-height: 1.05; - letter-spacing: -0.048em; - font-weight: 700; -} - -.install-pill { - display: flex; - align-items: center; - justify-content: space-between; - gap: 12px; - width: min(560px, 100%); - margin: 0 auto 12px; - padding: 8px 8px 8px 18px; - background: var(--pill); - color: #f7f4ef; - border-radius: 999px; - box-shadow: 0 10px 30px rgba(28, 26, 22, 0.12); -} -.install-pill code { - font-family: Inter, ui-sans-serif, system-ui, sans-serif; - font-size: 14.5px; - letter-spacing: -0.02em; - white-space: nowrap; - overflow: auto; -} -.copy { - flex: 0 0 auto; - width: 38px; - height: 38px; - border: 0; - border-radius: 999px; - background: rgba(247, 244, 239, 0.12); - color: #f7f4ef; - cursor: pointer; -} -.copy:hover, .copy:focus-visible { background: rgba(247, 244, 239, 0.22); } -.copy.is-copied { background: #efe7d4; color: var(--ink); } - -.badges { - display: flex; - flex-wrap: wrap; - justify-content: center; - gap: 8px; - margin: 0; - padding: 0; - list-style: none; -} -.badges li { - background: rgba(255, 252, 248, 0.86); - border: 1px solid var(--line); - box-shadow: 0 6px 18px rgba(60, 40, 20, 0.04); - border-radius: 999px; - padding: 6px 12px; - font-size: 13px; - color: var(--muted); -} - -.pin { height: 175vh; } -.pin-sticky { - position: sticky; - top: 58px; - padding: 2px 0 0; -} -.stage { - position: relative; - width: min(1040px, 100%); - margin: 0 auto; - padding: 8px 8px 10px; -} -.stage canvas { - position: absolute; - inset: 0; - width: 100%; - height: 100%; - z-index: 0; - pointer-events: none; -} -.stack { - position: relative; - z-index: 1; - display: flex; - flex-direction: column; - align-items: center; - gap: calc(4px + var(--spread) * 6px); - transform: translate3d(calc(var(--px) * 14px), calc(var(--py) * 8px), 0); -} -.row { - width: min(860px, 100%); - display: grid; - grid-template-columns: 1fr minmax(180px, 360px) 1fr; - column-gap: 8px; - align-items: center; -} -.plate { - grid-column: 2; - position: relative; - width: 100%; - min-height: 28px; - border: 0; - border-radius: 12px; - background: linear-gradient(180deg, rgba(255, 255, 255, 0.72), rgba(255, 255, 255, 0.38)); - box-shadow: 0 10px 24px rgba(70, 50, 20, 0.05), inset 0 1px 0 rgba(255, 255, 255, 0.85); - color: var(--ink); - cursor: pointer; - padding: 6px 12px; -} -.stage.is-live .plate { - background: transparent; - box-shadow: none; -} -.pname { - display: block; - text-align: center; - font-size: 13.5px; - letter-spacing: -0.02em; -} -.pdesc { - grid-column: 3; - margin: 0; - pointer-events: none; - color: var(--muted); - font-size: 14px; - line-height: 1.3; - max-height: calc(var(--spread) * 2.8em); - overflow: hidden; - opacity: var(--spread); -} -.pmeta { - position: absolute; - left: 50%; - top: calc(100% + 8px); - transform: translateX(-50%); - background: var(--ink); - color: #f7f4ef; - border-radius: 999px; - padding: 4px 10px; - font-size: 12px; - white-space: nowrap; - opacity: 0; - pointer-events: none; - z-index: 2; -} -.plate:hover .pmeta, -.plate:focus-visible .pmeta, -.plate.is-open .pmeta { opacity: 1; } - -.plan-card { - display: grid; - grid-template-columns: 1fr auto 1fr; - gap: 12px; - align-items: end; - background: var(--card); - border: 1px solid var(--line); - border-radius: 28px; - box-shadow: 0 20px 50px rgba(60, 40, 20, 0.06); - padding: 16px 28px 14px; - margin-top: 4px; -} -.plan-card p { margin: 0; } -.plan-label { - color: var(--muted); - font-size: 15px; - margin-bottom: 8px; -} -.plan-num { - font-size: clamp(40px, 5vw, 64px); - line-height: 0.95; - letter-spacing: -0.05em; - font-weight: 700; -} -.plan-side .plan-num { font-weight: 700; color: #2a261f; } -.unit { font-size: 18px; font-weight: 400; letter-spacing: 0; margin-left: 6px; } -.underline { - width: 92px; - height: 4px; - border-radius: 4px; - background: var(--ink); - margin-top: 10px; -} -.plan-arrow { - width: 42px; - height: 42px; - align-self: center; -} -.kicker, .aside { - text-align: center; - color: var(--muted); -} -.kicker { margin: 14px auto 4px; font-size: 15px; } -.aside { margin: 0 auto 8px; font-size: 13px; } - -.section { padding: 72px 24px; } -.section h2 { - font-size: clamp(32px, 4vw, 48px); - letter-spacing: -0.045em; - line-height: 1.05; - margin: 0 0 12px; -} -.lede { max-width: 38em; color: var(--muted); margin: 0 0 28px; } - -.compare { display: grid; gap: 22px; } -.compare article { - background: var(--card); - border: 1px solid var(--line); - border-radius: 22px; - padding: 18px 20px 16px; -} -.compare h3 { margin: 0 0 12px; font-size: 16px; font-weight: 700; } -.meter { display: grid; gap: 8px; } -.meter div { display: grid; grid-template-columns: 88px 1fr auto; gap: 10px; align-items: center; font-size: 14px; } -.track { height: 10px; background: rgba(22, 20, 15, 0.06); border-radius: 999px; overflow: hidden; } -.track span { - display: block; - height: 100%; - width: max(3px, calc(var(--share) * 100%)); - background: var(--ink); - transform-origin: left center; - animation: grow 1s cubic-bezier(0.2, 0.8, 0.2, 1) both; -} -.track.ghost span { background: #c9c1b4; } -.num { font-variant-numeric: tabular-nums; } - -.grid { - display: grid; - grid-template-columns: repeat(3, 1fr); - gap: 14px; -} -.skill { - background: rgba(255, 252, 248, 0.7); - border: 1px solid var(--line); - border-radius: 18px; - padding: 16px 16px 14px; - min-height: 148px; -} -.skill h3 { margin: 0 0 6px; letter-spacing: -0.03em; } -.skill p { margin: 0; color: var(--muted); font-size: 15px; } -.tokens { margin-top: 12px !important; color: var(--soft) !important; font-size: 13px !important; } - -.plays { - display: grid; - grid-template-columns: repeat(5, 1fr); - gap: 12px; - padding: 0; - margin: 0 0 18px; - list-style: none; -} -.plays li { - background: var(--card); - border: 1px solid var(--line); - border-radius: 18px; - padding: 16px; - min-height: 160px; -} -.plays strong { display: block; margin-bottom: 8px; letter-spacing: -0.03em; } -.plays span { color: var(--muted); font-size: 14.5px; } - -.docs pre, .cmds pre { - background: var(--pill); - color: #f7f4ef; - border-radius: 18px; - padding: 18px 20px; - overflow: auto; - margin: 0; -} -.cmd { - display: grid; - gap: 8px; - margin-bottom: 18px; -} -.cmd header { - display: flex; - justify-content: space-between; - align-items: center; - gap: 12px; -} -.cmd h3 { margin: 0; font-size: 16px; } -.cmd button.copy { - background: var(--paper); - color: var(--ink); - width: auto; - padding: 0 14px; - border-radius: 999px; -} - -.foot { - padding: 28px 24px 48px; - text-align: center; - color: var(--muted); - font-size: 14px; -} -.foot a { color: var(--ink); } - -:focus-visible { - outline: 2px solid var(--ink); - outline-offset: 3px; -} - -.sr { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - border: 0; -} - -@keyframes grow { - from { transform: scaleX(0); } - to { transform: scaleX(1); } -} - -@media (max-width: 800px) { - .top { - grid-template-columns: 1fr auto; - padding: 12px 16px 10px; - } - .top nav { - grid-column: 1 / -1; - justify-content: flex-start; - gap: 16px; - overflow-x: auto; - padding-bottom: 2px; - } - .hero { padding-inline: 16px; } - h1 { font-size: 34px; max-width: 11em; margin-inline: auto; } - .pin { height: 140vh; } - .pin-sticky { top: 96px; } - .stack { gap: 3px; } - .plate { min-height: 24px; padding: 3px 10px; } - .row { grid-template-columns: 1fr; row-gap: 0; width: min(440px, 100%); } - .plate, .pdesc { grid-column: 1; } - .pdesc { padding-inline: 8px; } - .plan-card { - grid-template-columns: 1fr; - padding: 22px 18px; - border-radius: 22px; - } - .plan-arrow { transform: rotate(90deg); } - .grid, .plays { grid-template-columns: 1fr; } - .section { padding: 48px 16px; } - .install-pill code { font-size: 12.5px; } -} - -@media (max-width: 1100px) and (min-width: 801px) { - .grid { grid-template-columns: 1fr 1fr; } - .plays { grid-template-columns: 1fr 1fr; } -} - -@media (prefers-reduced-motion: reduce) { - html { scroll-behavior: auto; } - .stack { transform: none; } - .track span { animation: none; } -} diff --git a/site/vercel.json b/site/vercel.json index a92ba4a..7013e31 100644 --- a/site/vercel.json +++ b/site/vercel.json @@ -86,6 +86,13 @@ "headers": [ { "key": "Cache-Control", "value": "public, max-age=31536000, immutable" } ] + }, + { + "source": "/fonts/(.*)", + "headers": [ + { "key": "Access-Control-Allow-Origin", "value": "*" }, + { "key": "Cache-Control", "value": "public, max-age=31536000, immutable" } + ] } ], "rewrites": [

    fz++Y<6jA-OUz+-nItN=nFC!kvNh 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 - - - - - HStack · Everything Hermes needs - - - - - - - - - - - - - - - - - - - - -