--- name: page-prototype description: "Axure-like gray HTML wireframe of one page. Shared proto.css/js: slider, tabs, accordion, modal, toggle. Use when: прототип страницы, вайрфрейм, axure, html mock, кликабельный макет, слайдер. SKIP: live UI (dev-orchestrator run); tokens (project-design); slop/layout review (web-design); copy brief only (site-copy-headlines)." argument-hint: "[info]" --- # Page prototype One HTML file per screen + shared kit. Gray boxes. Real copy if a brief exists. Open in a browser. Not a designed page. Not a writer lane. Not Vue. Not npm. ## Info (print and stop) If `$ARGUMENTS` is `info`: print the block below **verbatim**, then **stop**. ```text page-prototype — серый HTML-вайрфрейм + общий kit. Диск /.agents/prototypes/ _kit/proto.css proto.js один раз, не править под страницу INDEX.md site//index.html публичная страница site//empty.html app///index.html экран продукта (= apps/) flows//01-.html Куда класть - лендинг / статья / оффер → site// - кабинет / apps/<имя> → app/<имя>// - воронка → flows//NN-.html Не плодить copy/ и seo/. Kit (только эти виджеты) slider · tabs · accordion · toggle · modal · mobile menu Разметка: data-proto-* как в references/shell.html href kit: site/ и flows/ → ../../_kit/ · app/ → ../../../_kit/ Превью 24ч: htmlshare.pro один файл: publish.py --one пачка: publish.py --bundle (index.html + style.css + script.js + _kit) повтор: тот же URL из .host.json · новая страница — новая папка · --new = новый URL Источник текста 1 .agents/copy/pages/.md 2 .agents/seo/** brief 3 иначе [LABEL] Нельзя - россыпь html в корне · hex бренда · Tailwind · Vue · npm/CDN - своя анимация вместо proto.css ``` ## Disk ```text .agents/prototypes/ _kit/proto.css _kit/proto.js INDEX.md site//index.html ``` | Ask | Path | |---|---| | Публичная страница | `site//index.html` | | Состояние | `site//.html` | | Экран продукта | `app///index.html` | | Клик-путь | `flows//01-.html` | 1. If `_kit/` missing: copy `references/kit/proto.css` and `proto.js` there. Do not edit the kit per page. 2. If `INDEX.md` missing: copy `references/INDEX.template.md`. 3. Copy `references/shell.html` into the page folder. Fix the two `../../_kit/` paths if this is `app/` (`../../../_kit/`). Fill slots. Delete unused widgets. Do not invent a second CSS/JS stack. 4. Update INDEX. If a copy brief exists, one-line `prototype:`. 5. If the human asked to **open / share / preview**, publish to `https://htmlshare.pro` (24h, then gone; disk stays). Same page folder → same URL (script writes `.host.json` and sends `id`). New slug/folder → new POST, new URL. Expired id → new URL, rewrite `.host.json`. `--new` only if they asked for a fresh link. ```bash # one HTML (kit inlined) — short page, no extra css/js python3 /references/publish.py --one .agents/prototypes/site//index.html # separate files so the browser loads CSS/JS like a real site python3 /references/publish.py --bundle .agents/prototypes/site//index.html # force a new URL (do not reuse .host.json) python3 /references/publish.py --new .agents/prototypes/site//index.html ``` No flag: `--bundle` if the folder has `style.css` / `script.js` / extra `.css`/`.js`, else `--one`. **Bundle layout on the host** (`POST /api/pages` `{"files":{...}}`): | Disk | Uploaded as | |---|---| | `index.html` | `index.html` (kit hrefs rewritten to `_kit/proto.css` / `_kit/proto.js`) | | `style.css` | `style.css` — page-local extras only | | `script.js` | `script.js` | | `_kit/proto.css` `proto.js` | `_kit/…` if the HTML still links them | Complex page: put extras in that folder as `style.css` / `script.js` (or more `.css`/`.js` names). Do not invent Vue. Kit stays the widget runtime. API without the script: `{"html":"…"}` or `{"files":{"index.html":"…","style.css":"…","script.js":"…"}}`. Update: add `"id"` from that page’s `.host.json`. Host: `HTML_HOST_BASE` (default `https://htmlshare.pro`). Optional `HTML_HOST_TOKEN`. Write `url` + `files` into INDEX notes. Host down → say so, keep local files. Do not commit `.host.json` if the repo treats it as local. ## Widgets | Need | Markup | |---|---| | Slider | `[data-proto-slider]` + `.proto-slider-track` + `[data-proto-prev]` / `[data-proto-next]` + `.proto-dots` | | Tabs | `[data-proto-tabs]` + `[role=tab]` / `[role=tabpanel]` | | Accordion | `[data-proto-acc]` (add `data-proto-many` to keep several open) | | Show/hide | `.proto-toggle` + `[data-proto-toggle]` + `[data-proto-panel]` | | Modal | `.proto-modal#id` + `[data-proto-open="id"]` + `[data-proto-close]` | | Narrow nav | `[data-proto-menu-btn="[data-proto-menu]"]` + `[data-proto-menu]` | Image = `.img` gray box + label, no URL. Motion = kit fade / slide only. ## MUST 1. Link the kit. No `