Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1ed58480bb | ||
|
|
0359e99c78 | ||
|
|
4517053846 | ||
|
|
6e69e092a4 | ||
|
|
83705a54e3 | ||
|
|
b457929c65 | ||
|
|
71f692ca7b | ||
|
|
3a6b0ee169 | ||
|
|
26f50e8edd | ||
|
|
256d023b2c | ||
|
|
167f7a6a0c | ||
|
|
de793244f7 | ||
|
|
09826577d7 | ||
|
|
6e0ec6619f |
No files matched your search
@@ -1,21 +0,0 @@
|
||||
{
|
||||
"name": "taste-skill",
|
||||
"interface": {
|
||||
"displayName": "Taste Skill"
|
||||
},
|
||||
"plugins": [
|
||||
{
|
||||
"name": "taste-skill",
|
||||
"source": {
|
||||
"source": "url",
|
||||
"url": "https://github.com/Leonxlnx/taste-skill.git",
|
||||
"ref": "main"
|
||||
},
|
||||
"policy": {
|
||||
"installation": "AVAILABLE",
|
||||
"authentication": "ON_INSTALL"
|
||||
},
|
||||
"category": "Design"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
{
|
||||
"name": "taste-skill",
|
||||
"description": "tasteskill 2.5.1: professional company websites at the figma.com and x.ai level, checked in a real browser.",
|
||||
"owner": {
|
||||
"name": "leonxlnx",
|
||||
"email": "hello@tasteskill.dev"
|
||||
},
|
||||
"plugins": [
|
||||
{
|
||||
"name": "taste-skill",
|
||||
"description": "tasteskill 2.5.1: professional company websites at the figma.com and x.ai level, with one section per screen, real photographs, real product UI, effects kept for tech and gaming pages, and a real-browser checker and finish gate.",
|
||||
"version": "2.5.1",
|
||||
"source": "./",
|
||||
"skills": ["./skills/taste-skill"],
|
||||
"author": {
|
||||
"name": "leonxlnx",
|
||||
"email": "hello@tasteskill.dev"
|
||||
},
|
||||
"homepage": "https://github.com/Leonxlnx/taste-skill",
|
||||
"repository": "https://github.com/Leonxlnx/taste-skill",
|
||||
"license": "MIT",
|
||||
"keywords": ["skills", "frontend", "design", "taste", "ui", "websites"]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
{
|
||||
"name": "taste-skill",
|
||||
"version": "2.5.1",
|
||||
"description": "tasteskill 2.5.1: professional company websites at the figma.com and x.ai level, checked in a real browser.",
|
||||
"author": {
|
||||
"name": "leonxlnx",
|
||||
"url": "https://github.com/Leonxlnx"
|
||||
},
|
||||
"homepage": "https://github.com/Leonxlnx/taste-skill",
|
||||
"repository": "https://github.com/Leonxlnx/taste-skill",
|
||||
"license": "MIT",
|
||||
"keywords": [
|
||||
"skills",
|
||||
"frontend",
|
||||
"design",
|
||||
"taste",
|
||||
"ui",
|
||||
"websites"
|
||||
],
|
||||
"skills": "./skills/",
|
||||
"interface": {
|
||||
"displayName": "Taste Skill",
|
||||
"shortDescription": "Professional company websites, checked in a real browser.",
|
||||
"longDescription": "tasteskill 2.5.1 from Leonxlnx/taste-skill: professional company websites at the figma.com and x.ai level, with one section per screen, real photographs, real product UI, effects kept for tech and gaming pages, and a real-browser checker and finish gate.",
|
||||
"developerName": "leonxlnx",
|
||||
"category": "Design",
|
||||
"capabilities": [],
|
||||
"websiteURL": "https://github.com/Leonxlnx/taste-skill",
|
||||
"defaultPrompt": [
|
||||
"Design a professional company website without generic AI patterns.",
|
||||
"Redesign this landing page while preserving its brand and content.",
|
||||
"Build a product page with real UI cards and one section per screen."
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
*.sh text eol=lf
|
||||
@@ -1 +0,0 @@
|
||||
github: Leonxlnx
|
||||
@@ -1,33 +0,0 @@
|
||||
name: Check skills
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
check:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 22
|
||||
- name: Every SKILL.md frontmatter parses (as Claude Code and Codex parse it)
|
||||
run: |
|
||||
npm install --no-save --no-package-lock yaml@2.6.1
|
||||
node tests/frontmatter.mjs
|
||||
- name: Text files are clean UTF-8 (no double encoding)
|
||||
run: node tests/text-encoding.mjs
|
||||
- name: Scripts parse
|
||||
run: |
|
||||
node -e '
|
||||
const fs = require("node:fs"), path = require("node:path"), { execFileSync } = require("node:child_process");
|
||||
const walk = d => fs.readdirSync(d, { withFileTypes: true }).flatMap(e => {
|
||||
const p = path.join(d, e.name);
|
||||
return e.isDirectory() ? walk(p) : /\.(mjs|js)$/i.test(e.name) ? [p] : [];
|
||||
});
|
||||
for (const f of [...walk("skills/taste-skill/scripts"), ...walk("skills/taste-skill/assets")]) {
|
||||
execFileSync(process.execPath, ["--check", f], { stdio: "inherit" });
|
||||
}
|
||||
'
|
||||
@@ -1,5 +0,0 @@
|
||||
.taste-skill/
|
||||
.taste-pro/
|
||||
node_modules/
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
@@ -1,299 +0,0 @@
|
||||
# Changelog
|
||||
|
||||
All notable changes to taste-skill live here. The repo follows SemVer-ish discipline: experimental pre-releases iterate freely; stable releases lock the API.
|
||||
|
||||
---
|
||||
|
||||
## 2.5.1 - 2026-11-07
|
||||
|
||||
What a 44-site test of `2.5.0` showed, fixed: builds now iterate until the checker is clean, every page moves a little, products without photographs are shown in photographs, palettes fit the trade, the copy gets a voice of its own, and nothing lies on anything else on a phone. The kit's own page models now pass the checker at 1440 and 390.
|
||||
|
||||
### What's new
|
||||
|
||||
- **The finish gate (`scripts/gate.mjs`, `references/gate.md`):** A build arms the gate at its first step (`gate.mjs --start`), and `start.mjs deal` arms it too. `gate.mjs index.html` runs the checker and `assets/layout/check.mjs` at `1440` and `390`, plus static checks for an edited kit file and for page code that hunts for a headless browser, and ends on exactly one line: `GATE: PASS`, `GATE: FAIL`, `GATE: OPEN` (three rounds used up), `GATE: SETUP` (no page yet, a framework's source shell or a page that is not local: arm the right one and run again), `GATE: ERROR` (the checks could not run) or `GATE: OFF`. It holds two checker WARNs as FAILs, a hero without its entrance (`hero-enter`) and a page with no dealt moment (`moment-none`), lints the copy of the page as the browser built it when the file is an app shell, and opens only local pages. A FAIL judged false is waived in `.taste-skill/waivers.json` with its reason (five at most), and the report starts with the `GATE:` line, the waivers and every open FAIL. In Claude Code the skill's frontmatter adds the gate as a Stop hook (it looks for the gate in the skill's folder and the usual install folders, does nothing in a folder with no build, except to say once how to arm a tasteskill page changed in the last day, and says on stderr when a build there goes unchecked); Codex and Antigravity take the same command from their own hook files. The gate never traps an agent: blocks are counted and capped; a crash or a framework shell blocks once, then allows, and a crashed run is reused, not rerun on every stop; a stop before the first run by hand is no round, so a question mid-build costs none; after a block that lists FAILs the next stop on the unchanged page is allowed once, and other stops on it block twice, then count as a round. When the user ends the build, `gate.mjs --done "<what they said>"` closes it. A PASS, or the last round's OPEN, closes it too, so a later deal starts a build of its own. Where a `.taste-skill` folder exists, every hook call, an allowed one too, is recorded in `gate.json`'s history (`"mode": "hook"`, the decision and why), and a hook that cannot find the gate leaves `.taste-skill/gate-hook-missing.txt` with the time and the variables it read. Every script that opens Chrome keeps its default profile in the OS temp folder or the project's `.taste-skill`: a relative `--profile` that leads out of the project is replaced by `.taste-skill/chrome-<script>`, with a warning (an absolute one is used as given).
|
||||
- **Motion on every page (`assets/motion`, `references/motion.md`, `references/moments.md`):** Every hero enters once on load (`data-enter` on the hero and one line in the head): the h1 rises line by line, the lead and buttons follow, the picture settles from 1.05, about a second in all, and without JavaScript, in print or under reduced motion the hero shows as written. Every page deals one moment, two on a long page: a cafe, shop, studio or service gets the photo- and type-led ones (`photo-chapters`, new: one photograph per chapter uncovered over the last; `picture-develops` in a new film look; `word-highlight`; `pinned-chapters` on product and service), still with zero WebGL. The short page (under 8 photographs) carries `picture-develops` on its section's photograph, or, with no photograph, `word-highlight` in a one-screen statement section. Shader effects and scenes stay tech only. `lines-rise`, `window-parallax` and `word-rotate` are retired (each repeated the hero's entrance or the word hero, or was a parallax), so no kind needs `--exclude`. The kit's own motion is calmer: one ease-out curve, no overshoot, hover moves only on a fine pointer, hover out at 120ms against 150ms in, the focus ring shown at once, the tab pill and switch moved by transform only. A link inside a moment's statement keeps its accessible name.
|
||||
- **Photographs over renders (`scripts/photos.mjs search`, `references/photos.md`):** A physical product, hardware or a game without the client's pictures is shown in licensed stand-in photographs of the same kind of thing, each listed in the report. `photos.mjs search` asks Wikimedia Commons for large CC0, CC BY, CC BY-SA or public-domain JPEGs (no NC or ND licences, no paintings, maps, logos or renders), and `fetch` and `credits` take its results like library frames. A product render (`assets/objects/product-render`) is made only when the brief asks for 3D or a render; the product hero has no default hotspots. A game without art leads with its name set large over a stand-in of its setting (`deal.mjs --has setting`). Set `TASTE_SKILL_RECENT=<file>` to share recent frames and palettes across folders: frames another build used lately go behind fresh ones, so two cafes no longer start from the same photographs. Unset, nothing is written outside the project. A live search's file is fetched only from Commons' own file host.
|
||||
- **Palettes by trade (`start.mjs deal --trade`):** Every palette names the trades it was made for, and `--trade cafe`, `--trade "yoga studio"` or `--trade "developer tool"` deals those first, away from the folder's last twelve built palettes (`start.mjs css` records them) and, with `TASTE_SKILL_RECENT`, the trade's last six across folders. Eight new light palettes give every place trade seven to thirteen to deal from, and a place only gets grounds that fit a place. The builder takes the first palette and writes one sentence on why it fits the trade; the place look no longer hard-codes its colours. The trade is read from the brief more carefully (an estate agent is an agency, a kitchen fitter a workshop, a delivery service no deli), and a deal in a folder under an open build joins that build instead of arming a second gate.
|
||||
- **Copy layer (`references/copy-voice.md`, `copy-registers.md`, `copy-moves.md`, `copy-tells.md`, `scripts/copy-lint.mjs`):** Leon's copy-taste research and skill, rewritten for tasteskill: a fact sheet from the brief, a voice card on the plan, the page's shape from the reader's questions, one register, the moves for each part of the page and a budget for each device. `copy.md` routes to them and now allows one verb-led heading form and the page's one pun as its brand line. `copy-lint.mjs` counts the tells of model copy (old slop words, stock lines, two-fragment headings, contrast frames, virtue words, invented stat strips, default-cast names, footer sign-offs) in about 30 ms a page with no browser; a device used past twice its budget FAILs (two-fragment and number-pair headings, contrast frames, negation runs, virtue words; riders, puffery, reveals and repeated promises only WARN). It leaves UI mocks, menus, timetables and one wording repeated alone; literal trade and virtue words (a quiet room, leverage up to 1:30, a 2,000 W motor) and abbreviations (St. Ives) pass; a part with a missing end tag no longer hides the rest of the page; a `.md` draft lints like the page. The gate runs it and its FAILs block: one finding per slop word with its sentence, a tic waived only by its whole finding, and a word from the client's own copy waived hit by hit with the brief as the reason. A listed word inside the client's own name (Elevate Pilates), as the logo, the title before its ":" or `og:site_name` writes it, is not counted and WARNs once (`copy-brand-word`).
|
||||
- **Accessibility, forms and metadata (`basics` in the checker, `references/system.md`):** The checker now reads accessible names, alt text, visible field labels, heading order, a Tab walk with a focus ring you can see at once and never under the header, the skip link, the menu button's state, `lang`, the title, description and share tags, one action at most twice a screen, map links that only send a street to directions, assumed hours that never drive an open-now line, and forms that only say thank you after a real send. The starter gains the head block, a skip link, `lang`, a `booking-form` template with each error under its own field, and `system.js` checks forms on submit.
|
||||
- **Phones (`system.css`, `collide`, `tap-size`):** On a phone a section is at least its screens and grows with its content; it used to keep a fixed height and lay its last rows over the next section, in eight of the kit's own hero demos too. The hero grows on a short phone, and on one under 700px tall its photograph and facts give way so its button stays on the first screen. Links, the nav name, footer links, credits and small buttons are 44px targets; without script a phone's bar keeps the name and the main button; a page's own phone-only hiding of a section wins over the kit's phone rule. The phone action bar waits until the hero's button has scrolled away and steps aside while the screen shows one of its actions (without script it simply stays, covering nothing); the place hero's photograph grows into what its words leave of the first screen (up to 4:5, with the 4:5 phone crop `photos.mjs` now prints and its `data-phone-fill`), and the visit block's photograph into the rest of its screen, so neither ends in an empty band. A two-screen section's four open tiles stack into its two phone screens (180px panels, 32px between every tile, the second group clear of the header), and the centred hero keeps a three-line headline and its window's whole answer on the first screen. The checker gains `collide` (words over words, over another section's picture, button or card, a picture over a button, a fixed bar over content at the top or the end of the page), `tap-size` (a target under 32px tall or 24px wide FAILs when another target is under 8px away, else WARNs; under 44px WARNs) and a walk at 320 for collide, tap-size, the first screen's fold (WARN) and anything past the screen (`off-viewport [320]`); the gate checks 390 and 320 on every run, `--quick` too.
|
||||
- **Checker fixes and `empty-area` (`scripts/consistency.mjs`, `tests/kit-clean.mjs`):** Six false positives that failed the kit's own heroes are fixed at their cause (a centred or boxed hero measured against its own frame, the product render as one box, a dealt moment's display type, drawn mocks in the stagger check), and no fix text reads as an invitation to invent a fact. New `empty-area` WARNs on a section over 35% empty inside its container and FAILs over 50%. Motion inside a dealt moment's section is accepted on every kind, the hero entrance is no reveal, and `hidden-content` also loads the page with scripts off. A hero or section with `overflow: clip` is not read as spilling, a panel with its own fill counts to its edges, the starter hero's facts at the foot of its column are no hole, and a mounted statement moment's own section is left out of `section-gaps` (and of the layout check's `sparse`). A live `photo-chapters` section may run to four whole screens, counted in viewports under any header, and any section holding `word-highlight` counts as a statement. A hero whose big scene is its entrance (`data-enter="off"`) passes `hero-enter`. `check.mjs`'s long-headline stress test adds a long compound word only on pages whose language builds them, so `hero-lines` can be fixed or waived.
|
||||
- **The kit's page models pass the checker at 1440 and 390 (`tests/kit-clean.mjs`):** All 11 hero demos, the starter and two new pages that mount moments in a real page (`assets/moments/_demo/in-page.html` for a place, `in-page-service.html` for a service) report no FAIL at those widths; before, 30 of 31 kit pages had one. The hero demos link their logos to `#top`, set later splits text left and picture right, name what they sell in their titles and keep their phone panels whole. A product page is dealt only the product, photo and film heroes (`heroes.json`), since a split, word, statement or triptych hero cannot show the product at 80% of the content width; the split demo is now a service page. The starter's two-screen features section has all four tiles, the close's big button stays within half the container, and `pinned-chapters` sits on the page's 6/6 split. `kit-clean.mjs` checks the hero demos, the starter and the in-page pages with the checker and `check.mjs` at the gate's widths (the gate also holds `hero-enter` and `moment-none` and lints the copy); `--demos` adds the standalone moment demos, which show a moment alone and are not page models.
|
||||
- **The stack:** An empty folder builds a static page from `assets/starter.html`; an existing project builds in its own stack with the kit served from its public folder; a brief that asks for Next.js builds a static export, checked on its built page with `--root`. The description no longer promises any stack.
|
||||
|
||||
### Thanks
|
||||
|
||||
To the community contributors whose pull requests went into `2.5.x`: @bougieL (each checked page gets its own report folder, [#181](https://github.com/Leonxlnx/taste-skill/pull/181)), @hummbl-dev (`--root` for the scripts that serve a page file, [#182](https://github.com/Leonxlnx/taste-skill/pull/182)), @ALANDVO (`font-load` warns for each web font that never loads, [#186](https://github.com/Leonxlnx/taste-skill/pull/186)) and @ICR-1 (the eyebrow fix in [#185](https://github.com/Leonxlnx/taste-skill/pull/185), written for the inspector that 2.5 replaced).
|
||||
|
||||
## 2.5.0 - 2026-11-05
|
||||
|
||||
A complete rebuild of `design-taste-frontend` (`tasteskill 2.5.0`) around professional company websites at the `figma.com` and `x.ai` bar, replacing the `2.1.x` direction-sheet and app-screen pipeline (`draw.mjs`, `assets.mjs`, `lint.mjs`, `inspect.mjs`, `scenes.mjs`).
|
||||
|
||||
### What's new compared with 2.1.x
|
||||
|
||||
- **One page system (`starter.html`, `system.css`, `system.js`, `assets/layout/`):** Every build starts from a shared HTML/CSS foundation instead of open-ended layout generation. The hero fills the first screen alone, every body section and `footer.closing` is planned to one or two full screens at `1440x900` with no neighbour peeking into a section tile, and left and right content edges match across the page. `assets/layout/deal.mjs` deals eleven tested hero layouts (`split`, `centred`, `product`, `photo`, `place`, `collage`, `editorial`, `word`, `film`, `statement`, `triptych`), verified by `assets/layout/check.mjs` including max-headline stress tests.
|
||||
- **Strict business-kind routing (effects only on tech and gaming pages):** Every page declares its kind up front (`software`, `gaming`, `tech` for technical hardware, `product`, `service` or `place`). Shader grounds (`scripts/effects.mjs`, `assets/effects/`), creative scroll and pointer moments (`scripts/moments.mjs`, `assets/moments/`), scroll-held big scenes (`assets/scenes/`) and WebGL object prints (`assets/objects/`) are dealt only on `software`, `tech` and `gaming` pages within a shared cap of 4 live WebGL contexts, and every effect has a static phone and reduced-motion state. Cafes, hotels, shops, studios, services and non-technical products get zero WebGL or scroll effects and lead with photographs, typography and flat colour.
|
||||
- **Real product UI fragments, components and diagrams:** `assets/ui/` ships 19 HTML product UI fragments (`chat`, `diff-review`, `pipeline-board`, `stat`, `notify`, `terminal-run`, `voice` and others) staged inside lit feature-card panels (`assets/ui/cards.css`, `assets/ui/ui.js`, `references/cards.md`), joined by interactive feature components in `assets/components/` and preset-driven node-and-line diagrams in `assets/diagrams/`.
|
||||
- **Curated photographs, no captions, real brand icons:** `scripts/photos.mjs` deals vetted Unsplash and Wikimedia Commons photographs (`assets/photos/`, a set of them bundled as offline WebP) by trade as detail slots (capped at 1 in 3 page images unless `--draft-lead` is passed for a client without photographs), enforces image weight budgets, and writes a single expandable footer credit line (`photos.mjs credits`). Captions under images, renders and UI visuals are banned across all page kinds. `scripts/icons.mjs` resolves real full-colour brand marks (Gil Barbara's logos, Simple Icons where no colour mark exists), file-type icons and Lucide interface icons into local SVGs (`assets/icons/`).
|
||||
- **Palettes, typography, CSS grounds and calm motion:** `scripts/start.mjs` deals palettes and Google Fonts pairings by page kind (`library/palettes.json`, `library/type.json`) and emits the exact `<head>` links and `:root` tokens. `assets/backgrounds/` provides 16 contrast-verified CSS grounds for tech sections, and `assets/motion/` supplies restrained hover, press, tab, focus, count and single-loop card interactions.
|
||||
- **Real-browser consistency, performance and screenshot checks over HTTP:** `scripts/consistency.mjs` replaces `inspect.mjs` and `lint.mjs` with over 100 browser checks across `1440`, `1024`, `768` and `390` (rendered visual emptiness, GLSL ES reserved-word linting, forced shader-failure fallbacks, WCAG text and button contrast, grid and split alignment, section rhythm, placeholder and invented-address detection, slow-mobile image loading and reduced-motion compliance), paired with `scripts/perf.mjs` and `scripts/shoot.mjs`.
|
||||
- **A product is always shown, and shown big (`assets/objects/product-render`):** When a physical product has no photographs, the page renders it from a JSON spec of its parts in real studio materials (a city bike, a desk lamp, a robot arm) instead of hiding it behind an abstract shader or an order form. The hero product stands on the page ground with no box around it and fills most of the content width (the checker fails a product hero under 60% of it), every section shows a different view (`side`, `three-quarter`, `front`, close-ups of a named part, loaded or in-use scenes with props such as a child seat or crates), and an order card's colour buttons swap the picture with no page script (`data-product-swatch`, or the `product:set` event). `make-posters.mjs` turns a spec into stills, which pages show by default once they are made; a live turn then runs only when a page asks for it (`data-product-mode="live"`). The checker fails a product page whose pictures never show the product or repeat a picture, and one that shows a view twice in one colour or in neighbouring sections (another colour further down warns).
|
||||
- **One object never carries the page:** The product or hero object is shown whole in the hero and two more sections at most; the other sections are carried by a different kind of picture (for a game its world and crew, for hardware the product in use, its parts or an exploded view, close-ups, a still diagram, a type moment). The checker warns when one object, shown whole, is the main picture of more than three sections (`same-object`, on product, tech and gaming pages).
|
||||
- **The client's own assets get slots (`client-slots` in `references/sections-library.md`):** When a brief says the client has a trailer, key art, screenshots, CAD renders or a motion video, the page holds a designed slot for each that already reads finished (a video frame with a poster, a strip of captures, a CAD frame), named in a comment for the client's file.
|
||||
- **Software shows its product in one app window (`app-frame` in `references/sections-library.md`):** Every software page has one app window across the full content width, a list pane beside the open item, composed from the `assets/ui` fragments (pull requests beside a diff, an inbox beside a thread, a pipeline board). It stacks at tablet width and shows the open item alone on a phone.
|
||||
- **Hover you can see:** Buttons step 1px on hover and press on click, linked cards lift 2px, photographs zoom 1.02-1.03 inside their frame and underlines draw; under reduced motion only the colours change.
|
||||
- **Scroll moments stay inside their section:** `iris-opens` and `line-carries-colour` open inside an inset panel with an even gutter and reveal each block whole, so no word is cut mid-move.
|
||||
- **Tablet screens are planned and checked:** Sections are planned at `768` to `820` as well as `1440` and `390`, and the checker's rhythm pass runs at `768` by default.
|
||||
- **Runs on any machine:** Every script that opens Chrome takes `--profile` for its Chrome profile, then the `TASTE_SKILL_TMP` folder, then the system temp folder.
|
||||
- **Install on Windows:** `install.sh` makes a real link (or a directory junction when symlinks are not allowed) instead of silently copying the folder in Git Bash, and an older copied folder or a failed link ends the run with an error instead of a quiet skip.
|
||||
- **Tested on a fresh install:** A clean install built a small bakery page from `SKILL.md` alone and ran every script; what it tripped on is fixed. The split nav, the hero photograph `photos.mjs fetch` prints and the offer's menu groups beside a photograph pass the checks; a place with under 8 photographs is the short page whatever its trade, with one layout for its menu, its visit block and the photograph beside the menu that passes at every width; a brief without a street prints the district only; `assets/layout/check.mjs` serves a page file itself like the other checkers; `photos.mjs` prints commands that run from any folder; the scene index is never written into the installed skill; and every script runs the same through a symlinked install (`install.sh`).
|
||||
- **Honest reports:** A check whose measurement timed out reads `partly measured` (WARN) instead of PASS, a product without stills is told to run `make-posters.mjs`, and a product's own render is never counted as a page effect.
|
||||
- **Plain words and honest pictures:** `references/copy.md` and the checker cap the words on a screen and the footer to one line, and every picture must render (a visual that comes up empty fails at `1440`, `1024`, `768` and `390`).
|
||||
|
||||
## 2.1.5 - 2026-10-25
|
||||
|
||||
Fixes from the community. Thanks to everyone who reported and sent them.
|
||||
|
||||
- **Safe text in charts and split headings** ([#160](https://github.com/Leonxlnx/taste-skill/issues/160), [#169](https://github.com/Leonxlnx/taste-skill/pull/169), thanks @jcastilla89 and @Pablolakotek): `charts.js` and the `Stage.split` fallback escape the text they insert, so a chart label or heading that comes from user data can no longer inject markup.
|
||||
- **No lost screenshots when two widths share a class** ([#162](https://github.com/Leonxlnx/taste-skill/issues/162), [#165](https://github.com/Leonxlnx/taste-skill/pull/165), thanks @nosawavey-spec and @ketpatil77): `--widths 1280,1024,768,390` keeps both tablet renders (`tablet-1024-*`, `tablet-768-*`).
|
||||
- **Keyboard and accessible names** ([#170](https://github.com/Leonxlnx/taste-skill/pull/170), thanks @MrBinnacle): every control works from the keyboard and has an accessible name; a control explains itself by its form, not by a sentence beside it.
|
||||
- **The italic faces load** ([#161](https://github.com/Leonxlnx/taste-skill/issues/161), with the fix from [#166](https://github.com/Leonxlnx/taste-skill/pull/166), thanks @nosawavey-spec and @ketpatil77): Boska, Erode and Sentient request their italic weight, so the browser no longer fakes it.
|
||||
- **`edge-text` no longer fails ellipsised lines** ([#156](https://github.com/Leonxlnx/taste-skill/issues/156), thanks @shoctroper): text is measured where the reader sees it, clipped by `overflow`.
|
||||
- **Inspect the production build** ([#171](https://github.com/Leonxlnx/taste-skill/issues/171), thanks @lilozzy): the Gate step says to run the last check on the built page, and the inspector warns (`dev-server`) when it is looking at a Vite, webpack or Next dev server.
|
||||
- **The redraw rule names its third reason** ([#163](https://github.com/Leonxlnx/taste-skill/issues/163), thanks @Tsury): a section that cannot hold the real content.
|
||||
- CI now also checks that every text file is clean UTF-8 (a double-encoded save is caught), runs the inspector file-name tests, and parses the scene scripts.
|
||||
|
||||
## 2.1.4 - 2026-10-20
|
||||
|
||||
- **Fix: one inspector run could delete the browser profile of another run that was still going** ([#157](https://github.com/Leonxlnx/taste-skill/issues/157), fixed in [#158](https://github.com/Leonxlnx/taste-skill/pull/158) by @t4sh). On macOS and Linux Chrome keeps no `lockfile`, so the sweep added in 2.1.0 judged a profile unused by its age alone, and a second run started during a long one could pull that run's profile away. #158 removed the sweep and added a regression test.
|
||||
- **Leftover profiles are cleaned up again, safely.** Every profile now carries `taste-skill-owner.json` with the machine and the process IDs of the run and its Chrome. A later run removes a profile left by a killed run only when that file names this machine and neither process is alive; a profile without the file is never touched. Profiles left by earlier versions are not removed automatically: delete the `ad-chrome-*` folders in your temp folder (or in `TASTE_SKILL_TMP`) by hand.
|
||||
|
||||
## 2.1.3 - 2026-10-19
|
||||
|
||||
One repo, one skill. Nothing in `design-taste-frontend` changed.
|
||||
|
||||
- **The classic skills moved** to their own repo, [Leonxlnx/taste-skill-classics](https://github.com/Leonxlnx/taste-skill-classics): `high-end-visual-design`, `minimalist-ui`, `industrial-brutalist-ui`, `gpt-taste`, `stitch-design-taste`, `design-taste-frontend-v1` and `design-taste-frontend-v2-experimental`. Same install names, same files. The `taste-skill-classics` Claude Code plugin moved with them (`/plugin marketplace add Leonxlnx/taste-skill-classics`).
|
||||
- **The pointer folders are gone:** `brandkit`, `image-to-code`, `imagegen-frontend-web` and `imagegen-frontend-mobile` (in [Leonxlnx/imagegen-skills](https://github.com/Leonxlnx/imagegen-skills) since 2.1.1) and `redesign-existing-projects` (part of `design-taste-frontend` since 2.1.1). The README lists where every old install name lives now.
|
||||
- **Removed:** `research/laziness/` (it belonged to `full-output-enforcement`, removed in 2.1.1), the outdated `skills/llms.txt`, `skill.sh` and its test, and unused images.
|
||||
- **README:** a wordmark instead of the banner, a TasteCode banner that stands out in dark mode, fewer badges, the community sponsors always shown.
|
||||
- The Codex plugin loads only `design-taste-frontend` now.
|
||||
|
||||
## 2.1.2 - 2026-10-19
|
||||
|
||||
- **Fix: `design-taste-frontend` did not load in Claude Code** ([#151](https://github.com/Leonxlnx/taste-skill/issues/151)). The description added in 2.1.0 contained an unquoted `: `, so its YAML frontmatter failed to parse and the skill was silently dropped ("Unknown skill"). It is now a folded block scalar.
|
||||
- **So it cannot happen again:** `tests/frontmatter.mjs` parses every `SKILL.md` frontmatter (and every `agents/openai.yaml`) with a strict YAML parser, checks names, description length and the plugin manifests, and a GitHub Actions workflow (`check-skills.yml`) runs it, the registry test and a syntax check of the scripts on every push and pull request.
|
||||
|
||||
## 2.1.1 - 2026-10-19
|
||||
|
||||
One skill to reach for. Installing the repo no longer means an agent might pick an older skill for the job.
|
||||
|
||||
- **The classic skills are opt-in.** soft, minimalist, brutalist, gpt-taste, Stitch, v1 and v2-experimental run only when called by name: `disable-model-invocation: true` for Claude Code, `allow_implicit_invocation: false` (`agents/openai.yaml`) for Codex, and descriptions that say so for every other agent.
|
||||
- **Redesigns are part of taste-skill.** `SKILL.md` has a full route for a redesign, restyle or review of an existing page or app screen: record the before in a real browser, keep the stack, the content and what works, change type, colour, the frame, states and stock components in that order, prove it with before and after. `redesign-existing-projects` is retired and points there.
|
||||
- **The image-generation skills moved** to their own repo, [Leonxlnx/imagegen-skills](https://github.com/Leonxlnx/imagegen-skills): `imagegen-frontend-web`, `imagegen-frontend-mobile`, `brandkit`, `image-to-code`. Same install names; the folders here point there.
|
||||
- **`full-output-enforcement` is removed.**
|
||||
- **Two Claude Code plugins:** `taste-skill` carries only the default skill; `taste-skill-classics` carries the classic skills for whoever wants them.
|
||||
|
||||
## 2.1.0 - 2026-10-19
|
||||
|
||||
### The scroll-scene engine
|
||||
|
||||
The groundwork for big scroll scenes, the moments award sites are remembered for (a camera flying through a field of pictures, a picture that grows from a window to the whole screen). The library of tested scenes, taken apart from 43 motion-led Sites of the Day and rebuilt from scratch, follows in 2.2; this release ships what they run on and the checks that judge them.
|
||||
|
||||
- **`assets/scenes/stage.js` and `stage.css`**: a sticky stage scrubbed by native scroll with GSAP ScrollTrigger (pinned versions), optional Lenis smoothing that stays off for touch and reduced motion, and a finished composition for reduced motion, no script and a failed CDN. `references/scenes.md` says how to build a scene on it.
|
||||
- **`scripts/scenes.mjs`** photographs every scene on a page at 0-100% of its hold on desktop and phone, and the reduced-motion page. **`inspect.mjs --film`** films the whole scroll a third of a screen at a time, and the inspector fails a scene that never started or rests on desktop.
|
||||
- `draw.mjs` can deal scenes from `library/scenes.json` once it exists (`--redraw scenes`, `--list scenes`).
|
||||
- `motion.md`: smoothing allowed through the stage; inside a scene the scene's numbers apply; outside scenes the quiet limits stay. Still no preloader, gate, custom cursor or wheel capture.
|
||||
|
||||
### Product pages that show their app
|
||||
|
||||
A software product's page builds every interface fragment it shows (the hero's live screen, a feature crop, a chart) as a real piece of the app: its style dealt once with `draw.mjs --app --keep palette,type --out .taste-skill/app`, built with `app.css` and `charts.js`, real data that adds up.
|
||||
|
||||
### Fixes
|
||||
|
||||
- The inspector's throwaway Chrome profiles are removed reliably (Chrome is stopped before its profile is deleted, the profile cache is capped, profiles left by killed runs are swept); a long test session had left tens of GB in the temp folder. `TASTE_SKILL_TMP` moves them off the system drive.
|
||||
- `motion.md` and `research.md`: a claim that smooth-scroll pages showed empty frames mid-scroll was a capture artefact and is gone.
|
||||
|
||||
### App screens: dashboards, admin, settings, inboxes
|
||||
|
||||
The default skill now builds the screens people work in, not only the pages they read. `SKILL.md` asks first whether the job is a page or an app screen; an app screen takes its own route.
|
||||
|
||||
- **`references/app-screens.md`**, a new chapter: the run for an app screen (inventory the data and the jobs, name the screen's one question and its one finding, write the data with assertions, deal a style, build the shell, the data and every state, check, look), the shell, the canvas and title, KPIs, charts, tables and lists, forms and settings, type and colour for light and dark, density, empty, zero, loading and error states, the phone and the tablet, the house rules for app screens and the tells of generated dashboards with what replaces each.
|
||||
- Distilled from a study of 23 real product screens chosen by the owner (17 products, 17 light and 6 dark), measured from their pixels. The screenshots stay private; the skill carries only the measurements and the rules.
|
||||
- **`draw.mjs --app`** deals an app style from `library/app.json`: seven styles (achromatic ledger, framed sheet, accent ladder, editorial greeting, pastel consumer, true-black flat, data terminal), each with tokens, type, a colour budget and the one move that makes it recognisable, plus five shells and 21 screen patterns for 13 kinds of product.
|
||||
- **`inspect.mjs --app`** and **`lint.mjs --app`** (switched on by an app sheet) judge app screens by their own rules: quiet borders, small labels, repeated panels and tables are allowed; heavy shadows, glass, icons in tinted squares, rainbow charts, placeholder data, text under 11px, a sidebar left on the phone, ragged rows, a thin first screen, landing-page titles and figures, a dead strip beside the canvas and colour sprawl are not.
|
||||
- **`assets/app.css`** (a neutral shell, panels, divided KPI strip, tables, pills, controls, tabs, empty states and the phone fold) and **`assets/charts.js`** (line, bars, ring, bar list, plan against spent, share against target, with annotations, reference lines, forecasts and capped ranges), both set to the study's defaults.
|
||||
- Tested in four blind rounds of eight, six, five and three builds judged from screenshots against the reference screens; the warnings at the top of the chapter come from what the judges marked down. The last round's complaint, "a well-applied kit, not a product with its own face", led to a required face step (each style lists ways to take one from the brief) and signature patterns for kinds of product (a power-flow summary, a leave timeline, a cover matrix, a sell-out strip).
|
||||
|
||||
### The frame of a page
|
||||
|
||||
Generated pages most often fail before any detail: no clear title, margins that do not match, a section pushed to one side with half the screen empty, long blank stretches, sections with no heading, text against the screen edge.
|
||||
|
||||
- `SKILL.md` step 6 gains "The frame", the house rules three new rows, and a finish line before the report.
|
||||
- `inspect.mjs` measures each of them: `no-title`, `name-only-title`, `off-centre` (FAIL, and a WARN from 16px of drift), `lopsided`, `empty-middle`, `blank-gap`, `untitled-section`, `edge-text`, `ragged-edges`, `small-title`, `many-h1`. The thresholds come from the study below: strong pages hold their margins within a few pixels, about one text section in a hundred leaves half the width empty, 82% of text sections open with a heading.
|
||||
- `critique.md`: a five-second pass, a frame pass and new caps. `layout.md`: empty space rewritten and a new section on the frame.
|
||||
|
||||
### A study of the latest 100 Awwwards Sites of the Day
|
||||
|
||||
Captured on 18 October 2026 at 1440 and 390, with what moved and the CSS that loaded measured in the page, and read by a panel of one model reader per site (91 usable). Learning only: nothing a site owns is reproduced.
|
||||
|
||||
- **Pictures and footage:** `imagery.md` §12, where pictures go (picture share per screen, nineteen placements ranked with their geometry and phone versions, footage, crops, text over pictures) and stricter video rules (a poster on every clip, one moving picture per screen, contrast checked across the whole loop).
|
||||
- **Motion:** `motion.md` gains what strong pages do with motion (the curves and durations that actually ran, staggers, scroll triggers, the cost of preloaders), new tokens (`--ease-expo`, `--ease-exit`, `--t-open`, staggers), scroll behaviours ranked, ten new recipes (lines that rise, an opening window, a held picture with passing captions, a sideways gallery, a receding hero, an index anchored to its row, a 1.2-second load sequence, view transitions between pages, an ink fill, rolling figures), the gimmicks to avoid and rules. Seven new signature moves in `library/motions.json`.
|
||||
- **Library:** 10 hero and 13 section compositions, 21 new studied sites and media and motion notes on 70 more (`draw.mjs --site <id>`).
|
||||
- **New checks:** `late-title` (the title is not readable 1.2s after load), `reduced-hidden` (content that stays hidden under reduced motion), `no-poster`.
|
||||
|
||||
---
|
||||
|
||||
## 2.0.0 - 2026-10-13
|
||||
|
||||
### Repo
|
||||
|
||||
- `taste-skill` (install name `design-taste-frontend`) is now **v2**, a new skill (see below). The install name did not change.
|
||||
- The previous default, v2 (experimental), is preserved as `taste-skill-v2-experimental` (install name `design-taste-frontend-v2-experimental`).
|
||||
- v1 is unchanged at `taste-skill-v1` (install name `design-taste-frontend-v1`).
|
||||
- `CHANGELOG.md` (this file).
|
||||
- Codex can install the collection as a plugin (`.codex-plugin/`, `.agents/plugins/`).
|
||||
- Plugin manifests are at 2.0.0.
|
||||
- `skill.sh` accepts install names as well as folder names.
|
||||
- Removed: unused sponsor and README images, the one-off asset scripts in `scripts/`, and the old Copilot instructions, which contradicted v2.
|
||||
|
||||
---
|
||||
|
||||
## v2 - the new default for `taste-skill`
|
||||
|
||||
v2 is not an edit of the earlier files. It is a new skill built from a study of 247 curated sites (One Page Love and Awwwards Sites of the Day), and it is a folder, not a single `SKILL.md`: instructions, nine reference files, a library and four zero-dependency scripts.
|
||||
|
||||
### How it works
|
||||
|
||||
1. **Inventory.** Before any design, the agent lists what only this client has: the name and what it means, the street, the numbers, the one constraint.
|
||||
2. **Draw.** `scripts/draw.mjs` deals three of 20 researched directions; the agent picks the one that can carry something from the inventory, and the script deals the rest from the library (48 hero compositions, 172 section compositions, 44 type systems of free fonts, 56 palettes, 420 photographs, 11 motions, 181 studied reference sites). Under every dealt blueprint it prints where that blueprint disagrees with the house rules.
|
||||
3. **Idea and one live thing.** One sentence tying the client's own material to the direction's device, checked against the nearest competitor, plus one thing the visitor can do on the page.
|
||||
4. **Build** with full content; when there are no photographs of its own, real pictures of the subject's world come from open collections (`scripts/assets.mjs`), and only what no honest picture exists of is drawn in code.
|
||||
5. **Gate.** `scripts/lint.mjs` scans the source; `scripts/inspect.mjs` opens the page in a real browser at 1440 / 768 / 390, measures it and fails it on: eyebrow labels, monospace outside code, 01/02/03 numbering, hairlines and outlined boxes, gradients, resting shadows, cream-and-terracotta or violet palettes, headlines over two lines, text under 13px, no focal point on the first screen, near-empty screens, text covered or cut off, sideways overflow.
|
||||
6. **Look.** The agent critiques its own screenshots with an Awwwards-weighted rubric and fixes the top three problems, up to three rounds.
|
||||
|
||||
### Real pictures from open collections
|
||||
|
||||
Agents with no photographs used to draw everything in SVG. `scripts/assets.mjs` searches Openverse, Wikimedia Commons, the Art Institute of Chicago and The Metropolitan Museum of Art without API keys and prints, for each find, a direct image URL, the source page, its size, creator, licence and a one-line credit. By default it keeps only licences that allow commercial use (CC0, public domain, CC BY, CC BY-SA) and checks that every image it prints loads; `--source`, `--license`, `--orientation` and `--min-width` narrow the search. `--get <ref>` downloads a picture into the project's `assets/` and records its credit in `assets/credits.json`; `--credits` prints the footer credit line and the list for the report.
|
||||
|
||||
The imagery order is now: the project's own; generated; **real pictures of the subject's world found in open collections** (its street in old postcards, old maps, its materials, engravings of its trade, museum objects of its kind); drawn in code, for what no honest picture exists of; the dealt atmosphere photographs; type and colour alone. A found picture is never presented as the client's own product, room, dish, person or team, and every one is credited on the page and listed in the report. The direction sheet suggests first queries built from the brief (`"ghent postcard"`, `"ghent old map"`), and `references/imagery.md` §3 covers what to search for, what makes a good find, creative uses and the licences.
|
||||
|
||||
### Pictures, footage and motion are required
|
||||
|
||||
Testing showed agents skip pictures and motion when nothing forces them: ten pages built with the first v2 carried no real pictures at all and almost no motion. The inspector now enforces both:
|
||||
|
||||
- `few-pictures` (fail): fewer than four real pictures on the page (photographs, archival images, footage, raster artwork; for software, cropped interface fragments). SVG drawings do not count. `no-real-pictures` and `no-footage` warn when a page has fewer than two real photographs or no video.
|
||||
- `still-page` (fail under 8, warn under 16): counts the distinct elements that actually move while the page loads and is scrolled, from CSS animations, transitions, Web Animations and script-driven transforms.
|
||||
- `assets.mjs --video` finds open-licence footage (Wikimedia Commons, the Internet Archive, NASA) for a muted looping clip.
|
||||
|
||||
The motion guidance changed with it: one loud signature move, plus a choreographed entrance for the parts of every section, feedback on every control, and one moving picture. The old "one moment and nothing else" budget is gone; identical fade-ups on every block are still banned.
|
||||
|
||||
### Requirements
|
||||
|
||||
Node 22+ and an installed Chrome, Edge or Chromium for the inspector (nothing is installed; it drives the browser over the DevTools protocol). `draw.mjs`, `lint.mjs` and `assets.mjs` run on Node 18+; `assets.mjs` needs network access and no API keys. Working files go to `.taste-skill/` in the project; the draw history lives in `~/.taste-skill/history.json`.
|
||||
|
||||
### How it was tested
|
||||
|
||||
Five rounds of blind comparisons on six briefs: a fresh agent built each page with no skill, with v2, and on three briefs with another design skill; a separate agent judged anonymous screenshots on the Awwwards weighting. Final round, three briefs: v2 7.7, no skill 7.8, other skill 7.2, with v2 ranked first on two of three. Under the inspector the v2 pages measured 0 failures each and the no-skill pages 8 to 13. Limits: one juror per brief per round (about half a point of noise), model jurors, and the final round's briefs had been used in the round before. The full record is in `skills/taste-skill/references/research.md` §11.
|
||||
|
||||
### Cost
|
||||
|
||||
A full run with the look-and-fix loop takes an agent roughly 30 to 45 minutes and a few hundred thousand tokens, most of it finding or drawing pictures when a project has no photographs.
|
||||
|
||||
---
|
||||
|
||||
## v2 (experimental) - the previous default, now `taste-skill-v2-experimental`
|
||||
|
||||
v2 (experimental) is a substantial rewrite of the original taste-skill. It keeps the dial-driven philosophy (`DESIGN_VARIANCE`, `MOTION_INTENSITY`, `VISUAL_DENSITY`) and adds structure, hard rules, and concrete implementation patterns the agent can actually follow.
|
||||
|
||||
**This was a pre-release.** It was the default install until v2 replaced it, and it is kept as `taste-skill-v2-experimental` for projects that depend on it. It is no longer iterated.
|
||||
|
||||
### What's new in v2 (experimental)
|
||||
|
||||
**New sections**
|
||||
|
||||
- **§0 Brief Inference** - before any code, the agent reads the room (page kind, vibe words, references, audience, constraints) and declares a one-line design read. Anti-default discipline.
|
||||
- **§2 Brief → Design System Map** - when a brief reads as Material / Fluent / Carbon / Polaris / Atlassian / Primer / GOV.UK / USWDS / Bootstrap / Radix / shadcn / Tailwind, reach for the **official** package. When the brief is an aesthetic (glassmorphism, bento, brutalism, editorial, dark tech, aurora, kinetic typography), use web standards and label the implementation honestly. Apple Liquid Glass is documented as an approximation, not an official package.
|
||||
- **§8 Dark Mode Protocol** - dual-mode by default, token strategy declared per project, contrast and hierarchy parity enforced.
|
||||
- **§11 Redesign Protocol** - mode detection (Greenfield / Preserve / Overhaul), audit before touching, modernisation levers in priority order, what never changes silently (URL structure, nav labels, form field names, brand wordmark, legal copy).
|
||||
- **§12 The Block Library (Contract)** - schema for iteratively adding real, source-backed block implementations (hero, feature, social-proof, pricing, cta, footer, portfolio, transition, navigation).
|
||||
- **§13 Out of Scope** - explicit list of what taste-skill is NOT for (dashboards, data tables, multi-step forms, code editors, native mobile, realtime collab UIs).
|
||||
- **§14 Final Pre-Flight Check** - hard checklist. Every box must honestly pass before shipping.
|
||||
|
||||
**Hardened bans (Section 9, "AI Tells")**
|
||||
|
||||
- **§9.G Em-Dash Ban (complete)** - zero em-dashes (`—`) anywhere on the page. Headlines, eyebrows, pills, body copy, quotes, attribution, captions, button text, alt text. Use a hyphen (`-`) or restructure the sentence. This was the single most-violated stylistic Tell in pre-v2 testing.
|
||||
- Section numbering eyebrows (`00 / INDEX`, `001 · Capabilities`, `06 · how it works`) banned outright.
|
||||
- Version labels in hero (`V0.6`, `INVITE-ONLY PREVIEW`, `BETA`) banned unless the brief is explicitly a product launch.
|
||||
- Photo-credit captions as decoration (`Field study no. 12 · Ines Caetano`) banned unless real attribution.
|
||||
- Decoration text strips at hero bottom (`BRAND. MOTION. SPATIAL.`) banned.
|
||||
- Pills / labels overlaid on images banned.
|
||||
- Version footers (`v1.4.2`, `Build 0048`) banned on marketing pages.
|
||||
- Locale / city-name / time / weather strips (`Lisbon, working with founders`) banned for 99% of briefs.
|
||||
- Scroll cues (`Scroll`, `↓ scroll`, `Scroll to explore`) banned.
|
||||
- Zero decorative status dots by default.
|
||||
- `border-t` + `border-b` on every row of long lists banned (use a different UI component).
|
||||
- Scoring / progress bars with filled background tracks banned as comparison visuals.
|
||||
- Div-based fake product UI (fake task lists / dashboards / terminals built from styled divs) banned.
|
||||
- Floating top-right sub-text in section headings banned.
|
||||
- Hand-rolled SVG icons strongly discouraged; use Phosphor / HugeIcons / Radix / Tabler.
|
||||
|
||||
**Hardened design rules**
|
||||
|
||||
- **Color Consistency Lock** - one accent across the whole page; no random color swaps in section 7.
|
||||
- **Shape Consistency Lock** - one corner-radius system per page.
|
||||
- **Button Contrast Check** - every CTA passes WCAG AA contrast (no white-on-white).
|
||||
- **Hero Discipline** - headline ≤ 2 lines, subtext ≤ 20 words and ≤ 4 lines, CTAs visible without scroll, font scale planned with image size.
|
||||
- **Navigation** - single line at desktop, height ≤ 80px.
|
||||
- **"Used by / Trusted by"** logo wall lives UNDER the hero, uses real SVG logos (Simple Icons / devicon), never plain text wordmarks.
|
||||
- **Section-Layout-Repetition Ban** - across 8 sections, at least 4 different layout families.
|
||||
- **Bento Cell Count Rule** - N items = exactly N cells; no empty middle or trailing cells.
|
||||
- **Page Theme Lock** - one theme (light / dark / auto) for the whole page; no mid-page light/dark flips.
|
||||
- **Italic Descender Clearance** - italic display words with `y g j p q` need `leading-[1.1]` minimum and `pb-1` reserve.
|
||||
- **Long lists need a different UI component** - `<ul>` + `divide-y` for > 5 items is the lazy default; reach for cards / tabs / marquee / carousel / scroll-snap pills.
|
||||
- **Long-list-divider-overuse banned** - no `border-t` + `border-b` on every row.
|
||||
|
||||
**Animation discipline**
|
||||
|
||||
- Motion library standardised on **Motion** (`motion/react`, the rebrand of Framer Motion). Legacy `framer-motion` package still works as alias.
|
||||
- **§5.A GSAP Sticky-Stack** - canonical code skeleton (`start: "top top"`, `pin: true`, `scrub: true`, transform driven by NEXT card's trigger).
|
||||
- **§5.B GSAP Horizontal-Pan** - canonical code skeleton (`start: "top top"`, `pin: true`, `end: "+=" + distance`, `scrub: 1`).
|
||||
- **§5.C Scroll-Reveal Stagger** - lighter Motion-only pattern using `whileInView`. Use this for simple reveals; save GSAP for actual pinning/scrubbing.
|
||||
- **§5.D Forbidden Animation Patterns** - `window.addEventListener('scroll')`, custom scroll calculations in React state, `requestAnimationFrame` loops touching React state. Banned outright.
|
||||
- **Reduced motion mandatory** for anything `MOTION_INTENSITY > 3` - wrap in `useReducedMotion()` or `@media (prefers-reduced-motion: reduce)`.
|
||||
- **"Motion claimed, motion shown"** - pages claiming `MOTION_INTENSITY > 4` must actually animate; otherwise drop the dial to 3 and ship clean static.
|
||||
|
||||
**Stack updates**
|
||||
|
||||
- Tailwind v4 default; v3 only when the existing project demands it.
|
||||
- Motion replaces Framer Motion as the recommended import path.
|
||||
- Icons: Phosphor / HugeIcons / Radix / Tabler (in priority order). Lucide discouraged. Hand-rolled SVG icons banned.
|
||||
|
||||
### What's the same
|
||||
|
||||
- Three dials (`DESIGN_VARIANCE`, `MOTION_INTENSITY`, `VISUAL_DENSITY`) - same spirit, expanded with preset matrix and inference rules.
|
||||
- Anti-slop philosophy - same direction, harder enforcement.
|
||||
- Performance guardrails - `transform`/`opacity` only, no `top/left/width/height` animation, hardware acceleration.
|
||||
|
||||
### Why we made v2 (experimental) the new default
|
||||
|
||||
Pre-v2, the original taste-skill set the right direction but was easy for agents to skim past. Production testing showed the same Tells emerging across builds (em-dash everywhere, section-number eyebrows, "Quietly in use at", decorative dots, fake screenshots out of styled divs, broken GSAP scroll triggers).
|
||||
|
||||
v2 closes those gaps with hard rules, canonical code skeletons, and a pre-flight checklist the agent must run. It is the version we now recommend.
|
||||
|
||||
### How to pin to v1 if you need it
|
||||
|
||||
```bash
|
||||
npx skills add https://github.com/Leonxlnx/taste-skill --skill "design-taste-frontend-v1"
|
||||
```
|
||||
|
||||
This installs the original SKILL.md unchanged.
|
||||
|
||||
### Stability note
|
||||
|
||||
v2 (experimental) is the new default AND it is actively iterating. Refinements may land in any pre-release while we converge on v2.0.0 stable. Breaking changes (rename of install name, removal of sections) will be batched and called out clearly when v2.0.0 stable cuts.
|
||||
|
||||
---
|
||||
|
||||
## v1 - the original taste-skill
|
||||
|
||||
The original release. Dial-driven philosophy, anti-slop rules, reference vocabulary of pattern names. Preserved at `skills/taste-skill-v1/` and installable as `design-taste-frontend-v1`.
|
||||
@@ -0,0 +1,207 @@
|
||||
# Credits
|
||||
|
||||
## thumbnail-becomes-the-stage
|
||||
|
||||
- `night-pool.mp4`: a slow camera drift rendered from a photograph by David Di Veroli on
|
||||
[Unsplash](https://unsplash.com/license) (served through Picsum), made for this demo.
|
||||
|
||||
## twin-image-scanner
|
||||
|
||||
- `typewriter.webp`: photograph of a Favorit portable typewriter by Florian Klauer on
|
||||
[Unsplash](https://unsplash.com/license) (served through Picsum).
|
||||
- `typewriter-structure.svg`: a line drawing traced from that photograph for this demo.
|
||||
|
||||
## peel-tear-and-drag
|
||||
|
||||
- `plane.webp`, `plane-1200.webp`: "LX-VCE - Boeing 747-8R7F underside" by Steve Knight,
|
||||
[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/), modified (cut out, turned, toned, markings and
|
||||
fin removed, nose retouched).
|
||||
- `cloud-*.webp`: "Cumulus cloud from above" by rpieket and "Clouds from above" by transreal, both
|
||||
[CC BY 2.0](https://creativecommons.org/licenses/by/2.0/), modified (cut out, turned and toned).
|
||||
|
||||
## scrubbed-transformation-sequence
|
||||
|
||||
- `d/`, `m/` (frame sequences), `clay-board*.webp`, `kiln-shelf*.webp`: the vase and its props are 3D
|
||||
renders made for this demo.
|
||||
|
||||
## fixed-hero-object
|
||||
|
||||
- `d/`, `p/` (turntable frames of the 'Halden 35' camera): 3D renders made for this demo; the camera and its maker are invented.
|
||||
|
||||
## page-lifts-off-closing-picture
|
||||
|
||||
- `korpilahti-harbour-fog.jpg`, `korpilahti-harbour-fog-3264.jpg`: "Päijänne Korpilahden satama" by Mika
|
||||
Särkijarvi, [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/), via
|
||||
[Wikimedia Commons](https://commons.wikimedia.org/wiki/File:P%C3%A4ij%C3%A4nne_Korpilahden_satama.JPG),
|
||||
modified (camera noise reduced, the fog in the top 42% softened and its lens fall-off evened out, metadata
|
||||
removed; the 1920px copy resized from it), shared under the same licence.
|
||||
|
||||
## sheets-tip-in-and-away
|
||||
|
||||
The three boats of the demo's made-up boatyard, each recompressed at 1920px wide with its metadata
|
||||
removed:
|
||||
|
||||
- `faering.jpg`: "Sunnmørsfæring - Herøy kystmuseum" by Silje L. Bakke,
|
||||
[CC BY-SA 2.5](https://creativecommons.org/licenses/by-sa/2.5/), via
|
||||
[Wikimedia Commons](https://commons.wikimedia.org/wiki/File:Sunnm%C3%B8rsf%C3%A6ring_-_Her%C3%B8y_kystmuseum.jpg),
|
||||
shared under the same licence.
|
||||
- `nordlandsbat.jpg`: "Nordlandsbåtar" by Knut (nn.wikipedia), public domain, via
|
||||
[Wikimedia Commons](https://commons.wikimedia.org/wiki/File:Nordlandsb%C3%A5tar.JPG).
|
||||
- `robat.jpg`: "14 2024 Sogn og Fjordane 01" by Øyvind Holmstad,
|
||||
[CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/), via
|
||||
[Wikimedia Commons](https://commons.wikimedia.org/wiki/File:14_2024_Sogn_og_Fjordane_01.jpg), modified
|
||||
(cropped to 1920x2000 around the boat from the 1920px copy), shared under the same licence.
|
||||
|
||||
## closing-object-turns
|
||||
|
||||
Three publishers' cloth covers for the demo's made-up library show, each cropped to its boards, with no
|
||||
metadata kept. Photographed at the British Library and dedicated to the public domain by Southwold1966,
|
||||
[CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/), via Wikimedia Commons:
|
||||
|
||||
- `natures-own-gardens-1160.jpg`, `natures-own-gardens-720.jpg`: ["Nature's Own Gardens - BL 7031w10 upper
|
||||
cover and spine Knowles"](https://commons.wikimedia.org/wiki/File:Nature%27s_Own_Gardens_-_BL_7031w10_upper_cover_and_spine_Knowles.jpg),
|
||||
cover by Reginald Knowles, 1907.
|
||||
- `shadows-and-fireflies-900.jpg`: ["Shadows and firefliesa book of verse - BL 11607aaa25 1 upper cover and
|
||||
spine by Guthrie"](https://commons.wikimedia.org/wiki/File:Shadows_and_firefliesa_book_of_verse_-_BL_11607aaa25_1_upper_cover_and_spine_by_Guthrie.jpg),
|
||||
cover by James Guthrie, 1898.
|
||||
- `four-lais-900.jpg`: ["Guingamor, Lanval, Tyolet, Bisclaveret. - BL2346a3 upper and spine Hadaway
|
||||
design"](https://commons.wikimedia.org/wiki/File:Guingamor,_Lanval,_Tyolet,_Bisclaveret._-_BL2346a3_upper_and_spine_Hadaway_design.jpg),
|
||||
cover by William Snelling Hadaway, 1900.
|
||||
|
||||
## product-assembles-into-its-action
|
||||
|
||||
Two photographs for the demo's made-up invoicing app, served through Picsum at the size the page shows
|
||||
them, with their metadata removed:
|
||||
|
||||
- `studio-room.jpg`: a studio room with a table and white chairs, photograph by Breather on
|
||||
[Unsplash](https://unsplash.com/photos/DEdM9Vs6s8w) ([Unsplash licence](https://unsplash.com/license)),
|
||||
cropped to 1100x1375.
|
||||
- `mixing-desk.jpg`: a hand on the fader of a mixing desk, photograph by Drew Patrick Miller on
|
||||
[Unsplash](https://unsplash.com/photos/_o6AAx9dl_Y) ([Unsplash licence](https://unsplash.com/license)),
|
||||
cropped to 1200x800.
|
||||
|
||||
## line-carries-colour-swap
|
||||
|
||||
Three photographs for the demo's made-up letterpress shop, resized to the sizes the page asks for, with
|
||||
their metadata removed:
|
||||
|
||||
- `type-case-1920.jpg`, `type-case-2880.jpg`: ["Lead type case (25598835882)"](https://commons.wikimedia.org/wiki/File:Lead_type_case_(25598835882).jpg)
|
||||
by Thomas Quine, [CC BY 2.0](https://creativecommons.org/licenses/by/2.0/), via Wikimedia Commons.
|
||||
- `hand-press-1920.jpg`, `hand-press-2880.jpg`: ["Early letterpress (25630899992)"](https://commons.wikimedia.org/wiki/File:Early_letterpress_(25630899992).jpg)
|
||||
by Thomas Quine, [CC BY 2.0](https://creativecommons.org/licenses/by/2.0/), via Wikimedia Commons.
|
||||
- `composing-stick-960.jpg`, `composing-stick-1600.jpg`: ["Metal movable type"](https://commons.wikimedia.org/wiki/File:Metal_movable_type.jpg)
|
||||
by Willi Heidelbach, [CC BY 2.5](https://creativecommons.org/licenses/by/2.5/), via Wikimedia Commons.
|
||||
|
||||
## closing-cut-under-the-rise
|
||||
|
||||
Two photographs for the demo's made-up pottery, with no metadata kept. Both were dedicated to the public
|
||||
domain ([CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/)) on Unsplash, via Wikimedia Commons:
|
||||
|
||||
- `teapot-room.jpg`, `teapot-room-tablet.jpg`, `teapot-room-portrait.jpg`, `teapot-cutout.webp`:
|
||||
["Teapot and mug on table (Unsplash)"](https://commons.wikimedia.org/wiki/File:Teapot_and_mug_on_table_(Unsplash).jpg)
|
||||
by Jorge Garcia, cropped to a landscape frame (2000x1148), a tablet frame and a portrait frame, and the
|
||||
teapot masked out of the same photograph onto a transparent ground for the rising cut-out. The
|
||||
cut-out was masked again in October 2026 (1040x669 WebP with alpha): a round closing under the spout
|
||||
and the knob and a smooth edge, with no notch or stair steps.
|
||||
- `herbal-tea.jpg`: ["Herbal Tea (Unsplash)"](https://commons.wikimedia.org/wiki/File:Herbal_Tea_(Unsplash).jpg)
|
||||
by Gaelle Marcel, resized to 960px wide.
|
||||
|
||||
## window-relay-with-stamps
|
||||
|
||||
Five Raku tea bowls in the Tokyo National Museum for the demo's made-up tea school, published through
|
||||
[ColBase](https://colbase.nich.go.jp/) under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/), via
|
||||
Wikimedia Commons, each resized to 2000px wide:
|
||||
|
||||
- `chojiro-amadera.jpg`: [Tea bowl named Amadera (Nunnery)](https://commons.wikimedia.org/wiki/File:Tea_Bowl,_Named_%E2%80%9CAmadera_(Nunnery)%E2%80%9D.jpg),
|
||||
black Raku, Chōjirō and workshop (TNM G-4836).
|
||||
- `ichinyu-kanoko-madara.jpg`: [Tea bowl named Kanoko Madara (Fawn Speckles)](https://commons.wikimedia.org/wiki/File:Tea_Bowl,_Named_%22Kanoko_Madara_(Fawn_Speckles)%22.jpg),
|
||||
Ichinyū (TNM G-5340).
|
||||
- `chonyu-black-raku.jpg`: ["Tea bowl, Kuroraku type, Raku Ware"](https://commons.wikimedia.org/wiki/File:Tea_bowl,_Kuroraku_type,_Raku_Ware.jpg),
|
||||
Chōnyū (TNM G-5005).
|
||||
- `tokunyu-red-raku.jpg`: [Red Raku tea bowl by Tokunyū, the eighth Raku Kichizaemon](https://commons.wikimedia.org/wiki/File:%E5%85%AB%E4%BB%A3%E6%A8%82%E5%90%89%E5%B7%A6%E8%A1%9B%E9%96%80%EF%BC%88%E5%BE%97%E5%85%A5%EF%BC%89%E4%BD%9C_%E8%B5%A4%E6%A8%82%E8%8C%B6%E7%A2%97_%E9%AB%987.8_%E5%8F%A3%E5%BE%8410.5_%E9%AB%98%E5%8F%B0%E5%BE%845.1.jpg).
|
||||
- `ryonyu-fuji.jpg`: [Raku tea bowl with a Mount Fuji design in brown glaze by Ryōnyū, the ninth Raku Kichizaemon](https://commons.wikimedia.org/wiki/File:%E4%B9%9D%E4%BB%A3%E6%A8%82%E5%90%89%E5%B7%A6%E8%A1%9B%E9%96%80%E3%83%BB%E4%BA%86%E5%85%A5_%E8%A4%90%E9%87%89%E5%AF%8C%E5%A3%AB%E6%96%87%E6%A5%BD%E8%8C%B6%E7%A2%97_%E6%9D%B1%E4%BA%AC%E5%9B%BD%E7%AB%8B%E5%8D%9A%E7%89%A9%E9%A4%A8%E8%94%B51.jpg).
|
||||
|
||||
## seam-pocket-gathers-the-words
|
||||
|
||||
Three photographs for the demo's made-up flower farm, from one shoot by the USDA Natural Resources
|
||||
Conservation Service ("USDAgov"), public domain as works of the US federal government, via Wikimedia
|
||||
Commons. They show a real farm (Singletree Flower Farm, Goshen, Indiana, June 2022); the farm's name is
|
||||
not used on the page. No metadata kept:
|
||||
|
||||
- `field.jpg`: ["Singletree Flower Farm, Indiana (20220629-NRCS-BJOC-006)"](https://commons.wikimedia.org/wiki/File:Singletree_Flower_Farm,_Indiana_(20220629-NRCS-BJOC-006).jpg),
|
||||
resized to 2000px wide.
|
||||
- `rows.jpg`: ["Singletree Flower Farm, Indiana (20220629-NRCS-BJOC-023)"](https://commons.wikimedia.org/wiki/File:Singletree_Flower_Farm,_Indiana_(20220629-NRCS-BJOC-023).jpg),
|
||||
resized to 1100px wide.
|
||||
- `bucket.jpg`: ["Singletree Flower Farm, Indiana (20220629-NRCS-BJOC-093)"](https://commons.wikimedia.org/wiki/File:Singletree_Flower_Farm,_Indiana_(20220629-NRCS-BJOC-093).jpg),
|
||||
resized to 1400px wide.
|
||||
|
||||
## speed-bent-row
|
||||
|
||||
Seven photographs of Lofoten for the demo's made-up print studio, all by Simo Räsänen (Ximonic), via
|
||||
Wikimedia Commons, resized to 1280px wide (one cropped to a wide strip at 1920px), with their camera data
|
||||
removed. [CC BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/), shared under the same licence:
|
||||
|
||||
- `reinefjorden.jpg`: ["Reine at Reinefjorden, 2010 September"](https://commons.wikimedia.org/wiki/File:Reine_at_Reinefjorden,_2010_September.jpg).
|
||||
- `reine-harbour.jpg`: ["Boat dock in Reine, Lofoten, Norway, 2015 September"](https://commons.wikimedia.org/wiki/File:Boat_dock_in_Reine,_Lofoten,_Norway,_2015_September.jpg).
|
||||
- `nusfjord.jpg`: ["Boats in Nusfjord, Lofoten, Norway, 2015 September"](https://commons.wikimedia.org/wiki/File:Boats_in_Nusfjord,_Lofoten,_Norway,_2015_September.jpg).
|
||||
- `tind.jpg`: ["Tind and Å i Lofoten villages and Mannen and Gjerdtindan mountains"](https://commons.wikimedia.org/wiki/File:Tind_and_%C3%85_i_Lofoten_villages_and_Mannen_and_Gjerdtindan_mountains,_Moskenes,_Nordland,_Norway,_2015_September.jpg).
|
||||
- `a-village-2.jpg`: ["Residential in Å i Lofoten, Moskenesøya, 2015 September - 2"](https://commons.wikimedia.org/wiki/File:Residential_in_%C3%85_i_Lofoten,_Moskenes%C3%B8ya,_Lofoten,_Norway,_2015_September_-_2.jpg).
|
||||
- `reine-october.jpg`: ["Reine in Lofoten, Norway, 2012 October"](https://commons.wikimedia.org/wiki/File:Reine_in_Lofoten,_Norway,_2012_October.jpg).
|
||||
- `bottelvika.jpg`: ["Nusfjord view towards Bottelvika from Snøsen"](https://commons.wikimedia.org/wiki/File:Nusfjord_view_towards_Bottelvika_from_Sn%C3%B8sen,_Lofoten,_Norway,_2015_September.jpg).
|
||||
|
||||
## panels-reproportion-on-arrival
|
||||
|
||||
Five photographs for the demo's made-up craft school, via Wikimedia Commons, resized and graded as one
|
||||
set (one exposure, balance and saturation), shared under the same licences:
|
||||
|
||||
- `weaving.jpg`: ["The moving of the hand shuttle"](https://commons.wikimedia.org/wiki/File:The_moving_of_the_hand_shuttle.jpg)
|
||||
by Bright Kwame Ayisi (Kwameghana), [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/).
|
||||
- `clay.jpg`: ["Pottery at the Chokhi Dhani Resort Panchkula 27"](https://commons.wikimedia.org/wiki/File:Pottery_at_the_Chokhi_Dhani_Resort_Panchkula_27.jpg)
|
||||
by Kritzolina, [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/).
|
||||
- `type.jpg`: ["Wood letterpress type"](https://commons.wikimedia.org/wiki/File:Wood_letterpress_type.jpg)
|
||||
by Michellecornelison, [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/).
|
||||
- `glass.jpg`: ["Bongani pulling an elephant trunk from molten glass"](https://commons.wikimedia.org/wiki/File:Bongani_pulling_an_elephant_trunk_from_molten_glass.jpg)
|
||||
by Bentaylor13413, [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/).
|
||||
- `wood.jpg`: ["Nova Scotia DSC01450 - Making a Spoon"](https://commons.wikimedia.org/wiki/File:Nova_Scotia_DSC01450_-_Making_a_Spoon_(7815317126).jpg)
|
||||
by Dennis G. Jarvis, [CC BY-SA 2.0](https://creativecommons.org/licenses/by-sa/2.0/).
|
||||
|
||||
## object-lowered-onto-the-last-line
|
||||
|
||||
Three photographs for the demo's made-up pottery, via Wikimedia Commons, with no metadata kept:
|
||||
|
||||
- `jug-640.png`, `jug-1000.png`, `jug-1400.png`: ["Vase jaune"](https://commons.wikimedia.org/wiki/File:Vase_jaune.jpg)
|
||||
by Lionel Allorge, [CC BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/), cut out from its
|
||||
white ground onto a transparent one, shared under the same licence.
|
||||
- `studio-800.jpg`, `studio-1600.jpg`: ["Okopod - Pottery Studio"](https://commons.wikimedia.org/wiki/File:Okopod_-_Pottery_Studio.jpg)
|
||||
by Lorna Satchell, [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/), resized.
|
||||
- `wheel-640.jpg`, `wheel-1100.jpg`: ["Detail of pottery studio, Old Print Works, Moseley Road, Balsall Heath"](https://commons.wikimedia.org/wiki/File:Detail_of_pottery_studio,_Old_Print_Works,_Moseley_Road,_Balsall_Heath_-_geograph.org.uk_-_6845980.jpg)
|
||||
by A J Paxton, [CC BY-SA 2.0](https://creativecommons.org/licenses/by-sa/2.0/), cropped, shared under the
|
||||
same licence.
|
||||
|
||||
## through-the-openings
|
||||
|
||||
Three photographs of the cloister of San Zeno Maggiore in Verona for the demo's made-up guesthouse, all by
|
||||
Norbert Nagel, [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/), via Wikimedia Commons,
|
||||
with no metadata kept, shared under the same licence:
|
||||
|
||||
- `cloister-1600.jpg`, `cloister-2000.jpg`, `cloister-portrait-1080.jpg`: ["San Zeno Maggiore - Verona -
|
||||
Cloister courtyard - 2026 - 11"](https://commons.wikimedia.org/wiki/File:San_Zeno_Maggiore_-_Verona_-_Cloister_courtyard_-_2026_-_11.jpg),
|
||||
resized to 1600 and 2000px wide and cropped to a 9:16 portrait frame.
|
||||
- `arcade-walk-1200.jpg`, `colonnade-1000.jpg`: crops of ["Cloister arcades and memorials - 2026 - 10"](https://commons.wikimedia.org/wiki/File:San_Zeno_Maggiore_-_Verona_-_Cloister_arcades_and_memorials_-_2026_-_10.jpg)
|
||||
and ["Cloister gallery and tombs - 2026 - 07"](https://commons.wikimedia.org/wiki/File:San_Zeno_Maggiore_-_Verona_-_Cloister_gallery_and_tombs_-_2026_-_07.jpg).
|
||||
|
||||
## closing-line-in-a-field-of-words
|
||||
|
||||
Three photographs for the demo's made-up harbour restaurant, from Unsplash via Wikimedia Commons, at
|
||||
1920px wide with no metadata kept. The scene itself needs no pictures; these sit in the quiet section
|
||||
before it.
|
||||
|
||||
- `mussels.jpg`: ["Mussel Appetizer"](https://commons.wikimedia.org/wiki/File:Mussel_Appetizer_(Unsplash).jpg)
|
||||
by Nick Karvounis, [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) (published on
|
||||
[Unsplash](https://unsplash.com/photos/AJCN8dyd_7w) before June 2017).
|
||||
- `sea-bream.jpg`: ["Fish at the Market"](https://commons.wikimedia.org/wiki/File:Fish_at_the_Market_(Unsplash).jpg)
|
||||
by Jakub Kapusnak (foodiesfeed), on [Unsplash](https://unsplash.com/photos/vLQzopDRSNI) under the
|
||||
[Unsplash licence](https://unsplash.com/license) (tagged CC0 on Commons).
|
||||
- `harbour-rowboat.jpg`: ["Stahlbrode, Sundhagen, Germany"](https://commons.wikimedia.org/wiki/File:Stahlbrode,_Sundhagen,_Germany_(Unsplash).jpg)
|
||||
by Taduuda, [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) (published on
|
||||
[Unsplash](https://unsplash.com/photos/ivpnAlm5fEY) before June 2017).
|
||||
@@ -1,21 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2026 Leonxlnx
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -1,246 +1,10 @@
|
||||
<p align="center">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="assets/taste-skill-wordmark-dark.png" />
|
||||
<img src="assets/taste-skill-wordmark.png" alt="Taste Skill" width="340" />
|
||||
</picture>
|
||||
</p>
|
||||
# scene-media
|
||||
|
||||
<p align="center">
|
||||
<a href="https://tasteskill.dev" title="Visit tasteskill.dev"><img src="https://img.shields.io/badge/website-tasteskill.dev-24292f?style=flat" alt="Visit tasteskill.dev" /></a>
|
||||
|
||||
<a href="https://tastecode.dev" title="Visit tastecode.dev"><img src="https://img.shields.io/badge/new-TasteCode-ff6b00?style=flat" alt="New: TasteCode" /></a>
|
||||
|
||||
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-24292f?style=flat&logo=github&logoColor=white" alt="MIT License" /></a>
|
||||
|
||||
<a href="CHANGELOG.md"><img src="https://img.shields.io/badge/changelog-view-24292f?style=flat" alt="Changelog" /></a>
|
||||
</p>
|
||||
Pictures, footage and frame sequences for the scroll-scene demo pages of
|
||||
[taste-skill](https://github.com/Leonxlnx/taste-skill) (`skills/taste-skill/assets/scenes/demo/`).
|
||||
|
||||
<p align="center">
|
||||
<a href="https://tastecode.dev">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="assets/readme-tastecode-dark.webp" />
|
||||
<img src="assets/readme-tastecode.webp" alt="TasteCode is here. Taste Skill as a desktop app, with a design agent built in. Free and open source. Download at tastecode.dev" width="100%" />
|
||||
</picture>
|
||||
</a>
|
||||
</p>
|
||||
They live on this separate branch so the skill itself stays text: the demos load them from jsDelivr,
|
||||
from this branch (`https://cdn.jsdelivr.net/gh/Leonxlnx/taste-skill@scene-media/<scene>/<file>`).
|
||||
Nothing here is part of the skill an agent installs.
|
||||
|
||||
<h3 align="center">Sponsors</h3>
|
||||
|
||||
<table align="center">
|
||||
<tr>
|
||||
<td align="center" width="104">
|
||||
<a href="https://interfaces.dev/?utm_source=tasteskill&utm_medium=sponsorship">
|
||||
<img src="assets/sponsors/interfaces-dev-icon.webp" alt="Interfaces" width="52" height="52" />
|
||||
</a>
|
||||
</td>
|
||||
<td><sub><a href="https://interfaces.dev/?utm_source=tasteskill&utm_medium=sponsorship"><strong>interfaces.dev</strong></a> · A design engineering magazine by <a href="https://github.com/jakubkrehel"><strong>Jakub Krehel</strong></a></sub></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" width="104">
|
||||
<a href="https://reactbits.dev">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="assets/sponsors/reactbits-icon-dark.svg" />
|
||||
<img src="assets/sponsors/reactbits-icon-light.svg" alt="React Bits" width="52" height="52" />
|
||||
</picture>
|
||||
</a>
|
||||
</td>
|
||||
<td><sub><a href="https://reactbits.dev"><strong>React Bits</strong></a> · animated React components for creative interfaces</sub></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" width="104"><a href="https://img.ly/"><img src="assets/sponsors/imgly-logo.svg" alt="IMG.LY" width="52" height="52" /></a></td>
|
||||
<td><sub><a href="https://img.ly/"><strong>IMG.LY</strong></a> · CreativeEditor SDK</sub></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" width="104"><a href="https://www.sent.dm"><img src="assets/sponsors/sentdm.png" alt="Sent.dm" width="52" height="52" /></a></td>
|
||||
<td><sub><a href="https://www.sent.dm"><strong>Sent.dm</strong></a> · messaging APIs for SMS, WhatsApp, and RCS</sub></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<p align="center"><sub><a href="https://github.com/sponsors/Leonxlnx">Become a sponsor</a></sub></p>
|
||||
|
||||
**Taste Skill** (`tasteskill 2.5.1`) is an Agent Skill that makes coding agents build professional company websites at the `figma.com` and `x.ai` level instead of assembling a generic landing page. Every build uses plain copy, one design system, one section per screen, equal left and right edges, real photographs (licensed stand-ins when the client has none), real brand icons and real product UI, a hero entrance and one or two dealt moments on every page, quiet micro-interactions, and shader effects and scroll scenes kept strictly for tech, gaming and software pages, all verified in a real browser by a checker and a finish gate that enforce the rules.
|
||||
|
||||
Pages built from a single brief in earlier v2 runs:
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td width="50%"><img src="examples/v2/coffee-storefront.webp" alt="Coffee shop page with a drawn storefront as its hero" /></td>
|
||||
<td width="50%"><img src="examples/v2/night-dates.webp" alt="Techno night page with its dates set into an archive photograph" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td width="50%"><img src="examples/v2/coffee-roast.webp" alt="Coffee shop page section showing the roast in four photographs" /></td>
|
||||
<td width="50%"><img src="examples/v2/coffee-questions.webp" alt="Coffee shop page questions as stacked index cards" /></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
The photographs are real, found in open archives and credited by the skill ([credits](examples/v2/CREDITS.md)). Watch the [launch film](https://github.com/Leonxlnx/taste-skill/releases/tag/v2.0.0).
|
||||
|
||||
## Install
|
||||
|
||||
```bash
|
||||
npx skills add https://github.com/Leonxlnx/taste-skill --skill "design-taste-frontend"
|
||||
```
|
||||
|
||||
That installs the skill with the [`npx skills`](https://github.com/vercel-labs/agent-skills) CLI.
|
||||
|
||||
The skill runs its scripts with **Node 22+** and an installed **Chrome, Edge or Chromium** (set `CHROME_PATH` if it is in a non-standard place). Optional: **ffmpeg** on the PATH, for WebP output and the phone crop of a hero photograph in `photos.mjs`. It installs nothing and needs no API keys. Bundled Wikimedia Commons photographs work offline; fetching additional photographs or icons uses network access.
|
||||
|
||||
<details>
|
||||
<summary>Claude Code plugin</summary>
|
||||
|
||||
Run these inside Claude Code. The skill is namespaced under `taste-skill:`, so it does not collide with your other skills.
|
||||
|
||||
```
|
||||
/plugin marketplace add Leonxlnx/taste-skill
|
||||
/plugin install taste-skill@taste-skill
|
||||
```
|
||||
|
||||
`/plugin update` upgrades it later.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>Codex plugin</summary>
|
||||
|
||||
```bash
|
||||
codex plugin marketplace add Leonxlnx/taste-skill
|
||||
codex plugin add taste-skill@taste-skill
|
||||
```
|
||||
|
||||
Start a new Codex session afterwards so the skill is loaded.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary>From a clone, linked instead of copied</summary>
|
||||
|
||||
`./install.sh` symlinks the skill into Claude Code (`--codex` for Codex, `--all-agents` for both), so a `git pull` updates it in place. On Windows (Git Bash) it makes a real link, or a directory junction when symlinks are not allowed, and it reports an older copied folder instead of skipping it silently.
|
||||
|
||||
</details>
|
||||
|
||||
Already have the skill? Run the install command again; the install name did not change. Looking for one of the older skills? See [Moved skills](#moved-skills).
|
||||
|
||||
## How 2.5 works
|
||||
|
||||
Use it by asking your agent to build or redesign a company site; the agent loads the skill, copies `assets/` into the project, starts from `assets/starter.html` and runs the checker before it hands the page over. Every build starts by classifying the client's business (`software`, `gaming`, `tech`, `product`, `service` or `place`) and planning the page screen by screen before writing markup:
|
||||
|
||||
1. **Deal tokens and layout.** `scripts/start.mjs` deals a palette made for the trade and a Google Fonts pairing for the page kind (`library/palettes.json`, `library/type.json`), and `assets/layout/deal.mjs` deals a hero layout (`split`, `centred`, `product`, `photo`, `place`, `collage`, `editorial`, `word`, `film`, `statement` or `triptych`).
|
||||
2. **Start from one system.** `assets/starter.html`, `assets/system.css` and `assets/layout/layout.css` enforce one section per screen at desktop (`1440x900`), equal left and right content edges, a fixed navigation bar and a single-screen closing footer (`footer.closing`).
|
||||
3. **Show real product UI and real photographs.** Software and tech pages populate lit feature cards (`assets/ui/cards.css`) with rewritten HTML UI fragments (`assets/ui/`) and node-and-line diagrams (`assets/diagrams/`), with real brand and interface SVGs resolved locally by `scripts/icons.mjs`. Place, shop, hospitality and non-technical product pages lead with curated photographs (`scripts/photos.mjs`, `assets/photos/`), typography and flat colour, crediting sources in one expandable footer line with no captions under images.
|
||||
4. **Keep effects for tech and gaming pages.** Shader grounds (`scripts/effects.mjs`), scroll scenes (`assets/scenes/`) and procedural 3D prints (`assets/objects/`) are dealt only on `software`, `tech` and `gaming` pages within a four-context WebGL cap, with static fallbacks for phones and reduced motion. Every page gets a hero entrance and one or two moments from `scripts/moments.mjs`; cafes, hotels, shops, studios and services get only the photo- and type-led ones, and zero WebGL.
|
||||
5. **Check in a real browser over HTTP.** `scripts/consistency.mjs`, `assets/layout/check.mjs`, `scripts/perf.mjs` and `scripts/shoot.mjs` render the built page in headless Chrome across `1440`, `1024`, `768` and `390`, catching empty visuals, broken shaders, contrast drops, misaligned columns, section-height drift, placeholder text, invented street numbers and slow-network image gaps before the build ships. `scripts/gate.mjs` then holds the finish until no fixable FAIL is left, three rounds at most.
|
||||
|
||||
Details of what changed from `2.1.x` are in the [changelog](CHANGELOG.md).
|
||||
|
||||
## The tools
|
||||
|
||||
Everything is a plain Node 22+ script in the skill folder; none installs anything.
|
||||
|
||||
| Tool | What it does |
|
||||
| --- | --- |
|
||||
| `scripts/start.mjs` | Deals a palette and a Google Fonts pairing for the page kind and prints the `<head>` links and `:root` tokens. |
|
||||
| `assets/layout/deal.mjs` | Deals one of eleven tested hero layouts; `assets/layout/check.mjs` checks it with long-headline stress tests. |
|
||||
| `scripts/photos.mjs` | Deals vetted photographs by trade, enforces image weight and writes the one footer credit line. |
|
||||
| `scripts/icons.mjs` | Resolves real brand and interface icons into local SVG files. |
|
||||
| `scripts/effects.mjs`, `scripts/moments.mjs` | Deal shader grounds for tech, gaming and software pages, and the moments for every kind. |
|
||||
| `scripts/gate.mjs`, `scripts/copy-lint.mjs` | The finish gate (also a Stop hook) and the copy linter it runs. |
|
||||
| `scripts/consistency.mjs` | The checker: renders the page in headless Chrome over HTTP at `1440`, `1024`, `820`, `768` and `390` and prints PASS, WARN or FAIL per rule. |
|
||||
| `scripts/perf.mjs`, `scripts/shoot.mjs` | Page weight and speed, and full-page and per-section screenshots. |
|
||||
|
||||
First run, from the project folder (a deal also arms the finish gate there): `node scripts/start.mjs deal --page software` (kinds: `software`, `gaming`, `tech`, `product`, `service`, `place`). Check a built page with `node scripts/consistency.mjs <url or file> --page <kind>`.
|
||||
|
||||
## Moved skills
|
||||
|
||||
This repo holds one skill, `design-taste-frontend`. The others moved to repos of their own and kept their install names:
|
||||
|
||||
| Install name | Where it lives now |
|
||||
| --- | --- |
|
||||
| `high-end-visual-design`, `minimalist-ui`, `industrial-brutalist-ui`, `gpt-taste`, `stitch-design-taste`, `design-taste-frontend-v1`, `design-taste-frontend-v2-experimental` | **[Leonxlnx/taste-skill-classics](https://github.com/Leonxlnx/taste-skill-classics)** |
|
||||
| `imagegen-frontend-web`, `imagegen-frontend-mobile`, `brandkit`, `image-to-code` | **[Leonxlnx/imagegen-skills](https://github.com/Leonxlnx/imagegen-skills)** |
|
||||
| `redesign-existing-projects` | Part of `design-taste-frontend`, which audits an existing page in a real browser before changing anything |
|
||||
| `full-output-enforcement` | Removed. For the same problem, see **[Leonxlnx/unlazy](https://github.com/Leonxlnx/unlazy)** |
|
||||
|
||||
Install a moved skill from its new repo under the same name:
|
||||
|
||||
```bash
|
||||
npx skills add https://github.com/Leonxlnx/taste-skill-classics --skill "high-end-visual-design"
|
||||
```
|
||||
|
||||
## Common Questions
|
||||
|
||||
**What does the skill need?**
|
||||
Node 22 or newer and Chrome, Edge or Chromium; ffmpeg is optional (WebP photographs and the phone crop of a hero photograph). It installs nothing and uses no API keys. Bundled Commons photographs are stored locally; network access is used only when downloading additional photographs, Google Fonts or brand icons.
|
||||
|
||||
**Where do the pictures come from, and can I use them?**
|
||||
From the skill's vetted photograph library (`assets/photos/photos.json`, including bundled Wikimedia Commons WebP sets and Unsplash photographs) dealt by `scripts/photos.mjs`. Library frames are used for trade and material details (or marked explicitly as draft stand-ins when the client has no photographs yet), never passed off as the client's own room, staff or product, and credited in one expandable footer line (`photos.mjs credits`).
|
||||
|
||||
**Does it work with React, Vue, Svelte, plain HTML?**
|
||||
An empty folder gets a static page from `assets/starter.html`. An existing React, Vue, Svelte, Astro or Tailwind project is built in its own stack, with the kit served from its public folder; a Next.js brief is built as a static export. The browser checks run on the served or built page.
|
||||
|
||||
**When does a page get shaders or scroll effects?**
|
||||
Shaders only on `software`, `tech` (technical hardware) and `gaming` pages, and always within a four-context WebGL budget with static phone and reduced-motion fallbacks. Places, shops, cafes, hotels, studios, services and everyday physical products stay calm: photographs, sharp typography and flat colour, with a hero entrance and one or two photo- or type-led moments in their own sections.
|
||||
|
||||
## Support the project
|
||||
|
||||
If Taste Skill helps you, consider sponsoring:
|
||||
|
||||
[Sponsor on GitHub](https://github.com/sponsors/Leonxlnx)
|
||||
|
||||
### Open Source Supporters
|
||||
|
||||
<table align="center">
|
||||
<tr>
|
||||
<td align="center" width="104"><a href="https://www.kimi.com"><img src="assets/sponsors/kimi-icon.png" alt="Kimi" width="52" height="52" /></a></td>
|
||||
<td><a href="https://www.kimi.com"><picture><source media="(prefers-color-scheme: dark)" srcset="https://kimi-file.moonshot.cn/prod-chat-kimi/kfs/4/1/2026-06-05/1d8h69mt3v89kkekg24gg" /><img alt="Kimi Open Source Friends" src="https://kimi-file.moonshot.cn/prod-chat-kimi/kfs/4/1/2026-06-05/1d8h69fudcmosb3pipls0" height="42" /></picture></a><br /><sub><a href="https://platform.kimi.ai?track_id=track-20f0d64bcaba419bb425a3e8c306f65d&aff=taste-skill"><strong>Get a Kimi API key</strong></a>: taste-skill users get 10% bonus API credits on their first purchase.</sub></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" width="104"><a href="https://vercel.com/open-source-program"><img src="assets/sponsors/vercel-logo.svg" alt="Vercel" width="52" height="52" /></a></td>
|
||||
<td><a href="https://vercel.com/open-source-program"><img src="assets/vercel-oss-program-badge.svg" alt="Vercel Open Source Program" height="28" /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### Community Sponsors
|
||||
|
||||
<p>
|
||||
<a href="https://github.com/dnakov"><img src="https://github.com/dnakov.png" width="40" height="40" style="border-radius:50%" alt="dnakov" title="dnakov" /></a>
|
||||
<a href="https://github.com/AkramReshad"><img src="https://github.com/AkramReshad.png" width="40" height="40" style="border-radius:50%" alt="AkramReshad" title="AkramReshad" /></a>
|
||||
<a href="https://github.com/ajmalaksar25"><img src="https://github.com/ajmalaksar25.png" width="40" height="40" style="border-radius:50%" alt="ajmalaksar25" title="ajmalaksar25" /></a>
|
||||
<a href="https://github.com/krikkkk"><img src="https://github.com/krikkkk.png" width="40" height="40" style="border-radius:50%" alt="krikkkk" title="krikkkk" /></a>
|
||||
<a href="https://github.com/navanchauhan"><img src="https://github.com/navanchauhan.png" width="40" height="40" style="border-radius:50%" alt="navanchauhan" title="navanchauhan" /></a>
|
||||
<a href="https://github.com/robinebers"><img src="https://github.com/robinebers.png" width="40" height="40" style="border-radius:50%" alt="robinebers" title="robinebers" /></a>
|
||||
<a href="https://github.com/JKc66"><img src="https://github.com/JKc66.png" width="40" height="40" style="border-radius:50%" alt="JKc66" title="JKc66" /></a>
|
||||
<a href="https://github.com/u2393696078-rgb"><img src="https://github.com/u2393696078-rgb.png" width="40" height="40" style="border-radius:50%" alt="u2393696078-rgb" title="u2393696078-rgb" /></a>
|
||||
<a href="https://github.com/a-human-created-this"><img src="https://github.com/a-human-created-this.png" width="40" height="40" style="border-radius:50%" alt="a-human-created-this" title="a-human-created-this" /></a>
|
||||
<a href="https://github.com/AtharvaJaiswal005"><img src="https://github.com/AtharvaJaiswal005.png" width="40" height="40" style="border-radius:50%" alt="AtharvaJaiswal005" title="AtharvaJaiswal005" /></a>
|
||||
<a href="https://github.com/ghughes7"><img src="https://github.com/ghughes7.png" width="40" height="40" style="border-radius:50%" alt="ghughes7" title="ghughes7" /></a>
|
||||
<a href="https://github.com/mccun934"><img src="https://github.com/mccun934.png" width="40" height="40" style="border-radius:50%" alt="mccun934" title="mccun934" /></a>
|
||||
<a href="https://github.com/techmedic5"><img src="https://github.com/techmedic5.png" width="40" height="40" style="border-radius:50%" alt="techmedic5" title="techmedic5" /></a>
|
||||
<a href="https://github.com/bytewerk-dev"><img src="https://github.com/bytewerk-dev.png" width="40" height="40" style="border-radius:50%" alt="bytewerk-dev" title="bytewerk-dev" /></a>
|
||||
<a href="https://github.com/LuisGot"><img src="https://github.com/LuisGot.png" width="40" height="40" style="border-radius:50%" alt="LuisGot" title="LuisGot" /></a>
|
||||
<a href="https://github.com/oskar-collab"><img src="https://github.com/oskar-collab.png" width="40" height="40" style="border-radius:50%" alt="oskar-collab" title="oskar-collab" /></a>
|
||||
<a href="https://github.com/denvit"><img src="https://github.com/denvit.png" width="40" height="40" style="border-radius:50%" alt="denvit" title="denvit" /></a>
|
||||
<a href="https://github.com/onedollarstock"><img src="https://github.com/onedollarstock.png" width="40" height="40" style="border-radius:50%" alt="onedollarstock" title="onedollarstock" /></a>
|
||||
<a href="https://github.com/KANA-33"><img src="https://github.com/KANA-33.png" width="40" height="40" style="border-radius:50%" alt="KANA-33" title="KANA-33" /></a>
|
||||
<a href="https://github.com/emilkowalski"><img src="https://github.com/emilkowalski.png" width="40" height="40" style="border-radius:50%" alt="emilkowalski" title="emilkowalski" /></a>
|
||||
<a href="https://github.com/AnthonyLiuVa"><img src="https://github.com/AnthonyLiuVa.png" width="40" height="40" style="border-radius:50%" alt="AnthonyLiuVa" title="AnthonyLiuVa" /></a>
|
||||
<a href="https://github.com/Wolfy18"><img src="https://github.com/Wolfy18.png" width="40" height="40" style="border-radius:50%" alt="Wolfy18" title="Wolfy18" /></a>
|
||||
<a href="https://github.com/Gigslol"><img src="https://github.com/Gigslol.png" width="40" height="40" style="border-radius:50%" alt="Gigslol" title="Gigslol" /></a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://www.star-history.com/leonxlnx/taste-skill">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/badge?repo=Leonxlnx/taste-skill&theme=dark" />
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/badge?repo=Leonxlnx/taste-skill" />
|
||||
<img alt="Star History Rank" src="https://api.star-history.com/badge?repo=Leonxlnx/taste-skill" />
|
||||
</picture>
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<sub>Feedback: open an issue or pull request, DM [@lexnlin](https://x.com/lexnlin) or [@blueemi99](https://x.com/blueemi99), or email [hello@tasteskill.dev](mailto:hello@tasteskill.dev).</sub>
|
||||
|
||||
<sub>Taste Skill has no official token, coin, or crypto project. Any token using my name, image, or project is unaffiliated and not endorsed by me.</sub>
|
||||
|
||||
## License
|
||||
|
||||
[MIT License](LICENSE) · Copyright (c) 2026 Leonxlnx
|
||||
Sources and licences: [CREDITS.md](CREDITS.md).
|
||||
|
Before Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 28 KiB |
@@ -1,7 +0,0 @@
|
||||
<svg width="62" height="62" viewBox="0 0 62 62" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="IMG.LY">
|
||||
<rect x="0.5" y="0.5" width="61" height="61" rx="13.5" fill="#ffffff" stroke="#e5e7eb"/>
|
||||
<g transform="translate(6 25) scale(.352)">
|
||||
<path d="M0.44 29H8.84V1H0.44V29ZM46.5213 1H36.2013L30.2413 19.08L24.3213 1H13.7213V29H21.8013V11.64L27.2013 29H33.3613L38.4413 11.64V29H46.5213V1ZM66.0166 18.96H70.6566C70.2566 21.16 68.4966 22.92 65.3766 22.92C60.7766 22.92 58.5366 19.48 58.5366 15.12C58.5366 11.16 60.3766 7.36 64.8566 7.36C67.7766 7.36 69.3766 9.12 69.6566 10.72H78.8566C78.3366 5.04 73.0566.24 64.9366.24C55.5366.24 50.0566 7.32 50.0566 15C50.0566 23.04 55.3766 29.76 64.9766 29.76C73.2166 29.76 78.0566 25.4 79.0966 18.96H81.7766V13.48H66.0166V18.96ZM105.948 21.88V1H97.6275V29H113.268V21.88H105.948ZM141.93 1H132.65L128.41 10.96L123.89 1H114.13L123.53 19.12L118.69 29H128.05L141.93 1Z" fill="#111827"/>
|
||||
<path d="M83.8188 24.68C83.8188 27.32 85.9388 29.48 88.6588 29.48C91.4588 29.48 93.5788 27.32 93.5788 24.68C93.5788 22.04 91.4588 19.88 88.6588 19.88C85.9388 19.88 83.8188 22.04 83.8188 24.68Z" fill="#471AFF"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 11 KiB |
@@ -1,5 +0,0 @@
|
||||
<svg width="233" height="233" viewBox="0 0 233 233" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="translate(0 10)">
|
||||
<path d="M63.4717 2.81622C72.603 -1.83853 82.7586 1.03226 91.2549 5.81915L92.0723 6.2879L99.7715 10.7908L90.7656 26.1893L83.0664 21.6863L82.418 21.3143C75.8213 17.6058 72.6468 18.1617 71.5723 18.7098L71.5654 18.7127C70.6535 19.1771 68.8002 20.81 67.708 26.3016C66.6406 31.6688 66.6489 39.2654 68.0879 48.8172C68.8311 53.7504 69.9368 59.0692 71.3926 64.6902C77.1846 63.8325 83.2174 63.1381 89.4404 62.6219C99.8561 45.7883 110.994 31.4666 121.728 20.8943C129.391 13.3461 137.216 7.3422 144.77 3.85626C152.09 0.477832 160.606 -1.14463 168.377 2.62188L168.747 2.80548L168.765 2.81427C174.428 5.70979 178.015 10.7257 180.128 16.2215C182.215 21.6499 183.069 28.0118 183.102 34.7352L183.146 43.6541L165.307 43.741L165.264 34.8221L165.25 33.8182C165.146 28.8815 164.461 25.1819 163.478 22.6229C162.458 19.9714 161.34 19.055 160.652 18.701C159.732 18.2379 157.315 17.7122 152.244 20.0525C147.271 22.3474 141.129 26.8231 134.245 33.6033C126.874 40.8635 119.074 50.3499 111.397 61.5701C112.961 61.5481 114.533 61.535 116.111 61.535C146.356 61.535 174.11 65.6089 194.612 72.4422C204.816 75.8433 213.718 80.0895 220.252 85.2381C226.685 90.3075 232.063 97.301 232.063 106.132C232.063 113.742 228.031 120.018 222.88 124.779C217.73 129.539 210.733 133.515 202.762 136.805L194.518 140.209L187.711 123.721L195.955 120.317C202.849 117.471 207.745 114.477 210.771 111.68C213.796 108.883 214.225 107.012 214.225 106.132C214.224 105.109 213.61 102.716 209.211 99.2498C204.911 95.8617 198.137 92.4199 188.972 89.365C170.734 83.2863 144.972 79.3738 116.111 79.3738C110.604 79.3738 105.21 79.5171 99.959 79.7899C97.3328 84.3422 94.7576 89.0819 92.2578 93.9861C90.1819 98.0589 88.2288 102.108 86.4004 106.112C87.8718 109.335 89.4227 112.588 91.0547 115.858L92.2695 118.265L92.2705 118.268L93.5049 120.667C106.318 145.309 120.98 165.594 134.247 178.662C141.129 185.441 147.271 189.914 152.242 192.206C157.32 194.548 159.735 194.015 160.652 193.55L160.813 193.462C161.658 192.961 163.081 191.565 164.133 187.594C165.25 183.373 165.62 177.309 164.875 169.477C163.391 153.885 157.687 133.277 147.94 110.906L144.378 102.729L160.732 95.6033L164.295 103.781C174.527 127.267 180.918 149.757 182.634 167.788C183.488 176.768 183.234 185.146 181.377 192.16C179.524 199.158 175.743 205.879 168.756 209.442L168.751 209.444C160.883 213.45 152.211 211.835 144.772 208.405C137.218 204.921 129.392 198.919 121.729 191.371C106.699 176.567 90.8783 154.408 77.3623 128.284C72.7498 141.178 69.632 153.146 68.083 163.438C66.6453 172.991 66.6378 180.59 67.7061 185.959C68.7308 191.108 70.4244 192.866 71.3838 193.449L71.5654 193.551L71.5742 193.555L71.7148 193.621C73.2731 194.293 77.8866 194.496 86.9775 188.051L94.2529 182.892L104.571 197.444L97.2949 202.603L96.3438 203.267C86.437 210.069 74.2497 214.943 63.4717 209.447V209.448C55.6014 205.441 51.8088 197.474 50.21 189.44C48.5864 181.281 48.8416 171.421 50.4424 160.784C52.8481 144.799 58.4732 125.899 66.9033 106.112C63.8574 98.962 61.1786 91.9274 58.8848 85.1053C53.219 86.3601 47.9816 87.7883 43.251 89.365C34.0855 92.42 27.3113 95.8617 23.0117 99.2498C18.6129 102.716 17.9984 105.109 17.998 106.132C17.998 107.672 19.6193 111.78 28.9795 116.879L29.9102 117.376L37.8135 121.51L29.5459 137.316L21.6426 133.182L20.6162 132.636C10.0349 126.894 0.160156 118.231 0.160156 106.132C0.160488 97.301 5.53771 90.3075 11.9707 85.2381C18.5044 80.0894 27.4063 75.8433 37.6104 72.4422C42.6048 70.7775 48.03 69.2779 53.8164 67.9598C52.3622 62.2021 51.233 56.6841 50.4482 51.4754C48.8459 40.8402 48.5894 30.9808 50.2119 22.8221C51.8097 14.7884 55.6014 6.82346 63.4717 2.81622ZM77.4385 72.9012C72.1605 72.9013 67.8818 77.1799 67.8818 82.4578C67.8819 87.7357 72.1606 92.0144 77.4385 92.0145C82.7165 92.0145 86.9951 87.7358 86.9951 82.4578C86.9951 77.1798 82.7165 72.9012 77.4385 72.9012Z" fill="white"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 3.8 KiB |
@@ -1,5 +0,0 @@
|
||||
<svg width="233" height="233" viewBox="0 0 233 233" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="translate(0 10)">
|
||||
<path d="M63.4717 3.1063C72.603 -1.54852 82.7585 1.3223 91.2549 6.10923L92.0723 6.57798L99.7715 11.0809L90.7656 26.4793L83.0664 21.9764L82.418 21.6043C75.8211 17.8957 72.6468 18.4517 71.5723 18.9999L71.5654 19.0028C70.6535 19.4671 68.8002 21.0999 67.708 26.5917C66.6406 31.9589 66.6488 39.5554 68.0879 49.1073C68.8311 54.0405 69.9368 59.3592 71.3926 64.9803C77.1846 64.1226 83.2174 63.4282 89.4404 62.912C99.8562 46.0783 110.994 31.7567 121.728 21.1844C129.391 13.6361 137.216 7.63229 144.77 4.14634C152.09 0.767879 160.606 -0.85461 168.377 2.91196L168.747 3.09556L168.765 3.10435C174.428 5.9999 178.015 11.0157 180.128 16.5116C182.215 21.94 183.069 28.3018 183.102 35.0252L183.146 43.9442L165.307 44.0311L165.264 35.1122L165.25 34.1083C165.146 29.1715 164.461 25.472 163.478 22.9129C162.458 20.2614 161.34 19.3451 160.652 18.9911C159.732 18.5279 157.316 18.0022 152.244 20.3426C147.271 22.6375 141.129 27.1131 134.245 33.8934C126.874 41.1537 119.074 50.6399 111.397 61.8602C112.961 61.8382 114.533 61.8251 116.111 61.825C146.356 61.825 174.11 65.8989 194.612 72.7323C204.816 76.1333 213.718 80.3796 220.252 85.5282C226.685 90.5976 232.063 97.591 232.063 106.422C232.063 114.032 228.031 120.308 222.88 125.069C217.73 129.829 210.733 133.805 202.762 137.096L194.518 140.499L187.711 124.011L195.955 120.607C202.849 117.761 207.745 114.767 210.771 111.97C213.796 109.173 214.225 107.303 214.225 106.422C214.224 105.399 213.61 103.007 209.211 99.5399C204.911 96.1518 198.137 92.71 188.972 89.6551C170.734 83.5764 144.972 79.6639 116.111 79.6639C110.604 79.6639 105.21 79.8071 99.959 80.0799C97.3328 84.6323 94.7576 89.3719 92.2578 94.2762C90.1819 98.349 88.2288 102.398 86.4004 106.402C87.8719 109.626 89.4226 112.878 91.0547 116.148L92.2695 118.556L92.2705 118.558L93.5049 120.957C106.318 145.599 120.98 165.884 134.247 178.952C141.129 185.731 147.271 190.204 152.242 192.496C157.32 194.838 159.735 194.305 160.652 193.84L160.813 193.752C161.658 193.251 163.081 191.855 164.133 187.884C165.25 183.663 165.62 177.599 164.875 169.767C163.391 154.176 157.687 133.567 147.94 111.196L144.378 103.019L160.732 95.8934L164.295 104.071C174.528 127.557 180.918 150.047 182.634 168.078C183.488 177.058 183.234 185.436 181.377 192.45C179.524 199.448 175.743 206.169 168.756 209.732L168.751 209.734C160.883 213.74 152.211 212.125 144.772 208.695C137.218 205.211 129.392 199.209 121.729 191.661C106.699 176.857 90.8783 154.698 77.3623 128.574C72.7498 141.468 69.632 153.436 68.083 163.728C66.6453 173.282 66.6377 180.88 67.7061 186.249C68.7309 191.399 70.4244 193.157 71.3838 193.739L71.5654 193.841L71.5742 193.845L71.7148 193.911C73.2731 194.583 77.8866 194.787 86.9775 188.341L94.2529 183.182L104.571 197.734L97.2949 202.893L96.3438 203.557C86.437 210.359 74.2497 215.233 63.4717 209.737V209.738C55.6013 205.731 51.8088 197.765 50.21 189.73C48.5863 181.571 48.8416 171.711 50.4424 161.074C52.848 145.089 58.4731 126.19 66.9033 106.402C63.8574 99.252 61.1787 92.2175 58.8848 85.3954C53.219 86.6501 47.9816 88.0784 43.251 89.6551C34.0854 92.7101 27.3112 96.1518 23.0117 99.5399C18.6126 103.007 17.9983 105.399 17.998 106.422C17.998 107.963 19.6192 112.07 28.9795 117.169L29.9102 117.666L37.8135 121.8L29.5459 137.606L21.6426 133.473L20.6162 132.926C10.0349 127.184 0.160156 118.521 0.160156 106.422C0.160412 97.591 5.53766 90.5976 11.9707 85.5282C18.5044 80.3795 27.4062 76.1334 37.6104 72.7323C42.6048 71.0676 48.03 69.5679 53.8164 68.2499C52.3622 62.4922 51.233 56.9742 50.4482 51.7655C48.8459 41.1302 48.5894 31.2709 50.2119 23.1122C51.8096 15.0784 55.6013 7.11357 63.4717 3.1063ZM77.4385 73.1913C72.1605 73.1914 67.8818 77.4699 67.8818 82.7479C67.882 88.0257 72.1606 92.3045 77.4385 92.3045C82.7164 92.3045 86.995 88.0258 86.9951 82.7479C86.9951 77.4699 82.7165 73.1913 77.4385 73.1913Z" fill="#120F17"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 21 KiB |
@@ -1,4 +0,0 @@
|
||||
<svg width="62" height="62" viewBox="0 0 62 62" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Vercel">
|
||||
<rect width="62" height="62" rx="14" fill="#111827"/>
|
||||
<path d="M31 15L48 45H14L31 15Z" fill="#ffffff"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 242 B |
|
Before Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 50 KiB |
@@ -1,47 +0,0 @@
|
||||
<svg width="256" height="32" viewBox="0 0 256 32" fill="none" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Vercel Open Source Program">
|
||||
<rect width="256" height="32" rx="8" fill="#111827"/>
|
||||
<g transform="translate(8 4)">
|
||||
<path d="M13.4283 0.610352L26.8565 23.8046H0L13.4283 0.610352Z" fill="#ffffff"/>
|
||||
<path d="M236.436 22.7547L235.081 17.1148V23.8045H233.849V15.1372H235.557L236.924 20.7405L238.291 15.1372H240V23.8045H238.767V17.1148L237.412 22.7547H236.436Z" fill="#ffffff"/>
|
||||
<path d="M226.237 23.8045L228.776 15.1372H230.436L232.974 23.8045H231.644L231.022 21.5462H228.19L227.568 23.8045H226.237ZM229.606 16.4678L228.52 20.362H230.692L229.606 16.4678Z" fill="#ffffff"/>
|
||||
<path d="M219.444 23.8045V15.1372H222.142C223.972 15.1372 225.095 16.126 225.095 17.7252C225.095 18.7628 224.436 19.5197 223.631 19.7761C224.485 19.9348 224.9 20.4109 224.973 21.3386L225.193 23.8045H223.911L223.716 21.5828C223.643 20.716 223.301 20.4231 222.239 20.4231H220.726V23.8045H219.444ZM220.726 19.2267H222.117C223.179 19.2267 223.777 18.7018 223.777 17.7862C223.777 16.8585 223.179 16.3458 222.117 16.3458H220.726V19.2267Z" fill="#ffffff"/>
|
||||
<path d="M214.957 23.9999C213.09 23.9999 211.748 22.4251 211.748 19.4831C211.748 16.6876 212.956 14.9419 214.994 14.9419C216.63 14.9419 217.704 16.0772 218.082 17.8107L216.752 17.8961C216.508 16.8341 215.934 16.1504 215.006 16.1504C213.774 16.1504 213.078 17.3468 213.078 19.4831C213.078 21.6072 213.798 22.7913 215.067 22.7913C216.178 22.7913 216.861 21.8758 216.91 20.4963H215.006V19.3854H218.094V23.8045H217.057L217.02 22.6937C216.642 23.4749 215.983 23.9999 214.957 23.9999Z" fill="#ffffff"/>
|
||||
<path d="M207.651 23.9999C205.589 23.9999 204.429 22.3763 204.429 19.4831C204.429 16.5655 205.589 14.9419 207.651 14.9419C209.714 14.9419 210.873 16.5655 210.873 19.4831C210.873 22.3763 209.714 23.9999 207.651 23.9999ZM207.651 22.8035C208.872 22.8035 209.543 21.6804 209.543 19.4831C209.543 17.2857 208.872 16.1382 207.651 16.1382C206.431 16.1382 205.76 17.2857 205.76 19.4831C205.76 21.6804 206.431 22.8035 207.651 22.8035Z" fill="#ffffff"/>
|
||||
<path d="M197.489 23.8045V15.1372H200.187C202.017 15.1372 203.14 16.126 203.14 17.7252C203.14 18.7628 202.481 19.5197 201.676 19.7761C202.53 19.9348 202.945 20.4109 203.018 21.3386L203.238 23.8045H201.956L201.761 21.5828C201.688 20.716 201.346 20.4231 200.284 20.4231H198.771V23.8045H197.489ZM198.771 19.2267H200.162C201.224 19.2267 201.822 18.7018 201.822 17.7862C201.822 16.8585 201.224 16.3458 200.162 16.3458H198.771V19.2267Z" fill="#ffffff"/>
|
||||
<path d="M190.403 23.8045V15.1372H193.088C194.894 15.1372 196.09 16.1626 196.09 17.8351C196.09 19.4953 194.894 20.5207 193.088 20.5207H191.684V23.8045H190.403ZM191.684 19.3122H192.954C194.186 19.3122 194.76 18.7995 194.76 17.8351C194.76 16.8707 194.186 16.3458 192.954 16.3458H191.684V19.3122Z" fill="#ffffff"/>
|
||||
<path d="M175.791 23.8045V15.1372H181.112V16.3458H177.073V18.8727H180.966V20.0446H177.073V22.596H181.21V23.8045H175.791Z" fill="#ffffff"/>
|
||||
<path d="M168.216 23.8045V15.1372H170.914C172.744 15.1372 173.867 16.126 173.867 17.7252C173.867 18.7628 173.208 19.5197 172.403 19.7761C173.257 19.9348 173.672 20.4109 173.745 21.3386L173.965 23.8045H172.683L172.488 21.5828C172.415 20.716 172.073 20.4231 171.011 20.4231H169.498V23.8045H168.216ZM169.498 19.2267H170.889C171.951 19.2267 172.549 18.7018 172.549 17.7862C172.549 16.8585 171.951 16.3458 170.889 16.3458H169.498V19.2267Z" fill="#ffffff"/>
|
||||
<path d="M160.374 23.8045L162.912 15.1372H164.572L167.111 23.8045H165.78L165.158 21.5462H162.326L161.704 23.8045H160.374ZM163.742 16.4678L162.656 20.362H164.828L163.742 16.4678Z" fill="#ffffff"/>
|
||||
<path d="M154.032 23.8045L153.104 15.1372H154.386L155.045 22.1565L155.862 16.1138H156.985L157.803 22.1565L158.462 15.1372H159.744L158.816 23.8045H157.144L156.424 18.5309L155.704 23.8045H154.032Z" fill="#ffffff"/>
|
||||
<path d="M148.471 23.8045V16.3458H145.932V15.1372H152.279V16.3458H149.74V23.8045H148.471Z" fill="#ffffff"/>
|
||||
<path d="M139.322 23.8045V15.1372H144.741V16.3213H140.604V18.9826H144.522V20.1545H140.604V23.8045H139.322Z" fill="#ffffff"/>
|
||||
<path d="M134.469 23.9999C132.407 23.9999 131.247 22.3763 131.247 19.4831C131.247 16.5655 132.407 14.9419 134.469 14.9419C136.532 14.9419 137.691 16.5655 137.691 19.4831C137.691 22.3763 136.532 23.9999 134.469 23.9999ZM134.469 22.8035C135.69 22.8035 136.361 21.6804 136.361 19.4831C136.361 17.2857 135.69 16.1382 134.469 16.1382C133.249 16.1382 132.577 17.2857 132.577 19.4831C132.577 21.6804 133.249 22.8035 134.469 22.8035Z" fill="#ffffff"/>
|
||||
<path d="M127.261 23.9999C125.381 23.9999 124.161 22.8035 124.014 20.9846L125.332 20.8992C125.503 22.1443 126.211 22.8035 127.31 22.8035C128.371 22.8035 128.969 22.3763 128.969 21.6072C128.969 20.8381 128.554 20.3987 126.736 19.8859C124.954 19.3976 124.209 18.7995 124.209 17.4566C124.209 15.9673 125.308 14.9419 127.126 14.9419C128.933 14.9419 129.97 16.0772 130.141 17.7496L128.823 17.8229C128.689 16.8219 128.127 16.1382 127.09 16.1382C126.138 16.1382 125.528 16.6387 125.528 17.3956C125.528 18.1525 125.955 18.4332 127.493 18.8605C129.567 19.4221 130.288 20.1911 130.288 21.6072C130.288 23.0355 129.079 23.9999 127.261 23.9999Z" fill="#ffffff"/>
|
||||
<path d="M109.927 23.8045V15.1372H115.248V16.3458H111.208V18.8727H115.102V20.0446H111.208V22.596H115.346V23.8045H109.927Z" fill="#ffffff"/>
|
||||
<path d="M105.232 23.9999C103.145 23.9999 101.974 22.2664 101.974 19.4831C101.974 16.6876 103.145 14.9419 105.232 14.9419C106.807 14.9419 107.942 16.0284 108.296 17.9083L106.953 17.9816C106.709 16.773 106.05 16.1382 105.232 16.1382C103.975 16.1382 103.304 17.3468 103.304 19.4831C103.304 21.6072 103.975 22.8035 105.232 22.8035C106.123 22.8035 106.795 22.1077 107.014 20.7893L108.345 20.8503C108.04 22.8279 106.892 23.9999 105.232 23.9999Z" fill="#ffffff"/>
|
||||
<path d="M95.0342 23.8045V15.1372H97.7315C99.5622 15.1372 100.685 16.126 100.685 17.7252C100.685 18.7628 100.026 19.5197 99.2205 19.7761C100.075 19.9348 100.49 20.4109 100.563 21.3386L100.783 23.8045H99.5012L99.3059 21.5828C99.2327 20.716 98.891 20.4231 97.8291 20.4231H96.3157V23.8045H95.0342ZM96.3157 19.2267H97.7071C98.7689 19.2267 99.367 18.7018 99.367 17.7862C99.367 16.8585 98.7689 16.3458 97.7071 16.3458H96.3157V19.2267Z" fill="#ffffff"/>
|
||||
<path d="M90.5596 23.9999C88.7166 23.9999 87.606 22.8035 87.606 20.7893V15.1372H88.8875V20.8381C88.8875 22.1077 89.4733 22.8035 90.5596 22.8035C91.6458 22.8035 92.2317 22.1077 92.2317 20.8381V15.1372H93.5132V20.7893C93.5132 22.8035 92.4025 23.9999 90.5596 23.9999Z" fill="#ffffff"/>
|
||||
<path d="M83.2417 23.9999C81.179 23.9999 80.0195 22.3763 80.0195 19.4831C80.0195 16.5655 81.179 14.9419 83.2417 14.9419C85.3043 14.9419 86.4638 16.5655 86.4638 19.4831C86.4638 22.3763 85.3043 23.9999 83.2417 23.9999ZM83.2417 22.8035C84.4622 22.8035 85.1334 21.6804 85.1334 19.4831C85.1334 17.2857 84.4622 16.1382 83.2417 16.1382C82.0212 16.1382 81.3499 17.2857 81.3499 19.4831C81.3499 21.6804 82.0212 22.8035 83.2417 22.8035Z" fill="#ffffff"/>
|
||||
<path d="M76.0332 23.9999C74.1536 23.9999 72.9331 22.8035 72.7866 20.9846L74.1048 20.8992C74.2756 22.1443 74.9835 22.8035 76.082 22.8035C77.1438 22.8035 77.7419 22.3763 77.7419 21.6072C77.7419 20.8381 77.3269 20.3987 75.5083 19.8859C73.7264 19.3976 72.9819 18.7995 72.9819 17.4566C72.9819 15.9673 74.0804 14.9419 75.8989 14.9419C77.7052 14.9419 78.7427 16.0772 78.9135 17.7496L77.5954 17.8229C77.4611 16.8219 76.8997 16.1382 75.8623 16.1382C74.9103 16.1382 74.3 16.6387 74.3 17.3956C74.3 18.1525 74.7272 18.4332 76.265 18.8605C78.3399 19.4221 79.06 20.1911 79.06 21.6072C79.06 23.0355 77.8517 23.9999 76.0332 23.9999Z" fill="#ffffff"/>
|
||||
<path d="M58.4556 23.8045V15.1372H60.0178L62.8616 21.9856V15.1372H64.1187V23.8045H62.5564L59.7127 16.9561V23.8045H58.4556Z" fill="#ffffff"/>
|
||||
<path d="M51.3813 23.8045V15.1372H56.7027V16.3458H52.6629V18.8727H56.5563V20.0446H52.6629V22.596H56.8004V23.8045H51.3813Z" fill="#ffffff"/>
|
||||
<path d="M44.0386 23.8045V15.1372H46.7237C48.53 15.1372 49.7261 16.1626 49.7261 17.8351C49.7261 19.4953 48.53 20.5207 46.7237 20.5207H45.3201V23.8045H44.0386ZM45.3201 19.3122H46.5894C47.8221 19.3122 48.3958 18.7995 48.3958 17.8351C48.3958 16.8707 47.8221 16.3458 46.5894 16.3458H45.3201V19.3122Z" fill="#ffffff"/>
|
||||
<path d="M39.332 23.9999C37.2693 23.9999 36.1099 22.3763 36.1099 19.4831C36.1099 16.5655 37.2693 14.9419 39.332 14.9419C41.3946 14.9419 42.5541 16.5655 42.5541 19.4831C42.5541 22.3763 41.3946 23.9999 39.332 23.9999ZM39.332 22.8035C40.5525 22.8035 41.2238 21.6804 41.2238 19.4831C41.2238 17.2857 40.5525 16.1382 39.332 16.1382C38.1115 16.1382 37.4402 17.2857 37.4402 19.4831C37.4402 21.6804 38.1115 22.8035 39.332 22.8035Z" fill="#ffffff"/>
|
||||
<path d="M171.085 9.35094C169.083 9.35094 167.96 7.95929 167.96 5.46895C167.96 2.60019 168.864 0.292969 171.414 0.292969C173.013 0.292969 173.819 1.1597 174.148 2.38045L172.83 2.49032C172.659 1.89215 172.269 1.48931 171.414 1.48931C170.243 1.48931 169.474 2.36825 169.303 4.2482C169.718 3.71107 170.426 3.32043 171.329 3.32043C173.05 3.32043 174.161 4.48015 174.161 6.25024C174.161 8.16681 172.916 9.35094 171.085 9.35094ZM171.085 8.1424C172.147 8.1424 172.83 7.45878 172.83 6.27465C172.83 5.17597 172.196 4.48015 171.183 4.48015C170.096 4.48015 169.315 5.17597 169.315 6.27465C169.315 7.34891 169.999 8.1424 171.085 8.1424Z" fill="#ffffff" fill-opacity="0.5"/>
|
||||
<path d="M160.667 9.15562C160.667 7.22684 161.387 6.01829 163.925 4.67547C165.011 4.10171 165.475 3.72328 165.475 2.88096C165.475 2.05085 164.95 1.48931 163.937 1.48931C162.827 1.48931 162.217 2.09968 162.046 3.18615L160.715 3.1007C160.898 1.37944 162.021 0.292969 163.937 0.292969C165.78 0.292969 166.806 1.3184 166.806 2.83213C166.806 4.17496 166.22 4.83416 164.45 5.78635C162.949 6.59205 162.241 7.36112 162.192 7.94708H166.818V9.15562H160.667Z" fill="#ffffff" fill-opacity="0.5"/>
|
||||
<path d="M156.424 9.35094C154.508 9.35094 153.348 7.61748 153.348 4.83416C153.348 2.03864 154.508 0.292969 156.424 0.292969C158.34 0.292969 159.499 2.03864 159.499 4.83416C159.499 7.61748 158.34 9.35094 156.424 9.35094ZM154.678 4.83416C154.678 5.55441 154.752 6.1892 154.91 6.68971L157.449 1.98981C157.181 1.66021 156.827 1.48931 156.424 1.48931C155.338 1.48931 154.678 2.72226 154.678 4.83416ZM156.424 8.15461C157.51 8.15461 158.169 6.92165 158.169 4.83416C158.169 4.10171 158.096 3.46692 157.937 2.96641L155.386 7.6541C155.667 7.9837 156.021 8.15461 156.424 8.15461Z" fill="#ffffff" fill-opacity="0.5"/>
|
||||
<path d="M146.03 9.15562C146.03 7.22684 146.75 6.01829 149.289 4.67547C150.375 4.10171 150.839 3.72328 150.839 2.88096C150.839 2.05085 150.314 1.48931 149.301 1.48931C148.19 1.48931 147.58 2.09968 147.409 3.18615L146.079 3.1007C146.262 1.37944 147.385 0.292969 149.301 0.292969C151.144 0.292969 152.169 1.3184 152.169 2.83213C152.169 4.17496 151.583 4.83416 149.813 5.78635C148.312 6.59205 147.604 7.36112 147.555 7.94708H152.181V9.15562H146.03Z" fill="#ffffff" fill-opacity="0.5"/>
|
||||
<path d="M132.041 10.4985L135.727 0H136.899L133.212 10.4985H132.041Z" fill="#ffffff" fill-opacity="0.5"/>
|
||||
<path d="M124.722 10.4985L128.409 0H129.581L125.894 10.4985H124.722Z" fill="#ffffff" fill-opacity="0.5"/>
|
||||
<path d="M111.684 9.15582V7.54443H113.344V9.15582H111.684Z" fill="#ffffff"/>
|
||||
<path d="M105.232 9.35094C103.145 9.35094 101.974 7.61748 101.974 4.83416C101.974 2.03864 103.145 0.292969 105.232 0.292969C106.807 0.292969 107.942 1.37944 108.296 3.25939L106.953 3.33264C106.709 2.1241 106.05 1.48931 105.232 1.48931C103.975 1.48931 103.304 2.69785 103.304 4.83416C103.304 6.95827 103.975 8.15461 105.232 8.15461C106.123 8.15461 106.795 7.45878 107.014 6.14037L108.345 6.20141C108.04 8.17902 106.892 9.35094 105.232 9.35094Z" fill="#ffffff"/>
|
||||
<path d="M95.0464 9.15562V0.488281H96.6086L99.4524 7.3367V0.488281H100.71V9.15562H99.1473L96.3035 2.3072V9.15562H95.0464Z" fill="#ffffff"/>
|
||||
<path d="M87.8501 9.15562V7.94707H89.9249V1.69683H87.8501V0.488281H93.2691V1.69683H91.1943V7.94707H93.2691V9.15562H87.8501Z" fill="#ffffff"/>
|
||||
<path d="M73.4575 9.15562V0.488281H74.739V7.94707H78.8765V9.15562H73.4575Z" fill="#ffffff"/>
|
||||
<path d="M66.0171 9.15562V0.488281H71.3385V1.69683H67.2986V4.22378H71.192V5.3957H67.2986V7.94707H71.4361V9.15562H66.0171Z" fill="#ffffff"/>
|
||||
<path d="M61.3232 9.35094C59.2361 9.35094 58.0645 7.61748 58.0645 4.83416C58.0645 2.03864 59.2361 0.292969 61.3232 0.292969C62.8976 0.292969 64.0327 1.37944 64.3866 3.25939L63.0441 3.33264C62.8 2.1241 62.1409 1.48931 61.3232 1.48931C60.0661 1.48931 59.3948 2.69785 59.3948 4.83416C59.3948 6.95827 60.0661 8.15461 61.3232 8.15461C62.2142 8.15461 62.8854 7.45878 63.1051 6.14037L64.4355 6.20141C64.1303 8.17902 62.9831 9.35094 61.3232 9.35094Z" fill="#ffffff"/>
|
||||
<path d="M51.125 9.15562V0.488281H53.8223C55.6531 0.488281 56.7759 1.47709 56.7759 3.07627C56.7759 4.11391 56.1168 4.87078 55.3113 5.12714C56.1657 5.28583 56.5806 5.76193 56.6539 6.6897L56.8736 9.15562H55.592L55.3968 6.93385C55.3235 6.06711 54.9818 5.77413 53.9199 5.77413H52.4065V9.15562H51.125ZM52.4065 4.5778H53.7979C54.8597 4.5778 55.4578 4.05288 55.4578 3.13731C55.4578 2.20954 54.8597 1.69683 53.7979 1.69683H52.4065V4.5778Z" fill="#ffffff"/>
|
||||
<path d="M44.063 9.15562V0.488281H49.3844V1.69683H45.3445V4.22378H49.2379V5.3957H45.3445V7.94707H49.482V9.15562H44.063Z" fill="#ffffff"/>
|
||||
<path d="M38.5753 9.15562L36 0.488281H37.3548L39.332 7.44656L41.3092 0.488281H42.6639L40.0887 9.15562H38.5753Z" fill="#ffffff"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 391 KiB |
|
After Width: | Height: | Size: 58 KiB |
|
After Width: | Height: | Size: 126 KiB |
|
After Width: | Height: | Size: 105 KiB |
|
After Width: | Height: | Size: 133 KiB |
|
After Width: | Height: | Size: 371 KiB |
|
After Width: | Height: | Size: 461 KiB |
|
After Width: | Height: | Size: 313 KiB |
|
After Width: | Height: | Size: 282 KiB |
|
After Width: | Height: | Size: 478 KiB |
|
After Width: | Height: | Size: 151 KiB |
|
After Width: | Height: | Size: 310 KiB |
@@ -1,69 +0,0 @@
|
||||
# Credits for the example pages
|
||||
|
||||
The pages built with the skill use photographs and films from open archives, found and credited by the skill itself. The screenshots in this folder and the launch film show some of them.
|
||||
|
||||
## Photographs and films on the pages
|
||||
|
||||
### Nachtschicht (techno night)
|
||||
|
||||
- "2020-01-20-Helios-Leuchtturm-" by Superbass, CC BY-SA 4.0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:2020-01-20-Helios-Leuchtturm-.jpg)
|
||||
- "Helios-Leuchtturm in Abenddämmerung-3860" by Raimond Spekking, CC BY-SA 4.0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:Helios-Leuchtturm_in_Abendd%C3%A4mmerung-3860.jpg)
|
||||
- "1906 ETZ Kraftwerk Teltowkanal Maschinenhalle", public domain, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:1906_ETZ_Kraftwerk_Teltowkanal_Maschinenhalle.jpg)
|
||||
- "Kraftwerk Wienerbruck hist Maschinenhalle ca 1911", public domain, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:Kraftwerk_Wienerbruck_hist_Maschinenhalle_ca_1911.jpg)
|
||||
- "Control room, Callide Power Station, circa 1967" by Queensland State Archives, public domain, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:Control_room,_Callide_Power_Station,_circa_1967.jpg)
|
||||
- "Rauch-Kraftwerk (K16A0025)" by Simon Legner ( User:simon04 ), CC BY-SA 4.0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:Rauch-Kraftwerk_(K16A0025).jpg)
|
||||
- "(Turbo-generators in a hydro-electric power station)" by Collins, Tudor Washington, 1898-1970, photographer, CC BY 4.0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:Turbo-generators_in_a_hydro-electric_power_station_(AM_75745-1).jpg)
|
||||
- "2020-01-18-Bahnhof Ehrenfeld-8194" by Superbass, CC BY-SA 4.0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:2020-01-18-Bahnhof_Ehrenfeld-8194.jpg)
|
||||
- "Hochtrasse mit Bahnbögen, Ansicht Venloer Straße von Süden-8740" by Raimond Spekking, CC BY-SA 4.0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:Hochtrasse_mit_Bahnb%C3%B6gen,_Ansicht_Venloer_Stra%C3%9Fe_von_S%C3%BCden-8740.jpg)
|
||||
- "Electrical breakdown Slow Motion" by Cheshin61, CC BY-SA 3.0, via Wikimedia Commons [film](https://commons.wikimedia.org/wiki/File:Electrical_breakdown_Slow_Motion.ogv)
|
||||
- "Bahnhof, 1, Ehrenfeld, Köln" by GeorgDerReisende, CC BY-SA 4.0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:Bahnhof,_1,_Ehrenfeld,_K%C3%B6ln.jpg)
|
||||
|
||||
### Bohne & Söhne (coffee shop)
|
||||
|
||||
- "Karl-Heine-Straße 41 Leipzig" by Freddo213, CC BY-SA 4.0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:Karl-Heine-Stra%C3%9Fe_41_Leipzig.jpg)
|
||||
- "Karl-Heine-Kanal 1903", public domain, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:Karl-Heine-Kanal_1903.jpg)
|
||||
- "Kanalbau Leipzig Plagwitz um1900" by Hermann Walter, public domain, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:Kanalbau_Leipzig_Plagwitz_um1900.jpg)
|
||||
- "Bahnhoefe Industriegleise Plagwitz-Lindenau", public domain, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:Bahnhoefe_Industriegleise_Plagwitz-Lindenau.jpg)
|
||||
- "Karl-Heine-Straße, Leipzig (32362978828)" by Thomas Woodtli from Zürich, Switzerland, CC BY-SA 2.0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:Karl-Heine-Stra%C3%9Fe,_Leipzig_(32362978828).jpg)
|
||||
- "75 degrees green coffee" by Dan Bollinger, CC BY-SA 3.0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:75_degrees_green_coffee.png)
|
||||
- "385 degrees cinnamon roast coffee" by Dan Bollinger, CC BY-SA 3.0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:385_degrees_cinnamon_roast_coffee.png)
|
||||
- "440 degrees full city roast coffee" by Dan Bollinger, CC BY-SA 3.0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:440_degrees_full_city_roast_coffee.png)
|
||||
- "Fazenda Da Lagoa" by Knase, CC BY 3.0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:Fazenda_Da_Lagoa.jpg)
|
||||
- "Finca cafetera en Pitalito, Huila, Colombia" by Jhysus, CC BY-SA 4.0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:Finca_cafetera_en_Pitalito,_Huila,_Colombia.jpg)
|
||||
- "Coffee-cherries-green-coffee-tarrazu-costa-rica" by Tarrazu at en.wikipedia, public domain, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:Coffee-cherries-green-coffee-tarrazu-costa-rica.jpg)
|
||||
- "Kaffe - Ystad-2024" by Foto: Jonn Leffmann, CC BY 3.0, via Wikimedia Commons [film](https://commons.wikimedia.org/wiki/File:Kaffe_-_Ystad-2024.ogg)
|
||||
- "Coffee beans in Ethiopia" by Ninaras, CC BY-SA 4.0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:Coffee_beans_in_Ethiopia.jpg)
|
||||
- "J27 798 Karl-Heine-Kanal, »Stelzenhaus«" by Falk2, CC BY-SA 4.0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:J27_798_Karl-Heine-Kanal,_%C2%BBStelzenhaus%C2%AB.jpg)
|
||||
- "AK Leipzig Plagwitz Weißenfelser Straße", public domain, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:AK_Leipzig_Plagwitz_Wei%C3%9Fenfelser_Stra%C3%9Fe.jpg)
|
||||
- "T00 005 Karl-Heine-Kanal" by Falk2, CC BY-SA 4.0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:T00_005_Karl-Heine-Kanal.jpg)
|
||||
|
||||
### Atelier Nord (architecture studio)
|
||||
|
||||
- "Tisvildehegn-feb-2009" by Ktp72, CC BY 3.0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/w/index.php?curid=5995786)
|
||||
- "Boomstammen bij De Laagt" by E. Dronkert from Utrecht, Netherlands, CC BY 2.0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/w/index.php?curid=39464091)
|
||||
- "Pörtschach Winklern Quellweg Fichten am Wanderweg 12022020 8311" by Johann Jaritz, CC BY-SA 4.0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:P%C3%B6rtschach_Winklern_Quellweg_Fichten_am_Wanderweg_12022020_8311.jpg)
|
||||
- "Stack of spruce logs near Wernigerode, Germany – side view" by Profpcde, CC0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:Stack_of_spruce_logs_near_Wernigerode,_Germany_%E2%80%93_side_view.jpg)
|
||||
- "Timber frame 0857" by Riisipuuro, CC BY-SA 3.0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:Timber_frame_0857.jpg)
|
||||
- "Lärchenholz" by ThomasKohler, CC BY 2.0, via Flickr [photograph](https://www.flickr.com/photos/28077296@N02/4804146821)
|
||||
- "Planks on a shed in Holma marina" by W.carter, CC0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:Planks_on_a_shed_in_Holma_marina.jpg)
|
||||
- "Tar Coated Wood - geograph.org.uk - 2604503" by Keith Evans, CC BY-SA 2.0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:Tar_Coated_Wood_-_geograph.org.uk_-_2604503.jpg)
|
||||
- "Tarring a boat" by Erkki Voutilainen, CC BY 4.0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:Tarring_a_boat_1960_(JOKAMT2Kot13-2).tif)
|
||||
- "Trefiberisolasjon - 1" by Øyvind Holmstad, CC0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:Trefiberisolasjon_-_1.JPG)
|
||||
- "Germany Plane-with-wood-shavings-01" by CEphoto, Uwe Aranas, CC BY-SA 3.0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/w/index.php?curid=34213500)
|
||||
- "Stack of wooden planks - close-up 01" by David r jenkins, CC BY-SA 4.0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:Stack_of_wooden_planks_-_close-up_01.jpg)
|
||||
- "Laminated wood" by Own work, CC BY-SA 3.0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:Laminated_wood.jpg)
|
||||
- "The sun in Rørvig" by No machine-readable author provided. Otuzniak assumed (base…, public domain, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:The_sun_in_R%C3%B8rvig.jpg)
|
||||
- "Møns Klint lub 2025-07-12 mov03" by Lukas Beck, CC BY 4.0, via Wikimedia Commons [film](https://commons.wikimedia.org/wiki/File:M%C3%B8ns_Klint_lub_2025-07-12_mov03.webm)
|
||||
- "Douglasie Holz" by Philipp Zinger, CC BY-SA 3.0, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:Douglasie_Holz.JPG)
|
||||
- "The Burmeister & Wain shipyard at Refshaleøen, Copenhagen." by Carl Baagøe, public domain, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:Carl_Baag%C3%B8e_-_Burmeister_%26_Wains_skibsv%C3%A6rft_p%C3%A5_Refshale%C3%B8en,_K%C3%B8benhavn_-_1883.png)
|
||||
|
||||
### Margin (contract tool)
|
||||
|
||||
- "Bifolium with the Decretals of Gratian" by Master Honore, ca. 1290, public domain (CC0), via The Metropolitan Museum of Art [photograph](https://www.metmuseum.org/art/collection/search/466179)
|
||||
- "Manuscript Leaf with Marriage Scene, from Decretals of Gregory IX" by Italian maker, ca. 1300, public domain (CC0), via The Metropolitan Museum of Art [photograph](https://www.metmuseum.org/art/collection/search/468476)
|
||||
- "Gratianus, Decretum ; Magister Rolandus, Glossae in Decretum Gratiani ; Nicolaus Maniacut…" by Gratianus (11..?-1160?). Auteur du texte Rolandus Canonista…, public domain, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:Gratianus,_Decretum_;_Magister_Rolandus,_Glossae_in_Decretum_Gratiani_;_Nicolaus_Maniacutius,_Versus_ad_incorrupta_pontificum_nomina_conservanda._-_btv1b10543244h_(083_of_600).jpg)
|
||||
- "Italian notarial record - DPLA - ba5fce47eb87626a3f149e88f5d951e5 (page 94)", public domain, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:Italian_notarial_record_-_DPLA_-_ba5fce47eb87626a3f149e88f5d951e5_(page_94).jpg)
|
||||
- "Marriage Contract", 380–343 BCE, public domain (CC0), via The Metropolitan Museum of Art [photograph](https://www.metmuseum.org/art/collection/search/544736)
|
||||
- "William Henry Duryea (1827-1903) administrator's deed on January 23, 1906", public domain, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:William_Henry_Duryea_(1827-1903)_administrator%27s_deed_on_January_23,_1906.jpg)
|
||||
- "Typewriter Optima M12 - typing" by Sounds of Changes, CC BY 3.0, via Wikimedia Commons [film](https://commons.wikimedia.org/wiki/File:Typewriter_Optima_M12_-_typing.webm)
|
||||
- "The Rosetta Stone" by Book: Sir Ernest Alfred Wallis (1857-1934) Photo: Donald Ma…, public domain, via Wikimedia Commons [photograph](https://commons.wikimedia.org/wiki/File:The_Rosetta_Stone.jpg)
|
||||
|
Before Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 110 KiB |
|
Before Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 170 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 32 KiB |