From 506ff6897668651ac8462966c1ffa3985c276c14 Mon Sep 17 00:00:00 2001 From: araharah-executor Date: Thu, 22 Oct 2026 07:33:04 +0800 Subject: [PATCH] =?UTF-8?q?chore(01-design-tokens-rams-foundation-01):=20c?= =?UTF-8?q?ommit=20design=20baseline=20=E2=80=94=20Rams=20docs,=20mockups,?= =?UTF-8?q?=20agent=20skills?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Root Rams design docs (DESIGN.md, IDEAS.md) and GSD install-fix notes (GSD_FIX.md, gsd-fix.sh) - Four Telemetry Rams mockup screens + telemetry_rams/DESIGN.md (canonical token frontmatter) - .agents/ project skills (design-taste-frontend) + skills-lock.json - .gitignore: node_modules/dist/env secrets/OS junk; .planning stays local-only; Zone.Identifier scrubbed (9 files deleted) --- .../skills/design-taste-frontend/README.md | 81 + .agents/skills/design-taste-frontend/SKILL.md | 529 ++ .../design-taste-frontend/assets/app.css | 216 + .../design-taste-frontend/assets/base.css | 105 + .../design-taste-frontend/assets/base.js | 37 + .../design-taste-frontend/assets/charts.js | 617 ++ .../assets/scenes/stage.css | 28 + .../assets/scenes/stage.js | 133 + .../design-taste-frontend/evals/evals.json | 76 + .../design-taste-frontend/library/app.json | 1327 +++ .../library/directions.json | 1078 +++ .../design-taste-frontend/library/heroes.json | 1086 +++ .../library/motions.json | 92 + .../library/palettes.json | 1485 +++ .../design-taste-frontend/library/photos.json | 7240 ++++++++++++++ .../library/sections.json | 4429 +++++++++ .../design-taste-frontend/library/sites.json | 8350 +++++++++++++++++ .../design-taste-frontend/library/type.json | 2024 ++++ .../references/app-screens.md | 1199 +++ .../references/colour.md | 141 + .../design-taste-frontend/references/copy.md | 177 + .../references/critique.md | 182 + .../references/imagery.md | 791 ++ .../references/layout.md | 292 + .../references/motion.md | 980 ++ .../references/research.md | 356 + .../references/scenes.md | 174 + .../design-taste-frontend/references/tells.md | 115 + .../design-taste-frontend/references/type.md | 170 + .../design-taste-frontend/scripts/assets.mjs | 865 ++ .../design-taste-frontend/scripts/draw.mjs | 584 ++ .../design-taste-frontend/scripts/inspect.mjs | 303 + .../scripts/lib/app-draw.mjs | 203 + .../design-taste-frontend/scripts/lib/cdp.mjs | 248 + .../scripts/lib/probe.mjs | 909 ++ .../scripts/lib/rules.mjs | 243 + .../design-taste-frontend/scripts/lint.mjs | 119 + .../design-taste-frontend/scripts/scenes.mjs | 124 + .gitignore | 26 + AGENTS.md | 210 + DESIGN.md | 85 + GSD_FIX.md | 83 + IDEAS.md | 95 + gsd-fix.sh | 132 + skills-lock.json | 11 + .../active_route_guidance/code.html | 190 + .../active_route_guidance/screen.png | Bin 0 -> 82030 bytes .../community_incident_reporter/code.html | 275 + .../community_incident_reporter/screen.png | Bin 0 -> 190735 bytes .../navigate_map_overview/code.html | 345 + .../navigate_map_overview/screen.png | Bin 0 -> 227278 bytes .../telegram_live_traffic_feed/code.html | 303 + .../telegram_live_traffic_feed/screen.png | Bin 0 -> 271679 bytes .../telemetry_rams/DESIGN.md | 242 + 54 files changed, 39105 insertions(+) create mode 100644 .agents/skills/design-taste-frontend/README.md create mode 100644 .agents/skills/design-taste-frontend/SKILL.md create mode 100644 .agents/skills/design-taste-frontend/assets/app.css create mode 100644 .agents/skills/design-taste-frontend/assets/base.css create mode 100644 .agents/skills/design-taste-frontend/assets/base.js create mode 100644 .agents/skills/design-taste-frontend/assets/charts.js create mode 100644 .agents/skills/design-taste-frontend/assets/scenes/stage.css create mode 100644 .agents/skills/design-taste-frontend/assets/scenes/stage.js create mode 100644 .agents/skills/design-taste-frontend/evals/evals.json create mode 100644 .agents/skills/design-taste-frontend/library/app.json create mode 100644 .agents/skills/design-taste-frontend/library/directions.json create mode 100644 .agents/skills/design-taste-frontend/library/heroes.json create mode 100644 .agents/skills/design-taste-frontend/library/motions.json create mode 100644 .agents/skills/design-taste-frontend/library/palettes.json create mode 100644 .agents/skills/design-taste-frontend/library/photos.json create mode 100644 .agents/skills/design-taste-frontend/library/sections.json create mode 100644 .agents/skills/design-taste-frontend/library/sites.json create mode 100644 .agents/skills/design-taste-frontend/library/type.json create mode 100644 .agents/skills/design-taste-frontend/references/app-screens.md create mode 100644 .agents/skills/design-taste-frontend/references/colour.md create mode 100644 .agents/skills/design-taste-frontend/references/copy.md create mode 100644 .agents/skills/design-taste-frontend/references/critique.md create mode 100644 .agents/skills/design-taste-frontend/references/imagery.md create mode 100644 .agents/skills/design-taste-frontend/references/layout.md create mode 100644 .agents/skills/design-taste-frontend/references/motion.md create mode 100644 .agents/skills/design-taste-frontend/references/research.md create mode 100644 .agents/skills/design-taste-frontend/references/scenes.md create mode 100644 .agents/skills/design-taste-frontend/references/tells.md create mode 100644 .agents/skills/design-taste-frontend/references/type.md create mode 100644 .agents/skills/design-taste-frontend/scripts/assets.mjs create mode 100644 .agents/skills/design-taste-frontend/scripts/draw.mjs create mode 100644 .agents/skills/design-taste-frontend/scripts/inspect.mjs create mode 100644 .agents/skills/design-taste-frontend/scripts/lib/app-draw.mjs create mode 100644 .agents/skills/design-taste-frontend/scripts/lib/cdp.mjs create mode 100644 .agents/skills/design-taste-frontend/scripts/lib/probe.mjs create mode 100644 .agents/skills/design-taste-frontend/scripts/lib/rules.mjs create mode 100644 .agents/skills/design-taste-frontend/scripts/lint.mjs create mode 100644 .agents/skills/design-taste-frontend/scripts/scenes.mjs create mode 100644 .gitignore create mode 100644 AGENTS.md create mode 100644 DESIGN.md create mode 100644 GSD_FIX.md create mode 100644 IDEAS.md create mode 100755 gsd-fix.sh create mode 100644 skills-lock.json create mode 100644 stitch_minimalist_route_navigator/active_route_guidance/code.html create mode 100644 stitch_minimalist_route_navigator/active_route_guidance/screen.png create mode 100644 stitch_minimalist_route_navigator/community_incident_reporter/code.html create mode 100644 stitch_minimalist_route_navigator/community_incident_reporter/screen.png create mode 100644 stitch_minimalist_route_navigator/navigate_map_overview/code.html create mode 100644 stitch_minimalist_route_navigator/navigate_map_overview/screen.png create mode 100644 stitch_minimalist_route_navigator/telegram_live_traffic_feed/code.html create mode 100644 stitch_minimalist_route_navigator/telegram_live_traffic_feed/screen.png create mode 100644 stitch_minimalist_route_navigator/telemetry_rams/DESIGN.md diff --git a/.agents/skills/design-taste-frontend/README.md b/.agents/skills/design-taste-frontend/README.md new file mode 100644 index 0000000..a98ba12 --- /dev/null +++ b/.agents/skills/design-taste-frontend/README.md @@ -0,0 +1,81 @@ +# tasteskill v2 (`design-taste-frontend`) + +A design skill for coding agents, built from a study of 247 curated sites (One Page Love and Awwwards +Sites of the Day, October 2026). It gives an agent an art direction instead of letting it fall back on +the average landing page, holds it to a strict no-ornament house style, and makes it look at its own +render before calling the work done. + +## How it works + +1. **Inventory.** The agent lists what only this client has: the name and what it means, the street, + the numbers, the one constraint, the materials, the hours. +2. **Draw.** `scripts/draw.mjs` deals three of 20 directions (each an idea engine seen on the + strongest studied sites); the agent picks the one that can carry something from the inventory, and + the script deals the rest: a hero composition, section compositions, a type system of real free + fonts, a palette, photographs, a motion, studied references, and under every blueprint a list of + where it disagrees with the house rules. Recent draws are remembered so projects do not repeat. +3. **Idea and live thing.** One sentence tying the client's own material to the direction's device, + checked against the nearest competitor, and one thing the visitor can do on the page. +4. **Build** from the sheet, words first, full content. When the project has no photographs of its + own, `scripts/assets.mjs` finds real pictures of the subject's world in open collections (its + street in old postcards, old maps, its materials, engravings of its trade, museum objects of its + kind), downloads them into the project and records their credits; the subject is drawn in code + only where no honest picture exists. +5. **Gate.** `scripts/lint.mjs` (source) and `scripts/inspect.mjs` (real browser, 1440 / 768 / 390) + measure the house rules: headlines of two lines or fewer, no eyebrow labels, no monospace, no + 01/02/03, no thin rules, no gradients, no resting shadows, no cream-and-terracotta, no violet, and + the faults blind jurors punished: no focal point, empty screens, text covered or cut, long pins, + sideways rows, faded text. +6. **Look.** The inspector saves screenshots; the agent critiques them with an Awwwards-weighted + rubric, fixes the top three problems and repeats, at most three rounds. + +Five rounds of blind tests against a no-skill baseline and another design skill are recorded in +`references/research.md` §11. + +## Contents + +``` +SKILL.md the run, the house rules, the laws +references/ copy, type, colour, layout, imagery, motion, critique, tells, research +scripts/draw.mjs deal options / a direction / reprint / redraw; --alternatives, --photos, --site +scripts/assets.mjs search open image collections (Openverse, Wikimedia Commons, Art Institute of + Chicago, the Met) and, with --video, real footage (Wikimedia Commons, Internet + Archive, NASA); --get downloads with the credit, --credits prints them +scripts/lint.mjs static scan for banned patterns and stock phrases +scripts/inspect.mjs render, measure, photograph +scripts/lib/ zero-dependency Chrome DevTools client, the in-page probe, the rules +library/ directions (20), heroes, sections, type systems, palettes, photographs, + studied sites, motions +assets/base.css, base.js an optional neutral foundation +evals/evals.json six briefs for testing the skill against a no-skill baseline +``` + +## Requirements + +Node 22 or newer and an installed Chrome, Edge or Chromium for `inspect.mjs` (it drives the browser +over the DevTools protocol with Node's built-in WebSocket; nothing is installed). `draw.mjs`, +`lint.mjs` and `assets.mjs` run on Node 18+; `assets.mjs` needs network access and no API keys. Set +`CHROME_PATH` if the browser is somewhere unusual. + +## Install + +Copy this folder to your skills directory, for example `~/.claude/skills/design-taste-frontend/`, or keep it in +a repository under `.claude/skills/`. + +## Notes + +- Photographs in the library are served by Lorem Picsum from Unsplash, under the Unsplash licence. + They are placeholders for atmosphere; replace them with the project's own pictures. +- Pictures found with `assets.mjs` keep their own licences. By default it offers only CC0, public + domain, CC BY and CC BY-SA, and `--get` records the title, creator, licence and source of every + download in `assets/credits.json`. The page must carry the credits (`--credits` prints them). +- `assets.mjs --video` finds short clips of the subject's world, takes a 720p-or-smaller rendition, + refuses files over 25 MB unless `--max-mb` is passed, and saves a poster frame with each clip; how + to use one on a page (muted loop, poster, stopped under reduced motion) is in + `references/imagery.md` §11. +- Fonts are loaded from Google Fonts and Fontshare. Check each face's licence for your use. +- The scores in `references/research.md` are model judgements from screenshots, not Awwwards scores. +- The draw history lives in `~/.taste-skill/history.json` (set `TASTE_SKILL_HISTORY` to move it). + Delete it to reset. +- A build takes an agent roughly 30–45 minutes and a few hundred thousand tokens with the full + look-and-fix loop; most of that is finding or drawing pictures when a project has no photographs. diff --git a/.agents/skills/design-taste-frontend/SKILL.md b/.agents/skills/design-taste-frontend/SKILL.md new file mode 100644 index 0000000..433d921 --- /dev/null +++ b/.agents/skills/design-taste-frontend/SKILL.md @@ -0,0 +1,529 @@ +--- +name: design-taste-frontend +description: >- + tasteskill v2, the anti-slop frontend skill. Art direction for websites, distilled from a study of + 247 curated gallery sites (One Page Love, Awwwards Sites of the Day). Deals researched directions + (idea, composition, type, palette, photographs, section blueprints) from a library, enforces a strict + no-slop house style with a real-browser inspector, and runs a look-and-fix loop on screenshots. Use + this whenever you build, design, redesign, restyle, polish or review a landing page, marketing site, + portfolio, product page, one-pager, hero or any public-facing web page, in any stack (HTML/CSS, React, + Next.js, Vue, Svelte, Astro, Tailwind) — also when the user says a page looks generic, templated, + "AI-made", sloppy, or asks to make it look designed, premium, award-level or less like every other + site. Also for app screens: dashboards, admin and analytics views, settings, inboxes and other screens + people work in, with their own run and rules. +--- + +# tasteskill v2 + +A page built by a model usually looks like the average of every page the model has seen: a centred +headline over three lines, a little label above it, a row of icon cards, a soft gradient, a few thin +rules and a monospace caption. Nothing in it is wrong and nothing in it was decided. + +This skill replaces those defaults with decisions, in four ways: + +1. **A script deals the directions, you choose among them.** Asked to invent a look, a model picks + the category default every time. `scripts/draw.mjs` deals three of twenty researched directions; + you choose the one that carries the subject's idea, and the script then deals its type system, + palette, hero and section compositions from a library distilled from 247 real sites. +2. **The idea comes from the subject.** In the study, what separated the best sites from the forgettable + ones was a concept taken from the thing itself, not the styling. +3. **A house style with no ornaments,** measured in a real browser by `scripts/inspect.mjs`, so the + rules are checked rather than hoped for. +4. **You look at what you made.** Screenshots at three widths, a juror's rubric, fix, look again. + +One warning learned in testing. Taking the ornaments away is only half the job; a page that has lost its +labels, rules and cards and gained nothing in their place reads as thin, and blind jurors rightly prefer +a richer page with tells over an empty page without them. The other half is substance: type set +larger, whole fields of colour, real pictures of this subject's world (found or drawn), and every +section carrying its full content. The skill is built to give you that; do not trade it for restraint. + +In the commands below `` is this skill's folder. Run them from the project's root, so the +working files land in `.taste-skill/` there. The scripts need Node 22+ and an installed Chrome, Edge +or Chromium, and install nothing. `assets.mjs` also needs network access; it uses no API keys. + +## Page or app screen + +Decide first which of two kinds of work this is. + +- **A page** is read and scrolled: a landing page, a marketing or product site, a portfolio, an + event, a restaurant, a one-pager. It follows **the run** below. +- **An app screen** is worked in: a dashboard, an admin or analytics view, settings, billing, an inbox + or queue to work through, a wallet, a list with filters, an editor or builder. It follows + **`references/app-screens.md`**: its own run, its own draw (`draw.mjs --app`), its own house rules + (quiet borders, small labels and repeated panels are normal there; gradients, glows, icons in tinted + squares, rainbow charts and invented vanity numbers are not) and `inspect.mjs --app`. Read that file + whole before you start; the page run below does not apply. + +A product site that shows its app is a page; the interface fragments on it follow the app-screen +rules for their insides. Deal the product's app style once, in its own folder, with the page's colours +and type kept: + +```bash +node /scripts/draw.mjs --app --kind --brief "" --keep palette,type --out .taste-skill/app +``` + +and build every fragment the page shows (the hero's live screen, a feature's crop, a chart) as a real +piece of that app: `assets/app.css` for its panels, tables and controls, `assets/charts.js` for its +charts, real data that adds up, one finding stated, cropped and scaled the way the page's blueprint +treats a picture. A fragment that looks like a working product is the strongest picture a software page +has; grey bars and lorem numbers are the weakest. When a request mixes both (a landing page and the +dashboard behind it), build each with its own run and one shared palette and typeface. + +## The run + +Do these in order. Steps 1–5 take a few minutes and decide whether the page is any good. + +### 1. Read the brief and the project + +Find out what is real: the subject, the audience, the one thing the page must get someone to do, the +stack, any existing brand (colours, fonts, logo), and above all **what imagery truly exists**: the +project's own photographs or product shots, a real interface that can be shown, an image generation +tool you can call, or nothing. Do not plan around pictures you do not have. Nothing of its own is +rarely nothing at all: the subject's city, street, materials and history are in open archives and +museums, free to use with a credit (step 6, `scripts/assets.mjs`). + +If the request is vague, decide and state your reading in one line instead of asking. Ask only when a +missing fact blocks the work (for example, no product name). + +Then **inventory the subject** in your notes: eight to twelve things that belong to this client and to +no competitor. Look for its name and what the name means; its address, door number, street and +neighbourhood, and what that place looks like (its tiles, signs, paint colours, typefaces on its shop +fronts, its light, its weather); the numbers in the brief (seats, rooms, minutes to the sea, the +price, the year); the constraint it lives with (only one batch a month, closed in winter, by +appointment); its materials and colours; its rituals and hours (the oven lit at five, the ferry at +seven); the printed things of its world (a timetable, a label, a ticket, a sign). This list is where +the idea comes from in step 4. In blind tests, the page that won each brief was built from an item on +such a list (the client's name and what it means, the street it stands in, the one constraint that +makes it what it is), and the pages that lost had a good composition with a category idea. The list +is also your picture search: each place, material and printed thing on it is a query for step 6. + +### 2. Write the argument + +Before any design, list the page as claims with their proof, one line per section, the way +`references/copy.md` §1 shows. The claims decide which sections exist and in what order. Delete any +section that has no claim. This is how you avoid the stock sequence of hero, logos, three features, +testimonial, pricing, call to action. + +### 3. Draw the direction + +```bash +node /scripts/draw.mjs --sector --brief "" \ + --sections [--tone ] [--have ] [--keep palette,type] \ + --options 3 +``` + +This deals three directions and prints a short summary of each. Hold each one against your inventory: +which way of composing can carry something only this client has? Choose that one, not the most +familiar, and write one line in your notes on why. In testing, a single random direction that did not +suit the subject was the commonest cause of a weak page. Then deal the full sheet: + +```bash +node /scripts/draw.mjs --direction +``` + +- `--sector`: `node /scripts/draw.mjs --list sectors`. Pick the closest. +- `--sections`: roles from `--list roles` (features, showcase, how-it-works, testimonial, proof, stats, + pricing, faq, cta, footer, intro, about, work, gallery, list, contact). The hero is implied. +- `--tone` (optional): quiet, bold, warm, technical, playful, luxury, editorial. Only pass it when the + brief clearly asks for one. +- `--have`: assets that really exist, comma-separated: `photography` (the project's own photographs of + the place, people or work), `product-photo` (photographs of the specific product, or an image tool + that can make them), `product-ui` (real screenshots), `illustration`, `video`. Leave it out if you + have none: the draw then avoids compositions that depend on them and the sheet says how to fill + picture slots honestly (software shows its own interface built in HTML; a product with no photographs + is drawn and set among real pictures of its world, never a fake product shot). Pictures you will + find in the open collections are not the project's own; leave them out of `--have`. +- `--keep palette,type`: when the brand already fixes colours or typefaces. The draw then deals only + the composition, and you map the brand's values onto the roles. + +The command prints a **direction sheet**. It is the art direction for this build: + +- **Adopt it.** Do not blend it with the layout you would have made anyway. If it feels unfamiliar, + good: the familiar layout is the one this skill exists to prevent. +- Redraw one slot (`--redraw hero | type | palette | photos | scenes | section: | direction`) only for a + reason you can state: it contradicts a stated brand constraint, or needs an asset that does not + exist. Never redraw to get something more comfortable. Record every redraw in your report. +- When a dealt section cannot hold the real content (it compares three plans and there is one price; + it wants five quotations and there are none), do not bend the content to fit. List the others with + `--alternatives `, pick the one whose assumptions match the content, and take it with + `--redraw section:=`. +- **Check the palette against the subject.** A dealt palette is a set of proportions (one ground, one + ink, one accent, fields) as much as a set of colours. If its colours fight the subject's own material + (candy pastels for a peat whisky, neon for a mountain hut), redraw the palette once; if the subject + has unmistakable colours of its own (its material, the paint of its street, the landscape outside + its windows), keep the dealt proportions and take the colours from the subject instead, and say so + in the report. +- Reprint it any time with `node /scripts/draw.mjs --show`. In a long session, re-read it before each + section you build. + +### 4. Find the idea + +The direction is a way of composing. The idea is what makes the page belong to this subject and no +other. Write this sentence in your notes and do not start building until both blanks are filled from +the subject itself: + +> On this page, **[something that belongs to the subject]** becomes **[the device the direction calls for]**. + +Places to look for the first blank: + +- **Its output.** What does the thing produce? Put the real output on the page as material. (A camera + that prints poems delivered its copy as paper slips.) +- **Its object or shape.** What does it physically look like, in cross-section, in silhouette? + Enlarge it, crop it, make it the frame or the one motif. +- **Its name.** Can the letters hold a photograph, stack into a wall, split to two corners? +- **Its place.** Is there one view that makes someone want to be there? +- **Its ritual.** Is there a sequence the page can perform as it scrolls? +- **Its artefact.** What printed thing already exists in its world: ticket, menu, label, receipt, + invitation, folder, manual? +- **Its opposite.** Which other category owns the feeling this one lacks? + +Fill the first blank from your inventory (step 1), not from the category. **The competitor test:** put +the nearest real competitor in the sentence (the bakery two streets away, another oak furniture maker, +another hut on the same mountain). If the sentence still works, the idea belongs to the category: a +loaf of bread is every bakery; the seven doors of the street this one is named after are only this one. +"Clean and modern" is not an idea. The sites the study's panel scored lowest were the ones whose idea +was recorded as "none beyond the standard formula". + +**One live thing.** Give the page one thing the visitor can do, or that is different for each visit, +made from the idea: pick a wood and see the chair in it; type your name and see it cut in the +foundry's letters; set the loan and read the real monthly figure; see whether the hut's stove is lit +right now and how long until the last ferry; choose a size and see it against the room. In blind tests every winning page had one and the jurors named it first. Rules: it uses the subject's real content, it works on a phone with a thumb, it has a plain +fallback without script, it never blocks reading, and it is one thing, not a playground. It is +built in step 6 as part of the page, not added as motion in step 9. + +**The scenes carry the idea too.** The scroll scenes on the sheet are devices waiting for a subject. +Decide what each one shows from your inventory before building: the fly-through passes through this +studio's own title cards, the route is the road this shipment really takes, the picture that opens to +the whole screen is the room the guest will wake up in. A scene filled with pictures that could belong +to anyone is a screensaver. + +### 5. Write the words + +Write the whole page as a copy deck (plain text) before markup, following `references/copy.md`: + +- **Every headline fits in two lines or fewer at every width.** Do the arithmetic in copy.md §2 before + committing to a sentence: about 32 characters is safe everywhere at a confident size. The studied + gallery heroes have a median of 5 words and 32 characters. +- One supporting sentence, directly under the headline (32–48px below it) and shown with it, never + docked at the foot of the first screen or held back by an animation. When the headline is a name or + a figure of speech, this sentence says plainly what the thing is. One primary action, named for what + it does, as a real button on the first screen. +- **The first screen answers the visitor's first question in large type.** For an event: what it is, + when and where (the dates belong in the headline or at the second size, never only in small text). + For a product: what it is and what it costs or does. For a person: who and what they do. Every + section the visitor came for (the line-up, the menu, the rooms, the price) has its own heading and + its own place in the navigation. +- **Write the full content.** Every section the brief asks for delivers its information completely: + the whole menu with prices, each room with its own details, every speaker and talk, the price with + what it includes, an answer for each real question. Thin sections are the commonest reason a clean + page loses to a busier one. +- Sample details are expected where the brief leaves gaps (dish names, room names and rates, project + titles) so the design is seen at full density; list them in the report for the client to confirm. + Proof is never invented: no customers, quotes, reviews, press, logos or business statistics. + +### 6. Build it, still + +Build the page with motion switched off in your head; a page that needs animation to look finished is +not finished. Order of work: + +1. **Tokens.** Colour and type roles from the sheet as CSS custom properties. Everything downstream + references tokens only. `/assets/base.css` is a neutral foundation you may start from (reset, token + names, fluid type steps, grid, focus and selection styles, the motion helpers); it has no look of + its own. +2. **The hero, exactly as the blueprint describes it,** at desktop and at phone width. Get the big + thing big and the small things small before anything else exists. +3. **Each section from its blueprint,** with this project's content. Keep the geometry, change the + subject. Neighbouring sections must not share a layout. **Carry the idea into every section,** + pricing, FAQ and footer included: the commonest failure in the study, even among good sites, is a + distinctive first screen followed by stock blocks. +4. **Imagery,** in this order of preference: + 1. the project's own; + 2. generated, if you have an image tool; + 3. **real pictures of the subject's world from the open collections,** whenever an honest one + exists. Search them with `node /scripts/assets.mjs ""` (Openverse, Wikimedia + Commons, the Art Institute of Chicago and the Met; only licences that allow commercial use, by + default). Search the inventory, not the category: its street in old postcards, an old map of the + neighbourhood, its material up close, its trade in engravings, a museum object of its kind, a + botanical plate, a star chart. Use them large and with intent: one archival photograph as the + hero, an engraving enlarged into the page's motif, the real map of the street as the contact + section. Look at each before choosing; `--get ` downloads it into `assets/` and records + its source and licence, and `--credits` prints the credit line for the footer. A found picture + shows the world around the client and is never presented as the client's own product, room, + dish, person or team; + 4. **drawn in code from the subject itself,** for what no honest picture exists of (its objects, + its tiles, its windows, its product's interface, made as one consistent flat graphic language in + the palette's real colours); + 5. the photographs dealt on the sheet, only where an honestly generic picture fits (the sea for a + sea house), never as a stand-in for the subject; + 6. type and colour alone. + + When the project has footage or a real picture of its own process or product, the first screen + shows it, large (about 40% of the screen or more). Never write a sentence on the page about where + the pictures come from or what they are not ("none of these shows our bar"): a caption says what + the picture is, and the credit line sits small in the footer. A portfolio whose work is invented + for the brief draws each piece as a finished still of that work (its title card with its own type, + an end frame, a poster), with real detail, never as a pictogram of the client's product. + + **The floor, which the inspector checks:** at least four real pictures on the page, usually six to + twelve (photographs, archival images, maps, engravings, footage, raster artwork; for software, its + cropped interface fragments count too). SVG drawings do not count toward the floor: draw what no + picture exists of, and still carry real pictures. Add one moving picture wherever an honest clip + exists: search it with `assets.mjs --video ""` and use it as a muted loop with a poster + frame. Models skip pictures and footage because finding them is work; the page fails without them. + + `references/imagery.md` covers searching, licences and credits, video, drawing, crops and treatments. +5. **The live thing** from step 4, built into the section where it proves the claim (often the hero + or the booking), with real content, a thumb-sized phone version and a plain fallback. +6. **The scroll scenes,** when the sheet deals them (section 9), each with the section it carries: the page's big + moments, the camera that flies through the work, the picture that opens to the whole screen, the + word that buckles under the scroll. Copy the shared stage and the scene's files from + `/assets/scenes/`, fill the scene with this project's own pictures and words, and set the + page's tokens so it takes the page's look. A scene is composition: it decides how long the page is + and what each screen shows, so it is built now and seen in every look round, not added at the end. + `references/scenes.md` says how to put one on a page, fill it, fit it and check it; + `assets/scenes/demo/.html` is a working example of each. +7. **Fullness.** Look at each desktop screen as a poster: one dominant thing and the content it + carries. A screen that is mostly empty ground is an underbuilt section, not a rest; one deliberate + rest per page is the limit, and the inspector fails a page with two or more near-empty screens. + Running text is in the full ink at 16px or more; grey is for secondary notes. +8. **The frame.** The page has one pair of equal outer margins at every width, and every section uses + the width the page has set up: when its text sits in the left half, the right half holds its + picture, its second column, its list or its figure, never nothing. Asymmetry lives inside the grid, + never in the frame: a void is placed only when something closes it on the far side. No stretch of + the page taller than about half a screen holds nothing at all; sections are 120–240px apart on + desktop. Every section the visitor came for opens with a heading that names it, and the first + screen carries the page's title in an `h1`. These are what readers name first when a page looks + wrong ("no clear title", "random empty space", "everything is pushed to one side"), and the + inspector measures each of them. +9. **States and semantics.** Real links and buttons, visible focus, alt text, a phone layout that is + its own composition. + +Read `references/type.md`, `references/colour.md` and `references/layout.md` when you need the detail +behind a decision; the laws below are the short form. + +### 7. Gate + +```bash +node /scripts/lint.mjs +node /scripts/inspect.mjs +node /scripts/scenes.mjs # when the page has scroll scenes +``` + +`scenes.mjs` photographs every scroll scene at 0, 10 … 100% of its hold, on desktop and on a phone, +and the reduced-motion page; with scenes on the sheet, `inspect.mjs` also films the whole scroll +(`desktop-film-NN.jpg`). A scene that never started or rests on desktop is a `FAIL`. + +`lint.mjs` scans source for banned patterns and stock phrases. `inspect.mjs` opens the page in a real +browser at 1440, 768 and 390 pixels, measures it (headline line counts, type sizes, fonts actually +loaded, colours, rules, shadows, gradients, contrast, overflow, and the frame: equal margins, sections +huddled on one side, blank stretches, the title, untitled sections, text against the screen edge) and +saves screenshots to `.taste-skill/inspect/`. Fix every `FAIL`. Treat each `WARN` as wrong unless you can defend it to a +designer in one sentence. Re-run until there are no `FAIL`s. Do not argue with the meter and do not +hide things from it. The inspector serves local files over a throwaway local server; if the page must +also open straight from the file system, open `index.html` that way once before you finish. + +### 8. Look + +Passing the gate means nothing banned was measured. It does not mean the page is good. Open the +screenshots the inspector lists (every viewport, with your image viewer or Read tool) and critique them +with `references/critique.md`: the fourteen passes, the Awwwards-weighted score, the caps. Write the critique +down in its format, fix the top three problems, run the inspector again, look again. Three rounds at +most. + +Judge only the pictures. If a problem is visible in a screenshot, it is real, whatever the code says. + +### 9. Move + +Now build the motion layer. It is required, and it is more than one fade: the inspector counts the +elements that really move while the page loads and is scrolled, and fails a page under eight (it warns +under sixteen). Any scroll scenes are already built (step 6); around them the layer has four parts: + +1. **The signature move** named on the sheet: one, done well (a dealt scene can be it). +2. **An entrance for the parts of every section:** the heading, then the text, then the picture, + staggered by 60–90ms, rising 16–32px with opacity, triggered once as the section enters. Not one + fade for the whole block, and never content that stays hidden if the script fails. +3. **Feedback on every control:** press, hover and focus on buttons, links, cards and the live thing. +4. **One moving picture:** a found clip as a muted loop, a slow scale or drift on a photograph, or a + scroll-linked move on the hero picture. + +Transform and opacity only; every move has a `prefers-reduced-motion` fallback that keeps the content +and drops the travel. A move that changes the colour or the layout of whole screens (colour by +chapter, a pinned story) is part of the composition, so build it in step 6 and let every look round see +it. `references/motion.md` has the tokens and tested recipes. Then run the inspector once more and check +every screenshot for content that failed to appear. + +### 10. Report + +Do not report until all of these are true; each one was skipped in a test run that came out badly: + +- `inspect.mjs` shows **0 FAIL** at 1440, 768 and 390, on the final version of the page. +- You opened every screenshot it listed after the last change, not only the first screen. +- With scroll scenes: `scenes.mjs` ran on the final page with no problems, and you read every sheet + (desktop, phone, reduced motion). +- A stranger reading the first screen for five seconds can say what this is and what to do. +- Every section has a heading; the margins match on both sides; no stretch of the page is empty. +- The critique of your last round is written down in the shape of `references/critique.md` §4. + +Tell the user, briefly: the direction dealt (name and seed) and any redraws with reasons; the idea +sentence and the live thing; the final scores from your last critique round and what still falls short; +every found picture and clip with its title, creator, licence and source page (`assets.mjs --credits` prints +the list) and where its credit sits on the page; which bundled photographs and which drawings stand in +for photography (so they can be replaced); and any sample content that must be swapped before launch. +Do not claim a check you did not run. + +## House rules + +These hold on every build, whatever the direction. `inspect.mjs` measures them. + +| Rule | Instead | +| --- | --- | +| **Headlines: two lines or fewer, at every width.** Every `h1`–`h6`, and the main line of the first screen whatever its tag. | Cut words. Then widen the measure. Size last. | +| **A clear title on the first screen**, in the page's one `h1`, and a heading on every section. | Say what this is: the name with what it does, the product with what it is for, the event with its date and place. | +| **Equal outer margins; no section huddled on one side** with the other half of the screen empty. | Close every void with something on its far side: the section's picture, a second column, a list, a figure. | +| **No blank stretches** taller than about half a screen. | The normal section gap. A deliberate rest is a placed picture or a field of colour, once per page. | +| **Statements are paragraphs.** An intro sentence or a quotation set large is marked up as `

` or `

`, stays at statement size (36px or less on desktop, 24px on a phone) and runs to about 25 words, three lines. | Larger than that it is a headline and the two-line rule applies. In blind tests jurors read a 42px sentence over four lines as a four-line headline. | +| **No eyebrows.** No small label above a heading, no pill badge above the headline, no "New ·" chip. | Put the information in the heading or the first sentence, or drop it. | +| **No monospace** outside real code blocks. | The text face. Tabular figures where numbers align. | +| **No index numbering.** No 01 / 02 / 03, no (001), no "Step 2". | Order shown by position, size, or the words. A real `
    ` if order matters. | +| **No thin rules.** No hairline dividers, no 1px outlined boxes, no grid lines, crosshairs or crop marks. | Space. A step in background tone. A change of scale. A filled shape. | +| **No gradients.** Not as backgrounds, not on buttons, not in text. | Flat colour, or a real photograph. A neutral scrim under text on a photo is the one exception. | +| **No shadows on things at rest.** No glows. | A tone step between surfaces. Shadows only on what truly floats: a menu, a dialog. | +| **No assistant palette.** No yellow-cream ground with terracotta or rust; no violet or indigo. | The dealt palette. | +| **No tiny uppercase letter-spaced labels.** | Sentence case at a readable size. | +| **No icon-topped feature cards, no rows of identical cards.** | The dealt section blueprint. | +| **No glass.** No backdrop blur panels, no floating pill navigation. | A plain bar: wordmark, a few links, one action. | +| **No emoji, no gradient blobs, no decorative shapes, no fake dashboards of grey bars.** | A real picture, a real interface fragment, or nothing. | +| **No styled accent word** in a headline (italic, serif, coloured, underlined). | One face, one colour. The words carry the emphasis. | +| **Two typefaces at most,** usually one. | The dealt type system. | + +Three places keep their own conventions and are left alone by the inspector: real code in +`
    `/`` (monospace is correct there), real tables and form fields (they may have lines), and
    +a real interface fragment whose root carries the attribute `data-ui` (the product's own borders and
    +menus; see `references/imagery.md` §7).
    +
    +Why these, honestly. Some are what the study measured: among the 247 sites, those the panel scored
    +7.5 or higher used icon feature cards 1% of the time against 28% for sites under 6.5, pill badges 14%
    +against 34%, gradients 22% against 52%, shadows 24% against 48%, tiny tracked caps 16% against 57%.
    +Others are the owner's taste and go against current gallery fashion: monospace labels, index numbers
    +and hairline grids are actually *more* common on award sites than on weak ones, which is exactly why
    +generators imitate them and why they now read as costume. They are banned here without exception.
    +`references/tells.md` keeps the dated registry.
    +
    +Removing ornament leaves space. Never fill it with another ornament. Fill it with scale (make the main
    +thing larger), with the full content, with a picture made for this subject, or with a field of flat
    +colour. Leave it empty on purpose once per page at most.
    +
    +## Laws of the craft
    +
    +Short form. Numbers are from the study unless marked as house style.
    +
    +**Type**
    +- Two or three sizes do the visible work: one very large, one small, nothing in between. Median
    +  headline-to-body ratio on the studied sites is 4.3; the best go far beyond (largest type: median
    +  8.4vw on the top sites against 5.0vw on the weak ones).
    +- Display type: tracking -0.02 to -0.05em, leading 0.85–1.05. Text: 16–20px, leading 1.45–1.6,
    +  45–75 characters per line.
    +- Five sizes on a page is the ceiling. One family is normal (a third of the studied sites); two is the
    +  limit.
    +- Left-aligned by default. Centre at most one moment.
    +
    +**Space**
    +- One grid, one pair of tight margins (16–32px), used everywhere; large things run to the edges. Text
    +  blocks share two or three left edges on the whole page.
    +- Asymmetry inside the grid, never in the frame: the two outer margins are equal, and an off-centre
    +  heading is answered by something at the far side of the grid.
    +- The gap between sections is clearly larger than any gap inside one: 120–240px on desktop (the study's median is about 240).
    +- Each section has a different composition from its neighbours; none is a card grid.
    +
    +**Colour**
    +- One ground, one ink, one accent. The accent appears on the action and perhaps one other thing.
    +- Running text in the full ink. A page set in soft grey reads unfinished.
    +- Surfaces are separated by a small step in tone, never by a line or a shadow.
    +- A section may change the whole field colour. Nothing fades into anything.
    +
    +**Imagery**
    +- One dominant image beats six small ones. On the top-scored sites the hero media covers at least half
    +  the first screen 68% of the time.
    +- Same crop ratios, same treatment, square corners unless the direction says otherwise (73% of the
    +  studied sites leave media square).
    +- No image is better than a placeholder, an icon, or an abstract shape. A picture drawn for this
    +  subject, in its colours and with care, is better than either. A real picture of its world, found
    +  and credited, is better still.
    +- Every found picture is downloaded into the project, credited on the page and listed in the report.
    +  None is presented as the client's own.
    +- Nothing ever lies on top of a headline or a statement (the inspector fails it).
    +
    +**Components**
    +- Buttons: flat, one fill colour, either square-cornered or fully round, decided once (top sites: 52%
    +  square, 23% pill; the 9–16px "soft" radius is the weak-site default). Most strong heroes have no
    +  button at all, or one.
    +- Navigation: wordmark, three to five plain links, one action. No bar chrome.
    +- The footer is a designed close, not a sitemap: on most strong sites the name returns at full width.
    +
    +## Special cases
    +
    +**An existing brand or design system.** Pass `--keep palette,type`, map the brand's colours and faces
    +onto the roles, and take only composition from the draw. The house rules still apply; if the brand
    +itself requires a banned device (its logo sits in a gradient, its accent is violet), keep the brand
    +asset, say so in the report, and pass `--allow ` to the inspector for that rule only.
    +
    +**Redesign, restyle or review of an existing page or app screen.**
    +
    +1. **Record the before.** Run the project as it is and inspect it into its own folder
    +   (`inspect.mjs  --out .taste-skill/before`, with `--app` for an app screen) and lint its
    +   source. Read the code: the framework, the styling method (Tailwind v3 or v4, CSS modules,
    +   styled-components, plain CSS), the components, and what must survive: routes, forms, data,
    +   behaviour, the brand's own assets.
    +2. **A review stops here.** Critique the before screenshots with `references/critique.md`, list the
    +   findings with the inspector's measurements, and name the three changes that would move the page
    +   most.
    +3. **Keep the stack, the content and what works.** No framework or styling-library migration; check the
    +   dependency file before adding anything. A restyle keeps the layout and takes type, colour and
    +   components from a dealt direction (`--keep` whatever the brand fixes); a redesign deals a full
    +   direction and rebuilds the sections from its blueprints inside the existing components. Either way
    +   proceed from step 2 of the run with the page's real content.
    +4. **Order of work, biggest effect for least risk:** type (faces and scale), colour (one ground, one
    +   ink, one accent), the frame (margins, section rhythm, a title on the first screen and a heading on
    +   every section), states (hover, focus, loading, empty, error), then the stock components (icon
    +   cards, pill badges, gradient blobs, card grids) replaced by the dealt blueprints.
    +5. **Prove it.** Inspect again into `.taste-skill/after`, compare before and after at every width,
    +   click through every link, form and menu that worked before, and report the before and after
    +   measurements side by side.
    +
    +**A component or a single section, not a page.** Skip the draw unless there is no direction to follow.
    +Match the surrounding design, apply the house rules and the laws, and still inspect the result.
    +
    +**No checkout, no form backend.** The primary button goes to the real destination when the brief names
    +one. Otherwise it opens an email with a written subject and body (`mailto:` with the visitor's choices
    +filled in), or, for a shop, it points at `#checkout` and the report says it must be wired before
    +launch. Never fake a payment form.
    +
    +**No Chrome or Node 22.** Run `lint.mjs` (Node 18+), take screenshots with whatever browser tool you
    +have, and critique those. Say in the report that the inspector could not run.
    +
    +**No network.** If `assets.mjs` reaches no source, draw the pictures and say in the report that the
    +open collections could not be searched.
    +
    +## Files
    +
    +| File | Read it when |
    +| --- | --- |
    +| `references/app-screens.md` | Any dashboard, admin, settings or other app screen: its own run, rules, tokens and checks. |
    +| `references/copy.md` | Writing the argument and the copy deck (steps 2 and 5). The two-line arithmetic. |
    +| `references/type.md` | Setting type: scales, tracking, measure, loading fonts, pairing. |
    +| `references/colour.md` | Applying the palette: roles, proportions, tone steps, dark pages, contrast. |
    +| `references/layout.md` | Grid, margins, rhythm, section variety, navigation, footer, the phone composition. |
    +| `references/imagery.md` | Choosing, finding, crediting, cropping and treating pictures; what to do with none. |
    +| `references/motion.md` | Step 9. Budget, tokens, recipes, reduced motion. |
    +| `references/scenes.md` | Step 6, when the sheet deals scroll scenes: putting one on a page, filling, fitting, the phone, checking, the catalogue. |
    +| `references/critique.md` | Step 8. How to look, how to score, what to fix first. |
    +| `references/tells.md` | The dated registry of generated-page tells and what each is replaced by. |
    +| `references/research.md` | The study: method, numbers, what the best and worst sites do. Cite it, do not guess. |
    +| `scripts/draw.mjs` | Deals and reprints the direction; `--photos`, `--site ` for more references; `--app` deals an app style instead. |
    +| `scripts/assets.mjs` | Step 6: searches open collections for real pictures of the subject's world; `--get` downloads with the credit, `--credits` prints them. |
    +| `scripts/lint.mjs` · `scripts/inspect.mjs` | The gate. |
    +| `scripts/scenes.mjs` | The gate for scroll scenes: each scene at 0-100% of its hold, desktop, phone, reduced motion. |
    +| `assets/base.css` · `assets/base.js` | An optional neutral foundation to build on. |
    +| `assets/scenes/` | The scroll scenes: the shared stage (`stage.js`, `stage.css`) and, for each scene in the library, its `.js`, `.css` and a working demo page in `demo/`. |
    +| `assets/app.css` · `assets/charts.js` | For app screens: a neutral shell, panels, tables and controls, and small SVG charts drawn to the app rules. |
    +| `library/` | The data the draw reads: directions, heroes, sections, type systems, palettes, photographs, studied sites, motions, scroll scenes (`scenes.json`), and the app styles, shells and screen patterns (`app.json`). Do not read it whole; use the script. |
    diff --git a/.agents/skills/design-taste-frontend/assets/app.css b/.agents/skills/design-taste-frontend/assets/app.css
    new file mode 100644
    index 0000000..865e4ed
    --- /dev/null
    +++ b/.agents/skills/design-taste-frontend/assets/app.css
    @@ -0,0 +1,216 @@
    +/* tasteskill / app.css
    +   A neutral foundation for app screens (dashboards, admin, settings, inboxes), set to the defaults
    +   measured in the study of real product screens (references/app-screens.md). Copy it into the project,
    +   replace the token values with the ones on the app sheet (draw.mjs --app), and build on top.
    +   Delete what you do not use. It has no brand of its own: neutral grounds, one quiet line, one accent. */
    +
    +/* ---------- tokens (replace with the dealt style) ---------- */
    +:root {
    +  /* names match the app sheet printed by draw.mjs --app */
    +  --ground: #f9fafb;          /* the app chrome and page */
    +  --surface: #ffffff;         /* panels and the work sheet */
    +  --raised: #f4f5f6;          /* a filled inner well, hover rows */
    +  --active: #eeeeee;          /* the active nav pill */
    +  --border: #e8e8e8;          /* panel edges: about 1.2:1 on white */
    +  --rule: #f1f2f3;            /* row rules inside tables */
    +  --control: #d1d5db;         /* inputs and outlined buttons: one step stronger */
    +  --text: #111111;
    +  --muted: #5f6368;           /* secondary text, labels (4.5:1 or more on its ground) */
    +  --faint: #6b6b6b;           /* meta and placeholders: the lightest grey that holds 4.5:1 on white */
    +  --accent: #1f6f5c;          /* one hue: data, focus, the selected thing */
    +  --primary: #1d1f20;         /* the primary button is near-black unless the style says otherwise */
    +  --primary-ink: #ffffff;
    +  --positive: #247b50; --negative: #c4242a; --warning: #92400e;  /* references/app-screens.md §9.5; a green accent is also --positive */
    +  --pill-positive-bg: #dcfae5; --pill-positive-ink: #04250e;
    +  --pill-negative-bg: #ffedea; --pill-negative-ink: #831c1e;
    +  --pill-warning-bg: #fffbeb; --pill-warning-ink: #92400e;
    +  --pill-neutral-bg: #eeeeee; --pill-neutral-ink: #3d3d3d;
    +  --chart-1: var(--accent); --chart-2: #8fb8ad; --chart-3: #b08a2e; --chart-muted: #cfd3d6;
    +  --chart-mark: var(--text);  /* a marked period in Charts.diverging: the second tone */
    +  --chart-span: 0.06;         /* opacity of a shaded span (a selling window, an outage) */
    +  --grid: var(--rule);        /* chart gridlines (charts.js) */
    +  --axis-ink: var(--muted);   /* chart tick labels (charts.js) */
    +  --ink: var(--text);
    +
    +  --font: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;
    +  --fs-title: 24px; --fs-section: 16px; --fs-kpi: 28px; --fs-body: 14px; --fs-small: 12px;
    +
    +  --sidebar-width: 232px;
    +  --pad: 24px;                /* canvas padding */
    +  --gap: 16px;                /* one gutter, horizontal and vertical */
    +  --card-pad: 20px;
    +  --radius-card: 8px;         /* radius is bimodal: tight 4–8 (controls 6) or soft 16–24 (controls full); never 11–12 */
    +  --radius-control: 6px;
    +  --control-height: 32px;     /* every control in the title and filter rows */
    +  --row-height: 48px;         /* single-line table row */
    +  --nav-row: 32px;            /* sidebar item height, on a 34px pitch */
    +
    +  --ease-out: cubic-bezier(0.22, 1, 0.36, 1);
    +  --t-press: 120ms; --t-hover: 150ms; --t-ui: 200ms;
    +}
    +/* dark: one true-neutral ground, elevation by lightness; two greys that read apart (not #aaa beside #969696) */
    +:root[data-theme="dark"] {
    +  --ground: #000000; --surface: #111111; --raised: #222222; --active: #222222;
    +  --border: #1a1a1a; --rule: #161616; --control: #444444;
    +  --text: #ffffff; --muted: #b4b4b4; --faint: #949494;
    +  --primary: #ffffff; --primary-ink: #000000;
    +  --positive: #3fc07a; --negative: #e5566f; --warning: #e5a93b;  /* a green or yellow-green accent is also --positive */
    +  --pill-positive-bg: #172a1d; --pill-positive-ink: #3fc07a;
    +  --pill-negative-bg: #2c1a20; --pill-negative-ink: #e5566f;
    +  --pill-warning-bg: #2b2414; --pill-warning-ink: #e5a93b;
    +  --pill-neutral-bg: #222222; --pill-neutral-ink: #ffffff;
    +  --chart-muted: #4a4a4a; --grid: #2b2b2b;
    +  --chart-span: 0.12;
    +}
    +
    +/* ---------- reset ---------- */
    +*, *::before, *::after { box-sizing: border-box; }
    +html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }
    +body { margin: 0; background: var(--ground); color: var(--text); font: var(--fs-body)/20px var(--font); -webkit-font-smoothing: antialiased; }
    +h1, h2, h3, h4, p, figure, ul, ol, dl, dd { margin: 0; }
    +ul[class], ol[class] { padding: 0; list-style: none; }
    +img, svg, video, canvas { display: block; max-width: 100%; }
    +button, input, select, textarea { font: inherit; color: inherit; }
    +a { color: inherit; text-decoration: none; }
    +:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: 4px; }
    +.num, table, .kpi-value { font-variant-numeric: tabular-nums; }
    +
    +/* ---------- shell: sidebar + canvas ---------- */
    +.app { display: grid; grid-template-columns: var(--sidebar-width) minmax(0, 1fr); min-height: 100svh; }
    +.sidebar { position: sticky; top: 0; height: 100svh; display: flex; flex-direction: column; gap: 2px; padding: 16px 12px; overflow: auto; }
    +.sidebar .group-label { margin: 20px 8px 6px; font-size: var(--fs-small); color: var(--faint); }
    +.nav-item { display: flex; align-items: center; gap: 10px; height: var(--nav-row); padding: 0 8px; border-radius: 8px; color: var(--muted); transition: background-color var(--t-hover) ease, color var(--t-hover) ease; }
    +.nav-item svg { width: 16px; height: 16px; flex: none; stroke-width: 1.5; }
    +.nav-item:hover { background: var(--raised); color: var(--text); }
    +.nav-item[aria-current="page"] { background: var(--active); color: var(--text); }
    +.sidebar .bottom { margin-top: auto; }
    +.canvas { min-width: 0; padding: var(--pad); }
    +
    +/* ---------- title block and filters ---------- */
    +.title-row { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; margin-bottom: 20px; }
    +.title-row h1 { font-size: var(--fs-title); line-height: 1.2; font-weight: 600; letter-spacing: -0.01em; }
    +.title-row .sub { margin-top: 4px; color: var(--muted); }
    +.filters { display: flex; align-items: center; gap: 8px; margin-bottom: var(--gap); flex-wrap: wrap; }
    +.filters .spacer { flex: 1; }
    +.stamp { color: var(--faint); font-size: var(--fs-small); }
    +
    +/* ---------- panels and grid ---------- */
    +.grid { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: var(--gap); }
    +.panel { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-card); padding: var(--card-pad); min-width: 0; }
    +.panel > header { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 16px; }
    +.panel h2 { font-size: var(--fs-section); line-height: 1.3; font-weight: 600; }
    +.panel .meta { color: var(--faint); font-size: var(--fs-small); }
    +/* paired cards in one row: a card stretches to its neighbour only when it has content to fill. Otherwise it keeps
    +   its own height (add .top to the row), and only an action or a total may be pinned to a stretched card's bottom */
    +.grid.top { align-items: start; }
    +
    +/* a chart's heading row: its title (and legend or period) with a fixed 8px to the svg */
    +.chart-head { display: flex; align-items: baseline; justify-content: space-between; flex-wrap: wrap; gap: 4px 12px; margin-bottom: 8px; }
    +.chart-head h3 { font-size: var(--fs-body); line-height: 20px; font-weight: 500; }
    +.chart { position: relative; min-width: 0; }
    +
    +/* a link at a card's foot or header ("Show all 7", "Sell-out history"): ink, a 12px chevron, an underline on hover,
    +   and no inline padding, so its text sits on the card's content edge */
    +.card-link { display: inline-flex; align-items: center; gap: 2px; padding: 0; border: 0; background: none; color: var(--text); font-weight: 500; cursor: pointer; text-underline-offset: 3px; }
    +.card-link::after { content: ""; width: 12px; height: 12px; flex: none; background: currentColor; -webkit-mask: var(--chevron) center / 12px no-repeat; mask: var(--chevron) center / 12px no-repeat; }
    +.card-link:hover { text-decoration: underline; }
    +:root { --chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M4.5 2.5 8 6l-3.5 3.5' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); }
    +
    +/* list rows: a rule between rows and none above the first. A rule on a rounded box curls up at both ends, so a row
    +   that carries a rule has square corners */
    +.rows { display: grid; }
    +.row { display: flex; align-items: center; gap: 12px; min-height: 44px; padding: 10px 0; }
    +.row + .row { border-top: 1px solid var(--rule); border-radius: 0; }
    +
    +/* KPIs as one divided strip: a label above a number, no icons, no tiles */
    +.kpis { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-card); }
    +.kpi { padding: 16px var(--card-pad); }
    +.kpi + .kpi { border-left: 1px solid var(--border); }
    +.kpi-label { color: var(--muted); }
    +.kpi-value { margin-top: 6px; font-size: var(--fs-kpi); line-height: 1.15; font-weight: 500; letter-spacing: -0.01em; }
    +.kpi-value small { font-size: 0.55em; color: var(--muted); font-weight: 400; margin-left: 2px; }
    +.delta { margin-top: 4px; font-size: var(--fs-small); color: var(--muted); }
    +.delta .up { color: var(--positive); } .delta .down { color: var(--negative); }
    +/* KPIs as the chart's tabs: the selected one carries a 2px rule and an ink label; the others keep a grey label and
    +   their value in ink at a lighter weight (a grey value reads as disabled). When the tabs are the per-entity
    +   breakdown the brief asks for (takings by shop), add .entities: nothing changes but the rule */
    +.kpis[role="tablist"] .kpi { position: relative; cursor: pointer; }
    +.kpis[role="tablist"] .kpi[aria-selected="true"]::after { content: ""; position: absolute; left: 0; right: 0; bottom: -1px; height: 2px; background: var(--text); }
    +.kpis[role="tablist"]:not(.entities) .kpi[aria-selected="true"] .kpi-label { color: var(--text); }
    +.kpis[role="tablist"]:not(.entities) .kpi[aria-selected="false"] .kpi-value { color: var(--text); font-weight: 400; }
    +
    +/* ---------- tables ---------- */
    +.table-wrap { overflow-x: auto; }
    +table { width: 100%; border-collapse: collapse; }
    +th { height: 36px; padding: 0 12px; text-align: left; font-weight: 400; font-size: var(--fs-small); color: var(--muted); border-bottom: 1px solid var(--border); white-space: nowrap; }
    +/* cells share one baseline, so a figure never sits 2px below the name beside it; the row height comes from padding */
    +td { padding: calc((var(--row-height) - 20px) / 2) 12px; border-bottom: 1px solid var(--rule); vertical-align: baseline; }
    +tbody tr:last-child td { border-bottom: 0; }
    +/* no hover that changes the fill; a row that drives a detail pane takes the nav pill's fill when selected */
    +tbody tr[aria-selected="true"] td { background: var(--active); }
    +th.n, td.n { text-align: right; }
    +td .sub { display: block; font-size: var(--fs-small); color: var(--muted); }
    +.truncate { max-width: 28ch; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
    +
    +/* status pill: a pale tint with dark ink of the same hue, one per row */
    +.pill { display: inline-flex; align-items: center; gap: 6px; height: 22px; padding: 0 8px; border-radius: 999px; font-size: var(--fs-small); font-weight: 500; background: var(--pill-neutral-bg); color: var(--pill-neutral-ink); white-space: nowrap; }
    +.pill.pos { background: var(--pill-positive-bg); color: var(--pill-positive-ink); }
    +.pill.neg { background: var(--pill-negative-bg); color: var(--pill-negative-ink); }
    +.pill.warn { background: var(--pill-warning-bg); color: var(--pill-warning-ink); }
    +
    +/* ---------- controls ---------- */
    +.btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; height: var(--control-height); padding: 0 12px; border-radius: var(--radius-control); border: 1px solid var(--control); background: var(--surface); font-weight: 500; cursor: pointer; transition: background-color var(--t-hover) ease, transform var(--t-press) var(--ease-out); }
    +.btn:hover { background: var(--raised); }
    +.btn:active { transform: translateY(1px); }
    +.btn.primary { background: var(--primary); color: var(--primary-ink); border-color: transparent; }
    +.btn.ghost { border-color: transparent; background: transparent; }
    +.field { display: grid; gap: 8px; }
    +.field label { font-weight: 500; }
    +.field .hint { color: var(--muted); font-size: var(--fs-small); }
    +.input, select.input { height: 38px; padding: 0 12px; border: 1px solid var(--control); border-radius: var(--radius-control); background: var(--surface); }
    +.input::placeholder { color: var(--faint); }
    +.tabs { display: flex; gap: 24px; border-bottom: 1px solid var(--border); margin-bottom: var(--gap); }
    +.tabs a { position: relative; padding: 10px 0; color: var(--muted); transition: color var(--t-hover) ease; }
    +.tabs a[aria-selected="true"] { color: var(--text); }
    +.tabs a[aria-selected="true"]::after { content: ""; position: absolute; left: 0; right: 0; bottom: -1px; height: 2px; background: var(--text); }
    +/* as wide as its options; full width only on a narrow phone */
    +.segmented { display: inline-flex; width: max-content; max-width: 100%; padding: 2px; border-radius: 8px; background: var(--raised); }
    +.segmented button { height: 28px; padding: 0 10px; border: 0; border-radius: 6px; background: transparent; color: var(--muted); cursor: pointer; }
    +.segmented button[aria-pressed="true"] { background: var(--surface); color: var(--text); }
    +.switch { appearance: none; width: 32px; height: 20px; border-radius: 999px; background: var(--control); position: relative; cursor: pointer; transition: background-color var(--t-ui) ease; }
    +.switch::after { content: ""; position: absolute; top: 2px; left: 2px; width: 16px; height: 16px; border-radius: 50%; background: #fff; transition: transform var(--t-ui) var(--ease-out); }
    +.switch:checked { background: var(--text); } .switch:checked::after { transform: translateX(12px); }
    +
    +/* empty and loading states keep the frame; a loading value is a flat grey bar at its real size, with no shimmer */
    +.empty { display: grid; place-items: center; min-height: 96px; padding: 16px; border: 1px dashed var(--control); border-radius: var(--radius-control); color: var(--muted); text-align: center; }
    +.skeleton { background: var(--raised); border-radius: 4px; }
    +
    +/* ---------- phone: the navigation folds away and the canvas takes the width ---------- */
    +.menu-toggle { display: none; }
    +@media (max-width: 860px) {
    +  .app { grid-template-columns: minmax(0, 1fr); }
    +  /* the menu opens as a full-screen sheet */
    +  .sidebar { position: fixed; inset: 0; width: 100%; height: 100%; z-index: 20; background: var(--surface); transform: translateX(-100%); transition: transform var(--t-ui) var(--ease-out); }
    +  .sidebar.open { transform: none; }
    +  .menu-toggle { display: inline-flex; }
    +  .canvas { padding: 16px; }
    +  .grid > * { grid-column: 1 / -1 !important; }
    +  .kpis { grid-auto-flow: row; grid-template-columns: repeat(2, minmax(0, 1fr)); }
    +  .kpi + .kpi { border-left: 0; }
    +  .kpi:nth-child(n + 3) { border-top: 1px solid var(--border); }
    +  .kpi:nth-child(2n) { border-left: 1px solid var(--border); }
    +  /* an odd count leaves no half-empty row: the last cell takes the full width */
    +  .kpi:last-child:nth-child(odd) { grid-column: 1 / -1; }
    +  /* KPI tabs in a 2-up grid: the selected cell takes a fill, never an underline floating mid-grid */
    +  .kpis[role="tablist"] .kpi[aria-selected="true"] { background: var(--active); }
    +  .kpis[role="tablist"] .kpi[aria-selected="true"]::after { content: none; }
    +  .title-row { flex-wrap: wrap; align-items: flex-start; }
    +}
    +@media (max-width: 480px) {
    +  .segmented { display: flex; width: 100%; }
    +  .segmented button { flex: 1; }
    +}
    +@media (prefers-reduced-motion: reduce) { *, *::before, *::after { transition-duration: 0.01ms !important; animation: none !important; } }
    +
    +/* an empty message spans the block it stands in, never one squeezed column */
    +.rows .empty, .grid > .empty, li > .empty { grid-column: 1 / -1; width: 100%; }
    diff --git a/.agents/skills/design-taste-frontend/assets/base.css b/.agents/skills/design-taste-frontend/assets/base.css
    new file mode 100644
    index 0000000..75915d3
    --- /dev/null
    +++ b/.agents/skills/design-taste-frontend/assets/base.css
    @@ -0,0 +1,105 @@
    +/* tasteskill / base.css
    +   A neutral foundation: reset, token names, fluid type steps, a 12-column grid, states and the motion
    +   helpers from references/motion.md. It has no look of its own. Copy it into the project, replace the
    +   token values with the ones on the direction sheet, and build on top. Delete what you do not use. */
    +
    +/* ---------- tokens (replace with the dealt palette and type system) ---------- */
    +:root {
    +  --bg: #ffffff;
    +  --surface: #f2f2f2;
    +  --ink: #111111;
    +  --muted: #5c5c5c;
    +  --accent: #111111;
    +  --accent-ink: #ffffff;
    +
    +  --font-display: system-ui, sans-serif;
    +  --font-text: system-ui, sans-serif;
    +
    +  --step-small: clamp(0.8125rem, 0.79rem + 0.1vw, 0.875rem);
    +  --step-body: clamp(1.0625rem, 1rem + 0.25vw, 1.1875rem);
    +  --step-lead: clamp(1.25rem, 1.1rem + 0.7vw, 1.625rem);
    +  --step-head: clamp(2rem, 1.3rem + 3.2vw, 4rem);
    +  --step-display: clamp(3rem, 1rem + 9vw, 9rem); /* set from the hero blueprint */
    +
    +  --margin: clamp(1rem, 2.2vw, 2rem);    /* page side margin: tight, so content reaches the edges */
    +  --gutter: clamp(1rem, 2vw, 2rem);      /* column gap */
    +  --section: clamp(5rem, 12vw, 13rem);   /* space between sections */
    +  --radius: 0px;                          /* one radius for the whole page: 0, or large, decided once */
    +
    +  --ease-out: cubic-bezier(0.22, 1, 0.36, 1);        /* entrances, moving hovers, UI under 600ms */
    +  --ease-expo: cubic-bezier(0.16, 1, 0.3, 1);        /* reveals of 800ms and longer, line rises, openings */
    +  --ease-in-out: cubic-bezier(0.76, 0, 0.24, 1);     /* wipes, panels, things that travel while visible */
    +  --ease-soft: cubic-bezier(0.33, 1, 0.68, 1);       /* slow scale and drift on photographs */
    +  --ease-exit: cubic-bezier(0.55, 0.055, 0.675, 0.19); /* something leaving for good, short */
    +  --t-press: 140ms;
    +  --t-hover: 180ms;
    +  --t-ui: 240ms;
    +  --t-reveal: 800ms;
    +  --t-open: 1200ms;                                  /* picture openings and clip wipes */
    +  --stagger-line: 90ms;
    +  --stagger-item: 70ms;
    +}
    +
    +/* ---------- reset ---------- */
    +*, *::before, *::after { box-sizing: border-box; }
    +html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; scroll-behavior: auto; }
    +body { margin: 0; background: var(--bg); color: var(--ink); font-family: var(--font-text); font-size: var(--step-body); line-height: 1.5; font-kerning: normal; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; }
    +h1, h2, h3, h4, p, figure, blockquote, ul, ol, dl, dd { margin: 0; }
    +ul[class], ol[class] { padding: 0; list-style: none; }
    +img, video, svg, canvas { display: block; max-width: 100%; }
    +img, video { height: auto; background: var(--surface); }
    +button, input, select, textarea { font: inherit; color: inherit; }
    +button { background: none; border: 0; padding: 0; cursor: pointer; }
    +a { color: inherit; }
    +:target { scroll-margin-top: 6rem; }
    +::selection { background: var(--accent); color: var(--accent-ink); }
    +:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }
    +
    +/* ---------- type ---------- */
    +h1, h2, h3 { font-family: var(--font-display); font-weight: inherit; text-wrap: balance; hyphens: none; }
    +.display { font-size: var(--step-display); line-height: 0.95; letter-spacing: -0.035em; }
    +.head { font-size: var(--step-head); line-height: 1.02; letter-spacing: -0.025em; }
    +.lead { font-size: var(--step-lead); line-height: 1.35; max-width: 40ch; }
    +.small { font-size: var(--step-small); line-height: 1.45; }
    +.muted { color: var(--muted); }
    +p { max-width: 62ch; text-wrap: pretty; }
    +p + p { margin-top: 0.9em; }
    +.nums { font-variant-numeric: tabular-nums; }
    +.only-wide { display: none; }
    +@media (min-width: 48em) { .only-wide { display: inline; } }
    +
    +/* ---------- layout ---------- */
    +.wrap { padding-inline: var(--margin); }
    +.grid { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); column-gap: var(--gutter); }
    +.section { padding-block: calc(var(--section) / 2); }
    +.section + .section { margin-top: 0; }
    +.bleed { margin-inline: calc(var(--margin) * -1); }
    +.cover { width: 100%; height: 100%; object-fit: cover; }
    +.sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
    +
    +/* ---------- controls ---------- */
    +.button { display: inline-flex; align-items: center; justify-content: center; min-height: 3rem; padding: 0 1.4rem; background: var(--accent); color: var(--accent-ink); border-radius: var(--radius); text-decoration: none; white-space: nowrap; transition: transform var(--t-press) var(--ease-out), background-color var(--t-hover) ease, color var(--t-hover) ease; }
    +.button:active { transform: scale(0.97); }
    +.link { text-decoration: underline; text-decoration-color: transparent; text-underline-offset: 0.2em; text-decoration-thickness: 0.07em; transition: text-decoration-color var(--t-hover) ease; }
    +.link-plain { text-decoration: underline; text-underline-offset: 0.18em; text-decoration-thickness: 0.07em; }
    +@media (hover: hover) and (pointer: fine) {
    +  .link:hover { text-decoration-color: currentColor; }
    +}
    +.field { width: 100%; min-height: 3rem; padding: 0.7rem 0.9rem; background: var(--surface); border: 0; border-radius: var(--radius); font-size: max(1rem, var(--step-body)); }
    +
    +/* ---------- motion helpers (content stays visible without JavaScript) ---------- */
    +.lines .line { display: block; overflow: hidden; padding-bottom: 0.08em; margin-bottom: -0.08em; }
    +.lines [data-line] { display: block; }
    +.shutter { overflow: hidden; }
    +@media (prefers-reduced-motion: no-preference) {
    +  .js [data-rise] { opacity: 0; transform: translateY(18px); animation: ad-rise var(--t-reveal) var(--ease-out) forwards; animation-delay: calc(var(--i, 0) * 90ms + 120ms); }
    +  .js .lines [data-line] { transform: translateY(105%); animation: ad-line 900ms var(--ease-out) forwards; animation-delay: calc(var(--i, 0) * 110ms + 150ms); }
    +  .js [data-reveal] { opacity: 0; transform: translateY(24px); transition: opacity 700ms var(--ease-out), transform 900ms var(--ease-out); }
    +  .js [data-reveal].is-in { opacity: 1; transform: none; }
    +  .js .shutter[data-reveal] { opacity: 1; transform: none; clip-path: inset(0 0 100% 0); transition: clip-path 1100ms var(--ease-in-out); }
    +  .js .shutter[data-reveal] img { transform: scale(1.12); transition: transform 1500ms var(--ease-soft); }
    +  .js .shutter[data-reveal].is-in { clip-path: inset(0); }
    +  .js .shutter[data-reveal].is-in img { transform: none; }
    +}
    +@keyframes ad-rise { to { opacity: 1; transform: none; } }
    +@keyframes ad-line { to { transform: none; } }
    diff --git a/.agents/skills/design-taste-frontend/assets/base.js b/.agents/skills/design-taste-frontend/assets/base.js
    new file mode 100644
    index 0000000..86ec0af
    --- /dev/null
    +++ b/.agents/skills/design-taste-frontend/assets/base.js
    @@ -0,0 +1,37 @@
    +// tasteskill / base.js — the small amount of script the motion helpers in base.css need.
    +// Put this line in  so the hidden states only apply when scripting works:
    +//   
    +// Then load this file at the end of  (or with defer).
    +
    +// Reveal once when an element enters the viewport. Never replays, never leaves content hidden.
    +(() => {
    +  const targets = document.querySelectorAll('[data-reveal]');
    +  if (!targets.length) return;
    +  if (!('IntersectionObserver' in window)) { targets.forEach((el) => el.classList.add('is-in')); return; }
    +  const io = new IntersectionObserver((entries) => {
    +    for (const entry of entries) {
    +      if (!entry.isIntersecting) continue;
    +      entry.target.classList.add('is-in');
    +      io.unobserve(entry.target);
    +    }
    +  }, { rootMargin: '0px 0px -12% 0px', threshold: 0.1 });
    +  targets.forEach((el) => io.observe(el));
    +  // safety net: if anything is still hidden a few seconds after load (observer never fired), show it
    +  window.addEventListener('load', () => setTimeout(() => {
    +    targets.forEach((el) => { const r = el.getBoundingClientRect(); if (r.top < innerHeight && r.bottom > 0) el.classList.add('is-in'); });
    +  }, 2500));
    +})();
    +
    +// Optional, for "colour by chapter": each chapter paints its own full-bleed ground in CSS
    +// (style="background: var(--field-2); color: var(--field-2-ink)"), so the colour changes exactly at
    +// section edges. This only lets a fixed header take the ink of the chapter under it. Give each chapter
    +// data-ink="#hex" and style the header with color: var(--header-ink, var(--ink)).
    +// Never recolour the whole page from an observer: mid-change, a paragraph sits on two colours.
    +(() => {
    +  const chapters = document.querySelectorAll('[data-ink]');
    +  if (!chapters.length || !('IntersectionObserver' in window)) return;
    +  const io = new IntersectionObserver((entries) => {
    +    for (const entry of entries) if (entry.isIntersecting) document.documentElement.style.setProperty('--header-ink', entry.target.dataset.ink);
    +  }, { rootMargin: '0px 0px -92% 0px', threshold: 0 });
    +  chapters.forEach((el) => io.observe(el));
    +})();
    diff --git a/.agents/skills/design-taste-frontend/assets/charts.js b/.agents/skills/design-taste-frontend/assets/charts.js
    new file mode 100644
    index 0000000..fa0f459
    --- /dev/null
    +++ b/.agents/skills/design-taste-frontend/assets/charts.js
    @@ -0,0 +1,617 @@
    +// tasteskill / charts.js — small, dependency-free charts for app screens, drawn in SVG from your data.
    +// They follow references/app-screens.md: one question per chart, one series that matters, 3–5 quiet
    +// horizontal gridlines, round ticks that top out above the largest value, 2px straight lines with no
    +// markers, square bars, no gradients, a bare tooltip, tabular figures. Colours come from CSS variables:
    +//   --chart-1 … --chart-4 (series), --chart-muted (other series), --chart-mark (a marked period; ink by default),
    +//   --chart-span (the opacity of a shaded span: about .06 on light, .12 on dark), --chart-track (a time strip's track),
    +//   --grid, --axis-ink, --ink, --surface, --raised, --rule, --negative
    +// Usage (after this file loads):
    +//   Charts.line(el, { labels: ['1 Oct', …], series: [{ name: 'Requests', values: [...] }], format: Charts.fmt.compact })
    +//   Charts.bars(el, { labels, values, highlight: 6, format })        one bar (or [indices]) may carry the accent; dim: [indices]
    +//   Charts.diverging(el, { labels, up, down, above: 'Sold', below: 'Bought', mark: [3, 9], markLabel: 'Car charged' })
    +//   Charts.ring(el, { value: 0.72, label: '72%', sub: 'of capacity' }) a progress ring with its total inside
    +//   Charts.barList(el, [{ label: 'Berlin', value: 412 }, …], { format, thin })  a ranked list where the row is the bar
    +//   Charts.plan(el, [{ label: 'Groceries', planned: 600, spent: 412, committed: 60 }, …], { scale: 'row' | 'plan' })  planned against spent
    +//   Charts.bullet(el, [{ label: 'Bonds', value: 0.31, target: 0.25 }, …])   share against a target
    +//   Charts.timeline(el, rows, kinds, { days, today, weekends })      who is away when, each kind of booking its own mark
    +//   Charts.matrix(el, rows, { cols, comfort: 2, today })             slack against a minimum, team by day
    +//   Charts.timeStrip(el, rows, { open: '08:00', close: '15:00', compareLabel: 'Last Sunday' })  when, within the day
    +// line, bars and diverging take annotations: [{ at: index, label: 'Deploy a3f09c1', short: 'a3f09c1' }] or spans
    +// [{ from, to, label: 'Cloud' }]. Their labels sit in rows above the plot, measured once the fonts have loaded, and no
    +// leader line crosses another label; the rows are reserved only when a label exists. reference: { value, label }, its
    +// label set where no series passes.
    +// line takes step: true for a balance that only changes on given days; today: index (the forecast after it is dashed)
    +// with todayLabel: 'Now 20:34' (set clear of the line); endLabel: true (the last value at the line's end); max: caps a
    +// flat series with one spike (the peak is labelled); yTicks: fixed ticks for a bounded quantity (0–100%); tickFormat:
    +// axis labels apart from the tooltip format; xAt: the indices to label. Without xAt the x labels keep one step.
    +// diverging, timeline, matrix and timeStrip return { svg, legend }, and line returns { legend } for two series or more:
    +// the legend is drawn from the same style objects as the marks, so a swatch is always the mark scaled down. Put it in
    +// the card's header, or pass legend: element (or a selector) to have it filled.
    +// Numbers follow the page's language (). Every chart gets role="img" and an aria-label that states what it shows.
    +(() => {
    +  const NS = 'http://www.w3.org/2000/svg', MINUS = '\u2212', ROW = 14, LANE = (rows) => 8 + rows * ROW + (rows ? 4 : 0);
    +  const css = (el, name, fb) => getComputedStyle(el).getPropertyValue(name).trim() || fb;
    +  const cssNum = (el, name, fb) => { const v = parseFloat(css(el, name, '')); return Number.isFinite(v) ? v : fb; };
    +  const svg = (tag, attrs = {}, parent) => { const n = document.createElementNS(NS, tag); for (const [k, v] of Object.entries(attrs)) if (v != null) n.setAttribute(k, v); if (parent) parent.appendChild(n); return n; };
    +  const text = (parent, str, attrs) => { const t = svg('text', attrs, parent); t.textContent = str; return t; };
    +  const titled = (parent, str) => { svg('title', {}, parent).textContent = str; return parent; };
    +  // numbers follow the page's language (), so separators match the rest of the screen
    +  const nf = (o) => new Intl.NumberFormat(document.documentElement.lang || 'en', o);
    +  const fmt = {
    +    int: (v) => nf({ maximumFractionDigits: 0 }).format(v),
    +    dec: (d) => (v) => nf({ minimumFractionDigits: d, maximumFractionDigits: d }).format(v),
    +    pct: (d = 1) => (v) => nf({ style: 'percent', minimumFractionDigits: d, maximumFractionDigits: d }).format(v),
    +    money: (cur = 'EUR', d = 0) => (v) => nf({ style: 'currency', currency: cur, minimumFractionDigits: d, maximumFractionDigits: d }).format(v),
    +    compact: (v) => nf({ notation: 'compact', maximumFractionDigits: 1 }).format(v),
    +    ms: (v) => `${nf({ maximumFractionDigits: 0 }).format(v)} ms`,
    +    // a sign on every change, with a true minus: fmt.signed() → '+2', '0', '−1'; fmt.signed(fmt.dec(1)) → '+0.4'
    +    signed: (f = (v) => nf({ maximumFractionDigits: 0 }).format(v)) => (v) => (v > 0 ? '+' : v < 0 ? MINUS : '') + f(Math.abs(v)),
    +    // minutes since midnight as a 24-hour time: 680 → '11:20'
    +    clock: (m) => `${String(Math.floor(m / 60) % 24).padStart(2, '0')}:${String(Math.round(m % 60)).padStart(2, '0')}`, // taste-skill-ignore: a clock, not a counter
    +  };
    +  const minutes = (t) => (t == null || t === '' ? null : typeof t === 'number' ? t : (([hh, mm]) => hh * 60 + (mm || 0))(String(t).split(':').map(Number)));
    +  // Round ticks (steps of 1, 2, 2.5 or 5 × 10^n) whose top sits above the largest value.
    +  function ticks(min, max, count = 4) {
    +    if (max === min) max = min + 1;
    +    const raw = (max - min) / count, mag = 10 ** Math.floor(Math.log10(raw));
    +    const step = [1, 2, 2.5, 5, 10].map((m) => m * mag).find((s) => s >= raw) || 10 * mag;
    +    const lo = Math.floor(min / step) * step; let hi = Math.ceil(max / step) * step; if (hi <= max) hi += step;
    +    const out = []; for (let v = lo; v <= hi + step / 2; v += step) out.push(+v.toFixed(10));
    +    return out;
    +  }
    +  // x labels keep one step all the way: every k-th label, with k chosen so the labels fit the width, and a step that
    +  // lands on the last label when one gives enough labels. Never a forced end label that breaks the step. Clock labels
    +  // ('08:30') step in whole hours (or halves and quarters) from a round time, so a half-hourly axis reads 06:00, 09:00.
    +  function xPicks(labels, span, at) {
    +    const n = labels.length;
    +    if (at) return at.filter((i) => i >= 0 && i < n);
    +    if (n <= 1) return n ? [0] : [];
    +    const longest = Math.max(...labels.map((l) => String(l).length));
    +    const cap = Math.max(2, Math.min(8, Math.floor(span / (longest * 7 + 18))));
    +    if (n <= cap) return [...Array(n).keys()];
    +    const mins = labels.every((l) => /^\d{1,2}:\d{2}$/.test(String(l))) ? labels.map(minutes) : null;
    +    const d = mins ? mins[1] - mins[0] : 0;
    +    let first = null, land = null;
    +    for (let k = 1; k < n; k++) {
    +      const stepM = k * d, clock = mins && d > 0;
    +      if (clock && (stepM >= 60 ? ![1, 2, 3, 4, 6, 12].includes(stepM / 60) : 60 % stepM !== 0)) continue;
    +      // start on a round time: a multiple of the step (09:00 for three hours), or a whole hour for shorter steps
    +      let s = clock ? mins.findIndex((m) => m % Math.max(60, stepM) === 0) : 0;
    +      if (s < 0) s = Math.max(0, mins.findIndex((m) => m % 60 === 0));
    +      const count = Math.floor((n - 1 - s) / k) + 1;
    +      if (count > cap) continue;
    +      if (first == null) first = { k, s };
    +      if ((n - 1 - s) % k === 0) { land = { k, s, count }; break; }
    +    }
    +    const pick = land && land.count >= Math.max(3, Math.ceil(cap * 0.6)) ? land : first || { k: n - 1, s: 0 };
    +    const out = []; for (let i = pick.s; i < n; i += pick.k) out.push(i);
    +    return out;
    +  }
    +  // colours: tokens resolved to rgb, so a mark can be mixed with the surface (a pale fill, a darker step)
    +  const swatchProbe = document.createElement('span'); swatchProbe.style.display = 'none';
    +  const rgb = (el, value) => {
    +    el.appendChild(swatchProbe); swatchProbe.style.color = ''; swatchProbe.style.color = value;
    +    const c = getComputedStyle(swatchProbe).color; swatchProbe.remove();
    +    const m = c.match(/-?[\d.]+/g); if (!m || m.length < 3) return null;
    +    return c.startsWith('color(') ? m.slice(0, 3).map((v) => Math.round(+v * 255)) : m.slice(0, 3).map(Number);
    +  };
    +  const mix = (el, a, b, t) => { const p = rgb(el, a), q = rgb(el, b); return p && q ? `rgb(${p.map((v, i) => Math.round(v * t + q[i] * (1 - t))).join(',')})` : a; };
    +  // text width, measured in the chart's own face (falls back to an estimate when the chart is hidden)
    +  const measure = (s, str, size = 11, weight = 400) => { const t = text(s, str, { x: -999, y: -999, 'font-size': size, 'font-weight': weight, visibility: 'hidden' }); let wd = 0; try { wd = t.getComputedTextLength(); } catch {} t.remove(); return wd > 0 ? wd : String(str).length * size * 0.56; };
    +  const fit = (s, str, max, size, weight) => { str = String(str); if (measure(s, str, size, weight) <= max) return str; while (str.length > 1 && measure(s, str + '\u2026', size, weight) > max) str = str.slice(0, -1); return str.trimEnd() + '\u2026'; };
    +  function frame(el, h) {
    +    el.innerHTML = '';
    +    const w = Math.max(240, el.clientWidth || 600);
    +    const s = svg('svg', { viewBox: `0 0 ${w} ${h}`, width: '100%', height: h, role: 'img', style: 'display:block;overflow:visible;font-variant-numeric:tabular-nums' }, el);
    +    return { s, w, h };
    +  }
    +  function tooltip(el) {
    +    let t = el.querySelector('.chart-tip');
    +    if (!t) { t = document.createElement('div'); t.className = 'chart-tip'; t.style.cssText = 'position:absolute;pointer-events:none;padding:6px 8px;font:inherit;font-size:12px;line-height:1.35;border-radius:6px;white-space:nowrap;opacity:0;transition:opacity 120ms ease;background:var(--surface,#fff);color:var(--ink,#111);border:1px solid var(--grid,#e5e7eb)'; if (getComputedStyle(el).position === 'static') el.style.position = 'relative'; el.appendChild(t); }
    +    return t;
    +  }
    +  function axes(g, el, { w, h, padL, padB, yt, y, labels, x, band = false, at = null, tick, avoid = null }) {
    +    const grid = css(el, '--grid', '#e8e8e8'), ink = css(el, '--axis-ink', '#6b6b6b'), s = g.ownerSVGElement;
    +    for (const v of yt) {
    +      const yy = y(v);
    +      svg('line', { x1: padL, x2: w, y1: yy, y2: yy, stroke: grid, 'stroke-width': 1, 'shape-rendering': 'crispEdges' }, g);
    +      text(g, tick(v), { x: padL - 8, y: yy + 4, 'text-anchor': 'end', 'font-size': 12, fill: ink });
    +    }
    +    const n = labels.length;
    +    for (const i of xPicks(labels, w - padL, at)) {
    +      const lab = String(labels[i]), tw = measure(s, lab, 12), xx = x(i);
    +      // the first and last labels are pulled inside the plot; none runs past either edge
    +      let left = band ? xx - tw / 2 : i === 0 ? xx : i === n - 1 ? xx - tw : xx - tw / 2;
    +      left = Math.max(band ? 0 : padL, Math.min(w - tw, left));
    +      if (avoid && left < avoid[1] + 8 && left + tw > avoid[0] - 8) continue;
    +      text(g, lab, { x: left, y: h - padB + 18, 'font-size': 12, fill: ink });
    +    }
    +  }
    +  // Annotation labels sit in rows above the plot, never on the data. A label sits beside the top of its own leader
    +  // line, right of it or left of it, in one of three rows. A place is free when no other label in that row overlaps
    +  // it, no leader line passes through it, and its own leader passes through no label below it. The layout is searched
    +  // (close markers often need the first label on the left so the next leader runs clear): full labels first, then
    +  // short forms (`short`), and only then is a label dropped to its marker's tooltip, with a note in the console.
    +  function lane(s, items, w, maxRows = 3) {
    +    const gap = 6, rank = (it) => (it.fixed != null ? 0 : it.span ? 1 : 2);
    +    // fixed captions first, then spans, then markers from left to right
    +    const order = [...items].sort((a, b) => rank(a) - rank(b) || (a.x ?? a.x0) - (b.x ?? b.x0));
    +    const opts = order.map((it) => {
    +      const out = [];
    +      for (const str of [it.label, it.short].filter(Boolean)) {
    +        const tw = measure(s, str, 11) + (it.glyph ? 9 : 0), mid = it.span ? (it.x0 + it.x1) / 2 : 0;
    +        const cands = it.fixed != null ? [[it.fixed, it.fixed + tw]] : it.span ? [[mid - tw / 2, mid + tw / 2], [it.x0, it.x0 + tw], [it.x1 - tw, it.x1]] : [[it.x + 4, it.x + 4 + tw], [it.x - 4 - tw, it.x - 4]];
    +        for (let row = 0; row < maxRows; row++) for (const [x0, x1] of cands) if (x0 >= 0 && x1 <= w) out.push({ ...it, text: str, isShort: str !== it.label, row, x0, x1 });
    +      }
    +      return out;
    +    });
    +    const free = (c, placed) => placed.every((p) => p.dropped || (!(p.row === c.row && c.x0 < p.x1 + gap && c.x1 > p.x0 - gap)
    +      && !(p.leader != null && p.row >= c.row && p.leader > c.x0 - 3 && p.leader < c.x1 + 3)
    +      && !(c.leader != null && p.row <= c.row && c.leader > p.x0 - 3 && c.leader < p.x1 + 3)));
    +    let best = null, steps = 0;
    +    const solve = (i, placed, allowShort, allowDrop) => {
    +      if (++steps > 20000) return false;
    +      if (i === order.length) { best = placed.slice(); return true; }
    +      for (const c of opts[i]) { if ((c.isShort && !allowShort) || !free(c, placed)) continue; placed.push(c); if (solve(i + 1, placed, allowShort, allowDrop)) return true; placed.pop(); }
    +      if (allowDrop) { placed.push({ ...order[i], dropped: true }); if (solve(i + 1, placed, allowShort, allowDrop)) return true; placed.pop(); }
    +      return false;
    +    };
    +    for (const [sh, dr] of [[false, false], [true, false], [true, true]]) { steps = 0; if (solve(0, [], sh, dr)) break; }
    +    const placed = (best || []).filter((p) => !p.dropped), dropped = (best || order.map((it) => ({ ...it, dropped: true }))).filter((p) => p.dropped);
    +    return { placed, dropped, rows: placed.length ? Math.max(...placed.map((p) => p.row)) + 1 : 0 };
    +  }
    +  function prepNotes(s, annotations = [], x, w, extra = []) {
    +    const items = [];
    +    for (const a of annotations || []) {
    +      if (a.from != null) items.push({ span: true, x0: Math.min(x(a.from), x(a.to)), x1: Math.max(x(a.from), x(a.to)), label: a.label, short: a.short, colour: a.colour });
    +      else if (a.at != null) items.push({ x: x(a.at), at: a.at, leader: x(a.at), label: a.label, short: a.short, colour: a.colour });
    +    }
    +    items.push(...extra);
    +    return { items, ...lane(s, items.filter((it) => it.label), w) };
    +  }
    +  // shaded spans go under the data; marker lines and the label rows over it
    +  function notesUnder(g, el, N, { padT, h, padB }) {
    +    const ink = css(el, '--axis-ink', '#6b6b6b'), op = cssNum(el, '--chart-span', 0.07);
    +    for (const it of N.items) if (it.span) svg('rect', { x: it.x0, y: padT, width: it.x1 - it.x0, height: h - padT - padB, fill: ink, opacity: op }, g);
    +  }
    +  function notesOver(g, el, N, { padT, h, padB }) {
    +    const ink = css(el, '--axis-ink', '#6b6b6b');
    +    // a marker line runs to the plot's foot, or stops above the bar it points at (it.end)
    +    for (const it of N.items) if (it.leader != null && !it.drawn) svg('line', { x1: it.leader, x2: it.leader, y1: padT, y2: Math.max(padT, it.end ?? h - padB), stroke: ink, 'stroke-width': 1, opacity: 0.45, 'shape-rendering': 'crispEdges' }, g);
    +    for (const p of N.placed) {
    +      const base = padT - 9 - p.row * ROW;
    +      if (p.leader != null) svg('line', { x1: p.leader, x2: p.leader, y1: base - 8, y2: padT, stroke: ink, 'stroke-width': 1, opacity: 0.45, 'shape-rendering': 'crispEdges' }, g);
    +      if (p.glyph) svg('path', { d: p.glyph === 'up' ? `M${p.x0} ${base - 1}l3 -6l3 6z` : `M${p.x0} ${base - 7}l3 6l3 -6z`, fill: ink }, g);
    +      text(g, p.text, { x: p.x0 + (p.glyph ? 9 : 0), y: base, 'font-size': 11, fill: p.colour || ink });
    +    }
    +    const el2 = g.ownerSVGElement.parentNode; el2._warned = el2._warned || new Set();
    +    for (const d of N.dropped) {
    +      if (d.leader != null) { const hit = svg('line', { x1: d.leader, x2: d.leader, y1: padT, y2: h - padB, stroke: 'transparent', 'stroke-width': 8 }, g); titled(hit, d.label, {}); }
    +      if (!el2._warned.has(d.label)) { el2._warned.add(d.label); console.warn(`Charts: no room above the plot for "${d.label}". Give it a short form (short) or label fewer markers.`); }
    +    }
    +  }
    +  // does a label box touch a drawn line? polylines are [[x, y], …]; a box is { x0, x1, y0, y1 }
    +  function hits(b, lines) {
    +    for (const pts of lines) for (let k = 1; k < pts.length; k++) {
    +      const a = pts[k - 1], c = pts[k]; if (!a || !c) continue;
    +      if (a[0] === c[0]) { if (a[0] >= b.x0 - 3 && a[0] <= b.x1 + 3 && Math.max(a[1], c[1]) >= b.y0 - 3 && Math.min(a[1], c[1]) <= b.y1 + 3) return true; continue; }
    +      const lo = Math.max(b.x0 - 3, Math.min(a[0], c[0])), hi = Math.min(b.x1 + 3, Math.max(a[0], c[0]));
    +      for (let xx = lo; xx <= hi; xx += 2) { const yy = a[1] + ((xx - a[0]) / (c[0] - a[0])) * (c[1] - a[1]); if (yy >= b.y0 - 3 && yy <= b.y1 + 3) return true; }
    +    }
    +    return false;
    +  }
    +  const boxHits = (b, boxes) => boxes.some((r) => b.x0 < r.x1 + 3 && b.x1 > r.x0 - 3 && b.y0 < r.y1 + 3 && b.y1 > r.y0 - 3);
    +  // a reference line (a budget, an SLO) with its label at an end where no series passes
    +  function references(g, el, refs, { y, padL, w, lines = [], boxes = [] }) {
    +    const ink = css(el, '--axis-ink', '#6b6b6b'), s = g.ownerSVGElement;
    +    for (const r of [].concat(refs || [])) {
    +      const yy = y(r.value);
    +      svg('line', { x1: padL, x2: w, y1: yy, y2: yy, stroke: ink, 'stroke-width': 1, 'stroke-dasharray': '4 4', opacity: 0.7 }, g);
    +      if (!r.label) continue;
    +      const tw = measure(s, r.label, 11), right = r.at !== 'left';
    +      const cand = [[right, -5], [right, 13], [!right, -5], [!right, 13]].map(([rt, dy]) => ({ x0: rt ? w - tw : padL + 4, x1: rt ? w : padL + 4 + tw, y0: yy + dy - 9, y1: yy + dy + 2, base: yy + dy }));
    +      const b = cand.find((c) => !hits(c, lines) && !boxHits(c, boxes)) || cand[0];
    +      text(g, r.label, { x: b.x0, y: b.base, 'font-size': 11, fill: ink });
    +    }
    +  }
    +  // One style object per kind of mark draws both the mark and its legend swatch, so the two cannot drift apart.
    +  function paintRect(parent, st, x, y, w, h, r = 0) {
    +    let fill = st.fill || 'none';
    +    if (st.hatch) {
    +      const s = parent.ownerSVGElement || parent, id = 'h' + Math.random().toString(36).slice(2, 8);
    +      const p = svg('pattern', { id, width: 5, height: 5, patternUnits: 'userSpaceOnUse', patternTransform: 'rotate(45)' }, svg('defs', {}, s));
    +      svg('rect', { width: 5, height: 5, fill: st.fill }, p); svg('line', { x1: 0, y1: 0, x2: 0, y2: 5, stroke: st.hatch, 'stroke-width': 1.2 }, p);
    +      fill = `url(#${id})`;
    +    }
    +    const inset = st.stroke ? (st.width || 1) / 2 : 0;
    +    const n = svg('rect', { x: x + inset, y: y + inset, width: Math.max(0, w - inset * 2), height: Math.max(0, h - inset * 2), rx: r, fill, stroke: st.stroke, 'stroke-width': st.stroke ? st.width || 1 : null, 'stroke-dasharray': st.dash, opacity: st.opacity, 'shape-rendering': r ? null : 'crispEdges' }, parent);
    +    if (st.edge) svg('rect', { x, y, width: 3, height: h, rx: Math.min(r, 1.5), fill: st.edge }, parent);
    +    return n;
    +  }
    +  const legendCss = ':where(.chart-legend){list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:4px 14px;font-size:12px;line-height:16px;color:var(--muted,#5f6368)}:where(.chart-legend li){display:inline-flex;align-items:center;gap:6px;white-space:nowrap}:where(.chart-legend svg){flex:none;overflow:visible}@media (max-width:480px){:where(.chart-legend){display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}}';
    +  function legendEl(items, target) {
    +    if (!document.getElementById('charts-legend-css')) { const st = document.createElement('style'); st.id = 'charts-legend-css'; st.textContent = legendCss; document.head.appendChild(st); }
    +    const ul = document.createElement('ul'); ul.className = 'chart-legend';
    +    for (const it of items) {
    +      const li = document.createElement('li'), sw = svg('svg', { width: it.w || 14, height: 12, 'aria-hidden': 'true' });
    +      it.draw(sw); li.append(sw, document.createTextNode(it.label)); ul.appendChild(li);
    +    }
    +    const t = typeof target === 'string' ? document.querySelector(target) : target;
    +    if (t) t.replaceChildren(ul);
    +    return ul;
    +  }
    +  const rectSwatch = (st, w = 14, h = 10, r = 2) => (sw) => paintRect(sw, st, 0, (12 - h) / 2, w, h, r);
    +  // charts are laid out with measured text: draw again once the page's fonts have arrived
    +  function settle(draw) { if (document.fonts) { document.fonts.ready.then(draw); document.fonts.addEventListener?.('loadingdone', draw, { once: true }); } }
    +  const heightOf = (h) => (typeof h === 'function' ? h() : h);
    +
    +  function line(el, { labels, series, format = fmt.int, tickFormat = null, height = 220, fill = false, min, max, step = false, annotations, reference, today = null, todayLabel = 'Today', endLabel = false, yTicks = null, xAt = null, legend = null }) {
    +    el._fmt = format;
    +    const colourOf = (sr, k) => sr.colour || (k === 0 ? css(el, '--chart-1', '#2f6fdf') : css(el, `--chart-${k + 1}`, css(el, '--chart-muted', '#a3a3a3')));
    +    const draw = () => {
    +      const { s, w, h } = frame(el, heightOf(height));
    +      const all = series.flatMap((x) => x.values.filter((v) => v != null)).concat([].concat(reference || []).map((r) => r.value));
    +      // max caps the range (a flat series with one spike): values above it are clipped and their peak labelled
    +      const top = max ?? Math.max(...all);
    +      const yt = yTicks || ticks(min ?? Math.min(0, ...all), top, 4);
    +      const tick = tickFormat || format;
    +      const lastVal = series[0].values.filter((v) => v != null).at(-1);
    +      const padL = 12 + Math.max(...yt.map((v) => measure(s, tick(v), 12))), padB = 26, padR = endLabel ? 10 + measure(s, format(lastVal), 12, 600) : 0;
    +      const x = (i) => padL + (i * (w - padL - padR)) / Math.max(1, labels.length - 1);
    +      // the peaks clipped by max are labelled in the rows above the plot, where the line leaves it
    +      const peaks = [];
    +      series.forEach((sr, k) => sr.values.forEach((v, i) => { if (v != null && v > yt.at(-1) && (i === 0 || sr.values[i - 1] == null || sr.values[i - 1] <= yt.at(-1))) { let j = i, peak = v; while (j < sr.values.length && sr.values[j] != null && sr.values[j] > yt.at(-1)) { peak = Math.max(peak, sr.values[j]); j++; } peaks.push({ x: x(i), label: format(peak) + ' at ' + labels[i], colour: colourOf(sr, k) }); } }));
    +      const scale = (N) => { const padT = LANE(N.rows); return { padT, y: (v) => padT + (h - padT - padB) * (1 - (v - yt[0]) / (yt.at(-1) - yt[0])) }; };
    +      const linesAt = (y) => series.map((sr) => { const out = []; sr.values.forEach((v, i) => { if (v == null) { out.push(null); return; } const p = [x(i), y(Math.min(v, yt.at(-1)))]; const prev = out.at(-1); if (step && prev) out.push([p[0], prev[1]]); out.push(p); }); return out; }).concat([].concat(reference || []).map((r) => [[padL, y(r.value)], [w, y(r.value)]]));
    +      let N = prepNotes(s, annotations, x, w, peaks), { padT, y } = scale(N), todayBox = null;
    +      // the today label goes inside the plot on whichever side of its line no series crosses; failing that, above
    +      if (today != null && todayLabel) {
    +        const cut = x(today), tw = measure(s, todayLabel, 11), lines = linesAt(y);
    +        const cand = [[cut + 4, h - padB - 6], [cut - 4 - tw, h - padB - 6], [cut + 4, padT + 11], [cut - 4 - tw, padT + 11]].map(([x0, b]) => ({ x0, x1: x0 + tw, y0: b - 9, y1: b + 2, base: b }));
    +        todayBox = cand.find((b) => b.x0 >= padL && b.x1 <= w && !hits(b, lines)) || null;
    +        if (!todayBox) { N = prepNotes(s, annotations, x, w, [...peaks, { x: cut, leader: cut, drawn: true, label: todayLabel }]); ({ padT, y } = scale(N)); }
    +      }
    +      const g = svg('g', {}, s);
    +      axes(g, el, { w, h, padL, padB, yt, y, labels, x, at: xAt, tick });
    +      notesUnder(g, el, N, { padT, h, padB });
    +      series.forEach((sr, k) => {
    +        const col = colourOf(sr, k);
    +        const pts = sr.values.map((v, i) => (v == null ? null : [x(i), y(Math.min(v, yt.at(-1)))]));
    +        // step: a balance that only changes on given days holds its value until the next one
    +        const d = pts.reduce((acc, p, i) => (p ? acc + (acc && pts[i - 1] ? (step ? `L${p[0].toFixed(1)} ${pts[i - 1][1].toFixed(1)}L` : 'L') : 'M') + p[0].toFixed(1) + ' ' + p[1].toFixed(1) : acc), '');
    +        if (fill && k === 0) { const first = pts.find(Boolean), last = [...pts].reverse().find(Boolean); svg('path', { d: `${d}L${last[0]} ${y(yt[0])}L${first[0]} ${y(yt[0])}Z`, fill: col, opacity: 0.12 }, g); }
    +        if (today == null) svg('path', { d, fill: 'none', stroke: col, 'stroke-width': 2, 'stroke-linejoin': 'round', 'stroke-linecap': 'round' }, g);
    +        else {
    +          // a forecast: the line after today is dashed, so a projection never reads as a fact
    +          const cut = x(today), id = 'c' + k + Math.random().toString(36).slice(2, 8);
    +          const defs = svg('defs', {}, g);
    +          const a = svg('clipPath', { id: id + 'a' }, defs); svg('rect', { x: 0, y: 0, width: cut, height: h }, a);
    +          const b = svg('clipPath', { id: id + 'b' }, defs); svg('rect', { x: cut, y: 0, width: w, height: h }, b);
    +          svg('path', { d, fill: 'none', stroke: col, 'stroke-width': 2, 'stroke-linejoin': 'round', 'clip-path': 'url(#' + id + 'a)' }, g);
    +          svg('path', { d, fill: 'none', stroke: col, 'stroke-width': 2, 'stroke-dasharray': '5 4', opacity: 0.8, 'clip-path': 'url(#' + id + 'b)' }, g);
    +          if (k === 0) { svg('line', { x1: cut, x2: cut, y1: padT, y2: h - padB, stroke: css(el, '--axis-ink', '#6b6b6b'), 'stroke-width': 1, opacity: 0.4 }, g); if (todayBox) text(g, todayLabel, { x: todayBox.x0, y: todayBox.base, 'font-size': 11, fill: css(el, '--axis-ink', '#6b6b6b') }); }
    +        }
    +        if (endLabel && k === 0) { const li = sr.values.map((v, i) => (v == null ? -1 : i)).filter((i) => i >= 0).at(-1); text(g, format(sr.values[li]), { x: x(li) + 6, y: y(Math.min(sr.values[li], yt.at(-1))) + 4, 'font-size': 12, 'font-weight': 600, fill: css(el, '--ink', '#111') }); }
    +      });
    +      references(g, el, reference, { y, padL, w, lines: linesAt(y).slice(0, series.length) });
    +      notesOver(g, el, N, { padT, h, padB });
    +      // hover: a rule, a dot per series and a bare tooltip
    +      const tip = tooltip(el), rule = svg('line', { y1: padT, y2: h - padB, stroke: css(el, '--axis-ink', '#6b6b6b'), 'stroke-width': 1, opacity: 0 }, g);
    +      const dots = series.map((sr, k) => svg('circle', { r: 3.5, fill: css(el, '--surface', '#fff'), stroke: colourOf(sr, k), 'stroke-width': 2, opacity: 0 }, g));
    +      const hit = svg('rect', { x: padL, y: padT, width: w - padL, height: h - padT - padB, fill: 'transparent' }, s);
    +      const move = (ev) => { const r = s.getBoundingClientRect(); const px = ((ev.clientX - r.left) / r.width) * w; const i = Math.max(0, Math.min(labels.length - 1, Math.round(((px - padL) / (w - padL - padR)) * (labels.length - 1)))); rule.setAttribute('x1', x(i)); rule.setAttribute('x2', x(i)); rule.setAttribute('opacity', 0.35); series.forEach((sr, k) => { const v = sr.values[i]; dots[k].setAttribute('cx', x(i)); dots[k].setAttribute('cy', v == null ? -99 : y(Math.min(v, yt.at(-1)))); dots[k].setAttribute('opacity', v == null ? 0 : 1); }); tip.innerHTML = `
    ${labels[i]}
    ` + series.map((sr) => `
    ${sr.values[i] == null ? '–' : format(sr.values[i])} ${series.length > 1 ? sr.name : ''}
    `).join(''); const left = Math.min((x(i) / w) * r.width + 12, r.width - tip.offsetWidth - 4); tip.style.left = `${Math.max(0, left)}px`; tip.style.top = '0px'; tip.style.opacity = 1; }; + hit.addEventListener('pointermove', move); hit.addEventListener('pointerleave', () => { tip.style.opacity = 0; rule.setAttribute('opacity', 0); dots.forEach((d) => d.setAttribute('opacity', 0)); }); + const last = series[0].values.filter((v) => v != null).at(-1); + s.setAttribute('aria-label', `${series.map((x) => x.name).join(', ')}, ${labels[0]} to ${labels.at(-1)}; latest ${last == null ? 'no data' : format(last)}`); + }; + draw(); watch(el, draw); settle(draw); + const lg = series.length > 1 ? legendEl(series.map((sr, k) => ({ label: sr.name, w: 16, draw: (sw) => svg('line', { x1: 0, x2: 16, y1: 6, y2: 6, stroke: colourOf(sr, k), 'stroke-width': 2, 'stroke-dasharray': sr.dash ? '4 3' : null }, sw) })), legend) : null; + return { legend: lg }; + } + function bars(el, { labels, values, format = fmt.int, tickFormat = null, height = 200, highlight = null, dim = [], colour, mutedColour, annotations, reference, xAt = null }) { + el._fmt = format; + const lit = (i) => highlight == null || (Array.isArray(highlight) ? highlight.includes(i) : highlight === i); + const draw = () => { + const { s, w, h } = frame(el, heightOf(height)); + const yt = ticks(0, Math.max(...values, ...[].concat(reference || []).map((r) => r.value)), 4), tick = tickFormat || format; + const padL = 12 + Math.max(...yt.map((v) => measure(s, tick(v), 12))), padB = 26; + const band = (w - padL) / values.length, bw = Math.max(2, band * 0.62); + const x = (i) => padL + band * i + band / 2; + const N = prepNotes(s, annotations, x, w), padT = LANE(N.rows); + const y = (v) => padT + (h - padT - padB) * (1 - v / yt.at(-1)); + const g = svg('g', {}, s); + axes(g, el, { w, h, padL, padB, yt, y, labels, x, band: true, at: xAt, tick }); + notesUnder(g, el, N, { padT, h, padB }); + for (const it of N.items) if (it.at != null && values[it.at] != null) it.end = y(values[it.at]) - 4; + const main = colour || css(el, '--chart-1', '#2f6fdf'), muted = mutedColour || css(el, '--chart-muted', '#c9c9c9'); + values.forEach((v, i) => { const r = svg('rect', { x: x(i) - bw / 2, y: y(v), width: bw, height: Math.max(0, y(0) - y(v)), fill: lit(i) ? main : muted, opacity: dim.includes(i) ? 0.45 : null, 'shape-rendering': 'crispEdges' }, g); titled(r, `${labels[i]}: ${format(v)}`, {}); }); + references(g, el, reference, { y, padL, w, boxes: values.map((v, i) => ({ x0: x(i) - bw / 2, x1: x(i) + bw / 2, y0: y(v), y1: y(0) })) }); + notesOver(g, el, N, { padT, h, padB }); + s.setAttribute('aria-label', `${labels.length} bars from ${labels[0]} to ${labels.at(-1)}; highest ${format(Math.max(...values))}`); + }; + draw(); watch(el, draw); settle(draw); + } + // Two directions on one scale: what went out above the zero line and what came in below it (sold and bought, + // income and spend). The axis says which is which, with signed ticks and a caption on each side of zero. + // mark: [indices] draws those periods in a second tone with their own legend entry (the nights the car charged). + function diverging(el, { labels, up, down, values, above = 'Above', below = 'Below', mark = [], markLabel = null, markSide = 'below', partial = null, format = fmt.int, tickFormat = null, height = 200, annotations, reference, xAt = null, legend = null }) { + if (values) { up = values.map((v) => Math.max(0, v || 0)); down = values.map((v) => Math.max(0, -(v || 0))); } + up = up || labels.map(() => 0); down = down || labels.map(() => 0); + const st = { above: { fill: css(el, '--chart-1', '#2f6fdf') }, below: { fill: css(el, '--chart-muted', '#c9c9c9') }, mark: { fill: css(el, '--chart-mark', css(el, '--ink', '#111')) } }; + const marked = (i, side) => mark.includes(i) && (markSide === 'both' || markSide === side); + const tick = (v) => (v > 0 ? '+' : v < 0 ? MINUS : '') + (tickFormat || format)(Math.abs(v)); + const draw = () => { + const { s, w, h } = frame(el, heightOf(height)); + const hiUp = Math.max(0, ...up), hiDown = Math.max(0, ...down); + const yt = ticks(-hiDown, hiUp || 1, 4); const stp = yt[1] - yt[0]; if (hiDown > 0 && yt[0] >= -hiDown) yt.unshift(+(yt[0] - stp).toFixed(10)); + const padL = 12 + Math.max(...yt.map((v) => measure(s, tick(v), 12))), padB = 26; + const band = (w - padL) / labels.length, bw = Math.max(2, band * 0.62); + const x = (i) => padL + band * i + band / 2; + // the caption for the upper side opens the label rows above the plot; the lower one sits under the plot, at left + const N = prepNotes(s, annotations, x, w, [{ fixed: padL, glyph: 'up', label: above }]), padT = LANE(N.rows); + const y = (v) => padT + (h - padT - padB) * (1 - (v - yt[0]) / (yt.at(-1) - yt[0])); + const g = svg('g', {}, s), ink = css(el, '--axis-ink', '#6b6b6b'); + const bwid = measure(s, below, 11) + 9; + axes(g, el, { w, h, padL, padB, yt, y, labels, x, band: true, at: xAt, tick, avoid: [padL, padL + bwid] }); + svg('path', { d: `M${padL} ${h - padB + 11}l3 6l3 -6z`, fill: ink }, g); text(g, below, { x: padL + 9, y: h - padB + 18, 'font-size': 11, fill: ink }); + notesUnder(g, el, N, { padT, h, padB }); + for (const it of N.items) if (it.at != null) it.end = y(up[it.at] || 0) - 4; + labels.forEach((lab, i) => { + const o = partial === i ? 0.5 : null; + if (up[i] > 0) { const r = paintRect(g, { ...(marked(i, 'above') ? st.mark : st.above), opacity: o }, x(i) - bw / 2, y(up[i]), bw, Math.max(0, y(0) - y(up[i]) - 1)); titled(r, `${lab}: ${above} ${format(up[i])}`, {}); } + if (down[i] > 0) { const r = paintRect(g, { ...(marked(i, 'below') ? st.mark : st.below), opacity: o }, x(i) - bw / 2, y(0) + 1, bw, Math.max(0, y(-down[i]) - y(0) - 1)); titled(r, `${lab}: ${below} ${format(down[i])}`, {}); } + }); + svg('line', { x1: padL, x2: w, y1: y(0), y2: y(0), stroke: ink, 'stroke-width': 1, opacity: 0.8, 'shape-rendering': 'crispEdges' }, g); + references(g, el, reference, { y, padL, w, boxes: labels.map((_, i) => ({ x0: x(i) - bw / 2, x1: x(i) + bw / 2, y0: y(up[i]), y1: y(-down[i]) })) }); + notesOver(g, el, N, { padT, h, padB }); + s.setAttribute('aria-label', `${above} above the line and ${below} below it, ${labels[0]} to ${labels.at(-1)}`); + }; + draw(); watch(el, draw); settle(draw); + const items = []; + if (up.some((v) => v > 0)) items.push({ label: above, draw: rectSwatch(st.above) }); + if (down.some((v) => v > 0)) items.push({ label: below, draw: rectSwatch(st.below) }); + if (mark.length && markLabel) items.push({ label: markLabel, draw: rectSwatch(st.mark) }); + return { get svg() { return el.querySelector(':scope > svg'); }, legend: legendEl(items, legend) }; + } + function ring(el, { value, label, sub, size = 132, stroke = 8, colour }) { + el.innerHTML = ''; + const r = (size - stroke) / 2, c = 2 * Math.PI * r, v = Math.max(0, Math.min(1, value)); + const wrap = document.createElement('div'); wrap.style.cssText = `position:relative;width:${size}px;height:${size}px`; + const s = svg('svg', { viewBox: `0 0 ${size} ${size}`, width: size, height: size, role: 'img', 'aria-label': `${label}${sub ? ' ' + sub : ''}` }, wrap); + svg('circle', { cx: size / 2, cy: size / 2, r, fill: 'none', stroke: css(el, '--grid', '#e8e8e8'), 'stroke-width': stroke }, s); + svg('circle', { cx: size / 2, cy: size / 2, r, fill: 'none', stroke: colour || css(el, '--chart-1', '#2f6fdf'), 'stroke-width': stroke, 'stroke-dasharray': `${c * v} ${c}`, transform: `rotate(-90 ${size / 2} ${size / 2})` }, s); + const t = document.createElement('div'); t.style.cssText = 'position:absolute;inset:0;display:grid;place-content:center;text-align:center;font-variant-numeric:tabular-nums'; + t.innerHTML = `
    ${label}
    ${sub ? `
    ${sub}
    ` : ''}`; + wrap.appendChild(t); el.appendChild(wrap); + } + // A ranked list. By default the row's fill is the bar (a one-figure list); thin: true puts a 2px grey bar under each + // label instead, ink for the top item, for a ranked list of money in a narrow card. + function barList(el, rows, { format = fmt.int, colour, thin = false } = {}) { + el.innerHTML = ''; + const max = Math.max(...rows.map((r) => r.value)) || 1; + const list = document.createElement('ol'); list.style.cssText = `list-style:none;margin:0;padding:0;display:grid;gap:${thin ? 10 : 2}px;font-variant-numeric:tabular-nums`; + const valueCol = Math.max(...rows.map((r) => String(format(r.value)).length)) + 1; + rows.forEach((r, k) => { + const li = document.createElement('li'); li.style.cssText = 'display:grid;grid-template-columns:minmax(0,1fr) ' + valueCol + 'ch;align-items:center;column-gap:12px'; + const a = document.createElement('span'); a.textContent = r.label; a.style.cssText = 'position:relative;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis'; + const b = document.createElement('span'); b.textContent = format(r.value); b.style.cssText = 'font-weight:500;text-align:right'; + if (thin) { + const bar = document.createElement('span'); bar.style.cssText = `grid-column:1 / -1;height:2px;margin-top:4px;width:${(r.value / max) * 100}%;background:${k === 0 ? colour || 'var(--ink,#111)' : 'var(--chart-muted,#c9c9c9)'}`; + li.append(a, b, bar); + } else { + const track = document.createElement('span'); track.style.cssText = 'position:relative;padding:10px 12px;border-radius:6px;isolation:isolate;min-width:0'; + const bar = document.createElement('span'); bar.style.cssText = `position:absolute;inset:0 auto 0 0;width:${(r.value / max) * 100}%;background:${colour || 'var(--bar-fill, color-mix(in srgb, var(--chart-1, #2f6fdf) 12%, transparent))'};border-radius:inherit;z-index:-1`; + track.append(bar, a); li.append(track, b); + } + list.appendChild(li); + }); + el.appendChild(list); + } + // Planned against spent: the track is the plan, the fill what is spent, a lighter segment what is + // already committed (bills to come), and an overrun past the track's end in the negative colour. + // One row per category: label and figures on one line, the 8px track under them. + function plan(el, rows, { format = fmt.money('EUR', 0), scale = 'row', note = (r) => r.spent > r.planned ? `${format(r.spent - r.planned)} over` : `${format(r.planned - r.spent - (r.committed || 0))} left` } = {}) { + el.innerHTML = ''; + const list = document.createElement('ul'); list.style.cssText = 'list-style:none;margin:0;padding:0;display:grid;gap:14px;font-variant-numeric:tabular-nums'; + const max = Math.max(...rows.map((r) => Math.max(r.planned, r.spent + (r.committed || 0)))); + for (const r of rows) { + const over = r.spent > r.planned; + const li = document.createElement('li'); + const top = document.createElement('div'); top.style.cssText = 'display:flex;justify-content:space-between;gap:12px;margin-bottom:6px'; + top.innerHTML = `${r.label}${format(r.spent)} of ${format(r.planned)} · ${note(r)}`; + // scale 'row': each track is full width and shows the share used (rows in a grid compare); 'plan': as long as its plan + const room = over ? 100 / (1 + Math.max(0.06, (r.spent - r.planned) / r.planned)) : 100; + const track = document.createElement('div'); track.style.cssText = 'position:relative;height:8px;border-radius:999px;background:var(--rule,#eceeef);overflow:visible;width:' + (scale === 'plan' ? (r.planned / max) * room : room) + '%'; + const pct = (v) => (v / r.planned) * 100; + const spent = Math.min(r.spent, r.planned); + track.innerHTML = `` + + (r.committed ? `` : '') + + (over ? `` : ''); + track.setAttribute('role', 'img'); track.setAttribute('aria-label', `${r.label}: ${format(r.spent)} of ${format(r.planned)}${r.committed ? `, ${format(r.committed)} committed` : ''}${over ? ', over plan' : ''}`); + li.append(top, track); list.appendChild(li); + } + el.appendChild(list); + } + // Share against a target: one row per part, the current share as a bar and a 1px tick at the target, + // so drift reads at a glance (never two stacked bars to compare). + function bullet(el, rows, { format = fmt.pct(1), max = Math.max(...rows.map((r) => Math.max(r.value, r.target))) * 1.15 } = {}) { + el.innerHTML = ''; + const list = document.createElement('ul'); list.style.cssText = 'list-style:none;margin:0;padding:0;display:grid;gap:12px;font-variant-numeric:tabular-nums'; + for (const r of rows) { + const drift = r.value - r.target; + const li = document.createElement('li'); li.style.cssText = 'display:grid;grid-template-columns:minmax(90px,30%) 1fr auto;align-items:center;gap:12px'; + li.innerHTML = `${r.label}${format(r.value)} ${drift >= 0 ? '+' : '−'}${format(Math.abs(drift))} vs ${format(r.target)}`; + li.setAttribute('aria-label', `${r.label}: ${format(r.value)}, target ${format(r.target)}`); + list.appendChild(li); + } + el.appendChild(list); + } + // shared by the row charts (timeline, matrix, time strip): a label column with an optional grey subline. + // A subline needs a 40-44px row pitch; one-line labels sit on 32px. + function rowLabel(g, s, el, r, { y0, pitch, lw }) { + const ink = css(el, '--ink', '#111'), muted = css(el, '--axis-ink', '#6b6b6b'); + if (r.sub) { text(g, fit(s, r.label, lw - 12, 14), { x: 0, y: y0 + pitch / 2 - 3, 'font-size': 14, fill: ink }); text(g, fit(s, r.sub, lw - 12, 12), { x: 0, y: y0 + pitch / 2 + 13, 'font-size': 12, fill: muted }); } + else text(g, fit(s, r.label, lw - 12, 14), { x: 0, y: y0 + pitch / 2 + 5, 'font-size': 14, fill: ink }); + } + const dayText = (d) => (typeof d === 'object' && d ? d.label : String(d)); + // day headers: the full label when every one fits its column, else the short form ('19'), else every k-th short + // label with today always shown and its neighbours left out, so no two headers ever touch + function dayHeads(g, s, el, days, { x0, cw, y, today }) { + const ink = css(el, '--ink', '#111'), muted = css(el, '--axis-ink', '#6b6b6b'); + const full = days.map(dayText), short = days.map((d) => (typeof d === 'object' && d ? d.short || dayText(d) : dayText(d).split(' ').at(-1))); + const wide = (labs) => Math.max(...labs.map((t) => measure(s, t, 12))) + 6; + const labs = wide(full) <= cw ? full : short, k = Math.max(1, Math.ceil(wide(labs) / cw)); + labs.forEach((t, i) => { + if (i !== today && (i % k || (today != null && k > 1 && Math.abs(i - today) < k))) return; + text(g, t, { x: x0 + i * cw + cw / 2, y, 'text-anchor': 'middle', 'font-size': 12, 'font-weight': i === today ? 600 : 400, fill: i === today ? ink : muted }); + }); + } + // The style of each kind of booking: a pale fill, a 1px diagonal hatch, a darker grey step, an outline, or the one + // chart hue for the screen's main data element. tone: 'negative' turns the edge and the label red (it needs a decision). + function kindStyle(el, k = {}) { + const ink = css(el, '--ink', '#111'), surface = css(el, '--surface', '#fff'), neg = css(el, '--negative', '#c4242a'), hue = k.colour || css(el, '--chart-1', '#2f6fdf'); + const tone = k.tone === 'negative' ? { stroke: neg, width: 1.5 } : {}; + const dash = k.dash ? { dash: '3 2' } : {}; + if (k.mark === 'hatch') return { fill: mix(el, ink, surface, 0.04), hatch: mix(el, ink, surface, 0.32), ...tone, ...dash }; + if (k.mark === 'step') return { fill: mix(el, ink, surface, 0.24), ...tone, ...dash }; + if (k.mark === 'outline') return { fill: surface, stroke: mix(el, ink, surface, 0.55), width: 1, ...tone, ...dash }; + if (k.mark === 'hue') return { fill: mix(el, hue, surface, 0.18), edge: hue, ...tone, ...dash }; + return { fill: mix(el, ink, surface, 0.12), ...tone, ...dash }; + } + // Who is away when: people (or rooms, vans) down the left, days across, a bar per booking told apart by its kind. + // rows: [{ label: 'Lena Hoffmann', sub: 'Product design · Berlin', bars: [{ from: 3, to: 7, kind: 'holiday', label, note }] }] + // and { group: 'Brand' } rows for a team subheader + // kinds: { holiday: { label: 'Holiday', mark: 'fill' | 'hatch' | 'step' | 'outline' | 'hue', code: 'H', tone, dash } } + // days: ['Mon 19', …] or [{ label: 'Mon 19', short: '19' }]; weekends: [indices]; today: index; + // holidays: [{ day: index, label: 'All Saints’ Day (Lisbon)' }]; onSelect(bar, row) makes the bars buttons. + // A label that does not fit its bar becomes the kind's code inside it, then goes after the bar's end (never into the + // days before it), and is always in the bar's tooltip. + function timeline(el, rows, kinds = {}, { days = [], weekends = [], today = null, holidays = [], labelWidth = null, rowHeight = null, barHeight = 22, onSelect = null, legend = null, extras = true } = {}) { + const draw = () => { + const pitch = rowHeight || (rows.some((r) => r.sub) ? 44 : 32), head = 30, groupH = 30; + const height = head + rows.reduce((a, r) => a + (r.group ? groupH : pitch), 0) + 2; + const { s, w, h } = frame(el, height); + const lw = labelWidth || Math.round(Math.min(220, Math.max(w < 480 ? 96 : 120, w * 0.2))); + const cw = (w - lw) / Math.max(1, days.length), col = (i) => lw + i * cw; + const ink = css(el, '--ink', '#111'), muted = css(el, '--axis-ink', '#6b6b6b'), rule = css(el, '--rule', '#f0f0f0'), raised = css(el, '--raised', '#f4f5f6'), hue = css(el, '--chart-1', '#2f6fdf'); + const g = svg('g', {}, s); + // weekends one tone step darker, faint day lines, the day header (today in ink) + for (const i of weekends) svg('rect', { x: col(i), y: head, width: cw, height: h - head, fill: raised }, g); + for (let i = 0; i <= days.length; i++) svg('line', { x1: col(i), x2: col(i), y1: head, y2: h, stroke: rule, 'stroke-width': 1, 'shape-rendering': 'crispEdges' }, g); + dayHeads(g, s, el, days, { x0: lw, cw, y: head - 10, today }); + for (const hd of holidays) { const c = svg('circle', { cx: col(hd.day) + cw / 2, cy: head - 3, r: 2, fill: muted }, g); titled(c, hd.label, {}); } + if (today != null) svg('line', { x1: col(today) + cw / 2, x2: col(today) + cw / 2, y1: head, y2: h, stroke: hue, 'stroke-width': 1, 'shape-rendering': 'crispEdges' }, g); + let y0 = head; + for (const r of rows) { + if (r.group) { svg('line', { x1: 0, x2: w, y1: y0 + 0.5, y2: y0 + 0.5, stroke: rule, 'stroke-width': 1 }, g); text(g, r.group, { x: 0, y: y0 + 20, 'font-size': 12, 'font-weight': 500, fill: muted }); y0 += groupH; continue; } + rowLabel(g, s, el, r, { y0, pitch, lw }); + const bs = (r.bars || []).filter((b) => b.to >= 0 && b.from < days.length).sort((a, b) => a.from - b.from); + bs.forEach((b, k) => { + const kind = kinds[b.kind] || {}, st = kindStyle(el, kind); + const x0 = col(Math.max(0, b.from)) + 2, x1 = col(Math.min(days.length - 1, b.to) + 1) - 2, by = y0 + (pitch - barHeight) / 2; + const grp = svg('g', onSelect ? { tabindex: 0, role: 'button', style: 'cursor:pointer' } : {}, g); + paintRect(grp, st, x0, by, x1 - x0, barHeight, 4); + const label = b.label ?? kind.label ?? '', code = b.code ?? kind.code, tw = measure(s, label, 12), labInk = kind.tone === 'negative' ? css(el, '--negative', '#c4242a') : ink; + const next = bs[k + 1] ? col(Math.max(0, bs[k + 1].from)) : w; + // over a hatch the label keeps a halo of the bar's own fill, so the lines never run through the words + const halo = st.hatch ? { stroke: st.fill, 'stroke-width': 4, 'stroke-linejoin': 'round', 'paint-order': 'stroke' } : {}; + if (label && tw + 16 <= x1 - x0) text(grp, label, { x: x0 + 8 + (st.edge ? 2 : 0), y: by + barHeight / 2 + 4, 'font-size': 12, fill: labInk, ...halo }); + else if (code && measure(s, code, 12) + 8 <= x1 - x0) text(grp, code, { x: (x0 + x1) / 2, y: by + barHeight / 2 + 4, 'text-anchor': 'middle', 'font-size': 12, fill: labInk, ...halo }); + else if (label && x1 + 6 + tw <= Math.min(next - 6, w)) text(grp, label, { x: x1 + 6, y: by + barHeight / 2 + 4, 'font-size': 12, fill: kind.tone === 'negative' ? labInk : muted }); + titled(grp, `${r.label}: ${label}${b.note ? ' \u00b7 ' + b.note : ''}`, {}); + if (onSelect) { grp.addEventListener('click', () => onSelect(b, r)); grp.addEventListener('keydown', (e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); onSelect(b, r); } }); } + }); + y0 += pitch; + } + s.setAttribute('aria-label', `${rows.filter((r) => !r.group).length} rows across ${days.length} days, ${dayText(days[0])} to ${dayText(days.at(-1))}`); + }; + draw(); watch(el, draw); settle(draw); + const used = new Set(rows.flatMap((r) => (r.bars || []).map((b) => b.kind))); + const items = Object.entries(kinds).filter(([id]) => used.has(id)).map(([, k]) => ({ label: k.label, w: 22, draw: (sw) => { const st = kindStyle(el, k); paintRect(sw, st, 0, 0, 22, 12, 3); } })); + if (extras && today != null) items.push({ label: 'Today', w: 8, draw: (sw) => svg('line', { x1: 4, x2: 4, y1: 0, y2: 12, stroke: css(el, '--chart-1', '#2f6fdf'), 'stroke-width': 1.5 }, sw) }); + return { get svg() { return el.querySelector(':scope > svg'); }, legend: legendEl(items, legend) }; + } + // Is there enough cover? A team-by-day grid of slack against the minimum (+2, +1, 0, −1). Cells with room to spare + // stay plain, and one hue ramps toward the negative colour as the slack runs out; the headcount is in the tooltip. + // rows: [{ label: 'Product design', sub: 'needs 7 of 10', values: [2, 1, 0, -1, null, …], titles: ['8 in', …] }] + // cols: ['Mon 19', …]; comfort: the slack that needs no attention (2); null is a day with no cover to count (a dash) + function matrix(el, rows, { cols = [], comfort = 2, today = null, format = fmt.signed(), labelWidth = null, rowHeight = null, levels = ['Room to spare', 'Tight', 'At the minimum', 'Short'], legend = null } = {}) { + const level = (v) => (v >= comfort ? 0 : v > 0 ? 1 : v === 0 ? 2 : 3); + const styles = () => { const neg = css(el, '--negative', '#c4242a'), surface = css(el, '--surface', '#fff'), ink = css(el, '--ink', '#111'); return [{ fill: surface, ink: css(el, '--axis-ink', '#6b6b6b'), stroke: css(el, '--grid', '#e5e5e5') }, { fill: mix(el, neg, surface, 0.1), ink }, { fill: mix(el, neg, surface, 0.26), ink }, { fill: neg, ink: surface }]; }; + const draw = () => { + const pitch = rowHeight || (rows.some((r) => r.sub) ? 44 : 32), head = 26; + const { s, w, h } = frame(el, head + rows.length * pitch); + const lw = labelWidth || Math.round(Math.min(220, Math.max(w < 480 ? 96 : 120, w * 0.22))); + const cw = (w - lw) / Math.max(1, cols.length), ST = styles(), muted = css(el, '--axis-ink', '#6b6b6b'), ink = css(el, '--ink', '#111'); + const g = svg('g', {}, s); + dayHeads(g, s, el, cols, { x0: lw, cw, y: head - 10, today }); + rows.forEach((r, k) => { + const y0 = head + k * pitch; rowLabel(g, s, el, r, { y0, pitch, lw }); + const ch = Math.min(pitch - 6, 28), cy = y0 + (pitch - ch) / 2; + r.values.forEach((v, i) => { + const cx = lw + i * cw + 1; + if (v == null) { svg('rect', { x: cx + cw / 2 - 4, y: cy + ch / 2 - 1, width: 6, height: 2, fill: muted }, g); return; } + const st = ST[level(v)], cell = paintRect(g, { fill: st.fill }, cx, cy, cw - 2, ch, 3); + text(g, format(v), { x: cx + (cw - 2) / 2, y: cy + ch / 2 + 4, 'text-anchor': 'middle', 'font-size': 12, 'font-weight': level(v) === 3 ? 600 : 400, fill: st.ink }); + titled(cell, `${r.label}, ${dayText(cols[i])}: ${r.titles?.[i] || format(v) + ' against the minimum'}`, {}); + }); + }); + s.setAttribute('aria-label', `Cover against the minimum for ${rows.length} rows across ${cols.length} days`); + }; + draw(); watch(el, draw); settle(draw); + const seen = new Set(rows.flatMap((r) => r.values.filter((v) => v != null).map(level))); + const ST = styles(); + const items = [0, 1, 2, 3].filter((l) => seen.has(l)).map((l) => ({ label: levels[l], w: 14, draw: rectSwatch(l === 0 ? { fill: ST[0].fill, stroke: ST[0].stroke } : { fill: ST[l].fill }, 14, 12, 3) })); + return { get svg() { return el.querySelector(':scope > svg'); }, legend: legendEl(items, legend) }; + } + // When, within the day: one row per item on a shared open–close axis. A 2px grey track, an ink dot at today's time and + // a hollow tick at the comparison day's, so "earlier than last Sunday" is drawn and not only written. + // rows: [{ label: 'White sourdough', sub: 'Headingley', at: '11:20', compare: '12:05', value: '11:20', note: '3 h 40 m before close' }] + // at or compare may be null (it did not sell out); step: minutes between axis labels (60). + function timeStrip(el, rows, { open = '08:00', close = '18:00', step = 60, todayLabel = 'Today', compareLabel = null, labelWidth = null, valueWidth = null, rowHeight = null, legend = null } = {}) { + const o = minutes(open), c = minutes(close); + const st = { today: { r: 4.5 }, compare: { w: 5, h: 12 } }; + const dot = (parent, cx, cy) => svg('circle', { cx, cy, r: st.today.r, fill: css(el, '--ink', '#111') }, parent); + const tick = (parent, cx, cy) => svg('rect', { x: cx - st.compare.w / 2, y: cy - st.compare.h / 2, width: st.compare.w, height: st.compare.h, rx: 2.5, fill: css(el, '--surface', '#fff'), stroke: css(el, '--axis-ink', '#6b6b6b'), 'stroke-width': 1.5 }, parent); + const draw = () => { + const narrow = (el.clientWidth || 600) < 560, axisH = 24; + const pitch = rowHeight || (narrow ? 62 : rows.some((r) => r.sub || r.note) ? 44 : 32); + const { s, w, h } = frame(el, rows.length * pitch + axisH); + const lw = narrow ? 0 : labelWidth || Math.round(Math.min(200, Math.max(110, w * 0.26))); + const vw = narrow ? 0 : valueWidth ?? Math.min(w * 0.32, Math.max(0, ...rows.map((r) => Math.max(r.value ? measure(s, r.value, 13, 500) : 0, r.note ? measure(s, r.note, 12) : 0))) + (rows.some((r) => r.value || r.note) ? 16 : 0)); + const x0 = narrow ? 18 : lw + 6, x1 = narrow ? w - 18 : w - vw - 6, tx = (m) => x0 + ((m - o) / Math.max(1, c - o)) * (x1 - x0); + const ink = css(el, '--ink', '#111'), muted = css(el, '--axis-ink', '#6b6b6b'), rule = css(el, '--rule', '#f0f0f0'); + const track = css(el, '--chart-track', mix(el, ink, css(el, '--surface', '#fff'), 0.16)); + const g = svg('g', {}, s), plotH = rows.length * pitch; + // the axis: one step from the opening, the labels thinned by the same rule as the charts + const marks = []; for (let m = Math.ceil(o / step) * step; m <= c; m += step) marks.push(m); + const picks = xPicks(marks.map(fmt.clock), x1 - x0); + for (const i of picks) { const xx = tx(marks[i]); if (!narrow) svg('line', { x1: xx, x2: xx, y1: 0, y2: plotH, stroke: rule, 'stroke-width': 1, 'shape-rendering': 'crispEdges' }, g); const lab = fmt.clock(marks[i]), tw = measure(s, lab, 12); text(g, lab, { x: Math.max(x0 - 2, Math.min(x1 + 6 - tw, xx - tw / 2)), y: plotH + 17, 'font-size': 12, fill: muted }); } + rows.forEach((r, k) => { + const y0 = k * pitch, cy = narrow ? y0 + pitch - 12 : y0 + pitch / 2; + if (narrow) { + const vwid = r.value ? measure(s, r.value, 13, 500) + 12 : 0; + text(g, fit(s, r.label, w - vwid, 14), { x: 0, y: y0 + 16, 'font-size': 14, fill: ink }); + if (r.value) text(g, r.value, { x: w, y: y0 + 16, 'text-anchor': 'end', 'font-size': 13, 'font-weight': 500, fill: ink }); + const second = [r.sub, r.note].filter(Boolean).join(' \u00b7 '); + if (second) text(g, fit(s, second, w, 12), { x: 0, y: y0 + 33, 'font-size': 12, fill: muted }); + } else rowLabel(g, s, el, r, { y0, pitch, lw }); + svg('line', { x1: x0, x2: x1, y1: cy, y2: cy, stroke: track, 'stroke-width': 2, 'stroke-linecap': 'round' }, g); + const cm = minutes(r.compare), am = minutes(r.at); + if (cm != null) titled(tick(g, tx(cm), cy), `${compareLabel || 'Comparison'}: ${fmt.clock(cm)}`, {}); + if (am != null) titled(dot(g, tx(am), cy), `${todayLabel}: ${fmt.clock(am)}`, {}); + if (narrow) return; + if (r.note) { if (r.value) text(g, r.value, { x: w, y: cy - 3, 'text-anchor': 'end', 'font-size': 13, 'font-weight': 500, fill: ink }); text(g, fit(s, r.note, vw - 8, 12), { x: w, y: r.value ? cy + 13 : cy + 4, 'text-anchor': 'end', 'font-size': 12, fill: muted }); } + else if (r.value) text(g, r.value, { x: w, y: cy + 5, 'text-anchor': 'end', 'font-size': 13, 'font-weight': 500, fill: ink }); + }); + s.setAttribute('aria-label', `${rows.length} rows between ${fmt.clock(o)} and ${fmt.clock(c)}`); + }; + draw(); watch(el, draw); settle(draw); + const items = []; + if (rows.some((r) => minutes(r.at) != null)) items.push({ label: todayLabel, w: 10, draw: (sw) => dot(sw, 5, 6) }); + if (compareLabel && rows.some((r) => minutes(r.compare) != null)) items.push({ label: compareLabel, w: 8, draw: (sw) => tick(sw, 4, 6) }); + return { get svg() { return el.querySelector(':scope > svg'); }, legend: legendEl(items, legend) }; + } + function watch(el, draw) { if (!('ResizeObserver' in window)) return; let w = el.clientWidth; new ResizeObserver(() => { if (Math.abs(el.clientWidth - w) > 4) { w = el.clientWidth; draw(); } }).observe(el); } + window.Charts = { line, bars, diverging, ring, barList, plan, bullet, timeline, matrix, timeStrip, ticks, fmt }; +})(); diff --git a/.agents/skills/design-taste-frontend/assets/scenes/stage.css b/.agents/skills/design-taste-frontend/assets/scenes/stage.css new file mode 100644 index 0000000..190763d --- /dev/null +++ b/.agents/skills/design-taste-frontend/assets/scenes/stage.css @@ -0,0 +1,28 @@ +/* tasteskill / scenes / stage.css — the held stage under every scroll scene (references/scenes.md). + Without .is-live (no script, a failed CDN, reduced motion, a phone set to 'rest') a scene is an ordinary + section showing its finished composition. With it, the section is (hold + 1) screens tall and the + stage sticks to the viewport for the hold. */ + +.scene { position: relative; } +.scene > .scene-stage { position: relative; } + +html.js .scene.is-live { height: calc((var(--hold, 2) + 1) * 100svh); } +html.js .scene.is-live > .scene-stage { + position: sticky; + top: 0; + height: 100svh; + overflow: clip; /* clip, not hidden: hidden would make the stage a scroll container */ + contain: layout paint; +} + +/* Everything a scene moves is composited; nothing it moves is laid out again. */ +.scene.is-live [data-move] { will-change: transform, opacity; } + +/* Lenis */ +html.is-smooth { scroll-behavior: auto; } +html.is-smooth body { overscroll-behavior: none; } + +@media (prefers-reduced-motion: reduce) { + html.js .scene.is-live { height: auto; } + html.js .scene.is-live > .scene-stage { position: relative; height: auto; } +} diff --git a/.agents/skills/design-taste-frontend/assets/scenes/stage.js b/.agents/skills/design-taste-frontend/assets/scenes/stage.js new file mode 100644 index 0000000..fd7ba54 --- /dev/null +++ b/.agents/skills/design-taste-frontend/assets/scenes/stage.js @@ -0,0 +1,133 @@ +// tasteskill / scenes / stage.js — the shared stage every scroll scene runs on (references/scenes.md). +// +// A scene is a tall section whose stage sticks to the viewport while the page scrolls past it; a GSAP +// timeline is scrubbed by that scroll. The page always scrolls natively (no wheel capture), the +// scrollbar always tells the truth, and the finished composition is what reduced motion, no script and +// a failed CDN all show. +// +// Load at the end of , in this order (versions pinned): +// +// +// (only if a scene splits text) +// (optional smoothing) +// +// +// and keep the one-line in . +// +// Stage.smooth() weighted wheel scrolling (Lenis), off for touch and reduced motion +// Stage.scene(root, { hold, scrub, build, phone, rest }) +// Stage.split(el, 'lines' | 'words' | 'chars') masked split text, SplitText when loaded +// Stage.ready() resolves when fonts and the scenes' pictures are ready +// Stage.init() starts every
    on the page +// +// A page: Stage.smooth(); Stage.init(); +(() => { + const html = document.documentElement; + const mq = (q) => window.matchMedia(q).matches; + const live = !!(window.gsap && window.ScrollTrigger); + if (live) gsap.registerPlugin(ScrollTrigger); + if (live && window.SplitText) gsap.registerPlugin(SplitText); + + const Stage = { + live, + get reduced() { return mq('(prefers-reduced-motion: reduce)'); }, + get phone() { return mq('(max-width: 767px)'); }, + get touch() { return mq('(pointer: coarse)'); }, + lenis: null, + scenes: [], + }; + + // Weighted wheel scrolling. lerp 0.1-0.14 feels heavy without lagging behind the hand; touch keeps the + // phone's own scrolling, and reduced motion keeps the browser's. + Stage.smooth = ({ lerp = 0.12 } = {}) => { + if (!live || !window.Lenis || Stage.reduced || Stage.touch || Stage.lenis) return Stage.lenis; + const lenis = new Lenis({ lerp, smoothWheel: true, anchors: true, autoRaf: false }); + lenis.on('scroll', ScrollTrigger.update); + gsap.ticker.add((t) => lenis.raf(t * 1000)); + gsap.ticker.lagSmoothing(0); + html.classList.add('is-smooth'); + Stage.lenis = lenis; + return lenis; + }; + + // One scroll scene. + // root
    holding one
    + // hold screens of scroll the stage is held for (1-4); the section is (hold + 1) screens tall + // scrub true = locked to the scrollbar; a number = seconds of catch-up (0.3-0.8 reads as weight) + // build(tl, ctx) add the tweens to tl; the timeline runs 0 → 1 over the hold. ctx: { root, stage, phone, q } + // phone 'same' (default) | 'rest' (the phone gets the finished composition) | { hold, build } + // rest(ctx) optional: anything extra the finished composition needs (most scenes need nothing) + // Sets --p (0-1) and data-beat on root, so CSS and captions can follow the scene too. + Stage.scene = (root, opts = {}) => { + if (!root) return null; + const { hold = 2, scrub = true, build, phone = 'same', rest, beats = 0 } = opts; + const stage = root.querySelector(':scope > .scene-stage') || root.firstElementChild; + const q = (sel) => [...root.querySelectorAll(sel)]; + const toRest = (ctx) => { root.classList.remove('is-live'); root.classList.add('is-rest'); root.style.removeProperty('--hold'); if (rest) rest(ctx); }; + if (!live) { toRest({ root, stage, phone: Stage.phone, q }); return null; } + const mm = gsap.matchMedia(); + mm.add({ motion: '(prefers-reduced-motion: no-preference)', phone: '(max-width: 767px)' }, (c) => { + const isPhone = c.conditions.phone; + const ctx = { root, stage, phone: isPhone, q }; + const plan = isPhone ? (phone === 'rest' ? null : phone === 'same' ? { hold, build } : { hold: phone.hold ?? hold, build: phone.build ?? build }) : { hold, build }; + if (!c.conditions.motion || !plan || !plan.build) { toRest(ctx); return () => root.classList.remove('is-rest'); } + root.classList.remove('is-rest'); + root.classList.add('is-live'); + root.style.setProperty('--hold', plan.hold); + const tl = gsap.timeline({ + defaults: { ease: 'none' }, + scrollTrigger: { + trigger: root, start: 'top top', end: 'bottom bottom', scrub, invalidateOnRefresh: true, + onUpdate: (self) => { + root.style.setProperty('--p', self.progress.toFixed(4)); + if (beats) root.dataset.beat = String(Math.min(beats - 1, Math.floor(self.progress * beats))); + }, + }, + }); + plan.build(tl, ctx); + // pad the timeline to exactly 1 so positions in build() read as fractions of the hold + if (tl.duration() < 1) tl.to({}, { duration: 1 - tl.duration() }, tl.duration()); + return () => { root.classList.remove('is-live'); root.style.removeProperty('--hold'); root.style.removeProperty('--p'); }; + }); + Stage.scenes.push(mm); + return mm; + }; + + // Masked split text. Lines rise out of their own mask; words and characters are for short headings. + Stage.split = (el, type = 'lines') => { + if (!el) return []; + if (window.SplitText && live) { + const s = SplitText.create(el, { type: type === 'lines' ? 'lines' : type === 'words' ? 'lines,words' : 'lines,words,chars', mask: 'lines', aria: 'auto', autoSplit: false }); + return type === 'lines' ? s.lines : type === 'words' ? s.words : s.chars; + } + // fallback: words in inline-block spans, the full text kept for screen readers + if (!el.dataset.split) { + el.setAttribute('aria-label', el.textContent.trim()); + el.innerHTML = el.textContent.trim().split(/\s+/).map((w) => ``).join(' '); + el.dataset.split = 'words'; + } + return [...el.children]; + }; + + // Fonts and the scenes' pictures decide every height a trigger measures; refresh once they are in. + Stage.ready = () => { + const imgs = [...document.querySelectorAll('.scene img')].map((i) => (i.complete ? null : i.decode().catch(() => {}))).filter(Boolean); + return Promise.all([document.fonts ? document.fonts.ready : null, ...imgs]).then(() => { if (live) ScrollTrigger.refresh(); }); + }; + + // Every
    on the page, started by + // the scene file of that id (assets/scenes/.js registers Scenes['']). + Stage.init = () => { + for (const el of document.querySelectorAll('.scene[data-scene]')) { + if (el.__scene) continue; + const make = window.Scenes[el.dataset.scene]; + if (!make) { console.warn('No scene file loaded for data-scene="' + el.dataset.scene + '"'); continue; } + let o = {}; try { o = JSON.parse(el.dataset.options || '{}'); } catch {} + el.__scene = make(el, o) || true; + } + }; + + window.Scenes = window.Scenes || {}; + window.Stage = Stage; + if (live) { window.addEventListener('load', () => Stage.ready()); } +})(); diff --git a/.agents/skills/design-taste-frontend/evals/evals.json b/.agents/skills/design-taste-frontend/evals/evals.json new file mode 100644 index 0000000..f6d5980 --- /dev/null +++ b/.agents/skills/design-taste-frontend/evals/evals.json @@ -0,0 +1,76 @@ +{ + "skill_name": "design-taste-frontend", + "how_to_run": "For each eval, give the prompt to a fresh agent that has this skill, and to a second fresh agent without it (the baseline). Render both with scripts/inspect.mjs and have a judge who does not know which is which score the screenshots with references/critique.md. Record inspector FAIL counts for both. Evals 7 to 10 are app screens: inspect them with --app (a sheet dealt by draw.mjs --app switches it on by itself) and judge them with the app-screen passes in references/critique.md.", + "evals": [ + { + "id": 1, + "name": "saas-invoicing", + "prompt": "Build a landing page for Ledgerly, an invoicing tool for freelance designers. What it does: you write an invoice in under a minute, the client pays by card or bank transfer, and it sends polite reminders by itself when an invoice is overdue. It costs 9 euros a month flat, with a 14-day free trial and no card needed. Include pricing and a short FAQ. There is no existing brand and no screenshots; the product name is all we have. Plain static HTML, CSS and JS in one folder.", + "expected_output": "A static landing page with a clear idea drawn from invoicing itself, headlines of two lines or fewer at 1440/768/390, no eyebrow labels, no monospace, no index numbering, no thin rules, no gradients or shadows, a non-default palette and type system, a pricing section that is not three cards, and no invented customers or statistics.", + "files": [] + }, + { + "id": 2, + "name": "restaurant-osteria", + "prompt": "Make a one-page website for Osteria Nove, a 38-seat Italian restaurant in Alfama, Lisbon. Handmade pasta, a short natural wine list, dinner only, Tuesday to Saturday from 19:00. Address: Rua dos Remédios 9. Reservations by phone (+351 21 000 0009) or email (mesa@osterianove.pt). The page needs the menu (invent a believable short one: antipasti, pasta, dolci, with prices in euros), hours, address and how to book. We have no photographs yet. Static HTML/CSS/JS.", + "expected_output": "A one-page restaurant site with a specific idea (for example the page as the menu itself), the menu set typographically without divider lines, practical information easy to find, bundled photographs used only as atmosphere and listed for replacement, and all house rules met.", + "files": [] + }, + { + "id": 3, + "name": "portfolio-designer", + "prompt": "I'm Mara Lindqvist, a product designer in Stockholm with eight years in fintech and health apps. I need a portfolio homepage: six selected projects (make up plausible names, clients, years and one-line descriptions), a short about paragraph, and a way to contact me (mara@lindqvist.studio). I don't have project images ready, so design it so it still looks finished without them, or use placeholders that I can swap. Static HTML/CSS/JS.", + "expected_output": "A portfolio page that looks finished without project imagery (a typographic index, a name-led hero, or atmosphere photographs clearly marked for replacement), with a designed footer, a phone layout that is its own composition, and all house rules met.", + "files": [] + }, + { + "id": 4, + "name": "product-ceramics", + "prompt": "Launch page for Kiln, a ceramic pour-over coffee set (dripper, carafe and two cups) that is hand-glazed in small batches in Porto. It costs 84 euros and ships across the EU within a week. The glaze is mixed by hand so no two sets are identical. We have not shot product photos yet, so there are no images of the set. One page, with a way to buy (a button is enough). Static HTML/CSS/JS.", + "expected_output": "A product page that does not fake product photography: it either commits to type and colour, uses one shape from the object as a motif, or uses atmosphere photographs honestly, with the price and purchase action clear, and all house rules met.", + "files": [] + }, + { + "id": 5, + "name": "guesthouse-ericeira", + "prompt": "Website for Casa Mirante, a six-room guesthouse on the cliffs above Ericeira, Portugal. Rooms from 140 euros a night with breakfast included; ten minutes' walk to the surf at Ribeira d'Ilhas; open March to November. One page: what it is, the rooms, what's nearby, and how to book (email reservas@casamirante.pt). We have no photographs yet. Static HTML/CSS/JS.", + "expected_output": "A calm, photograph-led or type-led one-pager whose hero is one clear thing, with rooms and booking information easy to find, bundled coast photographs used as atmosphere and listed for replacement, and all house rules met.", + "files": [] + }, + { + "id": 6, + "name": "conference-format", + "prompt": "Landing page for Format, a two-day design conference in Rotterdam on 14 and 15 May 2027. Twelve speakers (invent plausible names and talk titles), 400 seats, tickets at 390 euros, venue: Maassilo. Sections: what it is, the line-up, the schedule in brief, tickets, and a short FAQ. No brand exists yet beyond the name. Static HTML/CSS/JS.", + "expected_output": "An event page with a strong typographic or colour idea, the line-up and schedule set as structured text without divider lines or index numbers, a ticket section that is not three cards, and all house rules met.", + "files": [] + }, + { + "id": 7, + "name": "app-budget-overview", + "prompt": "Build the main screen of Ledgerly, a budgeting app for couples who share money: the October overview with their accounts and balances, the spending plan (planned against spent by category), bills due in the next 14 days and recent transactions. Two people use it, Mia and Tom. Desktop first, and it must work on a phone. Static HTML/CSS/JS.", + "expected_output": "An app screen, not a landing page: a quiet shell (sidebar or rail), a clear screen title, numbers that add up and are right-aligned with tabular figures, one chart per question, colour spent on data and status only, no icons in tinted squares, no gradients or glows, no placeholder names, and a phone layout where the navigation folds away. inspect.mjs --app passes.", + "files": [] + }, + { + "id": 8, + "name": "app-deploy-dashboard", + "prompt": "Dashboard for Relay, an edge deployment platform for web teams: one project's overview with recent deployments (status, branch, commit message, author, duration, region), requests and p95 latency over the last 24 hours, the error rate, and usage against the plan's limits. Dark theme. Static HTML/CSS/JS.", + "expected_output": "A dense, readable dark screen on a neutral (not navy) ground: one surface step or one hairline between regions, a deployments table with honest statuses and aligned numbers, charts with few gridlines and one series each, IDs in monospace at most, no rainbow series, no glow, and app inspector checks passing.", + "files": [] + }, + { + "id": 9, + "name": "app-settings-billing", + "prompt": "Workspace settings for Proofline, a design-review tool: general settings, members and roles (a members table with an invite form), billing (current plan, seats, invoices) and notifications. Static HTML/CSS/JS, desktop and phone.", + "expected_output": "A settings screen with a label column beside its fields (or stacked fields on a phone), labels above inputs, one control height, quiet borders, honest disabled states, a members table with right-aligned figures and one status pill per row, and no decorative icons or gradients.", + "files": [] + }, + { + "id": 10, + "name": "app-support-queue", + "prompt": "The queue screen of Hearth, a support inbox for a six-person SaaS team: the list of conversations with assignee, priority, channel and time to the SLA, the open conversation with the customer's details beside it, plus filters and saved views. Static HTML/CSS/JS.", + "expected_output": "A three-region work screen (navigation, list, conversation) that stays readable at 1440 and folds to one region at a time on a phone, with status shown once per row, times in words, no tinted icon squares or emoji, and app inspector checks passing.", + "files": [] + } + ] +} diff --git a/.agents/skills/design-taste-frontend/library/app.json b/.agents/skills/design-taste-frontend/library/app.json new file mode 100644 index 0000000..c06fb45 --- /dev/null +++ b/.agents/skills/design-taste-frontend/library/app.json @@ -0,0 +1,1327 @@ +{ + "version": 1, + "about": "App-screen library for tasteskill: styles (directions), shells and screen patterns, distilled from the study of 23 desktop product screens (17 light, 6 dark, 17 products) chosen by the owner. Every number is a measurement from the study or a median over it, except where a note says a value was moved for contrast or for the house palette bans. Reference products are not named; the screenshots stay private.", + "styles": [ + { + "id": "achromatic-ledger", + "name": "Achromatic ledger", + "theme": "light", + "basis": "4 screens: a seller home, a per-agent insights page, a generated report, a settings page with usage numbers", + "suits": [ + "finance", + "commerce", + "devtools", + "support", + "report", + "workspace", + "builder" + ], + "idea": "The chrome holds no colour at all; money and counts are set in ink, the one chart hue marks the screen's main data element, and the only other hue is a small signal where a figure changed.", + "colourBudget": "under 1% coloured pixels; the chrome is ink, the one chart hue goes on the main data element, and the only other hue is a small change signal", + "tokens": { + "ground": "#f8f8f8", + "surface": "#ffffff", + "raised": "#eeeeee", + "border": "#e6e6e6", + "rule": "#f0f0f0", + "control": "#d4d4d4", + "text": "#0a0a0a", + "muted": "#6b6b6b", + "accent": "#141414", + "positive": "#2e7d32", + "negative": "#c4242a", + "warning": "#92400e", + "chart": [ + "#141414", + "#8a8a8a", + "#1d5fbf" + ], + "pills": { + "positive": [ + "#dcfae5", + "#04250e" + ], + "negative": [ + "#ffedea", + "#831c1e" + ], + "warning": [ + "#fffbeb", + "#92400e" + ], + "neutral": [ + "#eeeeee", + "#3d3d3d" + ] + }, + "radius": { + "card": 8, + "control": 6 + }, + "font": { + "family": "Geist", + "second": "Geist Mono, for IDs and keys only", + "fallback": "Inter, system-ui, sans-serif", + "sizes": { + "title": 24, + "section": 16, + "kpi": 30, + "body": 14, + "small": 12 + }, + "weights": [ + 400, + 500, + 700 + ], + "note": "700 is for money figures only; every other number is 400-500." + }, + "density": "sparse", + "rowHeight": 44, + "sidebarWidth": 256, + "gap": 12, + "pad": 24, + "controlHeight": 36 + }, + "shell": "open-plane", + "shellAlternatives": [ + "icon-rail", + "no-sidebar" + ], + "signature": "No brand colour anywhere in the chrome: the one primary action is near-black (a grey pill, #e5e5e5, is the secondary), the main data element (today's series, the booked bars, the current period) takes the one chart hue, #1d5fbf, and everything else is drawn in ink with the comparison or the part after the cursor in grey, zero balances are set in grey, and the only hue on the screen is a small triangle or a short coloured number where a figure changed.", + "identity": [ + "A ground from the product's world in place of #f8f8f8, one level off white and low in chroma: a stone (#f4f3f1) for a bakery or a shop, a sage (#f2f5f2) for a garden or a greenhouse, a blue-grey (#f2f4f7) for a ledger or a meter. Cards stay white; a warm tint stays under the cream check (saturation under about 15%).", + "The one chart hue (#1d5fbf, or the brand's own hue at 3:1 or more on white) on the screen's main data element: today's line, the booked bars, the current period's column, the margin that breaks. The chrome stays ink and the hue stays under 1% of the screen.", + "Every figure in Geist Mono, as the style's decision, so money and counts read as a ledger's columns while the text stays Geist. Lint and the inspector flag mono; give the reason in the report." + ], + "avoid": [ + "a brand-coloured primary button", + "tinted cards or tinted KPI tiles", + "a coloured chart where one series in ink says it", + "bold on anything but money", + "a chart with no y-scale (the study's one example of this look hid magnitude behind hover and was flagged)", + "a grey pill as the only button for the screen's main job: in testing an Approve repeated in grey on every row left the screen without a primary" + ], + "notes": "The studied screens of this kind used 11-12px card radii, which §9.4 counts among the rare middle values; the library sets the tight pair (8 and 6) so the style lands on the bimodal rule. After testing, the chart hue moved from an unused third series colour onto the main data element: a screen whose only hue was a delta read as a kit." + }, + { + "id": "framed-sheet", + "name": "Framed sheet", + "theme": "light", + "basis": "6 screens: a developer platform overview, an analytics overview, an events analytics tab, a list detail, a reports dashboard, a flow builder", + "suits": [ + "analytics", + "devtools", + "builder", + "smb-admin", + "support", + "commerce", + "report" + ], + "idea": "The app chrome is one tinted L-shaped frame; the work sits on a white sheet with a hairline edge and soft corners, so depth comes from a single tone step and no shadow.", + "colourBudget": "under 3%; the brand shrinks to the logo and a 2px tab underline, the data carries the chroma", + "tokens": { + "ground": "#f9fbfc", + "surface": "#ffffff", + "raised": "#f4f6f8", + "active": "#ebedee", + "border": "#e8eaec", + "rule": "#f0f1f2", + "control": "#cdced1", + "text": "#131416", + "muted": "#5d5f60", + "accent": "#1b6c80", + "positive": "#1e7b4f", + "negative": "#c4242a", + "warning": "#92400e", + "chart": [ + "#1b6c80", + "#2f70bb", + "#a86f0c" + ], + "pills": { + "positive": [ + "#dcfae5", + "#04250e" + ], + "negative": [ + "#ffedea", + "#831c1e" + ], + "warning": [ + "#fffbeb", + "#92400e" + ], + "neutral": [ + "#ebedee", + "#353736" + ] + }, + "radius": { + "card": 8, + "control": 6, + "sheet": 16 + }, + "sheetInset": 8, + "font": { + "family": "IBM Plex Sans", + "second": "IBM Plex Mono, for IDs and keys only", + "fallback": "Inter, system-ui, sans-serif", + "sizes": { + "title": 22, + "section": 16, + "kpi": 28, + "body": 14, + "small": 12 + }, + "weights": [ + 400, + 500, + 600 + ], + "note": "KPI values at 400; the semibold goes on the label and the active tab." + }, + "density": "medium", + "rowHeight": 48, + "sidebarWidth": 228, + "gap": 24, + "pad": 24, + "controlHeight": 32 + }, + "shell": "framed-sheet", + "shellAlternatives": [], + "signature": "One tinted frame holds the sidebar and the 48px top bar with no rule between them; the page is a white sheet inset 8px from the window's right and bottom edges, with a 1px edge, 16px corners and no shadow. The active tab is a 2px underline in ink or the accent; everything else in the chrome is grey.", + "identity": [ + "The frame tinted from the product's colour in place of #f9fbfc: one low-chroma step of its hue (a green-grey for a climate or farm tool, a blue-grey for an observability tool, a stone for a print shop). The sheet stays white.", + "The brand's own hue from the brief as --chart-1 in place of the dealt teal, on the main series and the one selected state, at 3:1 or more on white, never violet or indigo.", + "IBM Plex Mono for IDs, keys and the figures in tables (one job): its figures have their own drawing, and a developer reads them as the product's." + ], + "avoid": [ + "a border between the sidebar and the top bar", + "a shadow under the sheet", + "cards whose border is heavier than the sheet's (#cdcfcf on cards read as heavy in the study)", + "a fourth nesting level: frame, sheet and card are enough", + "different gutters for the KPI row and the chart row (20 against 24 was flagged)" + ], + "notes": "The study's second data hue in this style was an orange (#e88e46) that falls inside the house terracotta range; the third chart colour here is an amber moved out of that range and darkened to 3:1 on white." + }, + { + "id": "accent-ladder", + "name": "Accent ladder", + "theme": "light", + "basis": "3 screens: a newsletter home, a network analytics overview, a cap-table company home", + "suits": [ + "creator", + "smb-admin", + "community", + "analytics" + ], + "idea": "One brand hue at full strength only on small marks, and its pale tints doing all the area work: the active nav row, a plan card, badges and progress tracks.", + "colourBudget": "3-10%, nearly all of it as pale tints of the one hue", + "tokens": { + "ground": "#f9fafb", + "surface": "#ffffff", + "raised": "#f3f4f6", + "border": "#e5e7eb", + "rule": "#f2f2f2", + "control": "#d1d5db", + "text": "#111827", + "muted": "#5f6672", + "accent": "#b8336a", + "accentSoft": "#fdf2f7", + "accentTrack": "#f8dbe8", + "accentInk": "#6b1d3e", + "positive": "#247b50", + "negative": "#c4242a", + "warning": "#92400e", + "chart": [ + "#b8336a", + "#6b7280", + "#d4618f" + ], + "pills": { + "positive": [ + "#dcfce7", + "#14532d" + ], + "negative": [ + "#ffedea", + "#831c1e" + ], + "warning": [ + "#fffbeb", + "#92400e" + ], + "neutral": [ + "#f3f4f6", + "#374151" + ], + "accent": [ + "#fdf2f7", + "#6b1d3e" + ] + }, + "radius": { + "card": 8, + "control": 6 + }, + "font": { + "family": "DM Sans", + "second": null, + "fallback": "Inter, system-ui, sans-serif", + "sizes": { + "title": 32, + "section": 18, + "kpi": 24, + "body": 14, + "small": 12 + }, + "weights": [ + 400, + 500, + 600, + 700 + ], + "note": "700 for the page title only." + }, + "density": "sparse", + "rowHeight": 45, + "sidebarWidth": 230, + "gap": 24, + "pad": 24, + "controlHeight": 32 + }, + "shell": "open-plane", + "shellAlternatives": [ + "ruled-t-frame" + ], + "signature": "The full hue goes only on small marks: the one filled-button style, the data series and the active nav icon. Its 50-200 tints carry every area: the active nav row (tint fill with the dark ink of the hue), the plan or trial card, badges and progress tracks. The primary action may instead be near-black, as on the study's newsletter home.", + "identity": [ + "The ladder built from the brand's own hue (its logo, the brief's object) in place of the dealt raspberry: the full hue on small marks, its pale tints on areas, never violet or indigo.", + "The product's objects in the lead block: the newsletter's latest issue as its cover, the shop's products as 40px thumbnails, the course's lessons with their own art.", + "A ground one level toward the hue's palest tint (#fbf7f8 for the raspberry) in place of #f9fafb, so the page and the tints read as one family." + ], + "avoid": [ + "the full hue on large areas", + "a second accent family (four families on one screen was flagged in the study)", + "a gradient on the trial chip or upgrade button", + "a left accent bar on the active nav row on top of the tint (seen once in 23 screens)", + "violet or indigo" + ], + "notes": "All three studied screens of this kind used violet, purple or pink as the one hue. The move does not depend on the hue, so the house's violet and indigo ban holds and the library deals a raspberry instead." + }, + { + "id": "editorial-greeting", + "name": "Editorial greeting", + "theme": "light", + "basis": "2 screens: a team workspace home and a personal insights home", + "suits": [ + "workspace", + "creator" + ], + "idea": "A personal or team home that opens with a typeset greeting in a centred column; every number below it is set at regular weight on tonal panels.", + "colourBudget": "under 2% for the accent; tonal panels carry the structure", + "tokens": { + "ground": "#ffffff", + "surface": "#f9f9f9", + "raised": "#ffffff", + "border": "#eaeaea", + "rule": "#f3f3f3", + "control": "#d9d9d6", + "text": "#1f201d", + "muted": "#636361", + "accent": "#1b6e66", + "positive": "#2e7d32", + "negative": "#b42318", + "warning": "#92400e", + "chart": [ + "#1f201d", + "#1b6e66", + "#8c8c88" + ], + "pills": { + "positive": [ + "#dcfae5", + "#04250e" + ], + "negative": [ + "#fdecea", + "#7a1d14" + ], + "warning": [ + "#fffbeb", + "#92400e" + ], + "neutral": [ + "#f3f3f3", + "#3d3d3a" + ] + }, + "radius": { + "card": 22, + "control": 999 + }, + "font": { + "family": "Instrument Sans", + "second": "Instrument Serif, for the greeting only", + "fallback": "Inter, system-ui, sans-serif", + "sizes": { + "title": 48, + "section": 14, + "kpi": 32, + "body": 14, + "small": 12 + }, + "weights": [ + 400, + 500, + 600 + ], + "note": "The 48px title is the serif greeting; set in the sans it is 24/400. Every figure is 400." + }, + "density": "sparse", + "rowHeight": 63, + "sidebarWidth": 224, + "gap": 16, + "pad": 20, + "controlHeight": 38 + }, + "shell": "open-plane", + "shellAlternatives": [ + "framed-sheet" + ], + "signature": "The greeting is the h1, in a centred 1100px column on a real 12-column grid (77px columns, 16px gutters), with spans that change by row but share column lines (3/3/3/3, then 9/3, then 6/6, so every internal edge meets one above it). Every figure below is set at regular weight on tonal panels, one layer each: a panel one step off white holds its title and its content directly; a white inner card is used once, for the main chart.", + "identity": [ + "The greeting names this team or household and today's one fact, set from the data (\"Morning, Okoro house. The car is ready by 06:10.\"), never \"Welcome back\".", + "Each person's stable hue as a pale tint on their avatar and their own lane or column (a couple and their joint account as three lanes): identity, not data, so it stays out of the chart legends.", + "A surface from the product's world in place of #f9f9f9, one level toward its material (a sage for a garden, a stone for a kitchen, a blue-grey for a studio), with the page white kept." + ], + "avoid": [ + "an emoji in the greeting", + "a tracked uppercase date above the greeting (put the date after it or in the grey line below)", + "a 624-864px column on a desktop screen (both were flagged as wasted width)", + "a tray around every card (a grey panel with a white card 6px inside it, on every block, read as a bento template in testing)", + "red as the accent: in testing red marked a record week of upgrades and read as an alarm; red is for the failing fact only" + ], + "notes": "One studied screen set its greeting in a serif at 48/700 and its counts in a mono; the other set the greeting at 24/400 in the sans. The red is the second screen's chart red moved two degrees of hue out of the house terracotta range. After testing, the studied red accent was replaced by a deep teal: red on good news read as an alarm." + }, + { + "id": "pastel-consumer", + "name": "Pastel consumer", + "theme": "light", + "basis": "2 screens: a wallet home and a personal finance home", + "suits": [ + "wallet", + "finance" + ], + "idea": "Categories are coded by pale tints whose ink is the dark of the same hue, all under one large radius, and each headline sum sits inside the card that explains it.", + "colourBudget": "5-8%, as pale tiles and data marks", + "tokens": { + "ground": "#f3f5f7", + "surface": "#ffffff", + "raised": "#f2f8fd", + "border": "#e6e6e6", + "rule": "#f4f4f4", + "control": "#d6d9dd", + "text": "#1b1d1f", + "muted": "#5c6064", + "accent": "#1d5fd6", + "accentSoft": "#dcf1ff", + "accentInk": "#0a3a80", + "positive": "#2f7a45", + "negative": "#c41c29", + "warning": "#92400e", + "chart": [ + "#1d5fd6", + "#b45309", + "#2a8798" + ], + "pills": { + "positive": [ + "#dcfae5", + "#04250e" + ], + "negative": [ + "#ffedea", + "#831c1e" + ], + "warning": [ + "#fffbeb", + "#92400e" + ], + "neutral": [ + "#eef1f4", + "#3a3d40" + ], + "accent": [ + "#dcf1ff", + "#0a3a80" + ] + }, + "radius": { + "card": 20, + "control": 10 + }, + "font": { + "family": "Manrope", + "second": null, + "fallback": "Inter, system-ui, sans-serif", + "sizes": { + "title": 28, + "section": 20, + "kpi": 32, + "body": 16, + "small": 14 + }, + "weights": [ + 400, + 500, + 600 + ], + "note": "Money at 24-32px; card titles regular; semibold for net worth, bill amounts and actions." + }, + "density": "medium", + "rowHeight": 72, + "sidebarWidth": 240, + "gap": 24, + "pad": 24, + "controlHeight": 40 + }, + "shell": "open-plane", + "shellAlternatives": [ + "icon-rail" + ], + "signature": "Pale category tiles with the dark of their own hue as ink (#dcf1ff with #0a3a80), one large radius (20px on cards, stepping down to 10, 8 and 5 inside), and quiet money polarity: income green with a plus sign, spending in ink, no red on ordinary outgoings. Tints go on small tiles, avatars and chips; a panel that holds a list stays white. When the product has people (two partners, a family), each gets one hue, at least 60 degrees from the next.", + "identity": [ + "The tile hues from the account's own colours (the card's colour, each pot's colour in the app) in place of the dealt cobalt, each tile pale with the dark of its own hue as ink.", + "The money's own objects: the card art at its real ratio, merchant marks at 24px in the rows, the goal's picture on its pot.", + "Manrope's figures carry the balance: 30-36px at 600 with tabular figures and the pence in a smaller grey, so the number itself is the face." + ], + "avoid": [ + "a gradient balance card", + "two data palettes on one page (flagged in the study)", + "red on every outgoing amount", + "a 624px phone-width column on a desktop screen (flagged as a stretched phone screen)", + "a KPI strip on top: the sums belong in their cards", + "whole panels tinted per person or category beside white cards (two surface languages on one screen)" + ], + "notes": "The two studied screens used a pure #0000ff and an indigo #4723f5 as their brand colour, and pastels such as #7cbecf that fall under 3:1 on white. The library uses a cobalt that reads as blue rather than indigo, and data colours darkened to at least 3:1 on the card." + }, + { + "id": "true-black-flat", + "name": "True-black flat", + "theme": "dark", + "basis": "5 screens: an events back office, an event analytics tab, a community overview, an artist studio home, an artist insights page", + "suits": [ + "community", + "creator", + "markets" + ], + "idea": "Night mode on true black: sidebar, top bar and page share one ground, elevation is a lightness step alone, and colour is confined to data marks.", + "colourBudget": "at or under 3%; the accent never touches buttons, tabs or nav", + "tokens": { + "ground": "#000000", + "surface": "#111111", + "raised": "#2a2a2a", + "border": "#1a1a1a", + "rule": "#161616", + "control": "#444444", + "text": "#ffffff", + "muted": "#b4b4b4", + "faint": "#949494", + "accent": "#c6f24e", + "positive": "#c6f24e", + "negative": "#e5484d", + "warning": "#e5a93b", + "chart": [ + "#c6f24e", + "#e6e6e6", + "#6b6b6b" + ], + "pills": { + "positive": [ + "#222a10", + "#c6f24e" + ], + "negative": [ + "#2c1a20", + "#e5566f" + ], + "warning": [ + "#2b2414", + "#e5a93b" + ], + "neutral": [ + "#222222", + "#ffffff" + ] + }, + "radius": { + "card": 20, + "control": 999 + }, + "font": { + "family": "Inter", + "second": null, + "fallback": "system-ui, sans-serif", + "sizes": { + "title": 20, + "section": 16, + "kpi": 24, + "body": 14, + "small": 12 + }, + "weights": [ + 400, + 500, + 600 + ], + "note": "Nothing above 600; inactive nav labels #bbb, active #fff." + }, + "density": "medium", + "rowHeight": 80, + "sidebarWidth": 210, + "gap": 14, + "pad": 22, + "controlHeight": 36 + }, + "shell": "ruled-t-frame", + "shellAlternatives": [ + "no-sidebar" + ], + "signature": "Elevation by lightness alone (#000 ground, #111 card, #2a2a2a nested panel) with no borders or shadows on cards; the active nav item is marked only by its label going from #bbb to #fff; the primary control is made primary by inversion, a white 36px pill with black text.", + "identity": [ + "The one data hue from the product's world in place of the dealt lime: a solar amber (#f2b33d) for an energy home, a sky blue (#4cb3f0) for water or weather, a lime only for sport. It is still the only hue on data and never touches buttons, tabs or nav. A green or yellow-green hue is also --positive; an amber that sits beside --warning leaves the warning to its pill pair.", + "A ground with the product's temperature: the studied #000 for media and events, a warm near-black (#0e0d0c) for a home, a cool one (#0c0d0f) for a monitor, with cards one lightness step above it (#181716, #15171a). Never navy or slate.", + "A signature element from the product's world as the lead: the energy home's power flow (sun, house, battery and grid with their live kW), an event's doors against capacity, an artist's release with its cover." + ], + "avoid": [ + "a navy or slate dark theme", + "glow, neon borders or shadows", + "a hue per chart (five hues across four charts was flagged)", + "the accent on buttons, tabs or nav", + "a 64px top bar left empty across most of its width (flagged twice)" + ], + "notes": "The studied screens of this kind used a violet-magenta (#dd6cff) and an orange (#ff5500) as their one data hue. The library deals a lime, which keeps the move and stays clear of the violet ban; because the lime is a yellow-green, it is also the positive colour (a second, mint green beside it read as two greens). The greys are #b4b4b4 for secondary text and #949494 for meta, 32 levels apart rather than the 20 of the measured #aaa and #969696, which read as one grey; #949494 still holds 4.5:1 on the #2a2a2a nested panel." + }, + { + "id": "data-terminal", + "name": "Data terminal", + "theme": "dark", + "basis": "1 screen: a stock research view. Keep it narrow.", + "suits": [ + "markets", + "devtools" + ], + "idea": "A research or monitoring screen read in long sessions: cards darker than the ground, tabular digits that stack, signs instead of colour, and every selection marked by the same 1px accent line.", + "colourBudget": "under 3%; the accent is never more than a 1px line", + "tokens": { + "ground": "#171719", + "surface": "#131217", + "raised": "#212023", + "border": "#222224", + "rule": "#1b1a1f", + "control": "#3a3a3e", + "text": "#ffffff", + "muted": "#8a8c92", + "accent": "#4a8ad6", + "positive": "#44a282", + "negative": "#e5566f", + "warning": "#d9a441", + "chart": [ + "#f2f2f3", + "#e5566f", + "#4a8ad6" + ], + "pills": { + "positive": [ + "#1b2828", + "#5fc39c" + ], + "negative": [ + "#2c1a20", + "#e5566f" + ], + "warning": [ + "#2a2416", + "#d9a441" + ], + "neutral": [ + "#212023", + "#bdbdc0" + ] + }, + "shadow": "0 12px 28px rgba(0,0,0,.2)", + "radius": { + "card": 6, + "control": 999 + }, + "font": { + "family": "Public Sans", + "second": null, + "fallback": "Inter, system-ui, sans-serif", + "sizes": { + "title": 26, + "section": 20, + "kpi": 20, + "body": 13, + "small": 12 + }, + "weights": [ + 400, + 500, + 600, + 700 + ], + "note": "Section titles 20/400 in the muted grey; card titles 16/600; tabular figures everywhere." + }, + "density": "dense", + "rowHeight": 42, + "sidebarWidth": 50, + "gap": 24, + "pad": 32, + "controlHeight": 34 + }, + "shell": "icon-rail", + "shellAlternatives": [], + "signature": "Every selection (tab, toggle, range, nav item) is a 1px accent line exactly as wide as its label, placed on the nearest existing edge; numbers stay white or grey and carry their sign in the text ('+$24,000,000').", + "identity": [ + "Every figure in a monospace as the style's decision (IBM Plex Mono or JetBrains Mono for each price, count and time, digits that stack), with the text in Public Sans. Lint and the inspector flag mono; give the reason in the report.", + "The one accent line from the product's world in place of the dealt blue (the exchange's or the team's hue): still the only selection mark, never violet or indigo.", + "A signature of the market or the system as the lead: an order book's depth as two mirrored bar lists, an incident as a minute-by-minute strip, a region map with the list beside it." + ], + "avoid": [ + "filled pill tabs or a coloured segmented control", + "a chart with no scale and no dates (the studied screen had none and was flagged)", + "tertiary text under 4.5:1 (#4c4c4f read at about 2:1 in the study)", + "lighter cards with borders and a glow", + "green and red on every number; the one column whose job is \"what moved today\" and a negative headline figure may carry the polarity colours" + ], + "notes": "The studied screen's muted grey #82848a and red #d4405d were lifted to #8a8c92 and #e5566f so text passes 4.5:1 on the card. Its card list rows sit on a 28px pitch and its table rows on 42px." + } + ], + "shells": [ + { + "id": "open-plane", + "name": "Open plane", + "basis": "5 of 23 screens", + "suits": [ + "finance", + "wallet", + "workspace", + "creator", + "analytics" + ], + "numbers": { + "sidebarWidth": "230-256 (230, 240, 256 in the study; 280 and 292 with a built-in icon rail)", + "separation": "none, or one 1px hairline; the sidebar sits on the page ground or within 1-2% of it", + "navPitch": 34, + "navRowHeight": 32, + "navIcon": "16px outline, about 1.5px stroke", + "navLabel": "14px, 400, grey or ink", + "activeItem": "neutral grey pill, radius 6-12, inset 8-12px from the sidebar edges (#e9e9e9-#ededed)", + "topBar": "none", + "canvas": "fluid with a 24-64px gutter, or a centred 1100px column" + }, + "blueprint": "The labelled sidebar sits on the page ground with nothing or one hairline between it and the canvas; there is no top bar, and the page header and cards sit straight on the ground about 32-36px from the top. Workspace or account switcher at the top of the sidebar, primary nav on a 34px pitch, groups under 12-13px sentence-case grey labels with 22-56px of air above, utilities and the user row pushed to the bottom. Cards are white on the off-white ground (or the sidebar is white with a 1px border on a #f9fafb canvas). The canvas is fluid with one gutter value, or a centred column for personal homes.", + "phone": "The sidebar folds into a 48px top bar holding the screen's name, a menu button that opens a full-screen sheet with the nav and the switcher, and at most one action. Content takes the full width with 16px margins." + }, + { + "id": "framed-sheet", + "name": "Tinted frame, white sheet", + "basis": "8 of 23 screens, in three variants", + "suits": [ + "analytics", + "devtools", + "builder", + "smb-admin", + "support" + ], + "numbers": { + "chrome": "#f6f6f6-#f9fbfc (a warm #f7f6f2 once)", + "sheetInset": "8px from the window's right and bottom edges (12 and 16 once each)", + "sheetRadius": "10-16, median 16", + "sheetEdge": "1px #eaeaea-#ededed, no shadow", + "sidebarWidth": "220-263 (228 on two screens)", + "topBar": "48px on the chrome ground with no rule; search 548x32 centred on the window with a shortcut hint", + "contentPadding": 24, + "floatingVariant": "both panels inset 12px with a 12px gutter, radius 10" + }, + "blueprint": "Sidebar and top bar share one tinted ground with no rule between them, forming an L; the page lives on a white sheet. Variant one: the sheet butts against the sidebar and the top bar and is inset 8px from the right and bottom edges, 16px radius, 1px edge. Variant two: a flush L-frame with no inset, the frame marked by one rule. Variant three: sidebar and content are two floating panels inset 12px from every edge with a 12px gutter. The top bar, when present, is 48px and holds a centred search, the account button and a help or AI icon. Inside the sheet the content has 24px padding and starts with the breadcrumb or title row.", + "phone": "The frame disappears: the sheet becomes the screen, with a 48px top bar (menu button, title, one action) on the chrome tint. The search moves into the menu sheet or behind an icon." + }, + { + "id": "ruled-t-frame", + "name": "Ruled T-frame", + "basis": "4 of 23 screens (3 dark, 1 light)", + "suits": [ + "community", + "creator", + "smb-admin" + ], + "numbers": { + "sidebarWidth": "210-240", + "topBar": "64px with a 1px bottom rule", + "rules": "1px; #1a1a1a on #000, #f2f2f2 on white", + "navPitch": "34 (dark) or 40 (light)", + "switcher": "at the top bar's right end, behind a full-height 1px divider", + "contentGutter": "29px from the sidebar rule and the window edge" + }, + "blueprint": "A 210-240px sidebar and a 64px top bar share one ground, divided only by 1px rules. The workspace or community switcher sits at the right end of the top bar behind a full-height divider; the sidebar holds the wordmark and the nav on a 34px pitch with sentence-case group labels. On dark, the active item is its label going from #bbb to #fff. The top bar must carry something real (search, the back link and object name, the switcher): two studied screens left about 1070px of it blank and were flagged.", + "phone": "The top bar stays at 48-56px with the switcher reduced to its mark; the sidebar becomes a full-screen menu sheet or a bottom bar of four or five destinations." + }, + { + "id": "icon-rail", + "name": "Icon rail", + "basis": "3 of 23 screens", + "suits": [ + "markets", + "devtools", + "finance", + "wallet" + ], + "numbers": { + "railWidth": "50-60, median 55", + "icon": "15-18px outline", + "pitch": "34-49", + "active": "icon colour alone, or a full-bleed 50px band at a 2% tint, or a 1px accent bar on the rail's border", + "groups": "short 20px hairlines, no labels", + "utilities": "pushed to the bottom after a gap of about 200px" + }, + "blueprint": "An unlabelled rail of 50-60px carries the brand mark at the top and 15-18px outline icons on a 34-49px pitch; groups are split by 20px hairlines, utilities sit at the bottom. The rail sits on the page ground with a 1px edge, or is white with a faint 4px shadow on a grey ground. It saves about 180px of width against a labelled sidebar, so it suits products with few destinations and screens that need the width. Icons need tooltips and an accessible name.", + "phone": "The rail becomes a bottom bar with the same four or five icons, each with a short label under it." + }, + { + "id": "no-sidebar", + "name": "No sidebar", + "basis": "3 of 23 screens", + "suits": [ + "report", + "creator", + "community" + ], + "numbers": { + "topBar": "46-48px on the page ground, no border", + "column": "centred, 1088-1208px", + "gutters": "152-212px at a 1512px window", + "logo": "on the column's left edge", + "links": "14-15px semibold grey" + }, + "blueprint": "A 46-48px top bar on the page ground over a centred 1088-1208px column; the logo sits exactly on the column's left edge and the bar's right cluster ends near its right edge, so header and content share one column. Three to five text links, a 36px search, the account. Use it for generated reports, viewers and products with few destinations; with a sticky bar on the same ground, give it a 1px rule when content scrolls under it (the studied bar without one sliced content off).", + "phone": "The bar keeps the logo, a search icon and a menu button; the links move into the menu sheet. The column becomes the full width with 16px margins." + } + ], + "patterns": [ + { + "id": "kpi-strip-chart-rail", + "name": "KPI strip, main chart and a side rail", + "screen": "overview", + "kinds": [ + "creator", + "smb-admin", + "community", + "analytics" + ], + "basis": "a newsletter home; a community overview", + "blueprint": "Title row: a 24px noun or the product's name at 600-700, an optional 14-16px grey line under it, and the one primary action on the right, bottom-aligned with that line. 16-24px below, the scope row: section tabs and the date range in one row of 32-36px controls, or a 48px segmented track with the range select inside its right end. Then a grid of 1fr and a fixed 384px rail with a 24px gap. Main column: one KPI container split by 1px dividers into 3-5 equal cells (14px grey label, 24px value at 400-600, a 12px caption naming the baseline and window), then the main chart card, which is the largest thing on the screen, then the next card, all 16px apart. Rail: 16px headings outside their cards, 8px above each and 16px after the previous card; a recent-items list of 3-5 rows on a 45px pitch with 1px rules, closed by a 30px outlined 'View all' button instead of pagination. The rail starts level with the first card, not with the title.", + "phone": "The rail moves below the main column; the KPI container becomes a 2-column grid; tabs scroll inside their own row." + }, + { + "id": "kpi-tabs-chart", + "name": "KPIs as the chart's tabs", + "screen": "overview", + "kinds": [ + "finance", + "commerce" + ], + "basis": "a seller home", + "blueprint": "One card per subject, 8-16px apart: the main chart card runs full width, and any card holding a table of five columns or fewer, or a short list, pairs with its neighbour in two columns, the page header indented by the card padding so the title, the card titles, the numbers and the plot share one left edge. Balances that do not change during the day go first, in one container split by 1px dividers into equal columns; a zero balance is grey and its caption becomes the next step. In the main card, 2-4 KPIs sit in a row and act as the chart's series tabs: the selected one carries a 2px rule and an ink label, the others keep a grey label and their value in ink at a lighter weight (a grey value reads as disabled); when the tabs are the per-entity breakdown the brief asks for (takings by shop), nothing is greyed and the rule alone marks the selection. Choosing one swaps the series. Under them, one line chart as wide as the card's content (about 1136x220 in the study): 3-4 solid 1px gridlines, 4-6 round y ticks at 12px, a 2-3px line in ink with straight segments and no fill, an 8px hover dot with a 1px dashed guide and the line after the cursor in pale grey. Close with a 2-3 row comparison table on a 36px pitch, value and change columns right-aligned under a 14px grey header such as 'vs prior Monday'.", + "phone": "KPI tabs become a 2-up grid above the chart, with the selected cell marked by a fill (never an underline floating inside the grid) or a row of tabs that scrolls sideways; the chart is full width, 160-200px tall, with 4 x labels; the comparison table keeps its two right-aligned columns." + }, + { + "id": "chart-pairs", + "name": "Per-period and running-total pairs", + "screen": "analytics", + "kinds": [ + "community", + "smb-admin", + "analytics" + ], + "basis": "a network analytics overview", + "blueprint": "Title at 24-32px with one sentence under it saying what the filters do, then one filter row of 36-38px controls (one filled or near-black, the rest borderless or text, a reset link last) and 16-24px to the KPIs. KPI row: 3 equal cards in the content column (3 x 372 + 2 x 17 = 1152 in the study) or one divided container; a 16px label over the value with the change written as a phrase on the value's baseline ('+8 in the last 90 days'), grey when it is zero. Then one row per metric: the per-period column chart on the left and its cumulative line on the right, at equal width (2 x 568 + 16 = 1152) and with the same x ticks; square bars, a 2px straight line, integer ticks from zero, no legend because each chart has one series. One gap value horizontally and vertically.", + "phone": "Pairs stack, the cumulative chart directly under its per-period chart; KPI cards become a single column of label-value rows." + }, + { + "id": "insights-share-tables", + "name": "Insights with share tables", + "screen": "analytics", + "kinds": [ + "analytics", + "devtools", + "builder" + ], + "basis": "a per-agent insights page", + "blueprint": "No cards: sections are carried by whitespace and a 16/500 heading with one 14px grey sentence under it saying what the section shows. A row of up to 6 KPIs on a fixed pitch (12px grey label over a 30px tabular value, no boxes, no dividers), then one full-width time chart (about 218px plot, 5 hairline gridlines, 11-12px grey ticks, a dot legend under the title, a 'Compare to previous period' text button on the right). Then a 2 x 2 grid of small tables with a 24px gutter whose rows align across the two columns. Each table: a header of 12px grey labels with no fill and no rule, 44px rows with 2px gaps whose rounded fill (#f5f7f9, radius 8) is the data bar, its width the row's share divided by the largest share; Share in 12px grey and Count in 14px ink, both right-aligned. An empty table keeps its header and shows one dashed 1px box about 38px tall with one sentence ('No Slack channel usage in this range.').", + "phone": "KPIs become a 2 x 3 grid; the chart is full width; the share tables stack in one column and keep their row bars." + }, + { + "id": "table-filter-bar", + "name": "Table with tabs and a filter bar", + "screen": "list", + "kinds": [ + "community", + "devtools", + "commerce", + "support", + "smb-admin" + ], + "basis": "an events back office, a tracks studio, a sessions overview", + "blueprint": "Title row: an 18-24px title on the left, at most an outlined secondary and the one primary (36px) on the right. Underline tabs for the list's states on a full-width 1px rule with a 2px indicator as wide as the label; 22-32px below, the toolbar: a search of about 252-316 x 32-36 on the left, the count ('7 events') and the sort on the right. The table sits on the panel or page ground with no card around it: a header of 12-13px grey sentence-case labels with no fill and no rule, rows on a 48-56px pitch for one line or 72-92px with a thumbnail (media height plus 24-32px), 1px rules 3-7% darker than the ground or no rules at all, the identity column given the most width, numbers right-aligned in tabular figures with the unit muted ('5 /10'), one status mark per row and one kebab at the far right. Drop a column that is empty in every row (a blank co-host column left a 300px dead band). On an overview, cap the rows and link to the full list; on the full list, state the total and load more at the end.", + "phone": "Rows become two-line items: identity and the key number on line 1, the secondary fields in 13px grey on line 2, the kebab at the right. Tabs scroll in their own row; the search becomes a full-width field." + }, + { + "id": "count-cards-filter", + "name": "Count cards that filter", + "screen": "list", + "kinds": [ + "community", + "commerce", + "support" + ], + "basis": "an events back office", + "blueprint": "Above a list, 3-5 equal count cards (61px tall, 12px padding, a 13px grey label over a 16/600 value, 8px gap) are the type filter: the selected card gets a 1.5px accent border and a pale accent fill, and the list below shows that type only. Zero counts print as '0' in the same style; no deltas, no icons. This is one place where a row of identical small cards is right: the cards are peers and each one does work.", + "phone": "The count cards become a horizontally scrolling row of chips with the count inside each, or a select above the list." + }, + { + "id": "settings-two-column", + "name": "Settings in two columns", + "screen": "settings", + "kinds": [ + "devtools", + "smb-admin", + "support", + "workspace", + "commerce", + "analytics", + "finance", + "wallet", + "creator", + "community", + "builder", + "markets", + "report" + ], + "basis": "one settings page; stacking from a narrow rail card. The basis is thin.", + "blueprint": "A centred column of about 1152px. Each section is one row: a label column of about 450px (16/500 title, 14px grey description; the title's cap top 6-8px below the panel top, level with the panel's first line) beside a panel of about 700px with a #fafafa fill, 16px radius, 16px padding, no border and no shadow. Sections are split by a full-width 1px rule with 32px above and below. Inside a panel: field labels 14/500 above 40px white inputs (1px #e8e8e8, radius 10), 8px from label to field, 16px between fields, 24px from the description to the first label, 16px to the Save button; switch rows with a 14/500 title, a 20px status badge 8px after it, a 14px grey description and a 28x16 toggle 16px from the right edge, centred on the title line. A plan-gated feature shows a 48px tinted strip with a 32px button directly above its panel, and the panel stays readable. When a panel runs much taller than its label, put the section's help or a summary of the current values in the label column rather than 250px of nothing.", + "phone": "Each section stacks: title and description, then the panel at full width. Inside, label, 8-10px, field, 16-26px to the next pair; toggles stay on the right of their title." + }, + { + "id": "settings-with-usage", + "name": "Settings with usage on top", + "screen": "settings", + "kinds": [ + "devtools", + "smb-admin", + "support" + ], + "basis": "one settings page", + "blueprint": "Use this only when usage is the question of the view (a plan, billing or quota view), and show only numbers no section below repeats, at a size below the h1. When a settings screen also reports usage, put 3-4 usage numbers in one row on top (a 14px grey label, a 30px regular value, a 12px change pinned to the card bottom with its window in words, a grey dash where there is no comparison) and link out to the analytics screen ('View more') instead of drawing a chart. Below, the two-column settings rows. One dark primary per screen. Keep upsell to one surface: the studied settings page carried three nags (a top banner, a setup button and a gated strip) and was flagged for it.", + "phone": "The usage row becomes a 2-column grid of label-value pairs; settings rows stack." + }, + { + "id": "wallet-balance-actions-assets", + "name": "Balance, actions and assets", + "screen": "wallet", + "kinds": [ + "wallet", + "finance" + ], + "basis": "a wallet home", + "blueprint": "One column whose every element snaps to its two edges. A balance card (1px border, 16px radius, about 134px tall) holding one 32px figure and one line under it in which only the change is coloured ('-$0.09 in the last 30 days'); the title says what the figure is, so it needs no label. 32px below, 4 equal action tiles in a pale tint with dark same-hue icon and 12-14px label (4 x 144 + 3 x 16 = 624 in the study; scale the column and keep the arithmetic). 32-40px below, text tabs for the asset kinds on a 1px rule with a 2px ink indicator as wide as the word, a network or account select on the right of the same row. Then the asset table: 72px rows (48px round icon plus 24px), no dividers, two-line cells pairing a 16px value with a 14px grey unit amount, numeric columns right-aligned to shared edges, change as a small solid triangle and a coloured percentage, zero change grey, a missing share a grey em dash. On a desktop do not leave the column at phone width: the study's 624px column was flagged as a stretched phone screen; widen it to 864-1100 or give it a second column.", + "phone": "This pattern is phone-first: the same column at full width with 16px margins, the 4 tiles in one row, the table as two-line rows with the value right-aligned." + }, + { + "id": "finance-home-pinned-rail", + "name": "Finance home with a pinned accounts column", + "screen": "overview", + "kinds": [ + "finance", + "wallet" + ], + "basis": "a personal finance home", + "blueprint": "No page header and no KPI strip: cards start 36px from the top and each headline sum sits in the card that explains it. On the left, a 306px accounts card pinned at the viewport height minus the 36px margins opens with net worth (16/600 label left, value right) and holds the account tree with no dividers: groups 16px ink, categories 14px ink, leaves 14px grey indented 8px, values right-aligned, a 30px pitch and about 45px between groups; an empty group is a bordered box with an '+ Add account' link instead of $0.00. On the right, a 2-column grid with 24px gaps of cards that answer this month's questions, each with its own period caption: the plan (spanning both columns; a ring with an empty hole, a dot legend, the available figure beside it with a per-day line), recent spending as 61px two-line rows (payee over category, amount over date, right-aligned) and upcoming bills. Income is green with a plus sign; spending stays in ink.", + "phone": "Net worth becomes the first card; the account tree collapses to its groups with totals; the month cards stack." + }, + { + "id": "builder-canvas", + "name": "Builder canvas", + "screen": "builder", + "kinds": [ + "builder" + ], + "basis": "a flow builder in analytics mode", + "blueprint": "No global navigation: a 44px top bar on the window ground with no rule (an exit arrow, the object's name at 16/600 with a status pill, and on the right 16px icon buttons on a 40px pitch, a secondary and a near-black primary, split by 1px dividers). Below, two panels on the ground with 8px outer margins and a 12px gap, both with a 1px border, 16px radius and no shadow: a 232px palette (16px padding, groups under 14px labels, items on a 40px pitch with a small type tile, a label and a drag grip) and the canvas, a flat well one step darker than the ground (#f4f6f8 on #f9fbfc) with no dot grid. Nodes share one width (338px in the study), 12px radius, a 1px hairline, padding 16 on top and 12 at the sides, a type tile and a 16/600 title, and their metrics in a well as key-value rows on a 32px pitch with right-aligned tabular or mono values ('0% (0)'). Nodes stack on one spine 64px apart with a 38px round insert button centred in each gap; connectors are 1px orthogonal lines with 6px rounded elbows. Overlays (date range, zoom, minimap) are small white controls pinned 16px inside the canvas corners. Canvas content is one size larger than the chrome (16 against 14). Node-type tiles may be tinted, one pastel per type, the same in the palette and on the canvas: pass --allow icon-chips to the inspector and say why.", + "phone": "Editing a graph on a phone is rarely the job: show the flow read-only as a vertical list of nodes with their metrics, and the palette as a bottom sheet if editing is kept." + }, + { + "id": "inbox-triage", + "name": "Inbox triage", + "screen": "inbox", + "kinds": [ + "support", + "workspace" + ], + "basis": "assembled from the study's list, feed and rail measurements; no inbox screen was in the study", + "blueprint": "Three regions on one ground: the navigation (a 230px sidebar or a 55px rail), the list, and the open item with its details. The list column has a fixed width (the study's fixed columns are 306 and 384px) and its own toolbar: saved views as underline tabs or a select, a 32px search, the count. Rows are two-line, 64-80px: line 1 is who (14/600) with the time in words right-aligned in grey ('9 min', 'Yesterday'); line 2 is the subject or last message in 13-14px grey, truncated to one line with an ellipsis. Unread rows set the name at 600 and add a 6px dot or a 16px count circle; read rows keep the name and subject in ink at 400 (grey is for meta only, never for a row's identity: faded urgent rows were the top complaint in testing). One status mark per row (priority or SLA, as a pale pill or words, not both). The selected row takes the --active fill of the nav pill (optionally a 2px accent bar inside its left edge), so it is never confused with a hover or a focus ring; never a saturated fill. The row's meta sits in fixed right-aligned slots (assignee 20px, channel 14px, priority 14px) so it lines up as columns; priority is printed only above normal. The open item fills the remaining width; its details (customer, plan, history) sit in a fixed column of 306-384px as key-value rows on a 28-32px pitch.", + "phone": "One region at a time: the list fills the screen; choosing a row pushes the conversation; the details open from a button in its header; back returns to the list at the same scroll position." + }, + { + "id": "workspace-home-greeting", + "name": "Workspace home with a greeting", + "screen": "home", + "kinds": [ + "workspace", + "creator" + ], + "basis": "a team workspace home; a personal insights home", + "blueprint": "A centred column on a real 12-column grid (77px columns, 16px gutters, 1100px), about 72px from the top. The greeting is the h1 (48/700 in a serif, or 24/400 in the sans), with the date after it or in a grey line under it, never as a tracked eyebrow, and no emoji. 50px below, 4 count tiles spanning 3 columns each (128px tall, 16px padding): label, value at regular weight in tabular or mono figures, a plain caption ('Ready when you are'), no deltas. Then spans that change by row but share column lines (9 + 3, then 6 + 6, so each internal edge meets one above it) for the main objects: panels with 20px padding, a 14/600 title, a count chip and a 'View all' link, holding row cards 63px tall with 8px gaps, one step lighter than the panel with a border one step darker. Pale tints may code the panels, each in the hue of the tile that counts it. Only a floating composer, if there is one, carries a shadow, and it must not cover the last rows.", + "phone": "Greeting at 24-28px; tiles in a 2 x 2 grid; panels stack in reading order." + }, + { + "id": "object-detail-header-grid", + "name": "Object header and a six-column grid", + "screen": "detail", + "kinds": [ + "community", + "commerce", + "analytics" + ], + "basis": "an event's analytics tab", + "blueprint": "The page header is the object itself: one card (88px, 14px padding) holding a 50x62 cover, the 18/600 name with 28px icon buttons beside it (open, copy, share), a 13px grey meta line (date, time, place) and outlined 36px actions on the right. Under it, underline tabs on a full-width 1px rule, then a 36px row with a segmented time range on the left and a refresh button on the right. The body is one 6-column grid with one gutter (14px) in both directions whose spans change by row while every edge lands on the same lines: 3 KPI tiles of 2 columns, the main chart in 4 columns beside a side chart in 2, two progress cards of 3, a full-width trend of 6. Give the widest card to the screen's question, and do not give 824px to one ring and one legend row (flagged).", + "phone": "The header card keeps cover, name and meta, with actions in a kebab; every grid item takes the full width in the same order." + }, + { + "id": "generated-report", + "name": "Generated report", + "screen": "report", + "kinds": [ + "report", + "analytics" + ], + "basis": "a report generated from a CSV", + "blueprint": "No sidebar; the only chrome is a 47-48px viewer bar with a 1px rule. A centred 1088px column 33px below it: a 24/600 title, a 12px grey line 4px under it naming the source and the load time, one outlined 30px action on the right ('Refresh view'). If the data is a snapshot, one quiet notice (#fffbeb fill, 1px #fde68a, 12px #92400e text, 34px tall). Then 4 stat cards with a 12px gap (4 x 263 + 3 x 12 = 1088), a 12px grey label over an 18/600 tabular value; put the date range in the subtitle, not in a lone fifth card. Two charts side by side at the same 12px gap so their edges meet the stat columns: a time chart on a real time axis with flat labels, and a histogram with equal bins and square bottoms. Then the records table in a card: a 256x30 search in its header, a 14/600 grey header row over a 1px #e5e7eb rule, 37px rows over lighter #f3f4f6 rules, numbers right-aligned, a sort glyph on the active column only.", + "phone": "Stats in a 2 x 2 grid; charts stacked; the table as two-line rows, or scrolling inside its own frame with the first column fixed." + }, + { + "id": "tabbed-object-detail", + "name": "Tabbed object detail in a sheet", + "screen": "detail", + "kinds": [ + "analytics", + "smb-admin", + "builder", + "support" + ], + "basis": "a list's engagement tab; a reports dashboard", + "blueprint": "Inside the sheet: a breadcrumb row at 16/600 (the parent in grey, the current page as the h1, a 24px grey type chip after it) with its actions on the right (a text button and an outlined 32px dropdown). Under it, the object's tabs at 14px with a 2px ink underline that runs 8px past the label, on a 1px rule that spans the sheet. 30px below, the filter row: a label above a 300x32 select on the left; the freshness stamp ('Last updated July 21, 2026') and a 40px refresh button on the right, centred on the select's line. Then 3 KPI cards (value 36/400, its label at 16/600 under it, the period in words) and 2 chart cards, all on one 24px gutter so the rows share column lines. Do not stretch a short card to its neighbour's height (it left 250px of dead white) and do not list legend series that have no data.", + "phone": "Breadcrumb shortens to a back link and the h1; tabs scroll; KPI cards stack as label-value rows; charts full width." + }, + { + "id": "report-card-legend-table", + "name": "Report card with a legend table", + "screen": "analytics", + "kinds": [ + "analytics", + "smb-admin" + ], + "basis": "a campaign overview", + "blueprint": "A report card (20/600 title, a kebab top right, a 32px select for the scope) whose body splits into a 390px left block and the chart. Left: the hero number at 24/400 with its label under it and one change pill with its window ('vs. previous period'), then the legend as a mini table of 2-4 metric rows on a 57px pitch: dot, name at 15/600, a benchmark pill, the value right-aligned, the change right-aligned. Right: the line chart with 4 gridlines at round values, a 2px baseline with ticks, y labels on the right and axis text no larger than the data (12-14px; 16px ticks were flagged as louder than the numbers). Under it, a detail table whose rate cells stack the count over a 12px grey percentage on one right edge. Use the same colour for a series in the legend dot and in the line.", + "phone": "The legend table goes above the chart; the detail table becomes two-line rows." + }, + { + "id": "research-lists-table", + "name": "Research lists and a long table", + "screen": "analytics", + "kinds": [ + "markets", + "devtools" + ], + "basis": "a stock research view", + "blueprint": "Header: a 26/700 title over a 20px grey date, quiet pill buttons on the right; a 1px rule about 44px below, with the tabs just under it and the active tab marked by a 1px accent line as wide as its label lying on that rule. 64px below, a 2-column row of cards at about 43/57 with a 24px gap: a ranked list on a 28px pitch (16px logo, bold ticker, grey name truncated, a right-aligned grey percentage and a white value, signs in the text) and a chart card with its legend in the header (5px dots, 13px grey labels), a text range selector under the baseline (1M 3M 6M YTD All, the active one marked by the same 1px accent segment) and 'Updated daily' in 11-12px grey. Then a 20/400 grey section title and a full-width table: a 38px header of 11-12px grey labels, 42px rows over 1px rules, ISO dates and every figure right-aligned in tabular numerals, white only for the identity and the total. Give the chart a y-scale and dates (the studied chart had neither and was flagged).", + "phone": "Cards stack; the range selector stays as text under the chart; the table becomes two-line rows with the total on the right." + }, + { + "id": "platform-overview-tray", + "name": "Platform overview with a usage tray", + "screen": "overview", + "kinds": [ + "devtools", + "analytics" + ], + "basis": "a developer platform project overview", + "blueprint": "Sections stacked in one column about 48px apart, each with an 18/500 title on the left and a quiet action on the right ('View all', an outlined Refresh, a date-range button), and freshness in 14px grey after the title with a small status dot. First, a getting-started strip: one container split by 1px dividers into 4 equal cells (16/500 title, a 14px description, a grey arrow top right), shown until setup is done. Then the recent items table, capped at 4-5 rows on a 49px pitch: IDs in mono truncated to 8 characters plus an ellipsis with a copy icon, relative expiry in grey, rules that bleed 8px past the text column. Then usage: a #fafafa tray with 6px padding holding a KPI strip of 5 equal cells (a 14/500 label over a 24/400 value with a 14px unit suffix, '5 mins') and, 6px below, a chart card whose metric is chosen by the KPI cells themselves (the selected cell marked by a 2px rule or the active fill), never a second control repeating the KPI labels; the chart takes two-thirds of the width when its line is flat for most of the window, with the next answer beside it. Durations and timestamps in tabular figures. A missing value is a grey dash at label size, not '--' at value size.", + "phone": "The getting-started strip becomes a 2 x 2 grid or a list; the table becomes two-line rows; the KPI strip a 2-column grid." + }, + { + "id": "bar-list-ranking", + "name": "Bar list and ranking", + "screen": "analytics", + "kinds": [ + "analytics", + "smb-admin" + ], + "basis": "an AI-search visibility overview", + "blueprint": "A 24/700 title with one factual stat chip beside the actions on the right; underline tabs on a 1px rule; a filter row of compound outlined groups that read as a sentence ('Date | Jun 14 - Jul 13 | Daily', 'Region | United States'), 28px tall and 8px apart. KPIs: as many equal columns as there are KPIs (four across, not four in a three-column grid that orphans one), tabular or mono values with fixed decimals. Then two equal panels, each with a 73px header (14/600 title, a 13px grey description, a dropdown that switches the panel's metric) over a full-bleed 1px rule: a sorted bar list (rows on a 64px pitch, a label line, then a 10px pill bar in one colour with no track, the value 5px after the bar's end, the longest bar about 88% of the width) and a ranking table (53px rows, rules inset to the padding, a rank, a 16px logo, a soft chip on the user's own row, values right-aligned). Do not fix a panel's height so its last row is cut off (flagged).", + "phone": "KPIs in a 2 x 2 grid; panels stack; the bar list keeps its bars at full width." + }, + { + "id": "deploy-health-lead", + "name": "Current deploy and health lead", + "screen": "overview", + "kinds": [ + "devtools" + ], + "basis": "house pattern from testing: built after a flat 24-hour chart filled a whole first screen and lost to a richer layout", + "blueprint": "Title row: the project's name as the h1 with a status pill (Healthy, Degraded) and a breadcrumb of team and product above it; repository, branch and a freshness stamp in a 14px grey line under it; the one primary action (Redeploy, or View logs when the latest deploy failed) on the right. Then a full-width card for what is live now: the production deployment's commit message at 16/600, its branch, short SHA in mono, author and age on the left, and three or four facts in divided cells on the right (domain, live since, build time, regions). Then the health strip: three or four KPIs in one divided container, each with its change in words and in the polarity colour when it moved the wrong way. Then a two-column row: the 24-hour chart at two-thirds (deploy markers as 1px ticks with their short SHA, the budget or SLO as a dashed reference line) and, at one-third, the block that explains the worst number (the spike and what reverted it, the status codes behind the error rate). Then the deployments table capped at 6 rows, a failed row carrying its failing step and a View logs action, a building row its elapsed time.", + "phone": "The live deployment card becomes a stack of label-value rows; the KPIs a 2x2 grid; the chart full width with its markers; the explanation under it; deployments as two-line rows with region and duration on line 2." + }, + { + "id": "power-flow", + "name": "Power flow summary", + "signature": true, + "cues": [ + "energy", + "solar", + "battery", + "kwh", + "tariff", + "heat pump", + "electric car", + "ev charger", + "home charger" + ], + "basis": "house pattern from round-4 testing: a home-energy overview without it read as the stock dark dashboard; real energy apps lead with this flow", + "blueprint": "A strip under the title row that answers \"where is the power going now?\": four nodes in one row (Sun, House, Battery, Grid), each a 14px label over its live figure at 20-24px with the unit as a grey suffix (2.4 kW), the battery's charge under its figure (88%). Between neighbours, a 2px connector only where power flows now, with its direction and amount in words above it (\"to battery 1.7 kW\"); an idle link is a 1px dashed rule in the grid colour. Solar and export carry the one data hue, import from the grid is grey, the house is ink. The flows balance and are built from one live-state object that also feeds the top bar and the charts: sun + grid import + battery out = house + battery in + export. A freshness stamp at the strip's right (\"Live · 20:34\").", + "phone": "The four nodes become a 2x2 grid in the same order (Sun, House / Battery, Grid) with the flow sentence under it (\"Sun 2.4 kW: house 0.7, battery 1.7\"), no connectors." + }, + { + "id": "leave-timeline", + "name": "Team timeline with kind encoding", + "signature": true, + "cues": [ + "leave", + "holiday", + "time off", + "absence", + "pto", + "vacation", + "rota", + "roster", + "shift", + "booking" + ], + "basis": "house pattern from round-4 testing: a leave calendar that drew every booking in the same pale grey read as a loading state", + "blueprint": "People down the left on a 160-220px column, grouped under 12px team subheaders; days across with weekends one tone step darker, faint 1px day lines, and today as a 1px line in the one data hue with its date in ink in the header. Each kind of booking has its own mark, drawn with `Charts.timeline(el, rows, kinds)`: holiday a pale fill, off sick a 1px diagonal hatch, long leave a darker grey step, working away an outline, a pending request a dashed outline. Full colour only for what needs a decision: a request that breaks cover is outlined and labelled in the negative colour. Bars 20-24px tall at radius 4; the label inside the bar, the kind's code when the bar is too short, then the label after the bar's end, never over the days before it. One-line names on a 32px pitch; a name with a subline (team, office) on 40-44px. A public holiday is a small dot under its date whose tooltip names the office. The legend is the one the helper returns, so each swatch is its mark scaled down and only kinds on screen are listed.", + "phone": "One week at a time, with the week switch in the same control row as any office filter; names shorten to first name and initial; the legend sits in a 2-column grid." + }, + { + "id": "cover-matrix", + "name": "Cover against the minimum", + "signature": true, + "cues": [ + "team cover", + "cover by", + "staffing", + "rota", + "roster", + "shift", + "coverage", + "on call", + "leave" + ], + "basis": "house pattern from round-4 testing: a grid of 120 absolute headcounts made the reader subtract each team's minimum in their head", + "blueprint": "A team-by-day matrix of slack against each team's minimum (+2, +1, 0, −1) rather than headcounts, drawn with `Charts.matrix(el, rows, { cols, comfort })`: the team and its rule (\"needs 7 of 10\") in a 160-220px label column on a 40-44px pitch, one cell per working day with the signed slack in 12px tabular figures. Cells with room to spare stay plain; one hue ramps toward the negative colour as the slack runs out (tight a pale tint, at the minimum a stronger tint, short the full negative with white figures), and the headcount sits in the tooltip (\"6 in of 9, needs 7\"). Today's column has its date in ink. The days that go short are the finding in the title row, beside the request that causes them.", + "phone": "The lowest slack per team for each week (four columns), with the days behind a tap; or one team at a time." + }, + { + "id": "sell-out-strip", + "name": "Sell-out time strip", + "signature": true, + "cues": [ + "bakery", + "cafe", + "café", + "kitchen", + "restaurant", + "sell-out", + "sell out", + "sold out", + "deli", + "menu", + "bake" + ], + "basis": "house pattern from round-4 testing: six 4px black bars for sell-out times were the loudest marks on a bakery screen and drew no comparison", + "blueprint": "One row per line that sold out, earliest first: the line and its shop on the left; a 2px grey track on a shared opening-to-closing axis with an ink dot at today's sell-out time and a hollow tick at the comparison day's (last Sunday), drawn with `Charts.timeStrip(el, rows, { open, close, compareLabel })`; the time on the right in ink with the gap under it in 12px grey, its baseline named (\"3 h 40 m before close\", \"45 m earlier than last Sunday\"). The lines that did not sell out are counted in one closing sentence, not drawn. Axis labels on one hourly step from opening; the legend (Today, Last Sunday) is the one the helper returns.", + "phone": "The rows keep the full width with axis labels every two hours; the gap moves under the line's name." + } + ], + "kinds": { + "finance": { + "note": "money homes, budgeting, accounting, seller balances", + "styles": [ + "achromatic-ledger", + "pastel-consumer" + ], + "screens": [ + "overview", + "list", + "settings" + ] + }, + "wallet": { + "note": "consumer wallets, crypto, personal finance on the go", + "styles": [ + "pastel-consumer", + "achromatic-ledger" + ], + "screens": [ + "wallet", + "list", + "settings" + ] + }, + "commerce": { + "note": "seller and shop back offices: orders, payouts, products", + "styles": [ + "achromatic-ledger", + "framed-sheet" + ], + "screens": [ + "overview", + "list", + "detail" + ] + }, + "analytics": { + "note": "B2B analytics, marketing and growth reporting", + "styles": [ + "framed-sheet", + "achromatic-ledger", + "accent-ladder" + ], + "screens": [ + "analytics", + "list", + "detail" + ] + }, + "devtools": { + "note": "developer platforms: deploys, sessions, API keys, usage", + "styles": [ + "framed-sheet", + "data-terminal", + "achromatic-ledger" + ], + "screens": [ + "overview", + "list", + "settings" + ] + }, + "builder": { + "note": "flow, form, page and automation builders", + "styles": [ + "framed-sheet", + "achromatic-ledger" + ], + "screens": [ + "builder", + "list", + "settings" + ] + }, + "creator": { + "note": "newsletters, creator studios, audience insights", + "styles": [ + "accent-ladder", + "editorial-greeting", + "true-black-flat" + ], + "screens": [ + "overview", + "analytics", + "list" + ] + }, + "smb-admin": { + "note": "small-business and SaaS admin with plans, onboarding and growth nudges", + "styles": [ + "accent-ladder", + "framed-sheet" + ], + "screens": [ + "overview", + "list", + "settings" + ] + }, + "workspace": { + "note": "team hubs and personal homes", + "styles": [ + "editorial-greeting", + "achromatic-ledger" + ], + "screens": [ + "home", + "inbox", + "settings" + ] + }, + "community": { + "note": "community, events and media back offices", + "styles": [ + "true-black-flat", + "accent-ladder" + ], + "screens": [ + "overview", + "list", + "detail" + ] + }, + "support": { + "note": "support inboxes, queues, helpdesks", + "styles": [ + "achromatic-ledger", + "framed-sheet" + ], + "screens": [ + "inbox", + "list", + "settings" + ] + }, + "markets": { + "note": "trading, research and monitoring read in long sessions", + "styles": [ + "data-terminal", + "true-black-flat" + ], + "screens": [ + "analytics", + "list", + "detail" + ] + }, + "report": { + "note": "generated or exported reports with no app around them", + "styles": [ + "achromatic-ledger", + "framed-sheet" + ], + "screens": [ + "report" + ] + } + } +} diff --git a/.agents/skills/design-taste-frontend/library/directions.json b/.agents/skills/design-taste-frontend/library/directions.json new file mode 100644 index 0000000..f7f82e1 --- /dev/null +++ b/.agents/skills/design-taste-frontend/library/directions.json @@ -0,0 +1,1078 @@ +[ + { + "id": "name-as-monument", + "name": "The name as a monument", + "sectors": [ + "agency", + "studio-portfolio", + "personal-portfolio", + "hospitality", + "restaurant", + "music", + "culture", + "fashion", + "event", + "architecture", + "real-estate", + "physical-product", + "consumer-app", + "other" + ], + "tones": [ + "bold", + "editorial", + "luxury" + ], + "needs": [], + "idea": "The name is the headline. Set it so large that it becomes architecture: as wide as the viewport, cropped by an edge, or stacked to fill the screen. Nothing else on the first screen competes; the description of what this is drops to a single small sentence. The idea comes from treating the name's letters as material. Ask what the subject can do to its own name: a photograph of the work sits inside a counter or replaces a letter, the name repeats down the page like a reel, the letters are split to opposite corners and the page happens between them. In the study this was the single most common device among sites scoring 7.5 or more.", + "composition": "First screen: the wordmark spans 88–100% of the viewport width (font-size 16–24vw, set with a clamp so it never wraps), anchored either to the bottom edge with its descenders nearly touching it, or dead centre with everything else pushed to the corners. One line of supporting text at 16–20px sits in a corner on a shared margin; navigation is three or four words in the opposite corner. After the hero the page is deliberately small and calm: a narrow text column or a simple two-column grid, so the contrast with the monument holds. The name returns once more at full width as the footer, in the inverse colours. Margins are tight (20–32px) so the type reaches the edges. Two type sizes do nearly all the work: the monument and a small text size, with one mid size for section headings.", + "typography": "One family. The display cut must survive enormous sizes: tight tracking (-0.04 to -0.07em), leading 0.8–0.9, optical kerning on. Section headings are modest (28–40px) on purpose.", + "typeClasses": [ + "grotesk-tight", + "condensed-heavy", + "extended-heavy", + "heavy-black", + "serif-display" + ], + "colour": "Two values carry the page (ground and ink). The accent, if used at all, appears on one thing only: the single action or the inset image frame. The footer inverts ground and ink.", + "paletteTags": [ + "light-neutral", + "dark-neutral", + "two-tone", + "mono-accent" + ], + "imagery": "Few images, used as inserts in the typography rather than as illustrations beside it: one photograph inside or behind the name (a 4:5 or 1:1 frame replacing a letter, or tucked between two words), then a short run of large full-width or half-width photographs further down. Square corners. No collage of small thumbnails.", + "sectionTags": [ + "type-led", + "quiet", + "poster" + ], + "motion": "scaling-wordmark", + "richness": "Scale. The size of the name against the smallness of everything else is the entire visual event, so protect both ends: do not shrink the name to make room, and do not let body text creep above 20px.", + "pitfalls": "A long name set small is just a logo. If the name has more than about 12 characters, stack it on two lines or crop it with the viewport edge; never drop below 12vw. Do not add a second big headline under the name. Do not decorate the letters.", + "seenIn": [ + "aww-nothin", + "opl-kereliott", + "aww-paul-kalkbrenner", + "opl-nia-creative", + "aww-house-of-honey-1", + "aww-produx-design" + ], + "allow": [] + }, + { + "id": "sentence-as-layout", + "name": "The sentence is the layout", + "sectors": [ + "agency", + "saas", + "ai-product", + "dev-tool", + "nonprofit", + "culture", + "education", + "physical-product", + "consumer-app", + "finance", + "health", + "event", + "other" + ], + "tones": [ + "bold", + "editorial" + ], + "needs": [], + "idea": "One short sentence, set at poster scale, is the composition. The trick that makes it an idea rather than a big headline: something from the subject sits inside the sentence where a word would be. A strip of photograph fills the gap between two words; a small live fragment of the product replaces the noun; the object the sentence names is pictured at the size of a letter. Write the sentence first, find the word that can be shown instead of said, and put the showing in its place. The reader completes the sentence with their eyes.", + "composition": "The sentence is four to seven words and runs as one or two full-width lines at 9–13vw. Inline with the type, on the baseline, sits one media slot: a rounded-rectangle or square frame exactly one line-height tall and two to three ems wide, holding a photograph or a looping crop. Above and below the sentence the screen is empty except for a small navigation line and one supporting sentence set small, both on the same left margin. Later sections repeat the grammar at smaller scale: each is a short statement on the left six columns with its proof (image, figure, list) on the right, so the page reads as a series of sentences with evidence. Generous vertical space (160px or more) between sections.", + "typography": "Display weight with real presence (medium to bold), tracking -0.03 to -0.05em, leading 0.95–1.0 so two lines sit close. The inline frame aligns to cap height and baseline exactly; set it with em units so it scales with the type.", + "typeClasses": [ + "grotesk-tight", + "serif-display", + "condensed-heavy", + "serif-light-large" + ], + "colour": "A calm ground with ink at full contrast. The only colour comes from the photograph inside the sentence; if the palette has an accent, use it once, on the action.", + "paletteTags": [ + "two-tone", + "light-neutral", + "single-field", + "mono-accent" + ], + "imagery": "One strong, simple photograph that reads at small size (a face, an object, a texture, a horizon), cropped to a wide strip inside the sentence. The same image may open to full width in the next section, so the small slot feels like a window onto something larger.", + "sectionTags": [ + "type-led", + "poster", + "quiet" + ], + "motion": "masked-headline", + "richness": "The collision of big type and one live image inside it. Because there is only one image on the first screen, choose it with care and give it perfect alignment to the letters.", + "pitfalls": "The sentence must be short enough for two lines on a phone, where the inline frame drops to its own line between the two halves. Do not style one word differently to fake the device. Do not use more than one slot per sentence.", + "seenIn": [ + "aww-colonia-zacamil", + "aww-bleibtgleich26", + "opl-spatial", + "aww-coffeetech-r", + "opl-midnight-2" + ], + "allow": [] + }, + { + "id": "pinned-poster", + "name": "The pinned poster", + "sectors": [ + "culture", + "music", + "event", + "fashion", + "personal-portfolio", + "studio-portfolio", + "physical-product", + "ecommerce", + "hospitality", + "consumer-app" + ], + "tones": [ + "bold", + "editorial" + ], + "needs": [], + "idea": "Something stays put while everything else changes. A title holds its place across the viewport and the images beneath it swap; the name is split to two opposite corners and the page passes between the halves; a single frame stays centred while its contents change. Every scroll step is a new cover of the same magazine. The idea suits subjects that are a series (a book of portraits, a line-up, a collection, a set of projects): the fixed element says what the series is, the changing element shows its members.", + "composition": "A sticky layer holds the fixed element for the height of two to three viewports: usually the title at 10–14vw across the middle or top of the screen, or two words pinned to the top-left and bottom-right corners. Under it, a stack of full-height panels scrolls by, each a single large photograph (portrait 4:5, centred, 40–50% of the viewport wide) with one line of caption at the same small size everywhere. The title sits above the images in the stacking order and uses `mix-blend-mode: difference` or a solid colour that reads on every panel. When the pinned run ends, the page releases into ordinary flowing sections with a narrow measure. Build with `position: sticky`; never hijack the scroll.", + "typography": "The pinned title is the only large type on the page. Captions and body share one small size (15–17px). Tight tracking and solid weight so the title reads over photographs.", + "typeClasses": [ + "grotesk-tight", + "condensed-heavy", + "heavy-black", + "extended-heavy" + ], + "colour": "One strong title colour against a pale or dark ground. Each panel may take its own flat ground colour sampled from its photograph.", + "paletteTags": [ + "two-tone", + "photographic-neutral", + "single-field" + ], + "imagery": "A series of photographs with the same crop ratio and the same framing (all portraits, all objects, all rooms), so that swapping them reads as one image changing. Five to eight in the pinned run.", + "sectionTags": [ + "photo-led", + "poster", + "type-led" + ], + "motion": "pinned-story", + "richness": "Repetition with change. The fixed title makes each new photograph feel like an event, so the photographs must be good and consistent.", + "pitfalls": "If the title is not legible over every panel, the idea fails: test each one. Keep the pinned run under six viewports or it feels like a trap. On a phone the title shrinks to 16–18vw and stays pinned at the top; panels become full-width. A pin longer than three screens, or one where the screens under it are nearly empty, read in blind tests as a stuck page. Every screen under the pin needs its own content, and nothing may pass over the pinned words.", + "seenIn": [ + "opl-city-of-angels", + "aww-normal-is-boring", + "aww-glitch-grit", + "aww-revelatio-studio" + ], + "allow": [], + "needsPictures": true + }, + { + "id": "colour-chapters", + "name": "Colour chapters", + "sectors": [ + "agency", + "music", + "event", + "education", + "nonprofit", + "saas", + "consumer-app", + "culture", + "physical-product", + "health", + "finance", + "ai-product" + ], + "tones": [ + "bold", + "playful" + ], + "needs": [], + "idea": "Every section is a chapter with its own flat colour, floor to ceiling. The page reads like a set of posters hung in a row, held together by one typeface and one grid. The colours are not decoration: they come from the subject (the brand's packaging, the artist's record sleeves, the product's own colour ways, the categories of the content) and each chapter's colour means that chapter. Decide the sequence like a designer orders a book: a strong opener, a quiet second, a surprise in the middle, a dark or very light closer.", + "composition": "Sections are full-bleed fields, each at least 90svh tall, butted directly against each other with no gap and no divider. Inside every field the same 12-column grid and the same margins apply, and each field holds one thing: a huge heading (8–12vw) with a small paragraph, or one photograph with a caption, or one list. Text colour is chosen per field for strong contrast (ink or paper, never grey). Headings start on the same left edge in every chapter, so the eye feels the system as colours change. The navigation and the footer take the colours of the first and last chapter.", + "typography": "One typeface in two weights. Headings very large and tight; body 18–20px. Because colour is loud, the type stays plain: no italics, no second face.", + "typeClasses": [ + "grotesk-tight", + "heavy-black", + "geometric", + "rounded-friendly" + ], + "colour": "Four to six flat fields used at full strength, one per section, each with its assigned text colour. No tints, no gradients between them: the hard edge where two fields meet is the look.", + "paletteTags": [ + "flat-loud", + "pastel-fields" + ], + "imagery": "Sparing. One photograph or object per chapter at most, either cut out and sitting directly on the colour, or a plain rectangle with generous colour around it. Photographs should be simple enough not to fight the field.", + "sectionTags": [ + "colour-field", + "type-led", + "poster" + ], + "motion": "colour-on-scroll", + "richness": "Colour at scale. A whole screen of one saturated colour is rich on its own, so a chapter needs few elements; it still needs its content at full size, because a coloured screen with one small line on it reads as empty.", + "pitfalls": "Check contrast on every field with the palette's assigned ink. Do not put cards on the fields. Do not use more than six colours. Two neighbouring fields should differ clearly in lightness as well as hue.", + "seenIn": [ + "aww-warm-fuzzy", + "aww-paul-kalkbrenner", + "opl-anidachi", + "aww-aardvark-book-club", + "aww-ai-in-design-report-2026" + ], + "allow": [] + }, + { + "id": "place-carries-it", + "name": "The place carries it", + "sectors": [ + "hospitality", + "restaurant", + "real-estate", + "architecture", + "event", + "health", + "culture", + "nonprofit" + ], + "tones": [ + "quiet", + "luxury", + "warm" + ], + "needs": [], + "idea": "For a place, the photograph is the argument. One full-bleed image of where you would be standing fills the first screen, and the design steps back: the name sits along the bottom edge like a film title, or small in a corner, and nothing else interrupts the view. The page that follows keeps that restraint: few words, large pictures, long pauses. The designer's work here is editing: choosing the one frame that makes someone want to be there, and then not covering it.", + "composition": "First screen: a single photograph at 100vw by 100svh, focal point kept clear of text. The name is set either very large (14–20vw) hugging the bottom edge with 16–24px of margin, or small (20–28px) top-left with a one-line description bottom-left. Navigation is two to four words in the top corners in the same small size. If text sits on the image, a soft neutral scrim under the text area only. Below, sections alternate between a short centred or left-set paragraph in a narrow column (max 52ch) with wide empty margins, and photographs shown large: one full-bleed, then a pair at different sizes, then one portrait offset to the right. Practical information (hours, address, rates, booking) is gathered once near the end in a plain two-column block.", + "typography": "A face with some grace for the name; small, calm, well-spaced text everywhere else. Sentence case. Body 17–19px with leading around 1.55.", + "typeClasses": [ + "serif-display", + "serif-light-large", + "condensed-heavy", + "grotesk-light" + ], + "colour": "Neutral paper or deep neutral ground chosen to flatter the photographs; text ink drawn from the darkest tone in the imagery. Colour lives in the pictures.", + "paletteTags": [ + "photographic-neutral", + "dark-neutral", + "earth" + ], + "imagery": "The dealt set is the palette. Choose four to six photographs with the same light. The hero image must have a calm area for the name. Full-bleed or large with square corners; never thumbnails, never a carousel of ten.", + "photoTreatment": "Leave photographs ungraded. If text overlays one, darken only the area behind the text with a neutral scrim.", + "sectionTags": [ + "photo-led", + "quiet" + ], + "motion": "slow-crossfade", + "richness": "The photographs, at full size, uninterrupted. Empty paper around short text makes the next image land harder.", + "pitfalls": "A weak hero photograph cannot be fixed by typography; pick again. Do not stack a headline, a paragraph and two buttons on the image. Do not use a booking bar that covers the bottom of the view; one small action is enough.", + "seenIn": [ + "aww-white-desert", + "opl-eagles-nest", + "aww-tengile-malamala-collection", + "aww-izanami", + "aww-seasats" + ], + "allow": [], + "needsPictures": true + }, + { + "id": "page-is-the-object", + "name": "The page is the object", + "sectors": [ + "restaurant", + "event", + "hospitality", + "culture", + "music", + "physical-product", + "ecommerce", + "nonprofit", + "education", + "personal-portfolio", + "consumer-app", + "other" + ], + "tones": [ + "warm", + "playful", + "editorial" + ], + "needs": [], + "idea": "Find the printed or physical artefact that already exists in the subject's world and build the page as that thing. A wedding site is the invitation card. A restaurant is its menu. A conference is the ticket; a record is its sleeve; a shop is the receipt or the swing tag; an archive is a stack of tabbed folders; a course is the syllabus sheet. The artefact supplies everything a template would otherwise invent: its proportions, its typographic manners, its way of grouping information. Visitors recognise the object instantly, which is why these pages feel specific.", + "composition": "The first screen shows the artefact as a single filled panel (paper colour on a contrasting ground) centred or offset, with believable proportions: a card at 5:7, a ticket at about 2.2:1 with a notch cut by `clip-path`, a menu as a tall sheet. All primary content lives on it, set the way that object is set: centred and symmetrical for an invitation, in tidy aligned columns for a menu or ticket. The ground behind is a flat colour or one full-bleed photograph. As the page continues, each section is another piece of the same stationery: a second card, a tear-off stub, a folded panel, always filled shapes with real edges (straight, notched, scalloped, perforated by a dotted `border` of round dots at 4px or more), never outlined boxes. The footer is the back of the object.", + "typography": "Take the manners of the artefact: a bookish serif with small caps avoided, or a blunt condensed face for tickets and posters. Sizes stay within what print would use relative to the panel; the name is large on the panel, details are small and exact.", + "typeClasses": [ + "serif-text", + "serif-display", + "slab", + "condensed-heavy", + "grotesk-tight" + ], + "colour": "Paper and ink plus the ground the paper sits on. Two or three flat colours in total, like a two-colour print job.", + "paletteTags": [ + "two-tone", + "earth", + "light-neutral" + ], + "imagery": "Optional. One photograph behind the object, or small photographs placed on it like tipped-in plates. The object itself is the image.", + "sectionTags": [ + "object-led", + "type-led", + "colour-field" + ], + "motion": "curtain-footer", + "richness": "Recognition. The shaped edges, the print-like alignment and the limited inks make a familiar object out of plain HTML.", + "pitfalls": "Choose an artefact that truly belongs to the subject, or it becomes costume. Shape the edges with fills and `clip-path`; an outlined rectangle with a thin border is not an object. Keep text sizes readable on a phone, where the object becomes full width with its shaped edge kept at top and bottom.", + "seenIn": [ + "opl-sarah-matt-wedding", + "aww-mosbys-files", + "opl-the-deep-end", + "opl-weeksync", + "opl-le-petit-bleu", + "opl-archiv" + ], + "allow": [] + }, + { + "id": "one-motif", + "name": "One motif", + "sectors": [ + "saas", + "finance", + "consumer-app", + "ai-product", + "dev-tool", + "health", + "physical-product", + "restaurant", + "education", + "nonprofit", + "other" + ], + "tones": [ + "playful", + "technical", + "warm", + "bold" + ], + "needs": [], + "idea": "Take one shape from the subject and let it run the whole system. A drilling tool's octagonal cross-section becomes the buttons, the image masks and the loader. A two-account money app becomes two circles that recur as icon, inline dot and section colour. A café's striped awning becomes every band on the page. Look at the product, the logo, the object or the word in the headline and find the simplest geometry in it (a circle, an arc, a chamfer, a stripe, a notch, a ring). Then use only that shape, at three or four very different scales, everywhere a designer would normally reach for a generic rounded rectangle.", + "composition": "Hero: the motif appears once at enormous scale as a flat filled shape, cropped by the viewport (a circle 120vh across entering from the right, a chamfered block filling the lower half), with a short headline at 6–8vw and one supporting sentence set on the remaining ground, left-aligned on a shared margin. Through the page the motif returns as: the mask for every photograph (via `clip-path` or `border-radius` made from the same geometry), the shape of the primary button, the bullet beside list items at text size, and one full-width band that separates the two halves of the page. Sections use simple two-column or single-column layouts so the shape is the only thing with character.", + "typography": "A clean geometric or grotesk face that echoes the shape (round bowls for circles, squared terminals for chamfers). Medium weight; headings 6–8vw in the hero and 3–4vw after.", + "typeClasses": [ + "geometric", + "grotesk-tight", + "rounded-friendly" + ], + "colour": "The motif carries the accent colour at large scale, flat. Everything else is ground and ink. A second motif colour is allowed only if the subject has a real pair (two accounts, two modes).", + "paletteTags": [ + "mono-accent", + "two-tone", + "pastel-fields" + ], + "imagery": "Photographs appear inside the motif's shape. If there is product interface to show, it sits on a flat colour stage shaped by the motif. Draw the shape with CSS or a simple inline SVG path; do not draw illustrations.", + "sectionTags": [ + "colour-field", + "object-led", + "type-led" + ], + "motion": "shutter-image", + "richness": "One shape at many sizes. The giant cropped shape gives the hero mass and colour without a single image.", + "pitfalls": "One motif means one. A circle here, a hexagon there and a blob behind is the generated look this replaces. The motif must come from the subject and you must be able to say from where in one clause.", + "seenIn": [ + "aww-sstr-friction-reduction", + "opl-tara", + "opl-boaxt", + "opl-midnight-2", + "opl-superlocal-2026", + "opl-billow" + ], + "allow": [] + }, + { + "id": "product-performs", + "name": "The product performs", + "sectors": [ + "saas", + "dev-tool", + "ai-product", + "consumer-app", + "finance" + ], + "tones": [ + "technical", + "quiet" + ], + "needs": [], + "idea": "Software is most convincing when it is doing its job in front of you. Instead of describing features, put small, true, working fragments of the product on the page: the actual control, with real content, responding to the pointer. A colour picker's loupe reads the page's own background and prints its value. A list tool lets you tick an item right there. A type-scale plugin sets the page's own headings. Find the one interaction that is the product and make the hero that interaction; then show each further capability as another fragment at real size. No dashboard collage, no browser frame, no screenshots shrunk until unreadable.", + "composition": "Hero: a short plain headline (4–6vw, left-aligned, upper-left third) and one sentence; the rest of the first screen is the main fragment at actual interface size, sitting directly on the page or on one flat stage colour, large enough to read every label. The fragment is built in HTML and works. Below, capabilities are a single-column sequence, each a row of two parts on a 5/7 split: a two-line statement on one side and the relevant fragment on the other, with the fragments varying in size and shape so the column never becomes a zigzag of equal blocks. Fragments are cropped pieces of interface (a menu, a row, a control, a panel edge), not whole windows. One section pins a fragment while three short statements change it.", + "typography": "The marketing type matches the product's interface type so the fragments and the page feel like one thing. Headline modest; interface text at its true size (13–15px) inside fragments.", + "typeClasses": [ + "grotesk-tight", + "grotesk-light", + "geometric" + ], + "colour": "Neutral ground. The product's own interface colours provide the colour. At most one flat stage colour behind fragments.", + "paletteTags": [ + "light-neutral", + "dark-neutral", + "mono-accent" + ], + "imagery": "The interface fragments are the main imagery: build them carefully with real labels, real numbers and sensible states (one hovered, one selected). Around them, two or three real pictures of the customer's world (found with scripts/assets.mjs), never stock of people at laptops.", + "sectionTags": [ + "ui-led", + "quiet" + ], + "motion": "pinned-story", + "richness": "Fidelity. A fragment with believable content and a real hover state is more interesting than any illustration. Spend the effort there.", + "pitfalls": "A fake interface made of grey bars and circles is the worst outcome; if you cannot build a believable fragment, change direction. Mark each fragment's root element with the attribute data-ui: inside it the product's own conventions apply (1px control borders, small radii, a shadow on its open menu) and the inspector leaves them alone; outside it the house rules hold as usual. data-ui is for cropped fragments only, never for a page wrapper. Do not put the fragment in a browser or laptop frame.", + "seenIn": [ + "opl-dabbit", + "opl-rows", + "opl-typewave", + "opl-shelf", + "opl-uni", + "opl-kontu" + ], + "allow": [] + }, + { + "id": "quiet-instrument", + "name": "The quiet instrument", + "sectors": [ + "saas", + "dev-tool", + "ai-product", + "personal-portfolio", + "consumer-app", + "finance", + "other" + ], + "tones": [ + "quiet", + "technical" + ], + "needs": [], + "idea": "Radical understatement. Where every competitor shouts, this page almost whispers: a headline barely larger than body text, a narrow column, small exact demonstrations, and a great deal of untouched space. The restraint is the claim. It says the thing is simple, finished and sure of itself. This only works when it is carried through completely; one loud element breaks it. In the study, a tool for simple lists sold itself with a 27px headline and 12–14px copy and was one of the most confident pages in the set.", + "composition": "A single column 440–560px wide, placed left of centre (starting at about 22% of the viewport width) or dead centre, running the whole page. The headline is the one large thing on the first screen: two lines at display size (5–7vw), medium weight, starting on the column's left edge and allowed to run wider than the column. The supporting paragraph follows at body size (17–19px) in the full ink. One small primary button and one text link. Below, each point is a short paragraph followed by a compact demonstration or image no wider than the column. Sections are separated only by space (96–140px). Nothing spans the full width until the footer, which is a single quiet line. The first screen is mostly empty and that emptiness is composed: the column's top edge sits at about 30% of the viewport height.", + "typography": "One family, two weights. A display size for the headline (5–7vw), one heading size for section titles (about 32–40px), body at 17–19px, a small size for captions (14–15px). Leading 1.5 for text. Letter-spacing near zero. The typeface must be handsome at small sizes.", + "typeClasses": [ + "grotesk-light", + "serif-text", + "geometric" + ], + "colour": "Paper and two inks (full and soft). One accent used on exactly one element per screen.", + "paletteTags": [ + "light-neutral", + "mono-accent" + ], + "imagery": "Precise rather than loud: cropped interface details at true size, and real photographs of the customer's world held to the column width, each doing one job. One short looping clip can sit at column width too. Never a large stock hero image.", + "sectionTags": [ + "quiet", + "ui-led", + "type-led" + ], + "motion": "stillness", + "richness": "Precision. With so little on the page, alignment, spacing and the exact size relationships are the design. Every element shares the column's left edge.", + "pitfalls": "This is the one direction where a small headline is right; the inspector will not object, but do not mix it with a large display line. Emptiness must look decided: keep the column edges exact and the vertical rhythm even. Not suitable when the subject needs emotion or photography to sell. Quiet is not thin: the column must still deliver every piece of content the brief asks for, in full, at 16px or more in the full ink. In blind tests the quiet version lost every time it was quiet everywhere: a small headline beside an empty panel read as unfinished. Quiet means few things, not small things: the headline and the demonstration are large, and every screen holds content.", + "seenIn": [ + "opl-rows", + "opl-compile", + "opl-plastic", + "opl-bueno-fyi", + "aww-gil-huybrecht" + ], + "allow": [] + }, + { + "id": "hero-object", + "name": "The object, large", + "sectors": [ + "physical-product", + "ecommerce", + "consumer-app", + "fashion", + "finance", + "health", + "restaurant", + "music" + ], + "tones": [ + "bold", + "luxury", + "quiet" + ], + "needs": [ + "product-photo" + ], + "idea": "Show the thing, bigger than seems reasonable. One photographed object fills the first screen, scaled until the viewport crops it, with the text small and tucked beside or behind it. The crop is the idea: a record whose edge leaves the top-right corner, a bottle whose shoulder runs off the bottom, a chair seen so close you read its grain. Being that close reads as confidence in the object. Everything else on the page serves it: details as tight close-ups, facts as short lines, one way to buy.", + "composition": "First screen: the object occupies 55–75% of the viewport and breaks at least one edge. It sits on a flat field (ground colour or one bold colour), never in a box. The headline is short and either very large and partly hidden behind the object (10–13vw, the object overlapping two or three letters) or small (28–36px) in the opposite corner with a one-line description. No navigation bar beyond a wordmark and one action. Following sections: a row of three or four close-up details at different crop ratios (not equal tiles), a single wide photograph of the object in use, a plain list of facts set large (materials, size, price) aligned to one edge, then the purchase action. The object returns once at the end from a different angle.", + "typography": "Either very large and structural or very small and precise; pick one for the headline and hold it. Facts are set in the text face at 22–28px, not in a table.", + "typeClasses": [ + "grotesk-light", + "grotesk-tight", + "extended-heavy", + "serif-light-large" + ], + "colour": "A flat field chosen to make the object's own colour sing (its complement, or a tone darker than its shadow side). One field for the whole page, or a second for the facts section.", + "paletteTags": [ + "single-field", + "light-neutral", + "pastel-fields", + "dark-neutral" + ], + "imagery": "Use the product's own photographs if they exist. Otherwise use a still-life from the dealt set as a stand-in and say so. Prefer images with a plain background; use `mix-blend-mode: multiply` on light fields so a white studio background disappears into the page colour.", + "photoTreatment": "Scale the main image well past its container (`width: 120–160%`) and let `overflow: hidden` on the section do the cropping.", + "sectionTags": [ + "object-led", + "photo-led", + "colour-field" + ], + "motion": "shutter-image", + "richness": "The object's surface at close range, and the tension of the crop.", + "pitfalls": "A small centred product shot with space all round is a catalogue thumbnail, not this direction. If the image has a busy background it cannot sit on a field; crop tighter or change image. Keep text off the object's focal area.", + "seenIn": [ + "opl-when-you-wish-upon-a-starboy", + "opl-plastic", + "opl-archiv", + "aww-moto-finance", + "aww-the-watch", + "opl-aevion" + ], + "allow": [] + }, + { + "id": "specimen-catalogue", + "name": "The specimen catalogue", + "sectors": [ + "ecommerce", + "physical-product", + "restaurant", + "fashion", + "culture", + "education", + "health", + "other" + ], + "tones": [ + "playful", + "warm", + "editorial" + ], + "needs": [ + "product-photo" + ], + "idea": "Present what is on offer the way a field guide presents birds: each item alone on a flat colour, same scale, same angle, named plainly. A bakery's pastries become specimens and the specimens become the menu. A furniture maker's chairs each get their own colour tile. The format flatters ordinary objects because it treats each as worth looking at, and it replaces both the feature grid and the product-card grid with something that has a point of view.", + "composition": "Hero: a left-aligned statement of what this is (5–7vw, upper-left) beside or above a tight cluster of four to seven specimen tiles of different sizes arranged as a loose mosaic that runs off the right edge. Each tile is a flat colour square or 4:5 rectangle with one photograph centred on it, no border, 8–12px gaps. The main section is the catalogue itself: a grid of tiles in which each item has its name and one fact set beneath the tile in the text face, aligned left to the tile edge. Tile colours rotate through three or four fields from the palette. One tile in every six or seven is double size. Supporting sections (about, how to order) are plain text on the ground colour, kept short.", + "typography": "Friendly and plain. Item names at 18–22px in medium weight, facts beneath in the soft ink. One big statement in the hero; no other display type.", + "typeClasses": [ + "grotesk-tight", + "serif-text", + "slab", + "rounded-friendly" + ], + "colour": "The tiles are the colour: three or four flat fields from the palette, repeated in a steady rotation. Ground stays neutral.", + "paletteTags": [ + "pastel-fields", + "flat-loud", + "light-neutral" + ], + "imagery": "Photographs of single items on plain backgrounds, all cropped to sit at the same apparent size within their tile. On light tiles, `mix-blend-mode: multiply` removes white studio backgrounds. If the subject's own item photographs are missing, use the dealt set and say so.", + "sectionTags": [ + "object-led", + "colour-field", + "photo-led" + ], + "motion": "drag-row", + "richness": "Rhythm of colour tiles and the pleasure of comparing like with like.", + "pitfalls": "It needs at least six items that can be shown as objects; with three it is a feature row. Keep labels outside the tiles. No shadows under the objects, no hover lift.", + "seenIn": [ + "aww-noho", + "opl-madie", + "opl-humanoid-index", + "opl-smallbits", + "aww-butter" + ], + "allow": [] + }, + { + "id": "borrowed-category", + "name": "Dressed as something else", + "sectors": [ + "finance", + "saas", + "consumer-app", + "physical-product", + "health", + "dev-tool", + "ai-product", + "education", + "nonprofit", + "real-estate", + "other" + ], + "tones": [ + "bold", + "playful", + "luxury" + ], + "needs": [], + "idea": "Art-direct the subject as if it belonged to a different, more vivid category. A money app is sold like a streetwear drop. An industrial roaster is presented like a design object. Drilling hardware gets the calm of a watch brand. A parcel-locker service becomes a fairground of stickers. Choose the borrowed category by asking what feeling the audience is missing from this kind of product (swagger, calm, glamour, play) and which category owns that feeling. Then take its manners completely: its type, its pacing, its way of photographing things. The contrast between dull subject and vivid dress is what people remember.", + "composition": "Depends on the borrowed category, so decide it explicitly and write it in your notes. Fashion drop: one shouted condensed headline across the full width, a single cropped image under it, then product facts as a blunt list. Watch or perfume: a centred object on a dark field, a small serif name, very few words, long vertical pauses. Poster or zine: flat colour blocks, heavy type, tilted cut-out images. Museum: one item per screen on a plinth-like band of colour with a short label beside it. Whichever you choose, the page structure stays simple (four to six sections) and every section uses the borrowed manners, including pricing and the footer.", + "typography": "The borrowed category's type, fully committed: condensed and loud, or refined and small. No halfway.", + "typeClasses": [ + "condensed-heavy", + "serif-display", + "extended-heavy", + "heavy-black" + ], + "colour": "The borrowed category's palette, which will be unlike the subject's sector norm. That mismatch is intended.", + "paletteTags": [ + "flat-loud", + "two-tone", + "dark-neutral", + "single-field" + ], + "imagery": "Photograph the subject the way the borrowed category would be photographed. With the dealt set, choose images for attitude, not literal relevance, and crop them hard.", + "sectionTags": [ + "poster", + "type-led", + "photo-led", + "colour-field" + ], + "motion": "edge-marquee", + "richness": "Attitude. The page has a recognisable voice from another world, applied to a subject nobody expected it for.", + "pitfalls": "Name the borrowed category in one word before you start, or the result is merely loud. The content must still be clear: what it is, what it costs, how to get it. Avoid borrowing from 'tech startup', which is the default you are escaping.", + "seenIn": [ + "opl-uglycash", + "aww-coffeetech-r", + "aww-sstr-friction-reduction", + "opl-locker-land", + "aww-moto-finance", + "aww-vero-new-york" + ], + "allow": [] + }, + { + "id": "contact-sheet", + "name": "The contact sheet", + "sectors": [ + "personal-portfolio", + "studio-portfolio", + "agency", + "fashion", + "culture", + "architecture", + "music", + "ecommerce" + ], + "tones": [ + "quiet", + "technical", + "editorial" + ], + "needs": [], + "idea": "Show everything at once, small, in order. The work is laid out like a photographer's contact sheet or an archive drawer: dozens of small frames in strict rows, with all text set at one small size. Nothing is featured, which is the point: the volume and consistency of the body of work is the statement, and the visitor does the choosing. It suits people and studios whose strength is range and output.", + "composition": "The name, or one sentence about the work, sits at display size (6–9vw) across the top of the first screen, and the sheet begins directly under it, still inside the first screen. The first screen opens with three or four short blocks of small text across the top on a 12-column grid (who, what, where to reach them), all at 14–16px, and immediately below, the sheet begins: rows of thumbnails at a fixed height (90–140px) with their natural widths, 6–10px gaps, each project forming a run of four to eight frames preceded by its title in the same small text. The sheet fills the whole page width edge to edge with 16–20px margins. Hovering a run dims the others and shows that project's one-line description in a fixed position. A single enlarged frame may interrupt the sheet once per screen at four times the size.", + "typography": "One face. The name at display size on the first screen; everything else at one text size and one small size; hierarchy below the name comes from position and from a single brighter ink for titles.", + "typeClasses": [ + "grotesk-light", + "grotesk-tight" + ], + "colour": "Black or white ground, so the thumbnails are the only colour.", + "paletteTags": [ + "dark-neutral", + "light-neutral" + ], + "imagery": "Many images: at least 24 frames to make a sheet. They can be project photographs from the dealt set cropped to mixed ratios, or page captures of the work. Square corners, no captions on the frames.", + "sectionTags": [ + "dense", + "photo-led", + "quiet" + ], + "motion": "index-preview", + "richness": "Density and order. The mass of small images forms a texture; the strict rows keep it calm.", + "pitfalls": "With fewer than about 20 images it looks unfinished; choose another direction. Do not add a big headline above the sheet. On a phone the frames become two per row at a fixed height and each run scrolls sideways. Rows that run past the right edge read as clipped in screenshots and to most visitors: wrap the frames onto the next line, or end each row inside the grid.", + "seenIn": [ + "aww-gil-huybrecht", + "opl-smallbits", + "opl-gunes-atakan-peksen", + "opl-proooof", + "aww-oimachi" + ], + "allow": [], + "needsPictures": true + }, + { + "id": "editorial-report", + "name": "The printed annual", + "sectors": [ + "culture", + "nonprofit", + "education", + "finance", + "saas", + "ai-product", + "health", + "agency", + "other" + ], + "tones": [ + "editorial", + "bold" + ], + "needs": [], + "idea": "Lay the page out like a well-designed printed report or magazine feature: a masthead image, a tight oversized title, text held to a strict column line, and colour used in solid blocks the way a two-colour print job would. It gives weight and authority to subjects that are really about content: findings, a manifesto, a programme, a serious product. The reader should feel that someone edited this.", + "composition": "A fixed vertical axis at about 42% of the viewport width organises everything: headings begin on it, body columns hang from it, and the 0–42% zone holds small side notes, figures or stays empty. Masthead: a wide image band (photographic mosaic or a single crop) across the top 45% of the first screen; below it the title at 7–9vw starting on the axis, with a two-sentence standfirst at 20–24px. Sections alternate between text pages (title on the axis, body in one or two columns of 34–40ch to its right) and full-bleed colour pages carrying one large figure, quotation or image mosaic. Mosaics are gutterless: photographs and flat colour tiles butted together in a 4- or 6-cell grid. Page numbers, running heads and other print furniture are left out.", + "typography": "A tight heavy grotesk or a sharp serif for titles; an excellent text face for reading at 18–20px with leading near 1.5. Headings in sentence case, tracked tight.", + "typeClasses": [ + "grotesk-tight", + "serif-display", + "serif-text" + ], + "colour": "Paper, ink and two or three solid block colours. A colour page is a whole section in one flat colour.", + "paletteTags": [ + "flat-loud", + "two-tone", + "mono-accent" + ], + "imagery": "Photographs used as blocks in mosaics alongside flat colour tiles; mixed subjects are fine if cropped tight and converted to one treatment.", + "photoTreatment": "Give all photographs in a mosaic one treatment: greyscale via `filter: grayscale(1) contrast(1.05)`, or all full colour. Do not mix.", + "sectionTags": [ + "type-led", + "colour-field", + "dense", + "poster" + ], + "motion": "masked-headline", + "richness": "The column line, the mosaics and whole pages of colour give structure and variety without ornaments.", + "pitfalls": "The axis must be exact and reused everywhere or it reads as random indentation. Keep paragraphs to a real reading measure. On a phone the axis collapses to the left margin and side notes move inline above their paragraph.", + "seenIn": [ + "aww-ai-in-design-report-2026", + "opl-applied-imagination", + "opl-the-queue", + "opl-artem-taradash", + "opl-belgrade-architecture" + ], + "allow": [] + }, + { + "id": "loud-flat-poster", + "name": "Loud and flat", + "sectors": [ + "agency", + "consumer-app", + "music", + "event", + "education", + "nonprofit", + "physical-product", + "saas", + "culture" + ], + "tones": [ + "bold", + "playful" + ], + "needs": [], + "idea": "A page with the directness of a street poster: flat saturated colour, the heaviest type you can find, short blunt statements, and photographs cut out and stuck on. It is for subjects with a voice. Write the page as things a person would actually say out loud, and let the design say them at full volume. The craft is in the control beneath the noise: a strict grid, two or three colours, and exact alignment keep it from becoming a mess.", + "composition": "Hero: a statement of three to six words in ultra-heavy type at 11–15vw, filling the width, lines stacked tight (leading 0.85), flush left with 20–28px margins, on a flat saturated ground. One cut-out or hard-cropped photograph overlaps the type from the right or bottom, tilted 3–6 degrees. A single chunky button in the contrasting flat colour. Sections are solid panels in alternating palette colours: one is a row of short statements each on its own panel of unequal width; one is a single photograph bleeding off two edges with a caption block set over a solid colour bar; one is a large plain list. Panels meet edge to edge. Corners are square or use one large radius (28–40px) consistently.", + "typography": "The heaviest weight available, set tight, mostly lowercase or mostly uppercase (choose one). Body text is a plain grotesk at 18–20px.", + "typeClasses": [ + "heavy-black", + "condensed-heavy", + "extended-heavy", + "rounded-friendly" + ], + "colour": "Three or four flat colours at full strength including black or white. Each panel is one colour; text on it is one other.", + "paletteTags": [ + "flat-loud" + ], + "imagery": "Photographs with attitude, cropped hard or cut to a simple shape with `clip-path` (circle, arch, blunt polygon), slightly rotated, overlapping the type. Two or three on the page.", + "sectionTags": [ + "poster", + "colour-field", + "type-led" + ], + "motion": "edge-marquee", + "richness": "Colour mass, type mass, and overlap.", + "pitfalls": "Headlines still obey the two-line rule: at 13vw that means very few words, which is correct for this voice. No outlines, no offset shadows, no sticker confetti. Rotation is for two or three images only, never for text blocks.", + "seenIn": [ + "aww-warm-fuzzy", + "aww-aardvark-book-club", + "opl-uglycash", + "opl-depo-budget-app", + "aww-trevor-noah" + ], + "allow": [] + }, + { + "id": "split-stage", + "name": "The split stage", + "sectors": [ + "restaurant", + "hospitality", + "personal-portfolio", + "physical-product", + "fashion", + "real-estate", + "health", + "culture", + "ecommerce", + "saas", + "consumer-app" + ], + "tones": [ + "warm", + "quiet", + "editorial" + ], + "needs": [], + "idea": "Half the screen never moves. One side is a fixed photograph (or object, or product view) that stays in place for the whole visit; the other side is a calm scrolling column with everything you need to read. The fixed half keeps the feeling present while the reader gets on with the facts, like sitting in the room while reading the menu. As sections pass, the fixed image may quietly change to the one that matches.", + "composition": "Desktop: a two-column page, 50/50 or 45/55. One column is `position: sticky; top: 0; height: 100svh` and holds a single photograph filling it edge to edge, or the object centred on a flat field. The other column scrolls and holds all content in a single narrow measure (max 46ch) with comfortable padding (48–72px): name and one-line description first, then sections separated by generous space, then contact and footer. Headings in the scrolling column are modest (32–44px). The column grounds differ: photograph on one side, flat paper colour on the other, meeting at a clean vertical edge. On a phone the fixed half becomes a 60svh image at the top that stays sticky behind the first section, then releases.", + "typography": "A text-first setting: a readable serif or a calm sans at 17–19px, with one display size for the name. Left-aligned throughout.", + "typeClasses": [ + "serif-text", + "serif-display", + "grotesk-light", + "slab" + ], + "colour": "The paper colour of the reading column is chosen against the photograph: a tone taken from its shadows or its lightest area. One ink, optionally one accent ink for links and the action.", + "paletteTags": [ + "two-tone", + "earth", + "light-neutral", + "photographic-neutral" + ], + "imagery": "One excellent portrait-orientation photograph for the fixed half, plus three or four more that crossfade in as their sections arrive. Small inline photographs in the reading column are optional and should be few.", + "sectionTags": [ + "quiet", + "photo-led", + "type-led" + ], + "motion": "slow-crossfade", + "richness": "A full-height photograph always in view, against a quiet, well-set column of text.", + "pitfalls": "The reading column must be genuinely well typeset, since it is half the page. Do not put cards or grids in it. Check that the fixed image crops well at short viewport heights. In blind tests the commonest complaint was monotony: several screens of the same split with only the text changing. Change what the reading half holds from section to section (a list, a large figure, a table, a full-colour panel, a drawing) and let at least one section break the split and run full width.", + "seenIn": [ + "opl-le-petit-bleu", + "opl-rafael-derolez-2026", + "opl-flowjam-2", + "opl-devonshire" + ], + "allow": [] + }, + { + "id": "dense-tiles", + "name": "The well-kept board", + "sectors": [ + "agency", + "studio-portfolio", + "saas", + "dev-tool", + "ai-product", + "culture", + "music", + "other" + ], + "tones": [ + "technical", + "bold" + ], + "needs": [], + "idea": "The whole page is a board of tiles fitted edge to edge with narrow gaps, like a tidy desk seen from above. Each tile is one thing: the name, a statement, a photograph, a number, a link, a short list. There is no hero and no sequence of bands; the page is one continuous composition that the eye roams. It suits subjects with many small true things to show (a studio with work, writing, clients and news; a product with several distinct capabilities) and it replaces the generic bento by having real content in every tile and a strict system for sizes.", + "composition": "A 12-column grid with 8px gaps and 8–12px outer margins, filled completely, no empty cells. Tiles use only four sizes (for example 6×4, 6×2, 3×2, 3×4 in column × row units of about 90px). Every tile is a flat filled rectangle: ground colour one step from the page, or a palette colour, or a photograph covering it. One radius everywhere (0, or 6–10px). The first screen contains: a name tile (the name at display size, the largest type on the page) with the wordmark set large, a statement tile with the description at 28–40px, two or three image tiles and one action tile in the accent colour. Text inside tiles is top-left aligned with 20–24px padding and never centred. Below the first screen the board continues with the same sizes; the last row is the footer made of tiles.", + "typography": "One grotesk in two weights. Inside tiles: a large size for single statements, a small size for lists. No uppercase labels in tile corners.", + "typeClasses": [ + "grotesk-tight", + "geometric" + ], + "colour": "Page ground, tile ground one step lighter or darker, and one or two palette colours on selected tiles. Photographs supply the rest.", + "paletteTags": [ + "dark-neutral", + "light-neutral", + "mono-accent" + ], + "imagery": "Photographs fill whole tiles with `object-fit: cover`; choose images that crop well to both wide and tall tiles.", + "sectionTags": [ + "dense", + "colour-field", + "photo-led" + ], + "motion": "stillness", + "richness": "The fit. A full board with consistent gaps and varied tile contents is satisfying in the way a packed suitcase is.", + "pitfalls": "Tiles are filled, never outlined, and never carry shadows. Do not put an icon and a two-line feature blurb in every tile; vary what tiles hold. Decide the phone layout as its own board: two columns, tiles re-ordered so the name and statement lead.", + "seenIn": [ + "aww-oimachi", + "aww-aspen-search", + "aww-realevate", + "opl-justin-lerner" + ], + "allow": [] + }, + { + "id": "uneven-photographs", + "name": "Photographs at uneven sizes", + "sectors": [ + "hospitality", + "real-estate", + "architecture", + "fashion", + "restaurant", + "culture", + "health", + "nonprofit", + "studio-portfolio", + "physical-product" + ], + "tones": [ + "quiet", + "luxury", + "warm", + "editorial" + ], + "needs": [], + "idea": "A calm page where the pictures are placed like prints on a gallery wall: each at its own size and position, with text set small and light between them. Nothing lines up in the obvious way, yet everything sits on a grid you can feel. The unevenness is what makes it read as art-directed by a person: a small portrait far left, a wide landscape running off the right edge, a square that overlaps the next section. It lets photographs lead without ever becoming a slideshow.", + "composition": "A 12-column grid with wide margins (5–7vw). The hero is a single line of large light type (6–9vw) across the top third, and below it one photograph placed off-centre (columns 6–12, 16:10), its top edge overlapping the baseline zone of the headline by a few pixels of deliberate tension. Each following section places two or three photographs with different spans and vertical offsets: for example a 3:4 portrait in columns 2–5 starting 120px lower than a 16:10 landscape in columns 7–12; then a single small 1:1 in columns 9–11 beside a paragraph in columns 2–6. Paragraphs are short (max 40ch) and sit in the gaps. No two consecutive sections use the same arrangement. Vertical spacing is large and irregular on purpose (120–260px).", + "typography": "A light or regular weight at large size for the few headings; small, quiet text. Serif or a slender sans. Everything left-aligned to grid lines.", + "typeClasses": [ + "serif-light-large", + "serif-text", + "grotesk-light" + ], + "colour": "A pale neutral ground with one deep ink taken from the photographs. No accent beyond a quiet link colour.", + "paletteTags": [ + "light-neutral", + "earth", + "photographic-neutral" + ], + "imagery": "Six to nine photographs from one set, in a deliberate mix of ratios (3:4, 4:5, 1:1, 16:10, 21:9). Square corners. Captions, if any, are one short line under an image in the soft ink.", + "sectionTags": [ + "photo-led", + "quiet" + ], + "motion": "shutter-image", + "richness": "Placement. The differing sizes and offsets create movement on a still page.", + "pitfalls": "Uneven is not random: every image edge lands on a column line, and offsets come from a small set of values. On a phone, keep the unevenness with alternating widths (100%, 72% left, 60% right) rather than stacking everything full width.", + "seenIn": [ + "aww-tengile-malamala-collection", + "aww-sobha-privy-collection", + "aww-kononenko-architectural-bureau", + "opl-zara-webb" + ], + "allow": [], + "needsPictures": true + }, + { + "id": "dark-room", + "name": "The dark room", + "sectors": [ + "hospitality", + "restaurant", + "music", + "fashion", + "physical-product", + "finance", + "architecture", + "studio-portfolio", + "ai-product", + "personal-portfolio" + ], + "tones": [ + "quiet", + "luxury" + ], + "needs": [], + "idea": "One dark field from top to bottom, and in it, lit things. Photographs and objects appear like exhibits in a dim gallery: each with space around it, each the brightest thing on its screen. Type is light, small and sparse. The darkness is not a theme switch; it is a room, and the page is a slow walk through it. It suits subjects sold on atmosphere and material: an evening restaurant, a metal card, a record, a house at dusk.", + "composition": "A single near-black or deep-toned ground runs the full page with no section bands. First screen: either the name at full width in a light weight along the bottom edge with one dim photograph above it, or one object or photograph centred at 40–50% of the viewport with a line of text beneath at 16–18px. Each later screen holds one or two lit items at a generous size (the main one 40–60% of the screen width) with its text set beside it at full reading size; the darkness frames the items, it does not replace content. Images vary in size but all share the same darkness at their edges so they sit in the ground without frames. Practical details come last in a simple two-column text block. The only solid light element on the page is the single primary action.", + "typography": "Light or regular weights; they glow on dark. Avoid heavy bold, which looks cheap on black. Headings 4–7vw at most; text 16–18px with leading 1.6 and a slightly lifted ink (not pure white).", + "typeClasses": [ + "grotesk-light", + "serif-light-large", + "serif-display", + "extended-heavy" + ], + "colour": "A dark ground with a tint (blue-black, green-black, brown-black), a soft light ink, a dimmer ink for secondary text, and one warm or bright accent used once per screen at most.", + "paletteTags": [ + "dark-neutral" + ], + "imagery": "Low-key photographs: dark backgrounds, one light source, subjects emerging from shadow. Their dark edges should blend into the page ground.", + "photoTreatment": "If a photograph's background is lighter than the page, darken the image slightly (`filter: brightness(0.85) contrast(1.05)`) rather than adding a frame.", + "sectionTags": [ + "photo-led", + "quiet", + "object-led" + ], + "motion": "slow-crossfade", + "richness": "Light against dark, and the slow pacing.", + "pitfalls": "Grey text on black fails contrast quickly: check it. No glow effects, no neon accent, no coloured light blobs. A dark page with a bright busy photograph is not this direction; choose low-key images. Dark does not mean empty: every screen still carries its content at a readable size, and running text is a light ink at 7:1 or more, not a dim grey.", + "seenIn": [ + "opl-kereliott", + "aww-moto-finance", + "aww-izanami", + "aww-cipher", + "opl-deeo-studio-2" + ], + "allow": [], + "photoTone": "dark" + }, + { + "id": "type-only-statement", + "name": "Type and nothing else", + "sectors": [ + "saas", + "dev-tool", + "ai-product", + "finance", + "agency", + "nonprofit", + "education", + "personal-portfolio", + "event", + "other" + ], + "tones": [ + "bold", + "quiet", + "editorial", + "technical" + ], + "needs": [], + "idea": "The first screen is made only of words, colour and space, good enough that nobody misses a picture there. Pictures arrive later, large and few, as relief from the type. This is the honest answer when a subject has nothing worth photographing: instead of inventing illustrations, set what you have to say as well as it can be set. The typography carries a point of view through scale (one enormous statement, everything else small), through measure (a narrow, bookish column or a full-width line), and through one committed colour.", + "composition": "First screen: the statement, two lines at most, set at 9–14vw and occupying the full width with tight leading, positioned in the upper two-thirds. One supporting sentence at 20–24px sits bottom-left on the same margin and the single action sits bottom-right on the same baseline. No navigation bar; two or three links in a top corner. Sections that follow are typographic set pieces, each different: a list of five to eight capabilities set at 4–6vw one per line; a paragraph at 28–36px in a 28ch column pushed to the right half; a pair of large numerals with a sentence each; a single quotation filling a colour field. Each section uses a different horizontal position (left, right, full) so the page has movement without imagery.", + "typography": "This direction lives or dies on the face and its settings. Display at tight tracking and leading; text sizes few and far apart (for example 15, 22, 34 and the display size). Use real typographic detail: proper quotes, balanced line breaks, hung punctuation where it helps.", + "typeClasses": [ + "grotesk-tight", + "serif-display", + "heavy-black", + "condensed-heavy", + "serif-light-large" + ], + "colour": "Either one saturated ground for the whole page with a single ink, or paper and ink with one section inverted and one in the accent as a full field. Colour does the job images would have done.", + "paletteTags": [ + "single-field", + "two-tone", + "flat-loud", + "light-neutral", + "dark-neutral" + ], + "imagery": "The first screen has no picture. Further down, real pictures of the subject's world (found with scripts/assets.mjs) arrive large and few: a full-bleed photograph between two type sections, a looping clip in one band, an archival image beside a list. Do not add icons, shapes, patterns or abstract graphics to compensate for anything.", + "sectionTags": [ + "type-led", + "poster", + "colour-field" + ], + "motion": "masked-headline", + "richness": "Scale contrast and colour mass. A capability list set at 5vw is an image in its own right.", + "pitfalls": "Without pictures, weak copy has nowhere to hide: write real sentences. Vary the set pieces; four sections of big-heading-plus-paragraph is a text document, not a design. Keep all headings within two lines.", + "seenIn": [ + "aww-bleibtgleich26", + "opl-spatial", + "aww-coffeetech-r", + "opl-statements", + "aww-nothin" + ], + "allow": [] + } +] \ No newline at end of file diff --git a/.agents/skills/design-taste-frontend/library/heroes.json b/.agents/skills/design-taste-frontend/library/heroes.json new file mode 100644 index 0000000..74227d9 --- /dev/null +++ b/.agents/skills/design-taste-frontend/library/heroes.json @@ -0,0 +1,1086 @@ +[ + { + "id": "name-under-photograph", + "name": "Name under a photograph", + "archetype": "giant-wordmark", + "directions": [ + "name-as-monument", + "place-carries-it", + "dark-room" + ], + "needs": [], + "blueprint": "A full-bleed photograph fills the top 58% of the 1440×900 viewport, touching the top, left and right edges, `object-fit: cover`, with its focal point in the upper two-thirds. The lower 42% is a flat ground colour that butts against the photograph with no gap. The name runs across this band on one line, spanning all 12 columns between 24px margins, at clamp(120px, 19vw, 300px), tracking -0.05em, line-height 0.85, its baseline 28px above the bottom edge so descenders nearly touch it. Fit the size to the length of the name so it never wraps. In the strip of ground between photograph and name, 24px under the photograph's edge, sits one row at 17px: the supporting sentence on columns 1–5 at the left margin, and the single action as a small solid rectangular button flush to the right margin. Navigation is four text links at 15px laid over the photograph's top-right corner, 24px in, with a neutral scrim behind that row only if the image is light there. No logo is repeated: the name is the logo. Nothing else is on the screen.", + "mobile": "The photograph takes the top 50svh at full width, re-cropped around its focal point. The name sits under it at 23vw on one line; a name longer than seven characters breaks onto two lines at 21vw, line-height 0.85, and fills the band down to a 16px bottom margin. The supporting sentence at 16px and the action button stack above the name on the left margin. The links collapse to one 'Menu' word over the photograph, top-right.", + "headline": "The name itself on one line, up to about 12 characters at 19vw (drop towards 13vw for longer names), and at most two lines on a phone.", + "motion": "scaling-wordmark", + "seenIn": [ + "aww-house-of-honey-1", + "opl-kereliott", + "aww-lxl-creative" + ] + }, + { + "id": "stacked-name-two-inks", + "name": "Stacked name, two inks", + "archetype": "type-poster", + "directions": [ + "name-as-monument", + "colour-chapters", + "type-only-statement" + ], + "needs": [], + "blueprint": "One saturated flat field covers the whole 1440×900 viewport and there is no image. The name is broken into two lines and set flush left from a 40px margin at clamp(110px, 15vw, 230px), heavy weight, tracking -0.04em, line-height 0.82 so the lines almost touch. The block starts 14% down and fills the top 58% of the screen; the longer line reaches at least column 11. Line one is set in the light ink and line two in the dark ink, so the break reads as a change of voice: split a two-word name between the lines, or break one long name with a hyphen at a syllable. The top edge carries only small text at 15px, 24px in: a monogram top-left, and two or three text links plus the single action as an underlined link top-right. The supporting sentence, 18px in the light ink and max 30ch, is right-aligned in the bottom-right corner on columns 9–12, its last line 40px above the bottom edge. The bottom-left corner stays empty. The next section begins as a different flat field exactly at the fold.", + "mobile": "The field fills 100svh. The name keeps its two lines and two inks at 21vw, flush left at a 16px margin, starting 18% down; a long name hyphenates rather than dropping below 18vw. The supporting sentence moves to the bottom-left at 16px across the full width, with the action as an underlined link beneath it, 24px above the bottom edge. The top-right links reduce to one word.", + "headline": "The name on exactly two lines, one per ink, each line up to about 8 characters at 15vw on desktop and 21vw on a phone.", + "motion": "masked-headline", + "seenIn": [ + "opl-marina-rachello", + "opl-anidachi" + ] + }, + { + "id": "photograph-for-a-letter", + "name": "Photograph for a letter", + "archetype": "giant-wordmark", + "directions": [ + "name-as-monument", + "sentence-as-layout" + ], + "needs": [], + "blueprint": "A flat white or pale ground, about 85% empty. The name sits on one line at the exact vertical centre, bold, at clamp(96px, 10.5vw, 168px), tracking -0.04em, spanning 78–88% of the width with equal side margins. One photograph is set into the line as if it were a glyph. Either it fills the word space between first and last name (a landscape frame one x-height tall and about 1.6em wide, resting on the baseline), or it replaces one round letter of a short name (a square frame exactly one cap-height tall). Build the line as an inline-flex row with `align-items: baseline` and size the frame in em so it scales with the type; square corners, `object-fit: cover`. Navigation is small and pushed to the edges: a 15px wordmark or monogram top-left at a 24px margin and up to five text links at 14px spread evenly across the right half of the top edge. Along the bottom edge, on the same margin: one supporting sentence at 16px starting at column 6, and the single action as an underlined text link flush right.", + "mobile": "The name stacks on two centred lines at 19vw with line-height 0.9. The photograph leaves the line and becomes a 3:2 frame at full width minus 16px margins between the two lines, so the screen reads word, picture, word. A single short name keeps the square frame inline at cap height instead. The supporting sentence and action sit under the block at 16px; the links collapse to one word top-right.", + "headline": "The name on one line with a photograph in its word space or in place of one letter, up to about 16 characters at 10.5vw, splitting into two lines on a phone.", + "motion": "shutter-image", + "seenIn": [ + "aww-paul-kalkbrenner", + "opl-nia-creative" + ] + }, + { + "id": "name-split-to-corners", + "name": "Name split to corners", + "archetype": "pinned-stage", + "directions": [ + "pinned-poster", + "name-as-monument" + ], + "needs": [], + "blueprint": "The name is cut into two halves that stay pinned to opposite corners while the page passes between them. A layer with `position: sticky; top: 0; height: 100svh` and `pointer-events: none` holds both: the first word top-left, 28px from the top and left edges; the second word bottom-right, 28px from the bottom and right edges. Both are set at clamp(72px, 9vw, 140px), line-height 0.85, in white with `mix-blend-mode: difference` so they read on every panel beneath. On the first screen the stage between them is a paper-white panel on columns 1–9 and one full-height photograph on columns 10–12 touching the top, right and bottom edges. The supporting sentence, 20px and max 34ch, starts at column 3 at 44% of the height; the single action is a text link with an arrow directly under it. Three text links are stacked at 15px along the right edge of the white panel at mid-height. The rest of the panel is empty. Later panels, full-height photographs and text panels of different widths, scroll under the pinned halves for three to five viewports; then the layer releases into ordinary sections.", + "mobile": "Both halves stay pinned: the first word top-left and the second bottom-right, each at 15vw with 16px margins. Between them every panel is a full-width photograph 56svh tall followed by its sentence at 17px. On the first screen the photograph crosses the middle band with the supporting sentence and the action link beneath it. The stacked links collapse to one word at the top-right corner.", + "headline": "The name in two halves (two words, or one word cut at a syllable), each up to about 9 characters at 9vw, one per corner, with no other headline.", + "motion": "pinned-story", + "seenIn": [ + "aww-normal-is-boring", + "aww-the-state-of-the-gallery", + "aww-milledollars" + ] + }, + { + "id": "pinned-title-over-portraits", + "name": "Pinned title over portraits", + "archetype": "pinned-stage", + "directions": [ + "pinned-poster", + "name-as-monument" + ], + "needs": [], + "blueprint": "A pale flat ground. The title runs on one line of extra-bold uppercase at clamp(90px, 10vw, 160px), centred, spanning about 82% of the width, its cap line 120px from the top. It lives in a sticky layer (`position: sticky; top: 0; height: 100svh`) stacked above the images and set in one saturated ink that reads on both ground and photograph. Beneath it a single portrait photograph, 2:3, sits centred on columns 5–8 (about 37% of the width) and runs from 90px below the top edge down to the bottom edge, so the title crosses its upper quarter and the middle letters sit on the image. The wordmark sits top-left at 24px in 15px bold; one 'Menu' word sits top-right. Bottom-left on columns 1–3: the supporting sentence as a narrow column at 16px bold, max 26ch, its last line 32px above the bottom edge. Bottom-right: the single action as a solid rectangular button. As the page scrolls, further portraits of identical ratio and position replace the first, five to eight in all, each bringing its own flat ground colour sampled from the photograph, before the layer releases.", + "mobile": "The title stays pinned at the top at 17vw on one line, or two lines at 15vw if longer than ten characters. Each portrait becomes full width minus 16px margins at 2:3 and starts behind the lower half of the title. The supporting sentence follows the first portrait at 16px. The action button is fixed to the bottom-right corner, 16px in. The wordmark shrinks to a monogram top-left.", + "headline": "The title of the series, or the name: one uppercase line of up to about 14 characters at 10vw, two short lines on a phone.", + "motion": "pinned-story", + "seenIn": [ + "opl-city-of-angels", + "aww-glitch-grit" + ] + }, + { + "id": "sentence-with-photo-strip", + "name": "Sentence with a photo strip", + "archetype": "inline-media-sentence", + "directions": [ + "sentence-as-layout", + "place-carries-it" + ], + "needs": [], + "blueprint": "A warm flat ground with no navigation bar. One sentence of four or five words runs as a single line of condensed capitals at clamp(120px, 13vw, 200px), sitting on the vertical centre and reaching edge to edge inside 28px margins. Where one word of the sentence would be, a strip of photograph takes its place: a frame exactly one cap-height tall (set in em) and 45–50% of the viewport wide, ratio near 5:1, corners radiused 14px, `object-fit: cover`. Build the line as a flex row with `align-items: baseline` and give the strip `flex: 1` so words and picture always fill the width. The photograph shows the thing the sentence names: a wide view of the place, taken from above or along a horizon, so it survives the letterbox crop. The top third of the screen is empty apart from a 15px wordmark top-left and two text links top-right. About 150px under the sentence the single action sits centred as a small solid button. One supporting sentence at 22px, max 44ch, is centred 48px above the bottom edge.", + "mobile": "The sentence breaks into two lines at 21vw with the strip between them: the first words, then the photograph as a 2:1 frame at full width minus 16px margins with the same 14px corners, then the remaining words. The block is centred vertically. The action button sits 32px under the last line and the supporting sentence under that at 16px. The top links collapse to one word.", + "headline": "A sentence of four or five short words, about 14 characters of type in total, whose missing word is the photograph.", + "motion": "shutter-image", + "seenIn": [ + "aww-colonia-zacamil" + ] + }, + { + "id": "sentence-split-by-frame", + "name": "Sentence split by a frame", + "archetype": "inline-media-sentence", + "directions": [ + "sentence-as-layout", + "pinned-poster", + "product-performs" + ], + "needs": [], + "blueprint": "A white or pale ground. One short sentence is broken in two and pushed to the edges: the first half flush to the 32px left margin, the second half flush to the right margin, both on the vertical centre line at clamp(40px, 3.6vw, 60px), medium weight. Between them, dead centre on columns 5–8, sits one media frame: 35% of the viewport wide, 16:9, corners 4px, holding a photograph or a working fragment of the product. The frame belongs to a vertical reel: the bottom 60px of the previous frame shows at the top edge of the viewport and the top 60px of the next at the bottom edge, same width, 24px gaps, so the centre column reads as a strip passing through the sentence. The stage is sticky; the reel advances three or four steps while the two halves of the sentence hold their place. Wordmark top-left; three text links and the single action as a small solid button top-right, all at 15px. Bottom-left on columns 1–4: one supporting sentence at 18px, its last line 32px above the bottom edge. The other corners stay empty.", + "mobile": "The halves stack: the first half of the sentence at 9vw flush left under the wordmark, then the frame at full width minus 16px margins and 4:3, then the second half flush right at 9vw. The neighbouring frames show as 28px slivers above and below. The supporting sentence and the action button follow at 16px. The links collapse to one word.", + "headline": "One sentence of four to six words split into two halves of up to about 14 characters each; the frame between them shows what it is about.", + "motion": "pinned-story", + "seenIn": [ + "aww-made-with-gsap-1", + "aww-artem-shcherbakov" + ] + }, + { + "id": "headline-across-two-fields", + "name": "Headline across two fields", + "archetype": "colour-field", + "directions": [ + "colour-chapters", + "sentence-as-layout", + "type-only-statement" + ], + "needs": [], + "blueprint": "The viewport is two flat fields meeting at exactly half height: paper above, one saturated colour below, with a hard edge and nothing drawn on it. A two-line headline in black-weight capitals at clamp(96px, 9.5vw, 150px), line-height 0.86, is centred across the seam and spans about 70% of the width, so line one stands on the upper field and line two is cut through its upper third by the seam. The type changes ink where it crosses: above the seam it takes the accent ink, below it a deep ink two steps darker than the lower field, as if submerged. Build it as two stacked copies of the same headline, one per ink, the first clipped with `clip-path: inset(0 0 50% 0)` and the second with `inset(50% 0 0 0)`. Wordmark top-left at 28px; up to four text links and the single action, a solid rectangular button, top-right. One supporting sentence at 20px in the paper colour is centred on the lower field, 56px above the bottom edge. The lower field continues for 30svh past the fold before the next colour begins.", + "mobile": "The same two fields with the seam at 46svh. The headline stays on two lines at 15vw, centred, still cut by the seam and still changing ink. Wordmark top-left and the action button top-right; the links drop into one menu word beside it. The supporting sentence sits on the lower field at 16px, centred, max 28ch, with 40px beneath it.", + "headline": "A statement of two to four words on two lines, up to about 10 characters per line, whose meaning the rising field acts out.", + "motion": "colour-on-scroll", + "seenIn": [ + "opl-juggle" + ] + }, + { + "id": "swatch-column-beside-view", + "name": "Swatch column beside the view", + "archetype": "split", + "directions": [ + "colour-chapters", + "place-carries-it" + ], + "needs": [], + "blueprint": "A 10px frame of paper colour surrounds the screen. Columns 1–10 are one photograph panel, full height inside the frame, corners radiused 12px, `object-fit: cover`: a wide, calm view with a low horizon and a great deal of sky. The headline is centred in the panel's upper third on two lines of light-weight serif at clamp(72px, 8.6vw, 132px), white, with a neutral scrim behind that band only if the sky is pale. The wordmark sits top-left inside the panel, 28px in. The single action, a white rectangular button, sits bottom-centre, 36px above the panel's lower edge; one supporting sentence at 18px sits bottom-left on columns 1–4, level with it. Columns 11–12 are both the navigation and a preview of the page: a full-height stack of five flat colour blocks of equal height, butted together with no gaps, each holding one text link at 16px in its top-left corner with 20px padding. The five colours are sampled from the photograph, ordered light to dark, and each is the ground colour of the section its link scrolls to. There is no other navigation.", + "mobile": "The photograph panel takes the top 64svh inside an 8px frame, with the headline at 12vw on two lines in its upper third and the action button at its bottom-centre. The swatch column becomes five full-width bars, each 52px tall with its link at 15px, stacked directly under the panel; the first three show above the fold. The supporting sentence moves into the first section.", + "headline": "A two-line statement of three to five words, up to about 14 characters per line at 8.6vw, set over the sky.", + "motion": "colour-on-scroll", + "seenIn": [ + "aww-seasats" + ] + }, + { + "id": "film-title-on-bottom-edge", + "name": "Film title, bottom edge", + "archetype": "bottom-anchored-type", + "directions": [ + "place-carries-it", + "name-as-monument" + ], + "needs": [], + "blueprint": "One photograph fills the viewport at 100vw by 100svh, `object-fit: cover`, with its subject in the upper two-thirds and a calmer, darker zone along the bottom. The name is one condensed uppercase word, or a short name in a high-contrast serif, set at clamp(150px, 17.5vw, 290px) and sized to span the full width between 32px margins. It is centred and anchored so its baseline sits 34px above the bottom edge, covering roughly the lowest quarter of the frame. A soft neutral dark scrim lies under that bottom band only, about 40% of the height; the rest of the image is untouched. Directly above the name's left end, on the same margin, sits the supporting sentence at 16px on two short lines. Directly above its right end, right-aligned, sits the single action as a small paper-coloured rectangular button. The top edge carries a small emblem or wordmark at the left margin and up to five text links at 15px grouped at the right, all in white. The central half of the screen belongs to the view.", + "mobile": "The photograph is re-cropped to portrait with `object-position` on its subject and fills 100svh. The name stays on the bottom edge at 22vw on one line, or two lines at 20vw beyond eight characters, 20px above the edge. The supporting sentence sits above the name's left end at 15px. The action button moves to the top-right corner and the links collapse to a menu word beside the emblem.", + "headline": "The name of the place: one word of up to about 12 characters at 17.5vw, or two words stacked on a phone.", + "motion": "slow-crossfade", + "seenIn": [ + "aww-white-desert", + "opl-eagles-nest" + ] + }, + { + "id": "small-name-open-sky", + "name": "Small name, open sky", + "archetype": "fullbleed-media", + "directions": [ + "place-carries-it", + "uneven-photographs" + ], + "needs": [], + "blueprint": "A single photograph fills the viewport edge to edge with no frame: choose one whose upper 45% is sky, wall or water with nothing in it and whose subject sits low and off-centre. All type is white and stays out of that empty zone. Top-left at a 24px margin, the name is stacked on two or three lines at 14px, like a letterhead. Top-right, three or four text links run in one line at 14px separated by commas, the current one marked by a 2px underline. Bottom-left, 32px from the left and bottom edges, the name repeats as the only larger type: two tight lines at clamp(44px, 4.2vw, 64px), line-height 1.0, regular weight, on columns 1–5. On the same baseline at the bottom-right margin sits the single action as an underlined text link with an arrow, and above it one supporting sentence at 15px, right-aligned, max 32ch. If a lower corner is too bright for white type, darken that corner alone with a neutral scrim. The page below opens on plain paper with one narrow paragraph and wide empty margins.", + "mobile": "The photograph is cropped to portrait around its subject and fills 100svh, its upper half still empty. The small stacked name stays top-left at 13px and the links collapse to one word top-right. The larger name sits bottom-left at 9.5vw on two lines, 20px in. The supporting sentence and the underlined action stack beneath it at 15px, left-aligned, 24px above the bottom edge.", + "headline": "The name set small on two lines of up to about 16 characters each at 4.2vw; the photograph does the work of a headline.", + "motion": "slow-crossfade", + "seenIn": [ + "aww-kononenko-architectural-bureau", + "aww-julien-calot", + "aww-depo-luxe" + ] + }, + { + "id": "invitation-card-cropped", + "name": "Invitation card, cropped", + "archetype": "artefact", + "directions": [ + "page-is-the-object" + ], + "needs": [], + "blueprint": "A flat field of one soft colour fills the viewport. Centred on it is a single portrait card in paper colour, 5:7, on columns 4–9, its top edge 190px down and its lower third cut off by the bottom of the viewport, so the page visibly continues as the rest of the card. The card is a filled shape with scalloped inner corners, made with `clip-path` or with four corner circles in the field colour, and no outline. Inside, with 56px padding, everything is centred and symmetrical like letterpress stationery. The two names, or the title, are set in a large italic serif at clamp(56px, 5.6vw, 88px) on two lines, staggered so line one sits left of centre and line two right. Between and beneath them, date, time and place appear as short lines at 15px in sentence case, separated by space and by one solid 10px diamond. The top row sits on the field above the card at 28px margins: a small monogram top-left, three text links centred, and the single action, a solid rectangular button in the ink colour, top-right.", + "mobile": "The card becomes full width minus 12px margins, starts 96px down and is still cropped by the bottom edge, with its scalloped top corners kept. The names stay on two lines at 12vw, centred without the stagger, and the details follow at 15px. The monogram sits top-left and the action button top-right on the field; the three links move onto the card's lower part, below the fold.", + "headline": "The two names or the title on two lines, up to about 12 characters per line, set as they would be printed on the card.", + "motion": "curtain-footer", + "seenIn": [ + "opl-sarah-matt-wedding" + ] + }, + { + "id": "card-over-dim-room", + "name": "Card over a dim room", + "archetype": "artefact", + "directions": [ + "page-is-the-object", + "pinned-poster", + "dark-room" + ], + "needs": [], + "blueprint": "A full-bleed, low-key photograph of the room fills the viewport, darkened with `filter: brightness(0.7)` so it reads as atmosphere. Centred over it is one square-cornered panel in a flat warm tone taken from the photograph: columns 4–10, about 55% of the width and 62% of the height, a filled programme card with 32px padding. Along its top edge the three words of the title are spread to the left, centre and right in bold condensed capitals at clamp(28px, 2.5vw, 38px); that line is the headline. Under it sit two left-aligned blocks in the same face and size, line-height 1.0: the facts (date, time, place) as three short lines, then one supporting sentence held to 30ch. Along the card's bottom edge: a credit at left in 14px, the single action as a solid rectangular button in the centre, one text link at right. There is no navigation outside the card. The card is `position: sticky`: as the page scrolls it shrinks with `transform: scale` toward the bottom-left corner and stays there as a ticket-sized stub while photographs of differing sizes pass on a flat ground.", + "mobile": "The photograph fills 100svh and the card sits centred at full width minus 16px margins, 70svh tall. The title words stack as a two-line heading at 9vw at the card's top-left. The facts and the supporting sentence follow at 5.2vw in the condensed face. The action button spans the card's bottom edge. On scroll the card shrinks to a 120px stub pinned bottom-left.", + "headline": "The event or venue name, three words at most and up to about 8 characters each, spread across the card's top edge; two lines on a phone.", + "motion": "pinned-story", + "seenIn": [ + "opl-the-deep-end" + ] + }, + { + "id": "tabbed-folder-stack", + "name": "Tabbed folder stack", + "archetype": "artefact", + "directions": [ + "page-is-the-object", + "one-motif", + "colour-chapters" + ], + "needs": [], + "blueprint": "A dark flat ground. A slim top row at 24px holds the wordmark dead centre and one text link far right at 15px. The headline is one centred line of heavy condensed capitals at clamp(96px, 10vw, 160px), spanning about 70% of the width, its cap line 110px from the top. Under it one supporting sentence in a serif at 20px, centred, max 46ch. From 51% of the height down the screen is a stack of five file folders: flat colour bands 86% of the viewport wide, centred, each offset 64px below the one behind so only a strip of the back four shows. Every folder has one trapezoid tab rising 40px from its top edge, cut with `clip-path: polygon()`, at its own horizontal position and in its own colour, holding one section name at 18px. The front folder is open and runs off the bottom edge; it carries the single action as a solid button at its top-left with 32px padding. Each folder links to its section and lends that section its ground colour. The tab shape returns as the button's top corners.", + "mobile": "The headline sits 96px down at 17vw on one line, or two at 15vw, centred, with the supporting sentence at 16px beneath. The folder stack starts at 48svh at full width: bands offset 52px, tabs 32px tall with names at 15px, staggered left, centre and right. The front folder runs off the bottom with the action button at full width inside it.", + "headline": "The name or a two-word statement on one line of up to about 12 characters at 10vw; two lines allowed on a phone.", + "motion": "index-preview", + "seenIn": [ + "aww-mosbys-files", + "opl-medium-rare" + ] + }, + { + "id": "striped-card-beside-room", + "name": "Striped card beside the room", + "archetype": "split", + "directions": [ + "one-motif", + "page-is-the-object", + "split-stage" + ], + "needs": [], + "blueprint": "The viewport is split 50/50 with a 12px gap and 12px outer margins. The right half is one full-height photograph of the room, corners radiused 16px, `position: sticky` so it stays in view while the left half scrolls. The left half is a printed card: a flat paper-colour panel with the same 16px radius, and the subject's stripe (from its awning, label or ribbon) as the only ornament. Across the card's top runs a band 56px tall made of alternating bars of the single ink colour and paper, each bar 28px wide, built as a flex row of filled blocks. The same stripe returns as an 8px band above the footer and inside the button on hover. Under the band, centred: the wordmark about 300px wide, then a two-line headline in a light serif at clamp(40px, 3.6vw, 56px) in the ink colour, one supporting sentence at 17px held to 36ch, and the single action as a solid rectangular button. Three text links sit in one centred row at 15px, 28px above the card's bottom edge. One ink on paper; the photograph supplies every other colour.", + "mobile": "The photograph comes first at full width inside 12px margins, 48svh tall, with the 16px radius. The card follows and overlaps the photograph's bottom edge by 24px using a negative margin. Its striped band is 40px tall; below it the wordmark at 56% width, the headline at 8vw on two lines, the sentence and the button, all centred. The links wrap into the card's foot.", + "headline": "A warm two-line welcome of three to six words, up to about 18 characters per line at 3.6vw.", + "motion": "slow-crossfade", + "seenIn": [ + "opl-le-petit-bleu", + "opl-zara-webb" + ] + }, + { + "id": "giant-cropped-shape", + "name": "Giant cropped shape", + "archetype": "colour-field", + "directions": [ + "one-motif", + "colour-chapters" + ], + "needs": [], + "blueprint": "A plain ground with one flat shape at enormous scale. The shape is the simplest geometry found in the subject (a circle, a ring segment, a chamfered block, an arch), drawn in CSS or as a single inline SVG path and filled with the accent colour. It is about 120vh across and enters from the right, centred near 78% of the width and 55% of the height, so the top, right and bottom edges of the viewport crop it and its left boundary reaches column 7. If the subject has a true pair (two accounts, two modes), a second shape in a second flat colour overlaps the first by a quarter with `mix-blend-mode: multiply`. The headline sits on the bare ground on columns 1–6, vertically centred, flush left at 8% from the left edge: two lines at clamp(64px, 6.4vw, 100px), heavy weight, tracking -0.03em. Beneath it comes one supporting sentence at 19px, then the single action as a solid button cut to the same shape. A bold wordmark sits top-left at 32px; up to three text links sit top-right in the ground colour.", + "mobile": "The shape moves to the bottom: 130vw across, centred horizontally, its top at 56svh, cropped by the left, right and bottom edges. The headline sits above it at 11.5vw on two lines at a 16px margin, starting 15% down, with the sentence at 16px and the motif-shaped button beneath. Wordmark top-left; the links collapse to one word top-right.", + "headline": "Two lines of two or three words each, up to about 12 characters per line at 6.4vw.", + "motion": "shutter-image", + "seenIn": [ + "opl-tara", + "opl-superlocal-2026", + "aww-sstr-friction-reduction" + ] + }, + { + "id": "fragment-on-shaped-stage", + "name": "Fragment on a shaped stage", + "archetype": "split", + "directions": [ + "product-performs", + "one-motif", + "colour-chapters" + ], + "needs": [], + "blueprint": "A neutral ground. The headline occupies the upper-left third: two lines at clamp(52px, 5.2vw, 80px), medium weight, flush left on columns 1–6 at a 40px margin, starting 150px down. One supporting sentence at 18px, max 40ch, follows, then the single action as a small rectangular button. The rest of the screen belongs to one flat stage in a saturated colour: it spans columns 5–12, begins 42% down, and bleeds off the right and bottom edges. Its top-left corner is cut with the product's own shape using `clip-path` (a notch, a chamfer or a tab two columns wide), the only decoration on the page. On the stage, 56px in from its left and top edges, sits the main fragment of the interface at true size with labels at 13–15px, built in HTML and working: one panel or control about 620px wide, cropped by the bottom edge, never a whole window and never inside a browser or laptop frame. Mark its root with data-ui. Navigation is a plain row at 28px from the top: wordmark left and four text links right at 15px. Nothing overlaps the headline.", + "mobile": "The headline sits under the wordmark at 10vw on two lines, followed by the sentence at 16px and the button. The stage comes next at full width, bleeding off both sides and the bottom, its corner cut kept at 72px wide. The fragment sits 16px inside it at true size; if it is wider than the screen the right edge crops it rather than scaling it down.", + "headline": "A plain statement of what the product does in three to six words, two lines of up to about 16 characters each at 5.2vw.", + "motion": "shutter-image", + "seenIn": [ + "opl-typewave", + "opl-vessa", + "opl-uni" + ] + }, + { + "id": "control-reads-the-page", + "name": "Control that reads the page", + "archetype": "split", + "directions": [ + "product-performs", + "quiet-instrument", + "dark-room" + ], + "needs": [], + "blueprint": "A near-black or deep neutral ground split into two halves by tone alone: the right half is one step lighter than the left, and they meet at a clean vertical edge at 50%. Left half: a small logo mark top-left at a 40px margin, then two-thirds of empty ground, then everything else anchored bottom-left, 40px from the edges: a one-line headline at clamp(26px, 2.1vw, 32px) in medium weight, one supporting sentence at 17px in the softer ink held to 44ch, and the single action as a light rectangular button. Right half: one fragment of the product, centred, about 450px square, built in HTML and working. It is the product's defining control (a loupe, a picker, a dial, a field) and it acts on the page itself: it reads the real background colour, the real headline size or the pointer position and prints that value in its own readout at 13px. Mark its root with data-ui so the product's own radii and borders apply inside it. There is no navigation bar; one text link sits top-right at 15px.", + "mobile": "The halves stack as two tones. The fragment comes first: 78vw square, centred in the lighter block, which is 58svh tall, still live and reading the page under the visitor's finger. The darker block below holds the headline at 6.4vw on up to two lines, the sentence at 16px and the button, left-aligned at 20px. The logo mark sits top-left over the first block.", + "headline": "One plain line at 26–32px naming what the tool is, up to about 32 characters, wrapping to two lines on a phone.", + "motion": "masked-headline", + "seenIn": [ + "opl-dabbit" + ] + }, + { + "id": "controls-on-the-sentence", + "name": "Controls on the sentence", + "archetype": "type-poster", + "directions": [ + "product-performs", + "sentence-as-layout", + "type-only-statement" + ], + "needs": [], + "blueprint": "A dark flat ground with no logo bar: a 14px wordmark top-left and the single action as an underlined text link top-right, both 28px in. The headline is a two-line sentence, centred, at clamp(96px, 9vw, 150px), line-height 1.0, occupying the middle 64% of the width and sitting slightly above the midline. It is set in a variable font and it is the demonstration. Three small control chips from the product sit on top of the sentence, each about 300 by 80px with the product's true radius, a text label and a numeric readout: one above the first line near its left end, one overlapping the start of the second line, and a two-state switch at the lower right. They are tilted 2 to 4 degrees and filled solid, one step lighter than the ground. Each one works: dragging the first changes the headline's weight through `font-variation-settings`, the second changes its letter-spacing, the third toggles uppercase. Mark each chip's root with data-ui. One supporting sentence at 17px, max 40ch, is centred 72px under the headline. The bottom third of the screen stays empty.", + "mobile": "The sentence stays on two lines at 13.5vw, centred at 38% of the height. The three chips shrink to 200 by 60px and move off the letters: one above the sentence and two side by side beneath it, untilted and still live. The supporting sentence follows at 16px. The wordmark stays top-left and the action link top-right.", + "headline": "A two-line sentence of three to five words, up to about 11 characters per line at 9vw, that still reads when its weight and spacing change.", + "motion": "masked-headline", + "seenIn": [ + "opl-dialkit" + ] + }, + { + "id": "column-on-one-line", + "name": "Column on one line", + "archetype": "quiet-column", + "directions": [ + "quiet-instrument", + "product-performs" + ], + "needs": [], + "blueprint": "A warm off-white page that is more than 80% empty. Everything hangs on one vertical alignment 27% in from the left edge, the start of column 4; nothing is centred and nothing sits to its left. A small logo mark sits on that alignment 56px from the top. About 220px lower the column begins, only 380px wide: a two-line headline at 27px in medium weight, line-height 1.25; one supporting sentence at 15px in the softer ink, line-height 1.5; then, 28px below, the single action as a near-black rectangular button with 4px corners and one text link with an arrow beside it. A sign-in text link sits alone in the top-right corner at 14px; there is no navigation bar. At the bottom edge the first demonstration peeks in on the same alignment: a flat panel one step darker than the page, 368px wide, its top 90px visible, holding two real rows of the product's interface at true size with a visible pointer. Mark the panel's root with data-ui. The right half of the screen is blank on purpose, and nothing spans the full width until the footer.", + "mobile": "The alignment becomes the 24px left margin. The logo mark sits 32px from the top and the column starts at 30% of the height: headline at 24px on two lines, the sentence at 15px, then button and text link side by side. The demonstration panel spans the width between the margins and shows its top 120px above the fold. The sign-in link stays top-right.", + "headline": "A dry two-line statement at 27px, up to about 30 characters per line; it never grows larger at any width.", + "motion": "slow-crossfade", + "seenIn": [ + "opl-rows", + "opl-lovably" + ] + }, + { + "id": "single-object-on-plinth", + "name": "Single object on a plinth", + "archetype": "object-centre", + "directions": [ + "quiet-instrument", + "hero-object", + "specimen-catalogue" + ], + "needs": [ + "product-photo" + ], + "blueprint": "An off-white screen that is about 80% empty and does not need to scroll. One photographed object stands dead centre: a studio shot on a plain background, shown 440px tall (about half the viewport height) whatever its width, with `mix-blend-mode: multiply` so its backdrop disappears into the page. It rests on a plinth, a rounded square 520px across filled one step lighter than the page and centred behind it, with no border. The wordmark sits top-left at a 56px margin in a heavy serif or grotesk, about 400px wide (28% of the viewport) and 80px tall; it is the only large type. Opposite it, top-right on the same margin and aligned to the wordmark's top, sits the one supporting sentence at 15px, right-aligned, max 36ch. Centred 40px under the plinth is the single action: a compact email field or button 240px wide with 8px corners. Further objects replace the first in the same position by crossfade, each scaled to the same visual mass. There is no navigation. Nothing else touches the edges, and the object never grows beyond half the viewport height.", + "mobile": "The wordmark sits top-left at 44vw wide with 20px margins and the supporting sentence drops beneath it at 14px. The plinth is 78vw square, centred at 54% of the height, with the object 44svh tall on it. The action sits 32px under the plinth, 40px in from each side. The screen stays mostly empty and the objects swap in place.", + "headline": "None beyond the name: the wordmark top-left, up to about 10 characters, is the only large type and the object is the statement.", + "motion": "slow-crossfade", + "seenIn": [ + "opl-archiv", + "opl-humanoid-index" + ] + }, + { + "id": "object-crops-three-edges", + "name": "Object cropped by three edges", + "archetype": "object-centre", + "directions": [ + "hero-object", + "loud-flat-poster" + ], + "needs": [ + "product-photo" + ], + "blueprint": "A flat off-white or single bold colour field with no navigation bar: only a small wordmark top-right at 24px and the single action fixed bottom-right as a solid rectangular button. The left 60% of the screen is one object photographed on a plain background and scaled far past its container. Set the image to about 150% of the hero's height, rotate it 10 to 20 degrees and position it so the top, left and bottom edges of the viewport all crop it and only its right-hand third is fully inside; use `overflow: hidden` on the section and `mix-blend-mode: multiply` if the field is light. The headline fills the right half: two stacked lines of very bold lowercase at clamp(120px, 13vw, 210px), right-aligned 16px from the right edge, tracking -0.05em, line-height 0.86, vertically centred. It sits behind the object in the stacking order, so the object's right-hand contour tucks over the first one or two letters of each line. One supporting sentence at 18px, max 28ch, is right-aligned under the headline on columns 9–12. Nothing else is on the screen: no second image, no list.", + "mobile": "The object moves to the top: the image is 150vw wide, rotated, cropped by the top, left and right edges, and occupies the upper 52svh. The headline sits below it at 19vw on two lines, right-aligned at a 12px margin, its first line overlapped by the object's lower contour. The supporting sentence follows at 16px, right-aligned. The action button stays fixed bottom-right.", + "headline": "Two lines of one or two short words each, up to about 8 characters per line at 13vw, partly tucked behind the object.", + "motion": "shutter-image", + "seenIn": [ + "opl-when-you-wish-upon-a-starboy" + ] + }, + { + "id": "object-splits-the-headline", + "name": "Object splits the headline", + "archetype": "object-centre", + "directions": [ + "hero-object", + "sentence-as-layout", + "dark-room" + ], + "needs": [ + "product-photo" + ], + "blueprint": "One deep, flat ground colour. The object, a low-key studio photograph whose background matches the ground, stands at dead centre, scaled to 66% of the viewport height and tilted about 8 degrees, with its base cropped by the bottom edge. The headline is split around it: line one is centred across the object's upper fifth and line two across its lower fifth, both at clamp(64px, 5.8vw, 92px), regular weight, spanning columns 2–11, so the object fills the gap where a paragraph would normally sit. The type lies above the object in the stacking order in the light ink, so every letter stays readable where it crosses. At the object's mid-height two small text blocks at 14px face each other: the supporting sentence far left on columns 1–2, and two short facts (size, price) far right on columns 11–12, right-aligned, each 32px from its edge. Wordmark top-left; three text links top-centre; the single action top-right as a small light rectangular tab, the only light solid on the screen. The lower corners stay dark and empty.", + "mobile": "The object is 54svh tall, centred, its base cropped by the bottom edge. Line one of the headline crosses its top at 11vw and line two its lower third at 11vw, both centred inside 16px margins. The side text blocks merge into one 15px sentence under the navigation. Wordmark top-left and the action tab top-right; the links collapse to one word.", + "headline": "A two-line statement of four to six words, up to about 16 characters per line at 5.8vw, with the object standing between the lines.", + "motion": "slow-crossfade", + "seenIn": [ + "aww-zeroz-brand-site", + "aww-moto-finance" + ] + }, + { + "id": "object-on-the-seam", + "name": "Object on the seam", + "archetype": "object-centre", + "directions": [ + "hero-object", + "quiet-instrument" + ], + "needs": [ + "product-photo" + ], + "blueprint": "A white or very pale page organised by one change of tone. A square-cornered panel one step darker than the page (a flat pale blue-grey or warm grey) fills the top 44% of the viewport inside 12px margins; the page colour runs below it. The object, photographed on a plain background and blended with `mix-blend-mode: multiply`, straddles the seam between the two tones: it is about 62% of the viewport wide, starts at column 6 and runs off the right edge, with its upper half over the panel and its lower half over the page. Type is small and exact. The headline is two lines at 24px in medium weight, far left on columns 1–3 at a 32px margin, its first baseline resting exactly on the seam; the second line is set in the softer ink. One supporting sentence at 15px, max 34ch, sits 120px lower on the same margin with the single action as a small rectangular button under it. A plain top row inside the panel at 14px: wordmark left, three text links centred, one text link right.", + "mobile": "The tonal panel takes the top 46svh. The object is 120vw wide, centred on the seam and cropped by the right edge. The headline sits just under the seam at 22px on two lines at a 20px margin, with the sentence at 15px beneath and then the button. The wordmark sits top-left inside the panel; the links collapse to one word top-right.", + "headline": "Two short sentences at 24px, one per line and up to about 28 characters each, the second in the softer ink.", + "motion": "shutter-image", + "seenIn": [ + "opl-aevion" + ] + }, + { + "id": "statement-beside-specimen-mosaic", + "name": "Statement beside specimen mosaic", + "archetype": "mosaic", + "directions": [ + "specimen-catalogue", + "split-stage", + "uneven-photographs" + ], + "needs": [ + "product-photo" + ], + "blueprint": "The viewport is split 50/50 by tone alone: the left half is the page ground, the right half a field one step darker, meeting at a clean vertical edge with no line. Left half: the wordmark at 22px sits top-left on a 32px margin; under it the statement at clamp(44px, 4.4vw, 68px), bold, tracking -0.04em, leading 1.0, top-left aligned and filling the upper 40% of the half. The lower part of this side stays empty except for one supporting sentence at 18px pinned bottom-left and the single action as a solid rectangle beside it. Right half: a loose mosaic of seven specimen tiles on a 4-column, 3-row grid with 14px gaps. Each tile is a flat palette colour at 3:4 holding one cut-out item, centred, object-fit: contain, mix-blend-mode: multiply. Five cells are left empty so the tiles stagger; one tile spans two columns and two rows; the rightmost column is cropped by the viewport edge. Two text links sit top-right over the darker field. The right half may be position: sticky while the left scrolls.", + "mobile": "The split becomes a stack. The statement comes first at 10.5vw on two lines inside 20px margins, the supporting sentence under it at 16px, then the action. Below, the darker field runs full width and the mosaic becomes two columns of tiles, the right column started 48px lower than the left; five tiles show and the last row is cropped by the bottom of the screen. Navigation is the wordmark and one link.", + "headline": "A 3-5 word statement of what is on offer, at most 28 characters so it holds two lines at 10.5vw on a phone.", + "motion": "shutter-image", + "seenIn": [ + "aww-noho" + ] + }, + { + "id": "specimen-wall-docked-panel", + "name": "Specimen wall, docked panel", + "archetype": "tiles", + "directions": [ + "specimen-catalogue", + "dense-tiles", + "contact-sheet" + ], + "needs": [ + "product-photo" + ], + "blueprint": "There is no header and no display headline: the whole viewport is a wall of specimens. Square tiles of about 112px (7.8vw) with 8px gaps fill the screen edge to edge in eight rows; alternate rows shift half a tile sideways so the wall reads as brickwork, and tiles at every edge are cropped by the viewport (overflow: hidden on the section). Each tile is a flat fill, rotating through three palette colours, holding one cut-out item at 60% of the tile, centred, with mix-blend-mode: multiply on light fills. A solid panel in the ink colour, 800px wide (columns 4-9) and about 170px tall with square corners, is docked at the bottom centre, 24px above the bottom edge, covering the tiles behind it. Inside, on 28px padding: the sentence that says what this is at 24px semibold on the left across two lines, the single action as a filled rectangle in the paper colour on the right, and beneath them a row holding the wordmark and four text links at 15px. Nothing else overlays the wall.", + "mobile": "Tiles become 22vw squares with 6px gaps, four and a half per row, still offset as brickwork and cropped at both sides. The panel turns into a full-width block fixed to the bottom of the first screen, about a third of its height: the sentence at 6vw on two lines, the action full width beneath it, the wordmark and links in one wrapped row at 14px. The wall fills everything above.", + "headline": "No display line: one plain sentence of up to 56 characters inside the panel names what the items are.", + "motion": "index-preview", + "seenIn": [ + "opl-smallbits", + "opl-beige-force" + ] + }, + { + "id": "single-specimen-name-list", + "name": "Single specimen with name list", + "archetype": "object-centre", + "directions": [ + "specimen-catalogue", + "borrowed-category", + "hero-object" + ], + "needs": [ + "product-photo" + ], + "blueprint": "Borrowed from a museum plinth. A calm light ground with roughly 70% left empty. The wordmark is set large for a logo, about 28% of the viewport wide (clamp(64px, 6vw, 92px), heavy serif or grotesk), top-left on a 56px margin; one sentence of description at 15px sits top-right on the same margin, its first line aligned to the top of the wordmark. Dead centre stands one specimen: a flat tile in a palette colour, 400px wide and 460px tall (columns 5-8) with a 16px radius, holding a single cut-out item at about 80% of the tile height, object-fit: contain. Left of the tile, in columns 2-4, a vertical list of item names is right-aligned towards it: the selected name in full ink at 20px, the names above and below stepping down in size and opacity (18, 16, 14px; 60, 35, 15%). Choosing a name swaps the item and the tile colour. Below the tile, centred: the item's one-line fact at 14px, then the single action, a filled rectangle 240px wide. Three text links sit bottom-left at 14px.", + "mobile": "The wordmark sits top-left at 11vw with the description sentence beneath it at 15px. The tile takes the full width inside 20px margins at 4:5, starting at 30% of the height. The name list becomes one horizontal row under the tile that scrolls sideways with scroll-snap, the selected name centred in full ink at 18px. The action sits full width at the bottom of the screen; the links move to the footer.", + "headline": "The name itself as an oversized wordmark, up to 10 characters on one line; there is no separate statement.", + "motion": "slow-crossfade", + "seenIn": [ + "opl-archiv", + "opl-humanoid-index" + ] + }, + { + "id": "shouted-headline-rising-photo", + "name": "Shouted headline, rising photograph", + "archetype": "type-poster", + "directions": [ + "borrowed-category", + "loud-flat-poster" + ], + "needs": [], + "blueprint": "Borrowed from a fashion drop. A near-white or single flat colour field. Navigation is one compact line at the top on 24px margins: condensed wordmark left, three text links centred, the single action right. Directly beneath, a two-line uppercase headline in a bold condensed face at clamp(88px, 11.4vw, 176px), centred, leading 0.88, tracking -0.02em, about 60% of the viewport wide; it occupies the band from 12% to 43% of the height. Immediately under the second line, pulled up with a negative margin of -1.2vw so its top edge tucks behind the letters' baseline, a single portrait photograph rises: 27% of the viewport wide (columns 5-8), 3:4, square corners, object-fit: cover, cropped by the bottom edge so only its upper two thirds show. The photograph is the only colour on the screen. The flanks either side of it stay empty apart from one supporting sentence at 17px bottom-left in a 280px column, and the price or key fact at the same size bottom-right, both on a baseline 32px above the bottom edge.", + "mobile": "The headline sets at 17vw on two lines, flush to 16px margins and filling the width, in the top third of the screen. The photograph widens to 64% of the width, centred, 3:4, starting directly under the headline and running off the bottom. The supporting sentence and the key fact move below the fold. Navigation collapses to the wordmark and the action.", + "headline": "A blunt 2-4 word statement in condensed capitals, at most 22 characters, one or two words per line.", + "motion": "masked-headline", + "seenIn": [ + "opl-uglycash" + ] + }, + { + "id": "counter-object-wide-wordmark", + "name": "Counter object, wide wordmark", + "archetype": "object-centre", + "directions": [ + "borrowed-category", + "dark-room", + "hero-object" + ], + "needs": [], + "blueprint": "Borrowed from a watch or perfume counter. One flat charcoal field. Centred slightly above the midline, a single low-key photograph of the object about 31% of the viewport wide (columns 5-8), 4:5, its own dark background matched to the field with filter: brightness(0.9) so it sits without a frame. Under it the name runs on one line as an ultra-wide wordmark spanning 72% of the width yet only about 45px tall: an extended face with letter-spacing near 0.6em, or a regular face stretched with transform: scaleX(2.4). Then one centred serif sentence at clamp(24px, 2.6vw, 38px). Then a single centred row at 15px with 48px between its three parts: one specification, the price inside the one solid light rectangle that is also the action, a second specification. The wordmark repeats small top-left and one text link sits top-right, both on 32px margins. The bottom fifth and both outer quarters of the screen stay empty and dark.", + "mobile": "The photograph grows to 70% of the width at 4:5, its top at 16% of the height. The wide wordmark spans the full width inside 20px margins at about 28px tall. The serif sentence sets at 6vw on two lines. The row stacks into three centred lines with the action in the middle at full width. The lowest sixth of the screen stays dark and empty.", + "headline": "The name as a very wide, very low wordmark on one line (up to 12 characters); the serif sentence beneath is the supporting line, up to 40 characters.", + "motion": "slow-crossfade", + "seenIn": [ + "opl-transport", + "aww-moto-finance" + ] + }, + { + "id": "text-band-then-sheet", + "name": "Text band, then sheet", + "archetype": "index", + "directions": [ + "contact-sheet", + "dark-room" + ], + "needs": [], + "blueprint": "A black or white field on a seven-column grid with 14px margins and 14px gaps. There is no display type: everything is set at one size, 16px, in one weight. The top band is plain text hanging from a line 20px below the top edge: the name in column one; one sentence on availability in column two; a list of five or six services from column three; a longer list of clients or awards from column five; and two links, profile and the single contact action, at the right end of column seven. Lists run one item per line. Below the lists about 300px of ground is left empty. At mid-height the sheet begins: one thumbnail per column, each the full column width (about 190px) at its natural ratio, top-aligned, with the project title in the text size above the first frame of each run of two to four frames. Rows continue below the fold with 40px between them. Frames have square corners and sit directly on the ground with no border and no caption on the image.", + "mobile": "The grid becomes two columns with 12px gaps. The name and the availability sentence take the top; services and clients sit side by side under them as two short lists at 15px. An 80px gap follows, then the sheet: two frames per row at natural ratios, each project title above its first frame. The contact action is a text link fixed bottom-right.", + "headline": "None at display size: the name is set at 16px with the rest of the text, and one sentence of up to 60 characters says what the person does.", + "motion": "index-preview", + "seenIn": [ + "aww-gil-huybrecht" + ] + }, + { + "id": "sheet-with-text-cell", + "name": "Sheet with a text cell", + "archetype": "mosaic", + "directions": [ + "contact-sheet", + "dense-tiles" + ], + "needs": [], + "blueprint": "The whole viewport is a sheet of photographs: six columns with 12px gaps and 12px outer margins, each column a vertical stack of frames at natural ratios with square corners. Each column starts at a different vertical offset (0, -90, -40, -130, -20, -70px) so rows never line up and the top and bottom frames are cropped by the viewport. Every frame has a flat strip 28px tall fused to its bottom edge in a solid palette colour, carrying one line of 13px text (a title or a place); strip colours rotate through four values. There is no header. In columns 3-4, starting at 28% of the height, one cell of the sheet is not a photograph but a filled panel in the tone opposite to the ground, 410px tall, sitting on the grid like any other frame with the same gaps on all sides. Inside it, top-left aligned on 24px padding: the wordmark at 28px, one sentence at 20px on up to three lines, the single action as a filled rectangle, and three text links on one line at the panel's foot.", + "mobile": "The text panel spans the full width as the first block, about 40% of the screen height, with the wordmark at 7vw, the sentence at 17px and the action full width. Under it the sheet resumes in two columns with 8px gaps, the right column started 60px higher than the left, colour strips kept on every frame. The links sit in one row at the panel's foot.", + "headline": "The wordmark at 28px plus one sentence of up to 70 characters inside the panel; nothing is set at display size.", + "motion": "shutter-image", + "seenIn": [ + "opl-proooof" + ] + }, + { + "id": "lit-strip-four-corners", + "name": "Lit strip, four corners", + "archetype": "index", + "directions": [ + "dark-room", + "contact-sheet" + ], + "needs": [], + "blueprint": "One near-black field with a single lit band. Four small pieces of text at 14px, medium weight, sit in the corners on 72px side margins and 44px top and bottom margins: the name top-left, one link top-right, one sentence saying what this is bottom-left (max 36ch), the single action as a text link bottom-right. Across the vertical middle runs one horizontal strip of photographs, 34vh tall (about 300px), each at its natural width with 10px gaps and square corners: eleven or more frames in a flex row wider than the viewport, so the first and last visible frames are cropped by the left and right edges. The frame nearest the centre is at full brightness; the others sit at filter: brightness(0.55) and brighten on hover or as they reach the centre. Under the centred frame, aligned to its left edge, its title is set in the same 14px text. The top quarter and the bottom quarter of the screen stay empty and dark. The strip scrolls sideways with overflow-x: auto and scroll-snap; never hijack vertical scroll.", + "mobile": "The strip stays a single sideways-scrolling row but grows to 46vh tall, so one frame and the cropped edges of its neighbours fill the width. The name and the link sit at the top on 20px margins; the sentence and the action stack bottom-left under the strip at 14px. Dark space remains above and below the strip, about 12% of the height each.", + "headline": "None at display size: the name at 14px in a corner and one sentence of up to 60 characters.", + "motion": "drag-row", + "seenIn": [ + "aww-jesper-landberg-4", + "aww-boc-studio", + "aww-leo-parpeix-portfolio-2026" + ] + }, + { + "id": "mosaic-masthead-title-on-axis", + "name": "Mosaic masthead, title on axis", + "archetype": "mosaic", + "directions": [ + "editorial-report", + "colour-chapters" + ], + "needs": [], + "blueprint": "The top 52% of the viewport is a full-width masthead band built as a gutterless mosaic: a CSS grid of 6 columns and 2 rows in which four cells are photographs (object-fit: cover, all greyscale via filter: grayscale(1) contrast(1.05)) and the rest are flat tiles in two or three palette colours. One photograph spans two columns and one colour tile spans both rows; cells butt together with no gap. The header lies flush on the band's upper edge: the wordmark in a solid ink block at far left, a flat accent-coloured tab holding three text links that runs from the block to 42% of the width, and the single action as a text link at the far right. Below the band, on the paper ground: a standfirst of one sentence at 20px on the 16px left margin, max 30ch, and, starting exactly at 42% of the width, the title on two lines at clamp(64px, 8.3vw, 128px), medium weight, tracking -0.06em, leading 0.9, running to the right margin. The title's first baseline sits about 110px under the band.", + "mobile": "The band becomes a mosaic of 3 columns and 2 rows taking the top 38% of the screen: two photographs and four colour tiles. The header is a single row above it with the wordmark block and a menu word. The axis collapses to the 16px left margin: the title at 13vw on two lines, then the standfirst at 17px beneath it. The action sits as a text link at the foot of the screen.", + "headline": "The title of the report, programme or product, 2-5 words, at most 26 characters across two lines.", + "motion": "masked-headline", + "seenIn": [ + "aww-ai-in-design-report-2026", + "opl-wild-as" + ] + }, + { + "id": "narrow-talk-wide-headline", + "name": "Narrow talk, wide headline", + "archetype": "type-poster", + "directions": [ + "editorial-report", + "loud-flat-poster" + ], + "needs": [], + "blueprint": "An asymmetric sheet on one flat paper-grey ground, divided at 34% of the width by alignment only. Left column (columns 1-4, 32px margin): the wordmark top-left; then, starting at 30% of the height, one supporting sentence at 22px with leading 1.35, max 24ch; under it the single action, a solid ink rectangle with square corners. The column's lower third is empty. Right column (columns 5-12): four text links at 15px on its top edge, the first aligned exactly to the 34% line. Beneath them the headline in a very heavy grotesk at clamp(88px, 9.8vw, 150px), two lines, line-height 0.82, tracking -0.04em, flush left on the 34% line and filling the column width. A square-cornered photograph the full width of the right column starts at 68% of the viewport height and is cropped by the bottom edge. A solid accent block 260px wide, carrying one real figure at 40px and one line of text, overlaps the photograph's top-left corner by half its own height using a negative top margin.", + "mobile": "One column on 20px margins. The wordmark and a menu word share the top row. The headline comes first at 15vw on two lines, heavy, line-height 0.85. The supporting sentence follows at 18px, then the action at full width. The photograph runs full bleed below at 4:3, with the accent block overlapping its top-left corner at 60% of the screen width.", + "headline": "A 2-4 word statement in the heaviest weight, at most 20 characters, one or two words per line.", + "motion": "masked-headline", + "seenIn": [ + "aww-monolog" + ] + }, + { + "id": "waterline-headline", + "name": "Waterline headline", + "archetype": "colour-field", + "directions": [ + "loud-flat-poster", + "type-only-statement", + "colour-chapters" + ], + "needs": [], + "blueprint": "Two flat fields fill the viewport and meet at exactly half height: the upper one paper or white, the lower one a saturated palette colour. No image. The headline is two lines of capitals in a black-weight grotesk at clamp(72px, 9vw, 140px), centred, leading 0.86, about 65% of the viewport wide, positioned so the seam cuts through the middle of the second line. Above the seam the letters take the accent ink; below it they switch to a deep ink, as if under water. Build it with two stacked copies of the headline in the same position (the lower copy aria-hidden), each clipped to its own field with clip-path: inset(), or with mix-blend-mode: difference on a single copy if the colours allow. The wordmark sits top-left and the single action, a solid rectangle in the accent ink, top-right, both on 28px margins; there are no other links. Near the bottom, 40px above the edge, one supporting sentence at 20px is centred in the paper colour on the saturated field. Everything else is empty colour.", + "mobile": "The same two fields, meeting at 46% of the height. The headline sets at 15.5vw on two lines, filling the width inside 16px margins, the seam still cutting the second line. The wordmark sits top-left and the action top-right as a small solid rectangle. The supporting sentence sits bottom-left at 17px on the saturated field, on up to three lines.", + "headline": "A blunt statement of 2-4 words in capitals, at most 20 characters, split so each line is one or two words.", + "motion": "masked-headline", + "seenIn": [ + "opl-juggle" + ] + }, + { + "id": "flush-left-shout-seam-photo", + "name": "Flush-left shout, seam photograph", + "archetype": "type-poster", + "directions": [ + "loud-flat-poster", + "borrowed-category" + ], + "needs": [], + "blueprint": "Borrowed from a street poster or zine. A saturated flat field covers the top 82% of the viewport; a second flat colour forms a band across the bottom 18%. The headline is two lines in an ultra-heavy face at clamp(80px, 12vw, 190px), flush left on a 20px margin, leading 0.84, reaching about 62% across the width; its first line starts 16% below the top. Right of centre one photograph is stuck on like a poster scrap: a 3:4 portrait 30% of the viewport wide (columns 8-11), clipped to an arch with clip-path or a large top border-radius, rotated 5 degrees, its top edge leaving the viewport and its lower edge straddling the seam so it sits on both colours. The photograph overlaps the last letters of the first line by about 4vw and lies above the type in the stacking order. On the bottom band, on one baseline: one supporting sentence at 20px on the left (max 40ch) and the single action, a chunky rectangle in the upper field's colour, at the right. The wordmark sits top-left at 20px; three text links top-right.", + "mobile": "The field takes the top 78% and the band the rest. The headline sets at 19vw on two lines flush to 16px margins, starting at 12% of the height. The arch photograph moves under the type: 58% of the width, pushed against the right edge and cropped by it, still tilted 5 degrees and straddling the seam. The sentence and the full-width action stack on the band.", + "headline": "A 2-4 word shout, at most 16 characters, lowercase or capitals throughout, one or two words per line.", + "motion": "shutter-image", + "seenIn": [ + "aww-aardvark-book-club", + "opl-postaway", + "opl-the-sapphic-bar-index" + ] + }, + { + "id": "menu-column-sticky-photo", + "name": "Menu column, sticky photograph", + "archetype": "split", + "directions": [ + "split-stage", + "place-carries-it" + ], + "needs": [], + "blueprint": "The viewport is two panels of equal width with a 12px gap between them and 12px outer margins, both with a 20px radius. Right panel: one photograph of the place filling it edge to edge (object-fit: cover), set to position: sticky; top: 12px; height: calc(100svh - 24px), so it stays put while the left side scrolls. A solid bar in the paper colour, 56px tall, lies across the photograph's bottom edge inside the panel and carries opening hours on the left and the address on the right at 15px. Left panel: a filled paper-colour sheet set like a menu card, everything centred. Its top row holds the wordmark, about 300px wide, in the centre with one text link either side. Below, at 34% of the height, the headline in a light serif at clamp(40px, 3.6vw, 56px) on two lines in the accent ink, max 18ch per line. Under it one sentence at 17px, max 40ch, then the single action as a solid rectangle in the accent ink. The lower quarter of the sheet is empty before the first section begins.", + "mobile": "The photograph comes first as a rounded panel 56svh tall on 12px margins, sticky at the top so the paper sheet slides up over its lower part. The hours bar stays on the photograph's bottom edge. The sheet holds the wordmark centred at 46% of the width, the headline at 9vw on two lines, the sentence and a full-width action.", + "headline": "A warm 3-6 word line in a light serif, at most 34 characters, centred on two lines.", + "motion": "slow-crossfade", + "seenIn": [ + "opl-le-petit-bleu", + "opl-zara-webb" + ] + }, + { + "id": "inset-photo-wordmark-crossing", + "name": "Inset photograph, crossing wordmark", + "archetype": "split", + "directions": [ + "split-stage", + "dark-room", + "name-as-monument" + ], + "needs": [], + "blueprint": "One deep, dark flat field. A tall portrait photograph fills the left 47% of the viewport, inset 20px from the top, left and bottom edges, with a 12px radius and object-fit: cover; it is position: sticky for the length of the page while the right side scrolls. Five text links at 15px sit top-right on a 32px margin, the last of them the single action. There is no logo at the top. In the right half, at 44% of the height and centred on that half's own axis, one supporting sentence in the light ink at 24px on up to three lines, max 26ch. Along the bottom runs the name in lowercase at clamp(120px, 12vw, 200px), light or regular weight, tracking -0.04em, on one line. It starts over the photograph's lower-right corner, overlapping the image by about 10% of the viewport width (z-index above it; mix-blend-mode: difference keeps the letters legible on the picture), and ends flush with the right margin, its baseline 40px above the bottom edge.", + "mobile": "The photograph takes the top 58% of the screen, inset 12px, with the same radius. The name runs under it at 21vw on one line, its ascenders overlapping the photograph's bottom edge by 3vw. The sentence follows at 17px, left-aligned on a 20px margin. Links reduce to a menu word and the action on the top row, set over the photograph.", + "headline": "The name in lowercase on one line, up to 9 characters at this size; a longer name drops to 9vw.", + "motion": "scaling-wordmark", + "seenIn": [ + "aww-lxl-creative", + "opl-kereliott" + ] + }, + { + "id": "anchored-text-specimen-half", + "name": "Anchored text, specimen half", + "archetype": "split", + "directions": [ + "split-stage", + "specimen-catalogue", + "hero-object" + ], + "needs": [ + "product-photo" + ], + "blueprint": "The viewport is split exactly in half by two flat tones that meet at a clean vertical edge: the ground on the left, a palette colour on the right. Left half: the wordmark sits top-left on a 40px margin; the next two thirds of the height are empty; everything else is anchored bottom-left and ends 40px above the bottom edge: a headline on one or two lines at clamp(28px, 2.6vw, 40px), medium weight; one sentence at 18px in the soft ink, max 38ch; the single action as a solid rectangle. Right half: position: sticky; top: 0; height: 100svh. In its centre sits a square tile in a second palette colour, 450px wide (31vw) with a 24px radius, holding one cut-out item at 70% of the tile, object-fit: contain, mix-blend-mode: multiply on light fills. Under the tile's left corner the item's name and one fact sit at 15px. As the left column scrolls through the catalogue, the tile's item and colour swap to match the entry in view. One text link sits top-right on the colour field.", + "mobile": "The colour half comes first as a block 52svh tall holding the square tile at 62vw, centred, and stays sticky while the text slides over its lower edge. The text block follows on the ground: the headline at 7vw on two lines, the sentence at 16px, the action full width. The wordmark and one link sit on the top row over the colour.", + "headline": "A modest 3-6 word line at 28-40px, at most 40 characters; the object, not the type, carries the screen.", + "motion": "pinned-story", + "seenIn": [ + "opl-dabbit" + ] + }, + { + "id": "two-by-two-board", + "name": "Two-by-two board", + "archetype": "tiles", + "directions": [ + "dense-tiles", + "editorial-report" + ], + "needs": [], + "blueprint": "A board with 8px outer margins and 8px gaps throughout; every tile is a filled rectangle with one shared radius (0 or 8px). A 60px top row is itself made of tiles: a square ink tile with the logo mark, a wide ground-tone tile holding four text links that begin at the centre line, and an ink tile at the right end holding the single action. Below it the rest of the viewport is a two-by-two grid. Top-left: a paper tile with the name, or its first word, at clamp(96px, 12.5vw, 190px), medium weight, tracking -0.05em, sitting bottom-left on 24px padding. Top-right and bottom-left: photographs covering their tiles (object-fit: cover), both greyscale so they read as one picture continued across the board. Bottom-right is divided into two tiles side by side: a dark tile with one sentence at 24px, top-left aligned, and a tile in the accent colour with a second short statement at 24px, also top-left. Text never centres inside a tile. No tile is empty and none is outlined.", + "mobile": "The board becomes one column of tiles with 6px gaps: a top row with the logo tile and a menu tile; the name tile at 30% of the screen height with the name at 22vw bottom-left; one photograph tile at 4:3; then the dark tile and the accent tile side by side as two squares. The second photograph moves below the first screen.", + "headline": "The name, or its first word, up to 8 characters at 12.5vw; the two 24px statements are one sentence each.", + "motion": "shutter-image", + "seenIn": [ + "aww-aspen-search" + ] + }, + { + "id": "name-band-and-rails", + "name": "Name band and rails", + "archetype": "tiles", + "directions": [ + "dense-tiles", + "name-as-monument" + ], + "needs": [], + "blueprint": "One viewport filled completely with tiles on 8px gaps and 8px margins. Across the top, a band tile 170px tall holds the name on one line at clamp(140px, 14.4vw, 220px), heavy, tracking -0.04em, centred and deliberately wider than the band so both ends are cropped by the tile's edges (overflow: hidden, white-space: nowrap). Under it a row of four equal tiles, 64px tall, each holding one text link at 16px, top-left aligned. The remaining 62% of the height is three columns. Left rail (columns 1-2): two stacked tiles, a portrait photograph above and a short list of five facts below. Centre (columns 3-10): one large photograph tile, object-fit: cover, with a statement tile in the ground tone laid along its bottom third holding one sentence at clamp(24px, 2.4vw, 36px), top-left aligned on 24px padding. Right rail (columns 11-12): a full-height stack of five flat colour tiles, a light-to-dark run from the palette; the lowest takes the accent colour and holds the single action, the others each carry one short fact at 15px.", + "mobile": "Tiles restack in two columns with 6px gaps. The name band stays full width: 26vw type cropped at both sides in a 110px band. The four link tiles become a two-by-two block. The large photograph tile follows at full width, 4:3, with the statement tile under it at 6vw. The colour rail becomes a horizontal row of five short tiles, the action tile last and twice as wide.", + "headline": "The name on one cropped line, any length, plus one sentence of up to 60 characters in the statement tile.", + "motion": "edge-marquee", + "seenIn": [ + "opl-shawn-golden", + "aww-seasats" + ] + }, + { + "id": "stepped-title-two-photos", + "name": "Stepped title, two photographs", + "archetype": "type-poster", + "directions": [ + "uneven-photographs", + "place-carries-it" + ], + "needs": [], + "blueprint": "A pale neutral ground with 6vw side margins on a 12-column grid. Navigation is three small items on the top edge at 15px: one link hard left, the wordmark centred, the single action hard right. The headline is two words or short phrases on two lines in a thin serif at clamp(72px, 8.3vw, 128px), leading 1.0, stepping diagonally across the middle third of the screen: the first line starts at column 2 with its baseline at 44% of the height; the second is indented to start at column 6 and ends near column 12. Two photographs are placed against the step, both with square corners. A small 16:10 landscape in columns 10-12 hangs from 10% of the height and stops about 20px above the first line. A 4:5 photograph in columns 2-5 starts 24px under the first line's baseline, to the left of the indented second line, and is cropped by the bottom edge of the viewport. Under the second line, starting on column 6, one sentence at 20px in the soft ink, max 36ch. Columns 6-12 of the lower third stay empty.", + "mobile": "The step survives: the first line at 15vw flush to the 20px left margin, the second line indented by 22vw. The small landscape sits above the title at 46% of the width, pushed to the right margin. The tall photograph follows the title at 72% of the width on the left margin, cropped by the bottom of the screen; the sentence at 16px moves beneath it.", + "headline": "Two words or short phrases, one per line, at most 9 characters each so the indented second line fits a phone.", + "motion": "masked-headline", + "seenIn": [ + "aww-tengile-malamala-collection" + ] + }, + { + "id": "three-prints-one-line", + "name": "Three prints, one line", + "archetype": "mosaic", + "directions": [ + "uneven-photographs" + ], + "needs": [], + "blueprint": "Photographs lead and the type stays small. A pale ground, a 12-column grid, 5vw side margins. The top row at 15px holds the wordmark left, three text links centred and the single action right. Three photographs with square corners hang from one shared top line at 18% of the viewport height, like prints pinned along a rail, each a different size so their bottom edges fall at three heights. A small 1:1 in columns 1-2 (about 190px). A tall 3:4 in columns 4-7, about 440px wide and 590px tall, the largest thing on screen. A 16:10 landscape in columns 9-12 that continues past the right margin and is cropped by the viewport edge. Columns 3 and 8 are left empty as breathing space. The headline sits under the small photograph, left-aligned to its left edge across columns 1-3: a light serif or slender sans at clamp(30px, 2.8vw, 44px) on two lines, followed by one sentence at 16px in the soft ink, max 30ch. One line of caption at 14px sits under the left corner of each of the other two photographs.", + "mobile": "The rail turns vertical, so left edges vary instead of bottoms. The tall photograph comes first at 72% of the width on the left margin; the small square follows at 38% of the width, pushed to the right margin and overlapping the first by 40px; the landscape runs full bleed below. The headline at 8vw sits beside the square on the left, with the sentence at 16px under it.", + "headline": "A quiet 3-6 word line at about 40px, at most 36 characters across two lines.", + "motion": "shutter-image", + "seenIn": [ + "opl-the-deep-end", + "opl-kereliott", + "aww-normal-is-boring" + ] + }, + { + "id": "two-prints-in-darkness", + "name": "Two prints in darkness", + "archetype": "object-centre", + "directions": [ + "dark-room", + "uneven-photographs" + ], + "needs": [], + "blueprint": "One near-black field with a slight colour tint, about 75% of it left empty. Navigation is split between the top corners at 15px on 30px margins: the wordmark and three text links top-left, the single action top-right as the page's one solid light rectangle. Two low-key photographs sit in the dark like lit exhibits, both with square corners and no frame. The larger, a 4:5 portrait about 34% of the viewport wide (columns 6-9), has its top at 14% of the height, so it sits a little above the midline. The smaller, a 1:1 about 12% of the viewport wide (columns 2-3), sits far from it with its top at 52% of the height, dimmed with filter: brightness(0.7) so the large one stays the brightest thing on screen. The headline is modest: two lines at clamp(28px, 2.5vw, 40px) in a regular weight, flush to the bottom-left corner on the 30px margin. Columns 10-12 hold one sentence at 16px in the dimmer ink, bottom-aligned to the headline's last baseline, max 24ch. Nothing else is on screen.", + "mobile": "The large photograph takes 78% of the width, pushed to the right margin, its top at 12% of the height. The small square sits at 30% of the width on the left margin, overlapping the large one's lower-left corner by 24px. The headline sets at 6.4vw on two lines bottom-left with the sentence beneath at 15px. The action is a small solid rectangle top-right; links fold behind a menu word.", + "headline": "A quiet statement of 4-7 words at 28-40px, at most 44 characters on two lines.", + "motion": "slow-crossfade", + "seenIn": [ + "aww-revelatio-studio", + "opl-kereliott", + "opl-the-deep-end" + ] + }, + { + "id": "two-line-statement-full-width", + "name": "Two-line statement, full width", + "archetype": "type-poster", + "directions": [ + "type-only-statement", + "loud-flat-poster" + ], + "needs": [], + "blueprint": "Paper and ink only; no image. The wordmark at 15px sits top-left and two or three text links at the same size top-right, both on 24px margins; there is no bar. The statement fills the upper two thirds: two lines at clamp(96px, 12.5vw, 200px), medium to bold weight, tracking -0.05em, leading 0.86, starting 15% below the top edge. The first line is flush to the left margin and the second flush to the right margin, so the pair spans the full width and steps across the screen. Size the type so the longer line runs margin to margin: tune the vw value to the character count and test it at 1440 and 390. Between the statement and the bottom row about 18% of the height is left empty. The bottom row sits on one baseline 28px above the bottom edge: one supporting sentence at 22px on the left, max 44ch on two lines, and the single action bottom-right as a solid ink rectangle with square corners. There is no colour beyond ground and ink.", + "mobile": "Both lines turn flush left on 16px margins at 17vw, leading 0.9, starting at 14% of the height and filling the width. A gap of about 20% of the screen follows. The sentence sits at 17px above a full-width action, both anchored to the bottom with 20px to spare. Navigation reduces to the wordmark and one menu word.", + "headline": "A 3-5 word statement on two lines, at most 11 characters per line so 17vw type fits a phone.", + "motion": "masked-headline", + "seenIn": [ + "aww-produx-design", + "opl-specia1ne", + "aww-made-with-gsap-1" + ] + }, + { + "id": "void-then-statement-on-axis", + "name": "Void, then statement on axis", + "archetype": "bottom-anchored-type", + "directions": [ + "type-only-statement", + "editorial-report" + ], + "needs": [], + "blueprint": "A deliberate void: the upper 60% of the viewport holds nothing but the top row. That row, 44px from the top on 48px margins, has the wordmark at the left margin, two text links starting exactly on a vertical axis at 42% of the width, and the single action at the right margin as a text link. Everything else hangs from the same axis in the bottom third. The statement starts on the 42% line: two lines at clamp(56px, 6.6vw, 104px), regular or medium weight, tracking -0.04em, leading 0.95, running towards the right margin, with its last baseline 72px above the bottom edge. Left of the axis, in columns 1-4, one supporting sentence at 18px in the soft ink, max 32ch, is bottom-aligned to the statement's last baseline. Nothing sits in the left zone above it. No image and no shape; the ground is one flat tone and the ink one colour. The emptiness is composed: three elements share the axis, so the blank area reads as intended and not as a page that failed to load.", + "mobile": "The axis collapses to the 20px left margin. The top 48% of the screen stays empty under the wordmark row. The statement sets at 12.5vw on two lines, flush left, followed by the sentence at 17px and the action as a text link, the whole block ending 28px above the bottom edge. The two links fold behind a menu word.", + "headline": "A 3-6 word statement, at most 30 characters over two lines, about 15 per line at 6.6vw from the axis.", + "motion": "masked-headline", + "seenIn": [ + "opl-lovably", + "aww-ai-in-design-report-2026", + "opl-tiny-computer-co", + "aww-cerebrium" + ] + }, + { + "id": "colour-field-two-ink-statement", + "name": "Colour field, two-ink statement", + "archetype": "colour-field", + "directions": [ + "type-only-statement", + "loud-flat-poster", + "colour-chapters" + ], + "needs": [], + "blueprint": "One saturated flat colour covers the whole viewport; there is no navigation bar and no image. Two short pieces of 15px text sit in the top corners on 3% margins: the wordmark at the left, the single action as a text link in the dark ink at the right. The statement starts 15% down, left-aligned from the 3% margin, in a soft heavy serif or a heavy grotesk at clamp(110px, 14vw, 220px), tracking -0.03em, leaded so tightly (0.82) that the two lines nearly touch. Line one is set in a pale ink and line two in a dark ink, the only two inks on the field; the pair fills the top 55% of the screen and the longer line reaches about 90% of the width. A long name may be broken across the two lines with a hyphen if the second half reads as a word of its own. In the bottom-right corner, right-aligned in a column 24% of the viewport wide, one supporting sentence at 17px in the pale ink. The bottom-left quarter stays empty colour.", + "mobile": "The same field. The corner texts stay at the top at 14px. The statement sets at 21vw on two lines from a 16px margin, starting at 16% of the height, pale line over dark line. The supporting sentence moves to the bottom-left at 16px across 80% of the width, ending 24px above the bottom edge. The middle fifth of the screen stays empty colour.", + "headline": "The name or a two-word statement over two lines, at most 8 characters per line at 21vw on a phone.", + "motion": "colour-on-scroll", + "seenIn": [ + "opl-marina-rachello" + ] + }, + { + "id": "one-word-cropped", + "name": "One word, cropped", + "archetype": "giant-wordmark", + "directions": [ + "type-only-statement", + "name-as-monument" + ], + "needs": [], + "blueprint": "A single word is the whole composition, set so large that the viewport crops it. No image. The word is one line in a heavy condensed or heavy grotesk face at clamp(360px, 46vw, 760px), line-height 0.8, white-space: nowrap, placed so its capitals fill the lower half of the screen: the baseline sits 6% below the bottom edge so the feet of the letters are cut, and the line is shifted 8vw to the left so the first letter is cut by the left edge and the last runs off the right (overflow: hidden on the section). Raise the size until both end letters are cut; three to five letters stay fully visible and the word still reads. The top 30% holds everything else on 28px margins: the wordmark at 16px top-left, three text links top-right, and, starting 96px down on the left margin, one supporting sentence at clamp(20px, 1.7vw, 26px), max 34ch, with the single action directly beneath it as a solid rectangle. Ground and ink are two flat values; the word may take the palette's one accent instead of the ink.", + "mobile": "The word turns a quarter turn (writing-mode: vertical-rl) and runs down the right side at 62vw, a fifth of its height cut by the right edge and its ends cut by the top and bottom. The left 45% of the screen holds the wordmark, the sentence at 17px and the action, stacked from the top on a 20px margin. Links fold behind a menu word.", + "headline": "One word of 4-8 letters, the name or the single noun the subject owns; it is cropped but must stay readable.", + "motion": "scaling-wordmark", + "seenIn": [ + "opl-shawn-golden", + "aww-px-push", + "opl-lorenzo-bocchi-photography" + ] + }, + { + "id": "window-opens-to-the-edges", + "name": "Window that opens to the edges", + "archetype": "pinned-stage", + "directions": [ + "pinned-poster", + "place-carries-it", + "hero-object" + ], + "needs": [], + "blueprint": "A flat paper or pale ground, and one picture seen through a small window that becomes the whole screen as the page scrolls. The hero is a wrapper 200svh tall holding a stage with `position: sticky; top: 0; height: 100svh`. On the first frame the window is a 4:5 portrait opening 36% of the viewport wide (518×648px), centred, its top and bottom 126px from the edges, square corners; give it a shape from the subject if it has one (an arch, a rounded diamond, a lens). Build it as `clip-path: inset(126px 461px)` on a layer that is itself 100vw by 100svh, so the photograph or muted film inside is laid out full-bleed and never moves: only the opening grows. The headline sits left of the window on columns 1–3: two lines at clamp(44px, 4.4vw, 64px), leading 0.95, flush to the 32px margin, its last baseline level with the window's lower edge. Right of the window on columns 10–12, bottom-aligned to the same line: one supporting sentence at 18px, max 26ch, and the single action as a solid rectangular button. Wordmark top-left and three text links top-right at 15px on the same margin; nothing else sits on the ground. Over the first 100svh of scroll the inset runs to zero on a scroll-linked timeline while the text, which sits above the picture layer, rises and fades out before the opening reaches it; the picture then holds full-bleed for 50svh before the next section slides over it. Without scroll timelines, or under reduced motion, show the open picture with the headline over a neutral scrim in its bottom-left corner.", + "mobile": "The stage stays sticky. The window starts 78vw wide at 4:5, centred, its top at 30% of the height, leaving about a quarter of the screen below it. The headline sits above it at 10vw on two lines inside 20px margins, 72px down; the supporting sentence at 16px and a full-width action sit under the window. The opening reaches the edges within 70svh of scroll. The links fold behind a menu word.", + "headline": "Two short lines of up to about 9 characters each: the name with what it is, or a 2–4 word claim. It scrolls away as the picture takes the screen.", + "motion": "pinned-story", + "seenIn": [ + "aww-decathlon-yestalgia", + "aww-leo-parpeix-portfolio-2026", + "aww-revelatio-studio", + "aww-vero-new-york" + ] + }, + { + "id": "ring-of-frames-around-the-headline", + "name": "Ring of frames around the headline", + "archetype": "mosaic", + "directions": [ + "contact-sheet", + "dark-room", + "name-as-monument" + ], + "needs": [], + "blueprint": "One near-black or deep flat field. Eighteen to twenty-four photographs or film stills sit on an ellipse centred on the viewport, with radii of 560px across and 310px down, so their centres run from x 160 to 1280 and from y 140 to 760. Frames have square corners and no border, mix 4:3 and 3:4, and grow towards the viewer: about 100px wide at the top of the ring and 150px at the bottom and at both ends, so the ring reads as tilted. Each frame is turned so its base lies along the curve (never more than 30 degrees), and neighbours may overlap by up to a fifth. Inside the ring an empty core about 600×340px holds the text, centred: the headline on two lines at clamp(56px, 5.4vw, 80px), leading 0.95, in the light ink; one supporting sentence at 18px, max 40ch, 24px under it; then the single action as a solid light rectangle. Wordmark top-left and three text links top-right at 15px on 32px margins, outside the ring. Every frame is a link to its project: pointing at one, or focusing it, brings it to full brightness, drops the others to 45% and replaces the supporting sentence with that project's name and year. Place the frames with a few lines of trigonometry (left and top in percentages) and keep them still; the wheel scrolls the page as usual.", + "mobile": "The ellipse becomes a circle 132vw across, centred at half height, so the frames at its left and right ends run off both edges and the ring reads as two arcs, one above and one below the text. Keep twelve frames at 64–88px. The headline sits in the core at 10.5vw on two lines inside 28px margins, with the sentence at 16px and the action at the full width of the core beneath it. Wordmark top-left and a menu word top-right sit above the top arc. A tap on a frame opens its project.", + "headline": "A 3–6 word line on two lines, at most about 14 characters per line, so it fits the empty core.", + "motion": "masked-headline", + "seenIn": [ + "aww-cipher", + "aww-squarespace-foundations", + "aww-studio-k95-3", + "aww-kononenko-architectural-bureau" + ] + }, + { + "id": "navigation-on-the-midline", + "name": "Navigation on the midline", + "archetype": "fullbleed-media", + "directions": [ + "place-carries-it", + "quiet-instrument", + "dark-room" + ], + "needs": [], + "blueprint": "One photograph or muted film fills the viewport at 100vw by 100svh, `object-fit: cover`, framed so the middle of the screen cuts the subject: a face or a skyline in the upper half, hands or ground in the lower. There is no headline block and nothing in the top or bottom bands. One rail 64px tall runs across the exact vertical centre (its top at 418px) and carries everything on one baseline in the paper colour: the `h1` on the 24px left margin, the name with what it is in two to five words at clamp(32px, 2.6vw, 40px) in medium weight, doing the job of the wordmark; from column 6, one supporting sentence at 18px, max 44ch; at the right margin, two text links at 15px and the single action as a small solid button in the paper colour. If the frame is light behind the rail, give the rail alone a neutral dark scrim at 35%. The rail is `position: sticky; top: 0` in the hero's flow, so as the page scrolls it rises with the content and docks as the header bar without changing size or layout, taking the page ground once the pictures have passed. A second full-bleed photograph, a closer detail of the same subject, follows directly beneath, so the rail is seen crossing two pictures before it reaches the top. On a black ground with one photographed object instead of a film, stand the object on the rail at about 17% of the width, between the sentence and the links, so the line seems to pass behind it.", + "mobile": "A portrait crop keeps the subject's middle on the screen's middle. The rail stays on the vertical centre, as tall as the `h1` needs at 28px on up to two lines, with the `h1` on the left and Menu on the right. The sentence leaves the rail and sits at 17px in the bottom-left on a 20px margin with the action as a full-width button under it, over a neutral scrim limited to that corner. The rail docks at the top as on desktop.", + "headline": "The `h1` on the rail: the name with what it is, two to five words at 32–40px on one line, and one sentence of up to 50 characters beside it; the picture does the rest.", + "motion": "slow-crossfade", + "seenIn": [ + "aww-odyssee", + "aww-milledollars", + "aww-twks-1" + ] + }, + { + "id": "title-in-the-sky-line-on-the-horizon", + "name": "Title in the sky, line on the horizon", + "archetype": "fullbleed-media", + "directions": [ + "place-carries-it", + "hero-object", + "sentence-as-layout" + ], + "needs": [], + "blueprint": "One wide photograph or render fills the viewport, chosen with the subject in the lower 55% and open sky, fog or a plain wall above it. The headline is centred in that empty upper zone: two lines at clamp(72px, 7.2vw, 112px), leading 0.9, its cap line 72px from the top, the first line short and the second longer so the block widens towards the subject. On the horizon, with its baseline at 52% of the height, one supporting sentence is split into two halves at 22px: the first half right-aligned to end at column 5, the second left-aligned from column 8, so the subject shows through the 260px gap between them. Wordmark top-left on a 32px margin; up to three text links from column 9; the single action top-right as a solid rectangle in the paper colour. All type is in one ink chosen against the sky; on a pale sky use the photograph's darkest tone rather than black. Nothing else crosses the lower half.", + "mobile": "The picture is re-cropped to portrait with the subject in the lower 45%. The headline sits centred in the sky at 11vw on two lines, 96px down, and the two halves of the sentence become two centred lines at 17px directly under it. The action is a full-width button 24px above the bottom edge on a neutral scrim band 96px tall. Wordmark top-left and a menu word top-right.", + "headline": "Two lines, the second the longer, at most about 14 characters per line: the name of the place, or a 3–5 word claim about it.", + "motion": "shutter-image", + "seenIn": [ + "aww-era-residence", + "aww-vectr" + ] + }, + { + "id": "name-across-the-middle", + "name": "Name across the middle", + "archetype": "giant-wordmark", + "directions": [ + "name-as-monument", + "type-only-statement", + "loud-flat-poster" + ], + "needs": [], + "blueprint": "Paper and ink only; no picture on the first screen. The name runs on one line across the vertical centre, sized to span from the 18px left margin to the 18px right margin (97.5% of the width). Set it as inline SVG text with a `viewBox` fitted to the word and `width: 100%`, or tune its vw size to the letter count, so it never wraps. In a heavy grotesk the letters stand about 280px tall, from about 310px to 590px; nothing touches or overlaps them. The four corners carry everything else on 18px margins. Top-left: one supporting sentence at 18px on two lines, max 36ch, and 16px below it the single action as a solid ink rectangle. Top-right: a menu word or three text links at 15px. Bottom-left, on a baseline 24px above the edge: the city or the kind of work at 16px. Bottom-right on the same baseline: two or three text links at 15px. The ground between the corners and the name, about 230px above and below it, stays empty and is closed on both sides by the corner texts. The name returns in the footer at the same width with ground and ink swapped and a two-line invitation above it, so the page closes like a bracket.", + "mobile": "The name stays on one line across the width inside 16px margins and moves up to 22% of the height. The supporting sentence follows on the left margin at 17px, then the action at full width. The lower half holds the first picture of the work as a 4:5 frame cropped by the bottom edge, so the screen does not end in empty paper. A menu word sits top-right.", + "headline": "The name itself on one line, up to about 12 characters; the 18px sentence in the top-left corner says what it is.", + "motion": "scaling-wordmark", + "seenIn": [ + "aww-nothin", + "aww-produx-design" + ] + }, + { + "id": "square-over-a-moving-line", + "name": "Square over a moving line", + "archetype": "type-poster", + "directions": [ + "name-as-monument", + "place-carries-it", + "loud-flat-poster" + ], + "needs": [], + "blueprint": "A white or pale flat ground. One line of display type at clamp(150px, 15vw, 230px), weight 500, tracking -0.02em, runs edge to edge with its cap band centred 360px from the top, moving left at a slow, constant 40px a second: the name, or a claim of two or three words, repeated with a solid round dot one third of the cap height between copies and duplicated for a seamless loop. One square photograph 272px across (19vw), square corners, `object-fit: cover`, sits exactly on the band's centre behind the type, so the words slide across it; the moving line is set twice, the second copy in the paper colour and clipped to the square with `clip-path`, so the letters turn light as they cross the photograph and every word reads whole. It shows the subject's best detail. In the study the photograph sits on top of the words; here nothing lies on top of a headline. 150px under the photograph, centred: one supporting sentence at 22px on two lines, max 36ch, and 24px below it the key fact (a price, a date, an address) at 17px. Top row on 32px margins: one text link on the left, the wordmark centred, one text link on the right. Bottom row on the same margins, 40px above the edge: a location line at 16px on the left and the single action as a solid rectangle on the right. The `h1` holds the moving words once as plain text and the moving copies are `aria-hidden`. Under reduced motion the line stops with one copy centred and both ends cropped.", + "mobile": "The line drops to 34vw with its band at 26% of the height and keeps moving; the photograph shrinks to a 46vw square and stays centred on it. The sentence sits centred at 18px about 64px below the photograph, then the fact at 16px. The action becomes a full-width button 20px above the bottom edge. The wordmark stays centred at the top and the two links fold into a menu word on the right.", + "headline": "The name or a 2–3 word claim of at most 14 characters, set once in the `h1` and repeated in the moving line.", + "motion": "edge-marquee", + "seenIn": [ + "aww-realevate" + ] + }, + { + "id": "two-doors-on-a-dark-wall", + "name": "Two doors on a dark wall", + "archetype": "split", + "directions": [ + "dark-room", + "quiet-instrument" + ], + "needs": [], + "blueprint": "For a subject with two halves a visitor must choose between: two exhibitions, two audiences, two places, two collections. One near-black flat field. Two portrait photographs at 3:4, each 280×373px, stand side by side 80px apart, so the pair spans x 400–1040 (44% of the width) with their tops at 300px; square corners, no frame, the pictures supplying every colour on the screen. Each photograph is the link to its half, and directly beneath it, left-aligned to the frame, sit its name at 22px in the light ink and one line at 16px in the soft ink. The headline is centred above the pair: two lines at clamp(36px, 3.4vw, 52px), leading 1.05, its first line 104px from the top, at most 26 characters per line. Wordmark top-left and one text link top-right at 15px on 32px margins. About 150px of dark ground stays below the pair and 400px either side of it, closed by the two doors at the centre. Pointing at or focusing one door keeps it at full strength and dims the other to 50%. The page continues below with the two halves in order, so each door is also an anchor to its half.", + "mobile": "The pair stays side by side: each photograph 168px wide at 3:4 with a 14px gap, centred at 46% of the height, its name at 17px and its line at 16px beneath it. The headline sits above at 8vw on two lines, centred, 64px down. The wordmark and the link stay in the top corners.", + "headline": "A 4–8 word sentence on two lines that names the choice, at most 26 characters per line.", + "motion": "stillness", + "seenIn": [ + "aww-hearst-exhibit-2026" + ] + }, + { + "id": "title-from-top-to-bottom-edge", + "name": "Title from the top edge to the bottom edge", + "archetype": "bottom-anchored-type", + "directions": [ + "place-carries-it", + "name-as-monument", + "dark-room" + ], + "needs": [], + "blueprint": "One full-bleed photograph or film at 100vw by 100svh, with a horizon near half height and empty sky or darkness above. The headline is two lines in a heavy face at clamp(140px, 13vw, 200px), leading 0.85, pulled as far apart as the screen allows: line one flush to the 32px left margin with its cap line 72px from the top; line two indented 28vw (403px) and anchored to the bottom, its baseline 24px above the lower edge, running towards the right margin. Lay the hero out as a grid of three rows (`grid-template-rows: auto 1fr auto`): line one in the first row, line two in the third, both spans of one `h1` with `display: contents`. The middle row leaves the picture clear apart from one supporting sentence at 18px, max 44ch, crossing the horizon at 48% of the height from 30vw, and the single action directly beneath it as a solid rectangular button with its label at 18px. The wordmark and two text links sit top-right on the 32px margin at 15px; the top-left belongs to line one. Choose a picture whose upper-left and lower-right are calm enough for the type, or lay a neutral scrim under those two corners only.", + "mobile": "Keep the two lines at 19vw: line one flush left on a 16px margin 88px down, line two right-aligned to the 16px margin with its baseline 20px above the bottom. The sentence at 17px and the action button sit between them on the left margin, at 46% of the height. The picture is re-cropped to portrait around the horizon.", + "headline": "Two words or short phrases, one per line, at most about 8 characters each.", + "motion": "masked-headline", + "seenIn": [ + "aww-the-state-of-the-gallery" + ] + }, + { + "id": "line-up-on-an-arc", + "name": "Line-up on an arc", + "archetype": "object-centre", + "directions": [ + "specimen-catalogue", + "hero-object", + "dark-room" + ], + "needs": [ + "product-photo" + ], + "blueprint": "For a range: flavours, colourways, editions, sizes. One deep flat ground, which may take the current item's own colour. The current item, a cut-out photograph, stands at the exact centre about 240px wide and 450px tall (y 210–660), tilted no more than 8 degrees. Its siblings stand behind it on a shallow arc, alternately a little higher and lower: each step out is 30% smaller, a quarter darker (`filter: brightness()`) and about 260px further from the centre, three on each side, so the outermost pair is cut by the left and right edges. Under the current item, centred: its name at clamp(32px, 2.8vw, 44px) and one fact at 17px (what it tastes of, what it is made of, the price). The headline sits top-left on columns 1–4 at clamp(36px, 3.2vw, 48px) on two lines with the supporting sentence at 17px under it; the single action, a solid rectangle, sits top-right on a 32px margin. The arc is a horizontal scroller with `scroll-snap-type: x mandatory`, each item snapping to the centre, its scale and brightness set from its distance to the centre, so a drag, a swipe, the arrow keys or a click on a sibling brings it forward; the ground colour follows with a 300ms transition. No arrows drawn on the screen and no counter.", + "mobile": "The current item takes 55% of the width and half the height, centred at 46% of the height; one sibling peeks in at each edge at 60% scale, half cut off. The headline sits at the top at 8vw on two lines with the supporting sentence beneath; the item's name and fact sit under the item at 24px and 16px. The action becomes a full-width button 20px above the bottom edge.", + "headline": "A plain 3–6 word line on two lines, at most 20 characters per line; the item's own name under the object changes with the selection.", + "motion": "drag-row", + "seenIn": [ + "aww-ciao-energy-launch-website" + ] + }, + { + "id": "view-with-two-cards-in-the-corner", + "name": "View with two cards in the corner", + "archetype": "fullbleed-media", + "directions": [ + "place-carries-it", + "hero-object", + "editorial-report" + ], + "needs": [], + "blueprint": "One photograph or muted film fills the viewport, `object-fit: cover`, with the subject in the right half. The headline sits on the left at mid-height: two lines at clamp(44px, 3.9vw, 60px), bold, leading 1.08, flush to the 32px margin on columns 1–5, the block vertically centred; 20px below it, one supporting sentence at 18px, max 40ch, in the paper colour. In the bottom-right corner, 32px from the right and bottom edges, two cards sit side by side with a 16px gap, each two columns wide (about 210px) at 3:2: a photograph of the newest thing (a project, an edition, an article) with a paper-colour bar 40px tall fused to its lower edge, holding its title at 16px on the left and a small arrow on the right. They are the next steps after the single action, which is a solid rectangle top-right beside a menu word. One short fact at 16px in the paper colour may be pinned onto the subject itself, beside a solid 8px dot on the point it describes, with no line joining them. Wordmark top-left on the 32px margin. If the left half is light, lay a neutral dark scrim under columns 1–6 only.", + "mobile": "The picture is re-cropped to portrait with the subject in the upper half. The headline sits at 9vw on two lines on the 16px margin at 44% of the height, with the sentence at 16px beneath it. The two cards sit side by side across the full width at the bottom, 16px from the edges, each about 171px wide at 3:2 with its title bar. Wordmark top-left; the action and a menu word top-right.", + "headline": "A plain two-line claim of 4–7 words, at most about 17 characters per line at 3.9vw.", + "motion": "slow-crossfade", + "seenIn": [ + "aww-cominvi", + "aww-no-art" + ] + } +] diff --git a/.agents/skills/design-taste-frontend/library/motions.json b/.agents/skills/design-taste-frontend/library/motions.json new file mode 100644 index 0000000..ff3818f --- /dev/null +++ b/.agents/skills/design-taste-frontend/library/motions.json @@ -0,0 +1,92 @@ +[ + { + "id": "masked-headline", + "name": "Masked headline", + "description": "On load, each line of the headline rises from behind its own baseline, about 900ms with a strong ease-out, the second line 110ms after the first; the supporting sentence and the action then fade up together. Nothing else on the page performs. Because headlines are two lines at most, you author the line breaks and wrap each line yourself. Recipe: 'Masked line reveal' in references/motion.md." + }, + { + "id": "shutter-image", + "name": "Shutter image", + "description": "The one hero or showcase image opens from an edge with a clip-path over about 1.1 seconds while the picture inside settles from 1.12 scale to rest. Use it once, on the image that matters most; later images simply are there. Recipe: 'Image shutter' in references/motion.md." + }, + { + "id": "scaling-wordmark", + "name": "Scaling wordmark", + "description": "The giant name responds to the scroll: as the first screen leaves, the wordmark scales down a few percent (or grows from 0.94 to 1 as the footer arrives) on a scroll-linked timeline, so the monument feels heavy. Travel stays under 8%. Static fallback where scroll timelines are unsupported. Recipe: 'Scroll-linked progress' in references/motion.md, animating `scale`." + }, + { + "id": "pinned-story", + "name": "Pinned story", + "description": "One element holds its place with `position: sticky` (a title, a frame, a product fragment) while the items that belong to it scroll past or swap inside it. The page's ordinary scrolling does the work; nothing is hijacked. Hold it for about one screen per step and three screens at most, two held stages per page at most, with a line of text on every held screen. Recipe: 'Pinned story' in references/motion.md." + }, + { + "id": "index-preview", + "name": "Index with preview", + "description": "Rows of text are the navigation through the work; pointing at a row brings up its image in one fixed frame and dims the other rows. On touch screens each row shows its image inline instead. Fast and exact (about 240ms crossfade), no lag behind the pointer. Recipe: 'Index with preview, anchored to the row' in references/motion.md." + }, + { + "id": "curtain-footer", + "name": "Curtain footer", + "description": "The page content slides up like a sheet to uncover the footer waiting beneath it, so the last screen is revealed rather than scrolled to. Build with a sticky footer at the bottom and a main element with its own background and a higher stacking order. No JavaScript." + }, + { + "id": "slow-crossfade", + "name": "Slow crossfade", + "description": "The principal photograph quietly changes: three or four images of the same framing crossfade over about 1.6 seconds, holding five to six seconds each, or the fixed image changes when its matching section arrives. It should feel like light shifting in a room. Pause when the tab is hidden; under reduced motion show only the first image." + }, + { + "id": "edge-marquee", + "name": "Edge-to-edge marquee", + "description": "One line of very large type travels sideways across the full width at a slow constant speed, as a band between two sections or as the closing statement. Linear timing, duplicated content for a seamless loop, paused on hover and under reduced motion. One marquee per page, carrying real words (the name, the claim), never a list of buzzwords." + }, + { + "id": "drag-row", + "name": "Drag row", + "description": "A row of large items wider than the screen that the visitor pulls sideways: native horizontal scrolling with scroll snapping, the first item aligned to the page margin and the last allowed to run off the edge so the row visibly continues. No carousel library, no arrows, no dots." + }, + { + "id": "colour-on-scroll", + "name": "Colour by chapter", + "description": "Each chapter is its own full-bleed field of one palette colour, so the ground changes exactly at section edges as you scroll, never as a global recolouring of the screen. The only movement: the fixed header (or the one pinned element) takes the ink of the chapter beneath it, switching with a 300ms colour transition as each edge passes under it. Do not drive the page background from an observer: in blind tests a page recoloured mid-section, with a paragraph sitting on two colours, read as broken twice." + }, + { + "id": "stillness", + "name": "Stillness", + "description": "No showpiece. The page is simply there, instantly, and the discipline is the statement. Motion is limited to exact feedback: a 140ms press on the button, a 180ms colour change on links, focus rings that appear without delay. Do not add a load animation or scroll reveals to this direction." + }, + { + "id": "opening-window", + "name": "Opening window", + "description": "A type screen hands over to the one great photograph: the picture first shows as a window about 45% of the width in the middle of a held stage and opens to full-bleed over about one screen of scroll, while the image inside settles from 1.15 scale. Scroll-linked and linear, so the reader sets the pace; it is fully open after three quarters of the hold and rests a moment before the page moves on. Use it once, for the picture that carries the subject. Where scroll timelines are unsupported, or under reduced motion, the picture is simply a full-bleed screen. Recipe: 'Opening window' in references/motion.md." + }, + { + "id": "ink-fill", + "name": "Ink-fill statement", + "description": "One statement of three to five lines at 32px or more starts at 45% ink and fills to full ink line by line as it rises from three quarters of the way down the screen to just past half way, so the reading pace follows the scroll. Every word is readable before it fills; the fill only sets the rhythm. Once per page, never on body copy, never on a headline the visitor needs at once. Full ink without scroll timelines or under reduced motion. Recipe: 'Ink fill' in references/motion.md." + }, + { + "id": "sheet-over", + "name": "Sheet over a held picture", + "description": "A full-bleed photograph holds its place for one screen and the next chapter, an opaque sheet in the page ground carrying its heading at the top edge, slides up over it like a page being turned. The chapter change is read, not just seen, and nothing is hijacked: the photograph is a 100svh figure with position: sticky; top: 0, followed by a section with its own background and a higher stacking order. Hold for one screen at most, use it at one or two chapter changes, and give each held photograph a caption so the held screen carries a line of text." + }, + { + "id": "sideways-gallery", + "name": "Sideways gallery", + "description": "A short set of pictures (eight or fewer: rooms, kitchens, pieces) moves sideways while the vertical scroll holds the stage, one pixel of scroll for one pixel of travel, and the hold ends the moment the last picture reaches the margin. Only on wide screens with motion allowed and only when the row is under three screens long; phones, reduced motion and longer rows get the native drag row with snapping. Focusing a link scrolls its picture into view, and the only copy of a call to action never sits inside the moving row. Recipe: 'Sideways gallery' in references/motion.md." + }, + { + "id": "pushed-line", + "name": "Pushed line", + "description": "One line of very large type, the name or the claim, is pushed sideways by the scroll rather than by a clock: it travels from 12% right to 12% left of its place while it crosses the screen, linear and locked to the scrollbar, and reads whole at the middle of its run. One per page, never across running text, and the words must never be cropped at the moment the line sits in the middle of the screen. Build with animation-timeline: view() on the line and a translateX keyframe; static where scroll timelines are unsupported and under reduced motion." + }, + { + "id": "rolling-figures", + "name": "Rolling figures", + "description": "For a page whose case is a handful of numbers (a report, a fund, a practice with a founding year): three or four figures at display size roll each digit up to its value once as they come into view, about 1.1 seconds on a strong ease-out, the columns 70ms apart. Tabular figures, the real number kept in the text for screen readers and search, never in running text and never for a value that changes after load. Set at its value under reduced motion. Recipe: 'Rolling figures' in references/motion.md." + }, + { + "id": "carried-picture", + "name": "Carried picture", + "description": "Between the index and a case page, the picture the visitor clicked travels into place as the new page's hero while the old page fades out in 200ms and the new one rises in, all within 480ms, using the browser's own cross-document view transitions with no library and no full-screen curtain. Give the card picture and the hero the same view-transition-name; each name appears once per page. Browsers without view transitions simply navigate; reduced motion turns it off. Recipe: 'Page to page' in references/motion.md." + } +] diff --git a/.agents/skills/design-taste-frontend/library/palettes.json b/.agents/skills/design-taste-frontend/library/palettes.json new file mode 100644 index 0000000..9de29b1 --- /dev/null +++ b/.agents/skills/design-taste-frontend/library/palettes.json @@ -0,0 +1,1485 @@ +[ + { + "id": "white-link-blue", + "name": "Sheet and biro", + "tags": [ + "light-neutral", + "mono-accent" + ], + "bg": "#ffffff", + "surface": "#f4f4f4", + "ink": "#111111", + "muted": "#6b6b6b", + "accent": "#1a4be0", + "accentInk": "#ffffff", + "fields": [ + { + "bg": "#111111", + "ink": "#ffffff" + } + ], + "note": "White holds the whole page with black type, one grey for secondary lines and a pale grey step for tiles and inputs; the footer may invert to black. Blue is the colour of text links and the one button, and nothing else is tinted.", + "seenIn": [ + "opl-shawn-golden", + "opl-lovably", + "aww-bleibtgleich26" + ] + }, + { + "id": "cool-white-slate", + "name": "Frost and slate", + "tags": [ + "light-neutral" + ], + "bg": "#f7f9fa", + "surface": "#ecf0f2", + "ink": "#1f3038", + "muted": "#5d6b72", + "accent": "#0d7480", + "accentInk": "#ffffff", + "note": "Cool white and one paler blue-grey step hold everything, with type in dark slate instead of black. Teal appears once per screen at most, as the primary button or one small detail beside the product photograph.", + "seenIn": [ + "opl-aevion", + "aww-cominvi" + ] + }, + { + "id": "rose-grey-green", + "name": "Rose grey, green", + "tags": [ + "light-neutral" + ], + "bg": "#ebe5e3", + "surface": "#e1dad7", + "ink": "#2b2622", + "muted": "#6a615d", + "accent": "#0f7d45", + "accentInk": "#ffffff", + "note": "A single rosy grey covers the page from top to bottom with brown-black text and grey secondary lines; images are kept greyscale. Green appears only on the current-page link and on one button in the footer.", + "seenIn": [ + "opl-the-queue" + ] + }, + { + "id": "paper-grey-brass", + "name": "Newsprint and brass", + "tags": [ + "light-neutral" + ], + "bg": "#e8e8e3", + "surface": "#dcdcd6", + "ink": "#181715", + "muted": "#63625c", + "accent": "#bfb21a", + "accentInk": "#181715", + "fields": [ + { + "bg": "#181715", + "ink": "#e8e8e3" + } + ], + "note": "Warm paper grey with near-black type holds the upper page, then whole sections flip to near-black with paper-grey type; no section is tinted. Brass yellow marks one small detail per screen, such as the button or a single word.", + "seenIn": [ + "aww-monolog" + ] + }, + { + "id": "stone-blueprint", + "name": "Stone and blueprint", + "tags": [ + "light-neutral" + ], + "bg": "#dfdedb", + "surface": "#d3d2ce", + "ink": "#26251e", + "muted": "#5f5d55", + "accent": "#2456d6", + "accentInk": "#ffffff", + "note": "Stone paper carries the whole page with near-black and grey text. One image at a time is printed in the accent blue as its only ink, and the same blue fills the single button.", + "seenIn": [ + "opl-compile" + ] + }, + { + "id": "white-navy-tab", + "name": "Navy on white", + "tags": [ + "light-neutral", + "photographic-neutral" + ], + "bg": "#ffffff", + "surface": "#f4f4f2", + "ink": "#1f2b4d", + "muted": "#6a7186", + "accent": "#f7941d", + "accentInk": "#1f2b4d", + "fields": [ + { + "bg": "#05070a", + "ink": "#ffffff" + }, + { + "bg": "#e3e1dc", + "ink": "#1f2b4d" + } + ], + "note": "Pure white pages with navy type sit between full-bleed photographs, opening on near-black and closing on a warm grey footer. Tangerine is one small tab or button, never larger than a thumbnail.", + "seenIn": [ + "aww-white-desert", + "aww-realevate" + ] + }, + { + "id": "three-stones", + "name": "Three stones", + "tags": [ + "light-neutral", + "photographic-neutral" + ], + "bg": "#eeecea", + "surface": "#e4e1dd", + "ink": "#333231", + "muted": "#6b6763", + "accent": "#5c6b54", + "accentInk": "#ffffff", + "fields": [ + { + "bg": "#cdc3b6", + "ink": "#333231" + } + ], + "note": "Three close stone tones share the interface: the lightest for the page, the middle one for panels, the darkest for a single band, all with charcoal type. Saturated colour is left to the photographs and their backdrops; the grey-green fills the button only.", + "seenIn": [ + "aww-noho", + "aww-vero-new-york" + ] + }, + { + "id": "putty-black-teal", + "name": "Putty and black", + "tags": [ + "light-neutral", + "photographic-neutral" + ], + "bg": "#dedad3", + "surface": "#d3cec6", + "ink": "#0a0a0a", + "muted": "#5c5852", + "accent": "#256f82", + "accentInk": "#ffffff", + "note": "Warm putty covers the page and pure black handles all type and the main shapes. The only tint in the interface is teal, used for the one button or a single marker placed near the photographs.", + "seenIn": [ + "aww-colonia-zacamil", + "opl-archiv" + ] + }, + { + "id": "moss-sand", + "name": "Sand and moss", + "tags": [ + "light-neutral", + "earth" + ], + "bg": "#ddd6c6", + "surface": "#d2cab8", + "ink": "#2a2a26", + "muted": "#59574e", + "accent": "#4f6238", + "accentInk": "#ffffff", + "fields": [ + { + "bg": "#3f5a2a", + "ink": "#ffffff" + } + ], + "note": "Sand grey holds the page with charcoal type, and one deep leaf-green band may close it. Moss green is reserved for buttons; brighter greens and blues arrive only through photographs.", + "seenIn": [ + "opl-vestris", + "aww-izanami" + ] + }, + { + "id": "green-mat-chocolate", + "name": "Bone, green, chocolate", + "tags": [ + "light-neutral", + "earth" + ], + "bg": "#e5e1d8", + "surface": "#dad5ca", + "ink": "#2a1d17", + "muted": "#6b5b51", + "accent": "#456f3a", + "accentInk": "#ffffff", + "fields": [ + { + "bg": "#456f3a", + "ink": "#ffffff" + } + ], + "note": "Bone ground with chocolate-brown text takes most of the page. The green is spent on one large flat block, about a third of a screen, and on the button; all other colour comes from photographs.", + "seenIn": [ + "opl-davesocozy", + "opl-mat" + ] + }, + { + "id": "lunar-grey-bronze", + "name": "Lunar and bronze", + "tags": [ + "dark-neutral" + ], + "bg": "#111111", + "surface": "#1c1c1c", + "ink": "#f2f2f2", + "muted": "#8f8f8f", + "accent": "#a08672", + "accentInk": "#111111", + "note": "Soft black holds the page with panels one step lighter, white text and grey secondary lines, so photographs supply all the colour. Muted bronze goes on small markers and the one button only.", + "seenIn": [ + "aww-21-hrs-on-the-moon", + "opl-dialkit", + "opl-lorenzo-bocchi-photography" + ] + }, + { + "id": "blue-black-cornflower", + "name": "Night and cornflower", + "tags": [ + "dark-neutral" + ], + "bg": "#0a0d14", + "surface": "#131824", + "ink": "#e9edf3", + "muted": "#8891a1", + "accent": "#5a9bfc", + "accentInk": "#0a0d14", + "note": "Blue-black ground and slate panels with silver-white text fill the page; no section changes colour. Cornflower blue marks the buttons and at most one word in a heading.", + "seenIn": [ + "opl-viewport-2", + "aww-moto-finance", + "opl-rafael-derolez-2026" + ] + }, + { + "id": "green-black-bone", + "name": "Green-black and bone", + "tags": [ + "dark-neutral", + "earth" + ], + "bg": "#161c1a", + "surface": "#1f2725", + "ink": "#e3e2da", + "muted": "#8e948d", + "accent": "#9fc7b8", + "accentInk": "#161c1a", + "note": "Bone type on green-black from top to bottom, with panels and drawn details barely lighter than the ground so photographs supply the colour. Pale jade is for the booking or contact button alone.", + "seenIn": [ + "opl-kereliott", + "aww-lama-lama-2" + ] + }, + { + "id": "black-crimson", + "name": "Black and crimson", + "tags": [ + "dark-neutral", + "mono-accent" + ], + "bg": "#0a0a0a", + "surface": "#151515", + "ink": "#efefef", + "muted": "#8c8c8c", + "accent": "#b11226", + "accentInk": "#ffffff", + "fields": [ + { + "bg": "#efefef", + "ink": "#0a0a0a" + } + ], + "note": "Black with off-white text and mid-grey texture takes nearly the whole page, and the last sections may invert to off-white with black type. Deep crimson is scattered sparingly: a few characters in a heading, a slider fill, the one button.", + "seenIn": [ + "opl-textmode-overlay" + ] + }, + { + "id": "forest-pale-lime", + "name": "Forest and lime", + "tags": [ + "dark-neutral", + "earth" + ], + "bg": "#0f1f10", + "surface": "#162a17", + "ink": "#ffffff", + "muted": "#9aa39a", + "accent": "#c6f19d", + "accentInk": "#0f1f10", + "fields": [ + { + "bg": "#000000", + "ink": "#ffffff" + }, + { + "bg": "#ffffff", + "ink": "#0f1f10" + } + ], + "note": "Forest green, black and white sections alternate, with forest green holding the most; photographs stay in moss greens and stone browns. Pale lime sits on small squares only, such as arrow buttons and the closing wordmark.", + "seenIn": [ + "aww-alethia" + ] + }, + { + "id": "charcoal-room-sage", + "name": "Charcoal and sage", + "tags": [ + "dark-neutral", + "photographic-neutral" + ], + "bg": "#1c1c1c", + "surface": "#262626", + "ink": "#f1f1ef", + "muted": "#9a9b96", + "accent": "#8fa68e", + "accentInk": "#1c1c1c", + "fields": [ + { + "bg": "#c8c5ba", + "ink": "#1c1c1c" + } + ], + "note": "Charcoal holds the page with off-white text, and one section may flip to a pale concrete tone with dark text. Colour comes from the photographs; grey sage is used for the single button and the active state of a control.", + "seenIn": [ + "opl-transport", + "opl-amanda-guo-design" + ] + }, + { + "id": "warm-black-gold", + "name": "Warm black, gold", + "tags": [ + "dark-neutral", + "photographic-neutral" + ], + "bg": "#0c0a08", + "surface": "#181512", + "ink": "#ffffff", + "muted": "#8f8a84", + "accent": "#c9a45a", + "accentInk": "#0c0a08", + "note": "Warm near-black fills the page and photographs sit bright against it, with pure white small type; panels warm to a brown-black. Gold is for one text link or small button per screen, never a field.", + "seenIn": [ + "aww-cipher", + "opl-hebbia" + ] + }, + { + "id": "graphite-safety-orange", + "name": "Graphite and orange", + "tags": [ + "mono-accent", + "dark-neutral" + ], + "bg": "#18191b", + "surface": "#222427", + "ink": "#eff0f1", + "muted": "#9c9ea3", + "accent": "#ff4a1f", + "accentInk": "#18191b", + "fields": [ + { + "bg": "#eff0f1", + "ink": "#18191b" + } + ], + "note": "Graphite and cool light-grey sections alternate, graphite taking about two thirds, and photographs are desaturated so nothing competes. Safety orange marks the buttons, one thick solid bar across the top of the page and the highlighted item in a list or chart.", + "seenIn": [ + "aww-sstr-friction-reduction", + "aww-boc-studio", + "aww-dragonfly-redux" + ] + }, + { + "id": "soot-pale-lime", + "name": "Soot and lime", + "tags": [ + "mono-accent", + "dark-neutral" + ], + "bg": "#0f0f0f", + "surface": "#1a1a1a", + "ink": "#ffffff", + "muted": "#8f8f8f", + "accent": "#dafa9c", + "accentInk": "#0f0f0f", + "fields": [ + { + "bg": "#ffffff", + "ink": "#0f0f0f" + }, + { + "bg": "#dafa9c", + "ink": "#0f0f0f" + } + ], + "note": "A soot-black opening and close bracket white middle sections, all in black, white and grey. Pale lime is the single action colour: every button, and at most one headline set in it on the dark ground.", + "seenIn": [ + "opl-builders-table", + "aww-made-with-gsap-1", + "aww-hilden-kaira" + ] + }, + { + "id": "plum-black-pink", + "name": "Plum-black and pink", + "tags": [ + "mono-accent", + "dark-neutral" + ], + "bg": "#0d060b", + "surface": "#1b0e17", + "ink": "#ffffff", + "muted": "#9a8f97", + "accent": "#ff488b", + "accentInk": "#0d060b", + "fields": [ + { + "bg": "#470c35", + "ink": "#ffffff" + }, + { + "bg": "#ffffff", + "ink": "#101421" + } + ], + "note": "Near-black and plum at the top and bottom bracket a white middle with navy-black text. Hot pink is reserved for primary buttons, bars in charts and map markers; it never fills a section.", + "seenIn": [ + "aww-cerebrium" + ] + }, + { + "id": "white-signal-red", + "name": "Signal red, white", + "tags": [ + "mono-accent" + ], + "bg": "#ffffff", + "surface": "#f2f2f2", + "ink": "#0a0a0a", + "muted": "#6b6b6b", + "accent": "#d92b21", + "accentInk": "#ffffff", + "fields": [ + { + "bg": "#000000", + "ink": "#ffffff" + } + ], + "note": "White ground, black text and paper grey for filled panels, with one full black band allowed. Signal red is the only colour in the interface: one word in a headline, a few solid blocks, or the button.", + "seenIn": [ + "opl-rsquad", + "aww-serotoninn", + "opl-estacion-venenta" + ] + }, + { + "id": "white-mint-tiles", + "name": "Greys and mint", + "tags": [ + "mono-accent" + ], + "bg": "#ffffff", + "surface": "#f3f3f3", + "ink": "#232323", + "muted": "#6e6e6e", + "accent": "#a1ffcb", + "accentInk": "#232323", + "fields": [ + { + "bg": "#a1ffcb", + "ink": "#232323" + }, + { + "bg": "#232323", + "ink": "#ffffff" + } + ], + "note": "White, near-black and two greys fill a board of flat tiles. Mint floods a few whole tiles (one statement, one figure, the closing call to action) and appears nowhere else.", + "seenIn": [ + "aww-aspen-search" + ] + }, + { + "id": "cool-grey-cobalt", + "name": "Cool grey, cobalt", + "tags": [ + "mono-accent" + ], + "bg": "#eef0f3", + "surface": "#e2e5ea", + "ink": "#0b0c0e", + "muted": "#5d6470", + "accent": "#1f2de6", + "accentInk": "#ffffff", + "fields": [ + { + "bg": "#1f2de6", + "ink": "#ffffff" + } + ], + "note": "Cool pale grey holds the page with near-black type and nothing else tinted. Cobalt starts as the button and one highlighted sentence, takes one whole section as a flat field with white text, then returns as a single button block.", + "seenIn": [ + "opl-vessa", + "opl-specia1ne", + "opl-brikkenco" + ] + }, + { + "id": "offwhite-bottle-yellow", + "name": "Bottle ink, yellow", + "tags": [ + "mono-accent" + ], + "bg": "#f7f7f7", + "surface": "#ebebeb", + "ink": "#0d2a1c", + "muted": "#5f6b64", + "accent": "#f6e016", + "accentInk": "#0d2a1c", + "fields": [ + { + "bg": "#f6e016", + "ink": "#0d2a1c" + } + ], + "note": "Off-white ground with all type in a near-black bottle green instead of black. Yellow is the only saturated note: the button or one small object on most screens, and one later section that turns fully yellow.", + "seenIn": [ + "aww-leo-parpeix-portfolio-2026", + "opl-wild-as" + ] + }, + { + "id": "teal-on-paper", + "name": "Teal on paper", + "tags": [ + "two-tone" + ], + "bg": "#f7f9f8", + "surface": "#ebf0ee", + "ink": "#06525c", + "muted": "#2f737d", + "accent": "#06525c", + "accentInk": "#f7f9f8", + "fields": [ + { + "bg": "#06525c", + "ink": "#f7f9f8" + } + ], + "note": "Cool white paper and a single teal used for every word, shape and button, with no black anywhere. The accent is that same teal filled solid, for the button and for one inverted band with paper-coloured type.", + "seenIn": [ + "opl-le-petit-bleu" + ] + }, + { + "id": "navy-pink", + "name": "Navy and pink", + "tags": [ + "two-tone", + "single-field" + ], + "bg": "#1a2039", + "surface": "#212846", + "ink": "#f9a3c0", + "muted": "#b9879c", + "accent": "#f9a3c0", + "accentInk": "#1a2039", + "note": "One navy field runs the entire page. Pink does everything else, from the name and headings to body text, and fills one solid button.", + "seenIn": [ + "aww-trevor-noah" + ] + }, + { + "id": "blush-aubergine", + "name": "Blush and aubergine", + "tags": [ + "two-tone" + ], + "bg": "#edccbe", + "surface": "#e8c2b2", + "ink": "#351a2b", + "muted": "#6c4857", + "accent": "#351a2b", + "accentInk": "#edccbe", + "fields": [ + { + "bg": "#351a2b", + "ink": "#edccbe" + } + ], + "note": "Blush pink and dark aubergine alternate as full fields and serve as each other's text colour, in roughly equal shares. There is no third colour: the button is a solid block of whichever of the two is not the ground.", + "seenIn": [ + "aww-house-of-honey-1", + "opl-sarah-matt-wedding" + ] + }, + { + "id": "cobalt-on-sand", + "name": "Cobalt on sand", + "tags": [ + "two-tone" + ], + "bg": "#e6dbc7", + "surface": "#ddd0b9", + "ink": "#062b8a", + "muted": "#3a5aa8", + "accent": "#062b8a", + "accentInk": "#e6dbc7", + "note": "Sand paper and one cobalt do everything: text, drawings and solid shapes are all the same blue. The button is a cobalt block with sand-coloured type, and no black or second hue is used.", + "seenIn": [ + "aww-illoca" + ] + }, + { + "id": "oxblood-grey", + "name": "Oxblood and grey", + "tags": [ + "two-tone" + ], + "bg": "#e2e2e2", + "surface": "#d6d6d6", + "ink": "#7d0c14", + "muted": "#7a4a4e", + "accent": "#7d0c14", + "accentInk": "#e2e2e2", + "fields": [ + { + "bg": "#7d0c14", + "ink": "#e2e2e2" + } + ], + "note": "Deep red text on grey paper holds most of the page, then pale grey text on a solid red field takes one long section and the footer. Photographs are desaturated so nothing breaks the pair, and the button is a solid red block.", + "seenIn": [ + "opl-belgrade-architecture" + ] + }, + { + "id": "olive-on-bone", + "name": "Olive on bone", + "tags": [ + "two-tone", + "earth" + ], + "bg": "#ecebe7", + "surface": "#e1dfd9", + "ink": "#38450f", + "muted": "#5d683a", + "accent": "#38450f", + "accentInk": "#ecebe7", + "fields": [ + { + "bg": "#38450f", + "ink": "#ecebe7" + } + ], + "note": "A bone page with every word, large or small, in one olive green; the footer inverts to a solid olive field with bone text. Photography supplies all other colour, and the button is the same olive, filled.", + "seenIn": [ + "aww-tengile-malamala-collection" + ] + }, + { + "id": "burgundy-bubblegum", + "name": "Burgundy and bubblegum", + "tags": [ + "two-tone" + ], + "bg": "#3d0012", + "surface": "#4d0519", + "ink": "#ff99d3", + "muted": "#c77aa0", + "accent": "#ff99d3", + "accentInk": "#3d0012", + "note": "Deep burgundy is the ground for the whole page and bubblegum pink sets every word on it. The button and the active state of a control are solid pink with burgundy type; product photographs supply any other colour.", + "seenIn": [ + "opl-madie" + ] + }, + { + "id": "bottle-green-gold", + "name": "Bottle green, gold", + "tags": [ + "two-tone", + "earth" + ], + "bg": "#133621", + "surface": "#1a4429", + "ink": "#f4d96c", + "muted": "#b3a55e", + "accent": "#f4d96c", + "accentInk": "#133621", + "note": "Bottle green covers the page and warm gold sets all the type, with panels one step lighter than the ground. The button is solid gold with green text, and photographs are kept dark and warm so the pair is not disturbed.", + "seenIn": [ + "aww-lacoste-ace-breaker" + ] + }, + { + "id": "cobalt-field", + "name": "Cobalt field", + "tags": [ + "single-field" + ], + "bg": "#0034eb", + "surface": "#002fd6", + "ink": "#ffffff", + "muted": "#c5d0ff", + "accent": "#e9e34a", + "accentInk": "#111111", + "note": "One electric cobalt fills everything, with white and pale-blue type; photographs are tinted into blue monotone or kept as small thumbnails. A single yellow dot or button is the only other colour on the page.", + "seenIn": [ + "opl-george-wood", + "aww-studio-k95-3" + ] + }, + { + "id": "mustard-field", + "name": "Mustard and black", + "tags": [ + "single-field" + ], + "bg": "#e1ac10", + "surface": "#cd9d0f", + "ink": "#0b0b0b", + "muted": "#4d3d0a", + "accent": "#24338f", + "accentInk": "#ffffff", + "note": "One warm mustard field for the whole page with black ink only. Royal blue is the single interruption, kept to a sliver along one edge or one small button.", + "seenIn": [ + "opl-beige-force" + ] + }, + { + "id": "carmine-field", + "name": "Carmine field", + "tags": [ + "single-field" + ], + "bg": "#9c1220", + "surface": "#8a101c", + "ink": "#ffffff", + "muted": "#f0b9bd", + "accent": "#ffd9dc", + "accentInk": "#9c1220", + "fields": [ + { + "bg": "#2a2a2a", + "ink": "#ffffff" + } + ], + "note": "A deep red field bookends or fills the page, with white type and pale pink secondary lines; work shown in between sits on flat charcoal so it keeps its own colours. The button is a pale pink block with red type.", + "seenIn": [ + "opl-marina-rachello", + "opl-belgrade-architecture" + ] + }, + { + "id": "pink-field-lime", + "name": "Bubblegum and lime", + "tags": [ + "single-field" + ], + "bg": "#ff87ab", + "surface": "#ff739d", + "ink": "#0a0a0a", + "muted": "#6b1f3a", + "accent": "#def915", + "accentInk": "#0a0a0a", + "fields": [ + { + "bg": "#0a0a0a", + "ink": "#ff87ab" + } + ], + "note": "A flat bubblegum pink field with black type from top to bottom. Fluorescent lime is the action colour only: the menu button, one highlighter swipe behind a word and the main button.", + "seenIn": [ + "opl-nodeck", + "aww-decathlon-yestalgia" + ] + }, + { + "id": "sky-field-navy", + "name": "Sky and navy", + "tags": [ + "single-field" + ], + "bg": "#6bb4ee", + "surface": "#7dbdf0", + "ink": "#0e1822", + "muted": "#1b3d5c", + "accent": "#ff5a1f", + "accentInk": "#0e1822", + "fields": [ + { + "bg": "#ffffff", + "ink": "#0e1822" + }, + { + "bg": "#0e1822", + "ink": "#ffffff" + } + ], + "note": "Sky blue sits behind everything, white cards lie on top of it, and navy handles all text and the footer. Orange is for buttons and one highlighted word, so orange against blue is the single clash on the page.", + "seenIn": [ + "opl-ohhmydesign", + "opl-anidachi" + ] + }, + { + "id": "orange-field-black", + "name": "Orange and black", + "tags": [ + "single-field", + "two-tone" + ], + "bg": "#ff7a1f", + "surface": "#ff8633", + "ink": "#050f16", + "muted": "#5a2306", + "accent": "#050f16", + "accentInk": "#ff7a1f", + "fields": [ + { + "bg": "#ffffff", + "ink": "#050f16" + } + ], + "note": "Hot orange is the page: one flat field with blue-black type, flipping at a hard horizontal seam to a white section when the content needs a rest. The button is a solid block of the same blue-black with orange text, and every other colour comes from the objects shown.", + "seenIn": [ + "opl-postaway", + "opl-the-new-industrials" + ] + }, + { + "id": "tobacco-olive", + "name": "Tobacco and olive", + "tags": [ + "single-field", + "earth" + ], + "bg": "#472913", + "surface": "#55321a", + "ink": "#e4e0cf", + "muted": "#b39f84", + "accent": "#525e1b", + "accentInk": "#e4e0cf", + "fields": [ + { + "bg": "#c79a3e", + "ink": "#2b170a" + }, + { + "bg": "#525e1b", + "ink": "#e4e0cf" + } + ], + "note": "Tobacco brown fills the page with bone type, and photographs stay in browns and ochre. One olive block holds the main text or the button, and a single ochre band may break the brown once.", + "seenIn": [ + "aww-the-tuscan-journey-begins" + ] + }, + { + "id": "poster-chapters", + "name": "Poster chapters", + "tags": [ + "flat-loud" + ], + "bg": "#e6e0d2", + "surface": "#dcd5c5", + "ink": "#1a1a1a", + "muted": "#5f5b52", + "accent": "#18bc42", + "accentInk": "#1a1a1a", + "fields": [ + { + "bg": "#ed4b44", + "ink": "#0f0f0f" + }, + { + "bg": "#1a1a1a", + "ink": "#e6e0d2" + }, + { + "bg": "#18bc42", + "ink": "#1a1a1a" + }, + { + "bg": "#f2c21a", + "ink": "#1a1a1a" + }, + { + "bg": "#e6e0d2", + "ink": "#1a1a1a" + } + ], + "note": "Each chapter takes one flat field in turn (coral red, near-black, bone, green, yellow) with black or bone type and no tints between them. Green doubles as the accent for the one button when the ground is bone or black.", + "seenIn": [ + "aww-pp-neue-montreal" + ] + }, + { + "id": "blue-red-black", + "name": "Blue, red, black", + "tags": [ + "flat-loud" + ], + "bg": "#ffffff", + "surface": "#f3f3f3", + "ink": "#0a0a0a", + "muted": "#6b6b6b", + "accent": "#2436ff", + "accentInk": "#ffffff", + "fields": [ + { + "bg": "#2436ff", + "ink": "#ffffff" + }, + { + "bg": "#ff3b1f", + "ink": "#0a0a0a" + }, + { + "bg": "#0a0a0a", + "ink": "#ffffff" + }, + { + "bg": "#050a5c", + "ink": "#ffffff" + } + ], + "note": "Three flat poster colours each own whole sections: electric blue, red-orange and black, with white for the areas that show the product. No tints sit between them, and blue is the button colour on white.", + "seenIn": [ + "opl-juggle" + ] + }, + { + "id": "charcoal-primaries", + "name": "Charcoal and primaries", + "tags": [ + "flat-loud" + ], + "bg": "#191919", + "surface": "#242424", + "ink": "#ffffff", + "muted": "#9a9a9a", + "accent": "#0c7866", + "accentInk": "#ffffff", + "fields": [ + { + "bg": "#d71e1e", + "ink": "#ffffff" + }, + { + "bg": "#1e4bd7", + "ink": "#ffffff" + }, + { + "bg": "#0c7866", + "ink": "#ffffff" + }, + { + "bg": "#ffe927", + "ink": "#111111" + } + ], + "note": "A charcoal ground holds flat poster primaries assigned to whole panels: red, blue, teal green and yellow, each placed against a different one. Type is white, or black on yellow; teal green is the button colour on charcoal.", + "seenIn": [ + "aww-mosbys-files" + ] + }, + { + "id": "ultramarine-yellow", + "name": "Ultramarine and yellow", + "tags": [ + "flat-loud" + ], + "bg": "#1423b8", + "surface": "#1220a6", + "ink": "#ffffff", + "muted": "#b4bcf0", + "accent": "#1fc27a", + "accentInk": "#0a0a0a", + "fields": [ + { + "bg": "#1423b8", + "ink": "#ffffff" + }, + { + "bg": "#000000", + "ink": "#ffffff" + }, + { + "bg": "#f7dd47", + "ink": "#000000" + }, + { + "bg": "#e9479f", + "ink": "#000000" + } + ], + "note": "Each section is one flat field in sequence: ultramarine, black, yellow, then ultramarine again, with white type on blue and black, and black type on yellow. Green is the only small accent and never grows larger than a button.", + "seenIn": [ + "aww-warm-fuzzy", + "aww-px-push" + ] + }, + { + "id": "candy-chapters", + "name": "Candy chapters", + "tags": [ + "flat-loud" + ], + "bg": "#ffd249", + "surface": "#f5c63c", + "ink": "#0a0a0a", + "muted": "#5e4a0a", + "accent": "#f53fd6", + "accentInk": "#0a0a0a", + "fields": [ + { + "bg": "#ffd249", + "ink": "#0a0a0a" + }, + { + "bg": "#ffffff", + "ink": "#0a0a0a" + }, + { + "bg": "#ffc4ef", + "ink": "#0a0a0a" + }, + { + "bg": "#a4f6f8", + "ink": "#0a0a0a" + }, + { + "bg": "#f9a21f", + "ink": "#0a0a0a" + } + ], + "note": "Each section owns one flat candy colour: yellow first, then white, pink, cyan and orange, with all type in black. Magenta is kept for buttons alone.", + "seenIn": [ + "aww-aardvark-book-club" + ] + }, + { + "id": "orange-sky-lime", + "name": "Orange, sky, lime", + "tags": [ + "flat-loud" + ], + "bg": "#ff8126", + "surface": "#ff8d3a", + "ink": "#111111", + "muted": "#5c2a05", + "accent": "#de194b", + "accentInk": "#ffffff", + "fields": [ + { + "bg": "#ff8126", + "ink": "#111111" + }, + { + "bg": "#4db3ff", + "ink": "#111111" + }, + { + "bg": "#c5f53d", + "ink": "#111111" + }, + { + "bg": "#161615", + "ink": "#f2f2f2" + } + ], + "note": "The page ground changes as you read: orange first, then sky blue, then acid lime at the end, with one near-black band between; type stays black on all three colours. Crimson is one small button per field.", + "seenIn": [ + "opl-the-new-industrials", + "opl-anidachi" + ] + }, + { + "id": "post-red-mustard", + "name": "Post red, mustard", + "tags": [ + "flat-loud" + ], + "bg": "#e2dccf", + "surface": "#d7d0c1", + "ink": "#2a1110", + "muted": "#6b524c", + "accent": "#4a6f84", + "accentInk": "#ffffff", + "fields": [ + { + "bg": "#dc1928", + "ink": "#ffffff" + }, + { + "bg": "#952625", + "ink": "#ffffff" + }, + { + "bg": "#e0a912", + "ink": "#2a1110" + }, + { + "bg": "#4a6f84", + "ink": "#ffffff" + }, + { + "bg": "#e2dccf", + "ink": "#2a1110" + } + ], + "note": "Post red and bone alternate as full section fields, with red holding the opening and the close. Mustard, slate blue and maroon are kept for whole card frames, and slate blue also fills the one button.", + "seenIn": [ + "opl-locker-land" + ] + }, + { + "id": "mint-orange-grey", + "name": "Grey, mint, orange", + "tags": [ + "flat-loud" + ], + "bg": "#ffffff", + "surface": "#f5f5f5", + "ink": "#000000", + "muted": "#666666", + "accent": "#a7ff9c", + "accentInk": "#000000", + "fields": [ + { + "bg": "#c5c5c5", + "ink": "#000000" + }, + { + "bg": "#a7ff9c", + "ink": "#000000" + }, + { + "bg": "#ff6831", + "ink": "#000000" + }, + { + "bg": "#000000", + "ink": "#ffffff" + } + ], + "note": "Black on white to start, then whole sections flood with flat mid-grey, acid mint and orange in turn. Photographs inside a flooded section are shown in black-and-white, and mint is also the button colour on white and black.", + "seenIn": [ + "aww-paul-kalkbrenner" + ] + }, + { + "id": "report-blocks", + "name": "Report blocks", + "tags": [ + "flat-loud" + ], + "bg": "#ffffff", + "surface": "#f6f6f6", + "ink": "#000000", + "muted": "#5f5f5f", + "accent": "#fe7141", + "accentInk": "#000000", + "fields": [ + { + "bg": "#fe7141", + "ink": "#000000" + }, + { + "bg": "#d1ddd3", + "ink": "#000000" + }, + { + "bg": "#f0ff1c", + "ink": "#000000" + }, + { + "bg": "#000000", + "ink": "#f4f4f4" + } + ], + "note": "A white base with flat blocks of orange, sage, acid yellow and black assigned to whole modules: figure tiles, quote panels and chapter bands. Text is black on every colour and off-white on black, and orange is also the button colour.", + "seenIn": [ + "aww-ai-in-design-report-2026" + ] + }, + { + "id": "card-pastels", + "name": "Card pastels", + "tags": [ + "pastel-fields" + ], + "bg": "#f7f7f5", + "surface": "#ebebe8", + "ink": "#000000", + "muted": "#666662", + "accent": "#d0106f", + "accentInk": "#ffffff", + "fields": [ + { + "bg": "#97aaf6", + "ink": "#000000" + }, + { + "bg": "#bbf697", + "ink": "#000000" + }, + { + "bg": "#fed878", + "ink": "#000000" + }, + { + "bg": "#6ef8fb", + "ink": "#000000" + } + ], + "note": "Neutral paper ground and black type, with each card or tile given its own flat pastel (periwinkle, lime, amber or cyan), never two alike side by side. Magenta is reserved for the logo, the email address and text links.", + "seenIn": [ + "opl-medium-rare" + ] + }, + { + "id": "mint-pink-accounts", + "name": "Mint and pink", + "tags": [ + "pastel-fields" + ], + "bg": "#f8f8f8", + "surface": "#eeeeee", + "ink": "#0a0a0a", + "muted": "#6a6a6a", + "accent": "#1f6b3a", + "accentInk": "#ffffff", + "fields": [ + { + "bg": "#c3edce", + "ink": "#0a0a0a" + }, + { + "bg": "#f8c7c9", + "ink": "#0a0a0a" + }, + { + "bg": "#ffffff", + "ink": "#0a0a0a" + } + ], + "note": "Near-white base with black type; mint and pink are the only two colours and each stands for one side of the product. They first appear as small circles, then as full-screen section fields, and deep green is used only for the button.", + "seenIn": [ + "opl-tara" + ] + }, + { + "id": "swap-pastels", + "name": "Swapping pastels", + "tags": [ + "pastel-fields" + ], + "bg": "#c3cbe5", + "surface": "#d0d6eb", + "ink": "#141414", + "muted": "#4a5068", + "accent": "#0f5257", + "accentInk": "#ffffff", + "fields": [ + { + "bg": "#c3cbe5", + "ink": "#141414" + }, + { + "bg": "#efd3da", + "ink": "#141414" + }, + { + "bg": "#e6dccd", + "ink": "#141414" + }, + { + "bg": "#cfd3cb", + "ink": "#141414" + }, + { + "bg": "#f9cdbd", + "ink": "#141414" + } + ], + "note": "One flat pastel is the whole background and it swaps per project or chapter: periwinkle, pink, sand, sage, peach. Type and one solid box stay near-black on all five, and dark teal is only for the button.", + "seenIn": [ + "opl-belen-jones" + ] + }, + { + "id": "blush-sage-slate", + "name": "Blush, sage, slate", + "tags": [ + "pastel-fields", + "earth" + ], + "bg": "#a6b3bc", + "surface": "#b2bdc5", + "ink": "#1c1c1c", + "muted": "#38424a", + "accent": "#2c3620", + "accentInk": "#e3e2da", + "fields": [ + { + "bg": "#a6b3bc", + "ink": "#1c1c1c" + }, + { + "bg": "#b7c8be", + "ink": "#1c1c1c" + }, + { + "bg": "#d6c4b8", + "ink": "#1c1c1c" + }, + { + "bg": "#2c3620", + "ink": "#e3e2da" + } + ], + "note": "Slate blue-grey, sage and blush share the page as soft flat blocks, one per chapter or menu tile, with dark type; one deep olive block anchors the close with pale type. Olive is also the button colour, and photographs of sea and sky do the rest.", + "seenIn": [ + "aww-seasats", + "opl-nia-creative" + ] + }, + { + "id": "candy-on-black", + "name": "Candy on black", + "tags": [ + "pastel-fields" + ], + "bg": "#000000", + "surface": "#0d0d0d", + "ink": "#ffffff", + "muted": "#999999", + "accent": "#93f1f7", + "accentInk": "#000000", + "fields": [ + { + "bg": "#9ae187", + "ink": "#000000" + }, + { + "bg": "#93f1f7", + "ink": "#000000" + }, + { + "bg": "#f3ea7a", + "ink": "#000000" + }, + { + "bg": "#fbb65c", + "ink": "#000000" + }, + { + "bg": "#b9c8ff", + "ink": "#000000" + } + ], + "note": "Black ground and dark photographs take nearly all of the surface. The only flat colour is a solid block behind each title, which takes a new candy pastel per project (mint, cyan, lemon, orange, cornflower); cyan is the default for the button.", + "seenIn": [ + "aww-glitch-grit" + ] + }, + { + "id": "sky-sand", + "name": "Sky and sand", + "tags": [ + "pastel-fields" + ], + "bg": "#cbe4f2", + "surface": "#bcdcee", + "ink": "#0a0a0a", + "muted": "#44606e", + "accent": "#b0298f", + "accentInk": "#ffffff", + "fields": [ + { + "bg": "#cbe4f2", + "ink": "#0a0a0a" + }, + { + "bg": "#f1e3b5", + "ink": "#0a0a0a" + }, + { + "bg": "#ffc013", + "ink": "#0a0a0a" + }, + { + "bg": "#0a0a0a", + "ink": "#f2f2f2" + } + ], + "note": "Sky blue and sand yellow are the constant ground, each holding whole sections, with black text throughout. Saturated colour arrives only as small solid objects, and magenta is kept for the contact card and its button.", + "seenIn": [ + "opl-applied-imagination" + ] + }, + { + "id": "studio-grey", + "name": "Studio grey", + "tags": [ + "photographic-neutral" + ], + "bg": "#a8a8aa", + "surface": "#b4b4b6", + "ink": "#0e0e0e", + "muted": "#3a3a3c", + "accent": "#1f5c49", + "accentInk": "#ffffff", + "fields": [ + { + "bg": "#1b1b1c", + "ink": "#ffffff" + } + ], + "note": "One mid grey serves as both page and studio backdrop, so the photographed object seems to stand on the page itself; type is black and one black band comes late. Colour comes only from the product, and racing green is for the single button.", + "seenIn": [ + "aww-longbow", + "aww-l-i-s-a" + ] + }, + { + "id": "walnut-tan", + "name": "Walnut and tan", + "tags": [ + "photographic-neutral", + "earth" + ], + "bg": "#2b2216", + "surface": "#382d1e", + "ink": "#e4e2da", + "muted": "#a39a8b", + "accent": "#bda38b", + "accentInk": "#2b2216", + "fields": [ + { + "bg": "#bda38b", + "ink": "#1c150d" + } + ], + "note": "Dark walnut holds the opening and the close with bone type, and the middle of the page may turn to flat tan around honey-lit photographs. There is no bright accent: tan is the fill for the one button on walnut.", + "seenIn": [ + "opl-the-deep-end" + ] + } +] \ No newline at end of file diff --git a/.agents/skills/design-taste-frontend/library/photos.json b/.agents/skills/design-taste-frontend/library/photos.json new file mode 100644 index 0000000..f403b77 --- /dev/null +++ b/.agents/skills/design-taste-frontend/library/photos.json @@ -0,0 +1,7240 @@ +{ + "source": "Lorem Picsum (https://picsum.photos): photographs from Unsplash, used under the Unsplash licence", + "url": "https://picsum.photos/id/{id}/{width}/{height}", + "sets": { + "fog-and-quiet": { + "title": "Fog and quiet", + "note": "misty, muted, minimal landscapes and empty horizons; calm areas for text", + "sectors": [ + "hospitality", + "health", + "fashion", + "agency", + "studio-portfolio", + "personal-portfolio", + "saas", + "ai-product", + "finance", + "architecture", + "real-estate", + "other", + "nonprofit", + "culture" + ], + "keywords": [ + "fog", + "mist", + "quiet", + "calm", + "minimal", + "silence", + "retreat", + "wellness", + "spa", + "meditation", + "slow" + ], + "primary": [ + "health" + ], + "photos": [ + { + "id": 70, + "alt": "Road lined with tall trees fading into thick fog", + "tone": "mid", + "colours": [ + "grey", + "dark green" + ], + "mono": false, + "calm": "centre", + "quality": 5, + "ratio": 1.51, + "by": "Dorothy Lin", + "page": "https://unsplash.com/photos/OokBLPrkCNk" + }, + { + "id": 172, + "alt": "Stone jetty stretching into still water and dense grey fog", + "tone": "mid", + "colours": [ + "grey", + "warm grey" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.51, + "by": "Aleksi Tappura", + "page": "https://unsplash.com/photos/TQeX8khR54I" + }, + { + "id": 194, + "alt": "Wooden deck and a single rock disappearing into thick fog", + "tone": "mid", + "colours": [ + "cool grey", + "weathered brown" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.51, + "by": "Aleksi Tappura", + "page": "https://unsplash.com/photos/hVOv8me9ue8" + }, + { + "id": 228, + "alt": "Single round hay bale in a field under dense fog", + "tone": "mid", + "colours": [ + "grey green", + "golden tan" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.33, + "by": "Michal Kubicek", + "page": "https://unsplash.com/photos/0AbVUUorULU" + }, + { + "id": 255, + "alt": "Gravel path leading to a cluster of bare trees on a hill", + "tone": "mid", + "colours": [ + "olive green", + "pale grey" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.5, + "by": "Jon Ottosson", + "page": "https://unsplash.com/photos/Xg1e5bR_bL4" + }, + { + "id": 266, + "alt": "Three ships on a distant horizon across a calm blue sea", + "tone": "mid", + "colours": [ + "pale blue", + "deep blue" + ], + "mono": false, + "calm": "all", + "quality": 5, + "ratio": 1.78, + "by": "John Maravelakis", + "page": "https://unsplash.com/photos/Vosp2wlY3Bs" + }, + { + "id": 269, + "alt": "Gulls perched on a concrete wall beside a pale still sea", + "tone": "light", + "colours": [ + "white", + "pale blue", + "grey" + ], + "mono": false, + "calm": "left", + "quality": 5, + "ratio": 1.5, + "by": "Jill Heyer", + "page": "https://unsplash.com/photos/bbV7QzDUJus" + }, + { + "id": 279, + "alt": "Still misty water fading into a soft pink-grey sky", + "tone": "mid", + "colours": [ + "dusty pink", + "slate grey" + ], + "mono": false, + "calm": "all", + "quality": 5, + "ratio": 1.5, + "by": "Taylor Leopold", + "page": "https://unsplash.com/photos/OHS0yA7OkrQ" + }, + { + "id": 302, + "alt": "Lone marker post standing in still water wrapped in fog", + "tone": "light", + "colours": [ + "pale grey", + "white" + ], + "mono": false, + "calm": "all", + "quality": 5, + "ratio": 1.6, + "by": "Billy Lam", + "page": "https://unsplash.com/photos/O3rmGgNYLKo" + }, + { + "id": 353, + "alt": "Low cloud drifting over dark green forested hills", + "tone": "dark", + "colours": [ + "deep green", + "grey" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.78, + "by": "Forrest Cavale", + "page": "https://unsplash.com/photos/qfmd9bu7IgA" + }, + { + "id": 465, + "alt": "Dark rocky peak emerging from thick white cloud", + "tone": "light", + "colours": [ + "white", + "charcoal", + "pale grey" + ], + "mono": false, + "calm": "left", + "quality": 5, + "ratio": 1.51, + "by": "Paula Vermeulen", + "page": "https://unsplash.com/photos/_f2m3mEkaaU" + }, + { + "id": 510, + "alt": "Small red-roofed church below a mountain under a blank white sky", + "tone": "light", + "colours": [ + "white", + "olive brown", + "grey" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.33, + "by": "Jeff Sheldon", + "page": "https://unsplash.com/photos/4IPe3tnBKK0" + }, + { + "id": 544, + "alt": "Layered hill ridges fading into warm beige mist", + "tone": "mid", + "colours": [ + "beige", + "warm brown", + "cream" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.5, + "by": "Francesco Gallarotti", + "page": "https://unsplash.com/photos/-HkuuUSY1pE" + }, + { + "id": 552, + "alt": "Tiny sailboat on a calm sea with distant hills, black and white", + "tone": "mid", + "colours": [ + "grey", + "white", + "black" + ], + "mono": true, + "calm": "all", + "quality": 5, + "ratio": 1.5, + "by": "Hugo Kerr", + "page": "https://unsplash.com/photos/Ke96snCJ1m0" + }, + { + "id": 594, + "alt": "Small boathouse at the end of a jetty on dark water at night", + "tone": "dark", + "colours": [ + "black", + "deep purple", + "warm white" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.5, + "by": "Aurélien bellanger", + "page": "https://unsplash.com/photos/uoSEDUu8F-I" + }, + { + "id": 634, + "alt": "Pine forest dissolving into fog beneath a pale pink sky", + "tone": "mid", + "colours": [ + "dark green", + "pale pink", + "white" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.5, + "by": "Jay Mantri", + "page": "https://unsplash.com/photos/TFyi0QOx08c" + }, + { + "id": 813, + "alt": "Still blue lake with a faint distant shoreline in haze", + "tone": "mid", + "colours": [ + "slate blue", + "powder blue" + ], + "mono": false, + "calm": "all", + "quality": 5, + "ratio": 1.5, + "by": "Roger Burkhard", + "page": "https://unsplash.com/photos/rlX9J28Pd9g" + }, + { + "id": 842, + "alt": "Wooden steps with railings descending into pale pink fog", + "tone": "light", + "colours": [ + "blush pink", + "pale grey", + "slate" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 0.75, + "by": "Joe Beck", + "page": "https://unsplash.com/photos/NbUokuw0BQI" + }, + { + "id": 922, + "alt": "Dark treeline dissolving upward into pale fog, black and white", + "tone": "mid", + "colours": [ + "charcoal", + "grey", + "white" + ], + "mono": true, + "calm": "top", + "quality": 5, + "ratio": 1.8, + "by": "Patrick Hendry", + "page": "https://unsplash.com/photos/37ZuGYD3JOk" + }, + { + "id": 926, + "alt": "Lone figure standing on a hilltop in thick beige fog", + "tone": "light", + "colours": [ + "warm beige", + "olive grey" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.78, + "by": "Harman Abiwardani", + "page": "https://unsplash.com/photos/mU_aX6JBYmg" + }, + { + "id": 941, + "alt": "Small island on a pale, glassy sea beneath soft clouds", + "tone": "light", + "colours": [ + "pale blue", + "soft white", + "grey" + ], + "mono": false, + "calm": "bottom", + "quality": 5, + "ratio": 1.5, + "by": "Ivan Slade", + "page": "https://unsplash.com/photos/RdyMe8KQAV0" + }, + { + "id": 989, + "alt": "Low cloud covering a forested lakeshore under a pale sky", + "tone": "light", + "colours": [ + "pale grey", + "dark teal", + "soft blue" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.5, + "by": "Paul Jarvis", + "page": "https://unsplash.com/photos/eBDdgbM5dSo" + }, + { + "id": 994, + "alt": "Silky long-exposure sea beneath a blue and orange sunset sky", + "tone": "mid", + "colours": [ + "soft blue", + "peach", + "grey" + ], + "mono": false, + "calm": "all", + "quality": 5, + "ratio": 1.5, + "by": "Jonathan Bean", + "page": "https://unsplash.com/photos/ywnnwzcdR5o" + }, + { + "id": 11, + "alt": "Misty river winding through a grassy valley between forested slopes", + "tone": "mid", + "colours": [ + "pale green", + "grey green", + "dark green" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Paul Jarvis", + "page": "https://unsplash.com/photos/Cm7oKel-X2Q" + }, + { + "id": 93, + "alt": "Marshland with scattered pine trees under a soft pastel sky", + "tone": "mid", + "colours": [ + "moss green", + "pale blue", + "soft pink" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Caroline Sada", + "page": "https://unsplash.com/photos/r1XwWjI4PyE" + }, + { + "id": 130, + "alt": "Single seagull gliding over a grey sea beneath pale clouds", + "tone": "light", + "colours": [ + "pale grey", + "white" + ], + "mono": true, + "calm": "all", + "quality": 4, + "ratio": 1.5, + "by": "Ryan Jacques", + "page": "https://unsplash.com/photos/ywiAen4L4qA" + }, + { + "id": 131, + "alt": "Tiny figure on a pier under a vast pale yellow sky", + "tone": "light", + "colours": [ + "pale yellow", + "sand beige" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.48, + "by": "Charlie Foster", + "page": "https://unsplash.com/photos/yPaskTQiNjA" + }, + { + "id": 135, + "alt": "Dark choppy sea fading into dense blue-grey fog", + "tone": "dark", + "colours": [ + "indigo", + "slate blue" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.33, + "by": "Yuriy Khimanin", + "page": "https://unsplash.com/photos/o4H20aIIAt8" + }, + { + "id": 213, + "alt": "Soft orange sunset sky above a calm misty sea", + "tone": "mid", + "colours": [ + "peach orange", + "slate blue" + ], + "mono": false, + "calm": "all", + "quality": 4, + "ratio": 1.51, + "by": "Kelly Sikkema", + "page": "https://unsplash.com/photos/X7dy114KWs4" + }, + { + "id": 227, + "alt": "Railway tracks curving into a misty forest of bare trees", + "tone": "dark", + "colours": [ + "dark teal", + "grey green" + ], + "mono": false, + "calm": "centre", + "quality": 4, + "ratio": 1.5, + "by": "Andrea Boldizsar", + "page": "https://unsplash.com/photos/1iP1dozVO8I" + }, + { + "id": 264, + "alt": "Wooden post standing among stones beside still misty water", + "tone": "mid", + "colours": [ + "warm beige", + "grey", + "tan" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Jon Phillips", + "page": "https://unsplash.com/photos/XsPM2CBTTpI" + }, + { + "id": 282, + "alt": "Wooden railing overlooking a pine forest covered by low fog", + "tone": "mid", + "colours": [ + "muted brown", + "dark green", + "warm grey" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Taylor Leopold", + "page": "https://unsplash.com/photos/9dw0xLlxw1s" + }, + { + "id": 291, + "alt": "Two figures standing in a misty blue field at dusk", + "tone": "dark", + "colours": [ + "deep blue", + "muted rust" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Caleb George", + "page": "https://unsplash.com/photos/zdjOYZeJj3w" + }, + { + "id": 300, + "alt": "Hay bales scattered across a pale field under white sky", + "tone": "light", + "colours": [ + "white", + "light grey" + ], + "mono": true, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Pavel Voinov", + "page": "https://unsplash.com/photos/2f_CnEeZsVg" + }, + { + "id": 313, + "alt": "Distant clump of trees in a foggy field at dusk", + "tone": "dark", + "colours": [ + "dusty mauve", + "slate blue", + "dark olive" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Sonja Langford", + "page": "https://unsplash.com/photos/4xYgBTYC2-Q" + }, + { + "id": 385, + "alt": "Calm sea stretching to a thin glowing horizon at dusk", + "tone": "mid", + "colours": [ + "slate blue", + "teal", + "soft orange" + ], + "mono": false, + "calm": "all", + "quality": 4, + "ratio": 1.5, + "by": "Griffin Keller", + "page": "https://unsplash.com/photos/7oS_26cb1Wo" + }, + { + "id": 406, + "alt": "Low clouds drifting across steep forested mountain slopes", + "tone": "mid", + "colours": [ + "white", + "dark green", + "grey" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.51, + "by": "Roland Batke-Mutschler", + "page": "https://unsplash.com/photos/SmhN4FejPFs" + }, + { + "id": 443, + "alt": "Mist and cloud hanging over dark pine-covered mountains", + "tone": "mid", + "colours": [ + "grey", + "dark green", + "white" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Tim Mossholder", + "page": "https://unsplash.com/photos/p3kpqGBRPok" + }, + { + "id": 457, + "alt": "Faint ships on a pale foggy sea with almost no horizon", + "tone": "light", + "colours": [ + "white", + "pale grey" + ], + "mono": true, + "calm": "all", + "quality": 4, + "ratio": 1.77, + "by": "Volkan Olmez", + "page": "https://unsplash.com/photos/ccPpd02Spe0" + }, + { + "id": 467, + "alt": "Dark sea fading into white fog in black and white", + "tone": "mid", + "colours": [ + "white", + "grey", + "charcoal" + ], + "mono": true, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Taylor Leopold", + "page": "https://unsplash.com/photos/COE-CIGj8VA" + }, + { + "id": 472, + "alt": "Small wooded island wrapped in fog on a dark lake", + "tone": "dark", + "colours": [ + "dark green", + "grey", + "white" + ], + "mono": false, + "calm": "bottom", + "quality": 4, + "ratio": 1.5, + "by": "Dustin Scarpitti", + "page": "https://unsplash.com/photos/gR_zHJqbtzo" + }, + { + "id": 481, + "alt": "Still lake at dusk with mist and dark conifers along the shore", + "tone": "mid", + "colours": [ + "teal grey", + "slate", + "dark green" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Dustin Scarpitti", + "page": "https://unsplash.com/photos/RdF3apSExR0" + }, + { + "id": 722, + "alt": "Tree silhouettes in thick golden fog", + "tone": "mid", + "colours": [ + "ochre", + "olive brown", + "pale gold" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 0.67, + "by": "Sebastian Kostrubala", + "page": "https://unsplash.com/photos/4yDg-dDX9uM" + }, + { + "id": 727, + "alt": "Sandy mound with dark shrubs beneath a blank foggy sky", + "tone": "light", + "colours": [ + "pale grey", + "ochre", + "dark green" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.33, + "by": "Devan Freeman", + "page": "https://unsplash.com/photos/HrUbyeQvL_w" + }, + { + "id": 731, + "alt": "Grassy rocky mountain ridge emerging from thick grey mist", + "tone": "mid", + "colours": [ + "mist grey", + "olive green", + "dark brown" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.33, + "by": "Rob Bye", + "page": "https://unsplash.com/photos/61XW8CMNX6A" + }, + { + "id": 807, + "alt": "Lone tree on a grassy slope disappearing into thick fog", + "tone": "mid", + "colours": [ + "moss green", + "mist grey" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.78, + "by": "Tiago Aguiar", + "page": "https://unsplash.com/photos/FtVQIQ9rDFI" + }, + { + "id": 886, + "alt": "Flat grassy field vanishing into pale yellow fog", + "tone": "light", + "colours": [ + "pale grey", + "straw yellow" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.33, + "by": "Glen Carrie", + "page": "https://unsplash.com/photos/p62O--o1x-U" + }, + { + "id": 925, + "alt": "Conifer trees fading into dense grey fog on a hillside", + "tone": "mid", + "colours": [ + "mist grey", + "dark green" + ], + "mono": false, + "calm": "right", + "quality": 4, + "ratio": 1.5, + "by": "Patrick Fore", + "page": "https://unsplash.com/photos/vpAKO21abME" + }, + { + "id": 965, + "alt": "Long bridge disappearing into thick grey fog", + "tone": "mid", + "colours": [ + "mist grey", + "slate", + "pale green" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Liane Metzler", + "page": "https://unsplash.com/photos/c5uShPcKLAE" + }, + { + "id": 966, + "alt": "Forested mountainside sloping diagonally beneath white fog", + "tone": "light", + "colours": [ + "white", + "olive green", + "brown" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Alberto Restifo", + "page": "https://unsplash.com/photos/kKrfPaKgE1c" + }, + { + "id": 991, + "alt": "Hazy sun above layered dark hills in sepia tones", + "tone": "mid", + "colours": [ + "sepia", + "dark brown", + "pale gold" + ], + "mono": false, + "calm": "bottom", + "quality": 4, + "ratio": 1.5, + "by": "Fritz Bielmeier", + "page": "https://unsplash.com/photos/ooJi3CJQRa8" + }, + { + "id": 1028, + "alt": "Bare dead trees standing in dry ground under sepia haze", + "tone": "mid", + "colours": [ + "sepia", + "tan", + "dark brown" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Dikaseva", + "page": "https://unsplash.com/photos/zvf7cZ0PC20" + } + ] + }, + "coast": { + "title": "Coast", + "note": "sea, shoreline, cliffs, piers and beaches", + "sectors": [ + "hospitality", + "health", + "real-estate", + "restaurant", + "event", + "fashion", + "other" + ], + "keywords": [ + "coast", + "sea", + "ocean", + "beach", + "surf", + "island", + "harbour", + "harbor", + "seaside", + "sail", + "boat", + "fish", + "marine", + "cliff", + "guesthouse", + "shore", + "bay", + "atlantic", + "lookout" + ], + "primary": [ + "hospitality" + ], + "photos": [ + { + "id": 77, + "alt": "Wooden jetty leading to a small pavilion over calm sea", + "tone": "mid", + "colours": [ + "warm tan", + "pale teal", + "soft grey" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.48, + "by": "May Pamintuan", + "page": "https://unsplash.com/photos/j9nfqTi5T5o" + }, + { + "id": 626, + "alt": "Red and white lighthouse in turquoise sea below a chalk cliff", + "tone": "light", + "colours": [ + "turquoise", + "white", + "grass green" + ], + "mono": false, + "calm": "left", + "quality": 5, + "ratio": 1.5, + "by": "Nick Diamantidis", + "page": "https://unsplash.com/photos/jkPKQWK1sKU" + }, + { + "id": 640, + "alt": "Aerial view of turquoise surf breaking onto golden sand", + "tone": "mid", + "colours": [ + "sand", + "turquoise", + "white" + ], + "mono": false, + "calm": "bottom", + "quality": 5, + "ratio": 1.5, + "by": "Sarah Bürvenich", + "page": "https://unsplash.com/photos/vigsqYux_-8" + }, + { + "id": 641, + "alt": "Empty lifeguard chair on a beach at pastel dusk", + "tone": "mid", + "colours": [ + "peach", + "slate blue", + "dusty teal" + ], + "mono": false, + "calm": "right", + "quality": 5, + "ratio": 1.5, + "by": "Fré Sonneveld", + "page": "https://unsplash.com/photos/2qLT_Rq-2tk" + }, + { + "id": 853, + "alt": "Lone rock in a calm blue sea beneath a pastel sky", + "tone": "mid", + "colours": [ + "sea blue", + "peach", + "pale pink" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.51, + "by": "Stephen Radford", + "page": "https://unsplash.com/photos/674bDNKmnIk" + }, + { + "id": 1049, + "alt": "Rock island reflected on a wet beach under a pale sky", + "tone": "light", + "colours": [ + "pale grey", + "soft white", + "dark green" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.25, + "by": "Rosan Harmens", + "page": "https://unsplash.com/photos/Sd8O2SgKDJA" + }, + { + "id": 1052, + "alt": "Black sea stacks off a dark beach with white surf under a pale sky", + "tone": "light", + "colours": [ + "black", + "white", + "pale grey" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.5, + "by": "Annie Spratt", + "page": "https://unsplash.com/photos/x8R2oSWZRSE" + }, + { + "id": 12, + "alt": "Dark rocks on a sandy beach with calm sea and islands", + "tone": "mid", + "colours": [ + "sand beige", + "dark brown", + "pale grey" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Paul Jarvis", + "page": "https://unsplash.com/photos/I_9ILwtsl_k" + }, + { + "id": 14, + "alt": "Rocky shoreline meeting a calm pale sea under hazy sky", + "tone": "mid", + "colours": [ + "pale blue", + "warm brown" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Paul Jarvis", + "page": "https://unsplash.com/photos/IQ1kOQTJrOQ" + }, + { + "id": 16, + "alt": "Blue sea and distant islands seen over a rocky driftwood shore", + "tone": "mid", + "colours": [ + "sky blue", + "deep blue", + "grey" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Paul Jarvis", + "page": "https://unsplash.com/photos/gkT4FfgHO5o" + }, + { + "id": 27, + "alt": "Person standing on a rocky shore watching misty waves at sunset", + "tone": "mid", + "colours": [ + "warm orange", + "brown", + "pale gold" + ], + "mono": false, + "calm": "right", + "quality": 4, + "ratio": 1.78, + "by": "Yoni Kaplan-Nadel", + "page": "https://unsplash.com/photos/iJnZwLBOB1I" + }, + { + "id": 47, + "alt": "Long wooden pier over misty surf in black and white", + "tone": "light", + "colours": [ + "light grey", + "charcoal" + ], + "mono": true, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Christopher Sardegna", + "page": "https://unsplash.com/photos/uDUiRS8YroY" + }, + { + "id": 68, + "alt": "Curving pier with a railing, lamp post and weather vane", + "tone": "light", + "colours": [ + "light grey", + "charcoal" + ], + "mono": true, + "calm": "left", + "quality": 4, + "ratio": 1.5, + "by": "Cristian Moscoso", + "page": "https://unsplash.com/photos/2SfRAWkinpU" + }, + { + "id": 108, + "alt": "Palm trees silhouetted against a bright washed-out sky", + "tone": "light", + "colours": [ + "white", + "soft pink", + "dark brown" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.5, + "by": "Florian Klauer", + "page": "https://unsplash.com/photos/t1mqA3V3-7g" + }, + { + "id": 144, + "alt": "Pavilion at the end of a pier over waves, monochrome", + "tone": "mid", + "colours": [ + "grey", + "black", + "white" + ], + "mono": true, + "calm": "top", + "quality": 4, + "ratio": 1.78, + "by": "Mouly Kumar", + "page": "https://unsplash.com/photos/TuOiIpkIea8" + }, + { + "id": 154, + "alt": "Hazy beach at dusk with distant walkers and soft surf", + "tone": "mid", + "colours": [ + "dusty pink", + "muted purple", + "pale blue" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Christopher Sardegna", + "page": "https://unsplash.com/photos/x_jTtMOOMd4" + }, + { + "id": 162, + "alt": "Aerial view of a coastline with turquoise sea and patchwork fields", + "tone": "mid", + "colours": [ + "turquoise", + "sand brown", + "deep blue" + ], + "mono": false, + "calm": "bottom", + "quality": 4, + "ratio": 1.5, + "by": "Dillon McIntosh", + "page": "https://unsplash.com/photos/SlGVAKyP20U" + }, + { + "id": 179, + "alt": "Waves breaking around dark rocks on a misty shoreline", + "tone": "mid", + "colours": [ + "slate grey", + "white", + "warm brown" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Angelina Odemchuk", + "page": "https://unsplash.com/photos/lp0IFw6YqZg" + }, + { + "id": 215, + "alt": "Wide empty sandy beach with palm trees and blue sky", + "tone": "light", + "colours": [ + "pale sand", + "sky blue" + ], + "mono": false, + "calm": "bottom", + "quality": 4, + "ratio": 1.33, + "by": "Paula Borowska", + "page": "https://unsplash.com/photos/04paG2PxKGs" + }, + { + "id": 218, + "alt": "Calm turquoise bay between two limestone cliffs under storm clouds", + "tone": "mid", + "colours": [ + "turquoise", + "slate grey", + "dark green" + ], + "mono": false, + "calm": "centre", + "quality": 4, + "ratio": 1.5, + "by": "Monika Majkowska", + "page": "https://unsplash.com/photos/Nq8LdWC7HnM" + }, + { + "id": 268, + "alt": "White lifeguard chair standing in dune grass under overcast sky", + "tone": "light", + "colours": [ + "white", + "straw yellow", + "green" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.52, + "by": "davide ragusa", + "page": "https://unsplash.com/photos/vc3ZOCf5BN8" + }, + { + "id": 317, + "alt": "Long wooden pier with railings reaching toward a pastel horizon", + "tone": "mid", + "colours": [ + "weathered brown", + "pale peach", + "soft blue" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.78, + "by": "Paula Borowska", + "page": "https://unsplash.com/photos/cKYgt4K0g5w" + }, + { + "id": 323, + "alt": "Steep green headlands dropping into a deep blue bay", + "tone": "mid", + "colours": [ + "deep blue", + "olive green", + "tan" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Paweł Wojciechowski", + "page": "https://unsplash.com/photos/QYAojSRu82c" + }, + { + "id": 347, + "alt": "Dune grass bending in wind beneath a wide white sky", + "tone": "light", + "colours": [ + "white", + "straw gold", + "grey blue" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Alex Talmon", + "page": "https://unsplash.com/photos/umq-jgTjr28" + }, + { + "id": 356, + "alt": "Lone surfer walking along a misty beach in black and white", + "tone": "mid", + "colours": [ + "charcoal", + "silver grey", + "white" + ], + "mono": true, + "calm": "top", + "quality": 4, + "ratio": 1.33, + "by": "Daniel Ruswick", + "page": "https://unsplash.com/photos/fqtOAqbbnJg" + }, + { + "id": 372, + "alt": "Lifeguard tower on an empty sandy beach under a hazy sky", + "tone": "light", + "colours": [ + "pale blue", + "sand", + "soft grey" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.5, + "by": "Gabriel Santiago", + "page": "https://unsplash.com/photos/KWkMiUIxcD0" + }, + { + "id": 374, + "alt": "Coastline with green headlands, a curving beach and turquoise sea", + "tone": "mid", + "colours": [ + "turquoise", + "deep green", + "sky blue" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Ma. Alejandra", + "page": "https://unsplash.com/photos/TDahcrcPhhA" + }, + { + "id": 404, + "alt": "Waves breaking in white foam around a rugged brown rock", + "tone": "mid", + "colours": [ + "grey blue", + "white", + "rust brown" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.5, + "by": "Cole Patrick", + "page": "https://unsplash.com/photos/H28ODcp4EUk" + }, + { + "id": 440, + "alt": "Rugged coastal headlands in soft backlit haze at sunset", + "tone": "mid", + "colours": [ + "pale gold", + "warm brown", + "cream" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.5, + "by": "Artur Pokusin", + "page": "https://unsplash.com/photos/0nv-h04oPhM" + }, + { + "id": 483, + "alt": "Dark sea cliffs and rocks with white surf breaking below", + "tone": "dark", + "colours": [ + "charcoal", + "teal", + "white" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.78, + "by": "Paulo Simões Mendes", + "page": "https://unsplash.com/photos/hrcRtexM7M0" + }, + { + "id": 485, + "alt": "White chalk cliffs above a curved beach in sea mist", + "tone": "light", + "colours": [ + "pale grey", + "turquoise", + "sand" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.51, + "by": "David Marcu", + "page": "https://unsplash.com/photos/DNXWtB33WWE" + }, + { + "id": 574, + "alt": "Grassy cliff and black sand beach with sea stacks offshore", + "tone": "mid", + "colours": [ + "green", + "charcoal", + "pale blue" + ], + "mono": false, + "calm": "right", + "quality": 4, + "ratio": 1.5, + "by": "Julien Lavallée", + "page": "https://unsplash.com/photos/lVtlz3JRV6o" + }, + { + "id": 606, + "alt": "Wooden boardwalk winding through grassy dunes toward the sea", + "tone": "light", + "colours": [ + "pale grey", + "sage green", + "sand" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Aleksandra Boguslawska", + "page": "https://unsplash.com/photos/MS7KD9Ti7FQ" + }, + { + "id": 614, + "alt": "Aerial view of white surf washing over a dark rocky shore", + "tone": "dark", + "colours": [ + "charcoal", + "white", + "dark brown" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Josefa Holland-Merten", + "page": "https://unsplash.com/photos/GnP5Kfg5ebU" + }, + { + "id": 732, + "alt": "Dark rocky shoreline beside a calm sea under a pale cloudy sky", + "tone": "light", + "colours": [ + "pale blue", + "soft grey", + "charcoal" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Dominik Schröder", + "page": "https://unsplash.com/photos/ivieBAESVWM" + }, + { + "id": 851, + "alt": "Aerial view of turquoise sea meeting a curved reddish coastline", + "tone": "mid", + "colours": [ + "turquoise", + "teal", + "rust brown" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.66, + "by": "Tiago Aguiar", + "page": "https://unsplash.com/photos/uXzNVOZT5no" + }, + { + "id": 969, + "alt": "Wet rocky shore with sea stacks under a bright sky, black and white", + "tone": "dark", + "colours": [ + "black", + "grey", + "silver" + ], + "mono": true, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Lee Miller", + "page": "https://unsplash.com/photos/_rsGm7nob3w" + }, + { + "id": 997, + "alt": "Aerial view of a forested headland beside deep blue sea", + "tone": "mid", + "colours": [ + "deep blue", + "forest green", + "yellow green" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 0.68, + "by": "Mickey O'neil", + "page": "https://unsplash.com/photos/GSzD6vGIWKM" + }, + { + "id": 1055, + "alt": "Wide wet sand flat with a distant shoreline under a pale sky", + "tone": "mid", + "colours": [ + "warm brown", + "sand", + "off-white" + ], + "mono": false, + "calm": "bottom", + "quality": 4, + "ratio": 1.5, + "by": "Neil Thomas", + "page": "https://unsplash.com/photos/12rzbJhQ89E" + } + ] + }, + "mountain": { + "title": "Mountain", + "note": "peaks, alpine valleys, snow and rock", + "sectors": [ + "hospitality", + "health", + "event", + "physical-product", + "nonprofit", + "other", + "education" + ], + "keywords": [ + "mountain", + "alpine", + "peak", + "summit", + "hike", + "hiking", + "climb", + "outdoor", + "lodge", + "chalet", + "trail", + "expedition" + ], + "photos": [ + { + "id": 235, + "alt": "Snow-covered peak rising above dark forested slopes and a lake", + "tone": "mid", + "colours": [ + "slate blue", + "white", + "dark green" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.5, + "by": "Paul E. Harrer", + "page": "https://unsplash.com/photos/TI-B-TNYJMU" + }, + { + "id": 260, + "alt": "Snowy mountain peak framed by dark pine trees in mist", + "tone": "light", + "colours": [ + "white", + "pale grey", + "dark green" + ], + "mono": false, + "calm": "centre", + "quality": 5, + "ratio": 0.67, + "by": "Sylwia Bartyzel", + "page": "https://unsplash.com/photos/OdAqbedkfiA" + }, + { + "id": 830, + "alt": "Layered blue mountain ridges receding into haze", + "tone": "mid", + "colours": [ + "cobalt blue", + "pale blue", + "navy" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.5, + "by": "Luca Zanon", + "page": "https://unsplash.com/photos/X0OoHrPvgXE" + }, + { + "id": 906, + "alt": "Sunlit snowy pyramid peak against a clear blue sky", + "tone": "mid", + "colours": [ + "sky blue", + "white", + "dark slate" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.33, + "by": "Andras Toth", + "page": "https://unsplash.com/photos/E9CrQou9K0Y" + }, + { + "id": 931, + "alt": "Layered mountain slopes fading into blue haze", + "tone": "mid", + "colours": [ + "steel blue", + "pale blue", + "dark teal" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.51, + "by": "Paul Earle", + "page": "https://unsplash.com/photos/xJ2tjuUHD9M" + }, + { + "id": 1018, + "alt": "Green cliffs and a winding road under low mist", + "tone": "mid", + "colours": [ + "moss green", + "mist grey", + "dark brown" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.33, + "by": "Andrew Ridley", + "page": "https://unsplash.com/photos/Kt5hRENuotI" + }, + { + "id": 29, + "alt": "Rocky ridges and snow-covered peaks in a high mountain range", + "tone": "mid", + "colours": [ + "slate grey", + "white", + "blue" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Go Wild", + "page": "https://unsplash.com/photos/V0yAek6BgGk" + }, + { + "id": 66, + "alt": "Lone mountain peak beyond open grassland under heavy grey cloud", + "tone": "mid", + "colours": [ + "grey", + "olive green" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.33, + "by": "Nicholas Swanson", + "page": "https://unsplash.com/photos/agnhLQWqr1Q" + }, + { + "id": 121, + "alt": "Hazy mountain gorge with steep slopes in black and white", + "tone": "mid", + "colours": [ + "grey", + "black", + "white" + ], + "mono": true, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Radio Pink", + "page": "https://unsplash.com/photos/p-bkdO43shE" + }, + { + "id": 166, + "alt": "Moody valley with a river, dark hills and a foreground boulder", + "tone": "dark", + "colours": [ + "charcoal", + "grey" + ], + "mono": true, + "calm": "top", + "quality": 4, + "ratio": 1.78, + "by": "Romain Briaux", + "page": "https://unsplash.com/photos/yD3PXDV7Sjc" + }, + { + "id": 296, + "alt": "Snow-capped mountain range beneath a deep blue sky", + "tone": "mid", + "colours": [ + "deep blue", + "white", + "dark brown" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Greg Shield", + "page": "https://unsplash.com/photos/Du30R57aCyM" + }, + { + "id": 327, + "alt": "Snow-covered mountain range under a clear teal sky", + "tone": "mid", + "colours": [ + "teal", + "white", + "rust brown" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Ryan Schroeder", + "page": "https://unsplash.com/photos/Gg7uKdHFb_c" + }, + { + "id": 368, + "alt": "Sheer granite cliffs above a hazy valley in warm evening light", + "tone": "mid", + "colours": [ + "peach", + "warm grey", + "slate" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Tyssul Patel", + "page": "https://unsplash.com/photos/o-zOatT4kQw" + }, + { + "id": 377, + "alt": "Snow-capped mountain range under a dark blue evening sky", + "tone": "dark", + "colours": [ + "navy", + "slate blue", + "white" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Martin Staněk", + "page": "https://unsplash.com/photos/8WClaa1CmZ0" + }, + { + "id": 393, + "alt": "Green mountain streaked with snow rising above a dark gravel plain", + "tone": "mid", + "colours": [ + "moss green", + "charcoal", + "white" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Alex Talmon", + "page": "https://unsplash.com/photos/UFskvng2OMU" + }, + { + "id": 426, + "alt": "Layered blue mountains and a hazy valley under streaked clouds", + "tone": "mid", + "colours": [ + "slate blue", + "teal", + "pale grey" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Ales Krivec", + "page": "https://unsplash.com/photos/01ZeHnK3F_4" + }, + { + "id": 450, + "alt": "Turquoise lake in a forested valley between snow-dusted mountains", + "tone": "mid", + "colours": [ + "turquoise", + "slate grey", + "dark green" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.51, + "by": "Tanvi Malik", + "page": "https://unsplash.com/photos/OeC1wIsKNpk" + }, + { + "id": 523, + "alt": "Volcanic crater rising from a hazy plain beneath a teal sky", + "tone": "mid", + "colours": [ + "teal", + "tan", + "brown" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 2.21, + "by": "Harman Abiwardani", + "page": "https://unsplash.com/photos/WLUHO9A_xik" + }, + { + "id": 538, + "alt": "Bird soaring above snowy mountain ridges in black and white", + "tone": "mid", + "colours": [ + "grey", + "white", + "black" + ], + "mono": true, + "calm": "top", + "quality": 4, + "ratio": 1.51, + "by": "Julia Revitt", + "page": "https://unsplash.com/photos/yypv2Tu-mxU" + }, + { + "id": 565, + "alt": "Snowy peak veiled in cloud with birds crossing a white sky", + "tone": "light", + "colours": [ + "white", + "pale grey", + "dark brown" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "René Reichelt", + "page": "https://unsplash.com/photos/HzaT5l4Fzqc" + }, + { + "id": 591, + "alt": "Jagged rock pinnacle rising through swirling white cloud", + "tone": "light", + "colours": [ + "white", + "grey", + "tan" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 0.75, + "by": "Billy Onjea", + "page": "https://unsplash.com/photos/_qGq1Z2Bk6c" + }, + { + "id": 684, + "alt": "Jagged snow-covered peaks under a dark blue sky", + "tone": "mid", + "colours": [ + "navy", + "white", + "slate blue" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.78, + "by": "Lee Roylland", + "page": "https://unsplash.com/photos/dfZbts6B4yw" + }, + { + "id": 735, + "alt": "Steep dark cliffs with fog drifting through the gap between them", + "tone": "mid", + "colours": [ + "charcoal", + "mist grey", + "deep green" + ], + "mono": false, + "calm": "centre", + "quality": 4, + "ratio": 0.62, + "by": "wyman H", + "page": "https://unsplash.com/photos/ZQeRH1XD4Tc" + }, + { + "id": 809, + "alt": "Rocky mountain peak breaking through thick white clouds", + "tone": "light", + "colours": [ + "white", + "slate grey", + "blue grey" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.5, + "by": "Namphuong Van", + "page": "https://unsplash.com/photos/sP4UZnpSiN4" + }, + { + "id": 814, + "alt": "Jagged rocky peaks under a soft pink and violet dusk sky", + "tone": "mid", + "colours": [ + "dusty violet", + "soft pink", + "slate grey" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.53, + "by": "Ales Krivec", + "page": "https://unsplash.com/photos/duoMdMm3aY0" + }, + { + "id": 827, + "alt": "Conical mountain silhouette above a still lake under a starry dusk sky", + "tone": "dark", + "colours": [ + "indigo", + "dusky violet", + "navy" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 0.67, + "by": "kazuend", + "page": "https://unsplash.com/photos/2KXEb_8G5vo" + }, + { + "id": 866, + "alt": "Snowy mountain peak behind a snow slope under pink-tinted clouds", + "tone": "mid", + "colours": [ + "dusky blue", + "soft pink", + "white" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Samuel Zeller", + "page": "https://unsplash.com/photos/9RqA6tnT0gA" + }, + { + "id": 873, + "alt": "Turquoise lake between steep rocky mountains with distant snow", + "tone": "mid", + "colours": [ + "teal", + "slate grey", + "pale cream" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 0.67, + "by": "Daniel Roe", + "page": "https://unsplash.com/photos/lpjb_UMOyx8" + }, + { + "id": 918, + "alt": "Rocky peak wrapped in sunlit cloud above a forested valley", + "tone": "mid", + "colours": [ + "warm gold", + "dark green", + "grey brown" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.51, + "by": "David Marcu", + "page": "https://unsplash.com/photos/CaQ_KITtnVY" + }, + { + "id": 929, + "alt": "Green cliff face rising out of dense white mist", + "tone": "light", + "colours": [ + "white", + "moss green", + "grey" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.5, + "by": "Tiago Muraro", + "page": "https://unsplash.com/photos/1kEHpwZdmtc" + } + ] + }, + "forest": { + "title": "Forest", + "note": "woodland, paths between trees, moss and filtered light", + "sectors": [ + "hospitality", + "health", + "nonprofit", + "education", + "physical-product", + "other" + ], + "keywords": [ + "forest", + "wood", + "tree", + "cabin", + "nature", + "green", + "organic", + "sustainable", + "timber", + "garden" + ], + "photos": [ + { + "id": 229, + "alt": "Path through tall pine trees fading into blue-grey fog", + "tone": "dark", + "colours": [ + "blue grey", + "dark green" + ], + "mono": false, + "calm": "none", + "quality": 5, + "ratio": 1.5, + "by": "Orlova Maria", + "page": "https://unsplash.com/photos/7FLh300YONc" + }, + { + "id": 10, + "alt": "Dense evergreen forest with a blue lake and distant hills beyond", + "tone": "mid", + "colours": [ + "deep green", + "teal blue" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Paul Jarvis", + "page": "https://unsplash.com/photos/6J--NXulQCs" + }, + { + "id": 190, + "alt": "Path winding between rows of tall pine trunks", + "tone": "dark", + "colours": [ + "dark brown", + "moss green" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "James Forbes", + "page": "https://unsplash.com/photos/jrzvClypPq8" + }, + { + "id": 216, + "alt": "Narrow dirt trail through mossy green woodland", + "tone": "mid", + "colours": [ + "moss green", + "brown" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Paul Jarvis", + "page": "https://unsplash.com/photos/9702xTENR-M" + }, + { + "id": 243, + "alt": "Autumn larch forest on a foggy hillside with a footpath", + "tone": "mid", + "colours": [ + "rust brown", + "pale grey", + "olive green" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Orlova Maria", + "page": "https://unsplash.com/photos/DYW1s0AfLwo" + }, + { + "id": 423, + "alt": "Snow-laden fir trees fading into pale winter fog", + "tone": "light", + "colours": [ + "white", + "pale blue", + "grey green" + ], + "mono": false, + "calm": "centre", + "quality": 4, + "ratio": 1.5, + "by": "Gabriel Santiago", + "page": "https://unsplash.com/photos/pTgTMVxQE_k" + }, + { + "id": 476, + "alt": "Sunlight bursting between tall redwood trunks in a shaded forest", + "tone": "dark", + "colours": [ + "dark brown", + "deep green", + "gold" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Mr. Marco", + "page": "https://unsplash.com/photos/QP1dUyQ8WsI" + }, + { + "id": 498, + "alt": "Upward view of towering redwood trunks converging toward the canopy", + "tone": "mid", + "colours": [ + "green", + "reddish brown" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Kim Daniel", + "page": "https://unsplash.com/photos/JsqAqevX6lg" + }, + { + "id": 559, + "alt": "Snow-covered lane lined with bare frosted trees", + "tone": "light", + "colours": [ + "white", + "grey brown" + ], + "mono": false, + "calm": "bottom", + "quality": 4, + "ratio": 1.51, + "by": "Ali Inay", + "page": "https://unsplash.com/photos/yNaGxHqjOuw" + }, + { + "id": 600, + "alt": "Sunbeams streaming through tall conifers in a dark forest", + "tone": "dark", + "colours": [ + "dark green", + "pale gold", + "black" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Dustin Scarpitti", + "page": "https://unsplash.com/photos/eWBseWsTEpA" + }, + { + "id": 704, + "alt": "Upward view of tall bamboo stems converging in a green canopy", + "tone": "dark", + "colours": [ + "dark green", + "green", + "black" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Ståle Grut", + "page": "https://unsplash.com/photos/NUgw97CVdAk" + }, + { + "id": 730, + "alt": "Snow-dusted conifer forest fading into pale winter fog", + "tone": "light", + "colours": [ + "frost white", + "pale grey", + "slate green" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Ryan Pohanic", + "page": "https://unsplash.com/photos/W3V2tQAZxPA" + }, + { + "id": 805, + "alt": "Band of dark conifer forest between a meadow and a blank white sky", + "tone": "mid", + "colours": [ + "white", + "dark green", + "olive brown" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.49, + "by": "Jens Lelie", + "page": "https://unsplash.com/photos/GUneOBRhq9w" + }, + { + "id": 877, + "alt": "Tall tree trunks in a misty forest with blue-grey light", + "tone": "mid", + "colours": [ + "slate blue", + "dark brown", + "mist grey" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.66, + "by": "Sebastian Unrau", + "page": "https://unsplash.com/photos/dJVU4jXV1Q8" + }, + { + "id": 878, + "alt": "Bare gnarled trees in fog, black and white", + "tone": "dark", + "colours": [ + "black", + "grey", + "white" + ], + "mono": true, + "calm": "none", + "quality": 4, + "ratio": 1.51, + "by": "Richard Loader", + "page": "https://unsplash.com/photos/qsEJGX4VqYU" + }, + { + "id": 879, + "alt": "Aerial view of a narrow path cutting through dense dark forest", + "tone": "dark", + "colours": [ + "deep green", + "dark teal", + "grey" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Nick Scheerbart", + "page": "https://unsplash.com/photos/xFjAftU8lMY" + }, + { + "id": 919, + "alt": "Tall straight pine trunks above a bright green forest floor", + "tone": "mid", + "colours": [ + "fresh green", + "red brown", + "dark brown" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Jon Ottosson", + "page": "https://unsplash.com/photos/JU2MgHOHDsw" + }, + { + "id": 923, + "alt": "Misty autumn forest path covered in red fallen leaves", + "tone": "mid", + "colours": [ + "rust red", + "soft pink", + "mist grey" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.71, + "by": "Sebastian Unrau", + "page": "https://unsplash.com/photos/CoD2Q92UaEg" + }, + { + "id": 924, + "alt": "Aerial view of autumn forest with orange and dark green treetops", + "tone": "dark", + "colours": [ + "burnt orange", + "dark green" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.33, + "by": "Jakub Sejkora", + "page": "https://unsplash.com/photos/utqJcneoFjo" + }, + { + "id": 932, + "alt": "Low clouds drifting over an autumn conifer forest", + "tone": "mid", + "colours": [ + "dark green", + "rust orange", + "mist white" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Vadim Sherbakov", + "page": "https://unsplash.com/photos/NQSWvyVRIJk" + }, + { + "id": 944, + "alt": "Wooden footbridge with railings leading into lush green forest", + "tone": "dark", + "colours": [ + "deep green", + "warm brown", + "grey" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Tim Swaan", + "page": "https://unsplash.com/photos/eOpewngf68w" + } + ] + }, + "water": { + "title": "Water", + "note": "lakes, rivers, waterfalls and water surfaces", + "sectors": [ + "health", + "hospitality", + "nonprofit", + "finance", + "ai-product", + "other" + ], + "keywords": [ + "water", + "lake", + "river", + "waterfall", + "flow", + "liquid", + "stream", + "swim", + "pool" + ], + "photos": [ + { + "id": 124, + "alt": "Small red boat floating on clear turquoise water, seen from above", + "tone": "mid", + "colours": [ + "turquoise", + "teal", + "red" + ], + "mono": false, + "calm": "right", + "quality": 5, + "ratio": 1.5, + "by": "Anton Sulsky", + "page": "https://unsplash.com/photos/fj0tFloTPGQ" + }, + { + "id": 293, + "alt": "Silhouetted pier on a hazy blue lake below faint mountains", + "tone": "mid", + "colours": [ + "pale blue", + "navy" + ], + "mono": false, + "calm": "left", + "quality": 5, + "ratio": 1.5, + "by": "Paul E. Harrer", + "page": "https://unsplash.com/photos/AJqHzUbc1io" + }, + { + "id": 469, + "alt": "Two people paddling a canoe across a misty green lake", + "tone": "mid", + "colours": [ + "emerald green", + "pale grey", + "teal" + ], + "mono": false, + "calm": "bottom", + "quality": 5, + "ratio": 1.5, + "by": "Matthew Clark", + "page": "https://unsplash.com/photos/_IMinUHfUs0" + }, + { + "id": 1038, + "alt": "Small red boat on a wide expanse of dark blue rippling sea", + "tone": "dark", + "colours": [ + "deep blue", + "slate", + "red" + ], + "mono": false, + "calm": "bottom", + "quality": 5, + "ratio": 0.67, + "by": "Marcelo Quinan", + "page": "https://unsplash.com/photos/upywS5QFwr8" + }, + { + "id": 74, + "alt": "Small boat on a bright blue bay with a distant city skyline", + "tone": "mid", + "colours": [ + "bright blue", + "sky blue" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.51, + "by": "Isaak Dury", + "page": "https://unsplash.com/photos/YhZbnxqtooM" + }, + { + "id": 87, + "alt": "Wooden bench on a timber deck beside rippling water", + "tone": "mid", + "colours": [ + "grey brown", + "slate grey" + ], + "mono": false, + "calm": "bottom", + "quality": 4, + "ratio": 1.33, + "by": "Barcelona", + "page": "https://unsplash.com/photos/o697BgRH_-M" + }, + { + "id": 384, + "alt": "Close view of a rippling deep blue water surface", + "tone": "mid", + "colours": [ + "deep blue", + "teal" + ], + "mono": false, + "calm": "all", + "quality": 4, + "ratio": 1.5, + "by": "Griffin Keller", + "page": "https://unsplash.com/photos/-mNvCsNlsSE" + }, + { + "id": 434, + "alt": "Wooden jetty leading into a green alpine lake ringed by forest", + "tone": "mid", + "colours": [ + "forest green", + "grey wood", + "slate blue" + ], + "mono": false, + "calm": "bottom", + "quality": 4, + "ratio": 1.51, + "by": "Ales Krivec", + "page": "https://unsplash.com/photos/DgtRKZOOE0w" + }, + { + "id": 477, + "alt": "Lone tree standing in a blue lake with mountains and clouds behind", + "tone": "mid", + "colours": [ + "deep blue", + "white", + "slate" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.51, + "by": "Jasper van der Meij", + "page": "https://unsplash.com/photos/Xo3uIN_Q1Y0" + }, + { + "id": 509, + "alt": "Tall waterfall pouring over a green mossy cliff into mist", + "tone": "mid", + "colours": [ + "green", + "white", + "dark grey" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.33, + "by": "Jeff Sheldon", + "page": "https://unsplash.com/photos/SdSc4sWVMRU" + }, + { + "id": 536, + "alt": "Seaside swimming pool at night with a wave breaking over its edge", + "tone": "dark", + "colours": [ + "black", + "teal", + "white" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "David Di Veroli", + "page": "https://unsplash.com/photos/4uCSqP5OKiI" + }, + { + "id": 637, + "alt": "Metal ladder at the edge of a wooden dock over still water at dusk", + "tone": "mid", + "colours": [ + "pale blue", + "peach", + "dark brown" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.5, + "by": "Griffin Keller", + "page": "https://unsplash.com/photos/leHDA08Lbpc" + }, + { + "id": 700, + "alt": "Bird skimming over deep blue water leaving a trail of ripples", + "tone": "dark", + "colours": [ + "deep blue", + "navy" + ], + "mono": false, + "calm": "all", + "quality": 4, + "ratio": 1.5, + "by": "John Cobb", + "page": "https://unsplash.com/photos/6btEyS3AJrI" + }, + { + "id": 716, + "alt": "Deep blue open sea with small rolling waves", + "tone": "mid", + "colours": [ + "deep blue", + "teal" + ], + "mono": false, + "calm": "all", + "quality": 4, + "ratio": 1.5, + "by": "Matthew Kosloski", + "page": "https://unsplash.com/photos/BT_BUEwjeQg" + }, + { + "id": 774, + "alt": "Deep blue twilight sky over a still, flat water horizon", + "tone": "dark", + "colours": [ + "cobalt blue", + "navy" + ], + "mono": false, + "calm": "all", + "quality": 4, + "ratio": 1.5, + "by": "Alex Wigan", + "page": "https://unsplash.com/photos/5qlegaTwZpM" + }, + { + "id": 846, + "alt": "Inside the curl of a breaking teal wave", + "tone": "mid", + "colours": [ + "teal", + "sea green", + "white" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.33, + "by": "Jeremy Bishop", + "page": "https://unsplash.com/photos/l61smgU3Y7w" + }, + { + "id": 909, + "alt": "Smooth blue ocean swell rising in close-up", + "tone": "mid", + "colours": [ + "deep blue", + "navy", + "pale blue" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.78, + "by": "Austin Schmid", + "page": "https://unsplash.com/photos/5Dga0T0x6GY" + }, + { + "id": 912, + "alt": "Churning blue sea water streaked with white foam", + "tone": "mid", + "colours": [ + "cobalt blue", + "white", + "navy" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Clem Onojeghuo", + "page": "https://unsplash.com/photos/-YMhg0KYgVc" + }, + { + "id": 916, + "alt": "Turquoise lake winding between forested mountains in soft evening light", + "tone": "mid", + "colours": [ + "turquoise", + "forest green", + "peach" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 2.02, + "by": "Larry Chen", + "page": "https://unsplash.com/photos/Nte-4RiRfwU" + }, + { + "id": 928, + "alt": "Tall waterfall with a tiny figure at its base, black and white", + "tone": "mid", + "colours": [ + "white", + "grey", + "black" + ], + "mono": true, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Jose Murillo", + "page": "https://unsplash.com/photos/7x4dOkulU9E" + }, + { + "id": 1039, + "alt": "Waterfall pouring into a lush mossy green gorge", + "tone": "mid", + "colours": [ + "vivid green", + "dark green", + "white" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Andrew Coelho", + "page": "https://unsplash.com/photos/VB-w_3dnyvI" + }, + { + "id": 1044, + "alt": "Rocky river flowing through a misty mountain forest", + "tone": "mid", + "colours": [ + "grey green", + "mist grey", + "teal" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.78, + "by": "Steve Carter", + "page": "https://unsplash.com/photos/Ixp4YhCKZkI" + }, + { + "id": 1051, + "alt": "Weathered wooden jetty reaching into a misty mountain lake", + "tone": "mid", + "colours": [ + "pale blue", + "weathered grey", + "slate" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.51, + "by": "Ales Krivec", + "page": "https://unsplash.com/photos/HkTMcmlMOUQ" + } + ] + }, + "desert-and-road": { + "title": "Desert and road", + "note": "dunes, dry land and open roads", + "sectors": [ + "hospitality", + "event", + "physical-product", + "consumer-app", + "other", + "fashion" + ], + "keywords": [ + "desert", + "road", + "journey", + "travel", + "route", + "drive", + "dune", + "trip", + "logistic", + "delivery", + "freight" + ], + "photos": [ + { + "id": 261, + "alt": "Sharp sand dune ridge dividing sunlit and shadowed slopes", + "tone": "mid", + "colours": [ + "golden sand", + "deep indigo" + ], + "mono": false, + "calm": "left", + "quality": 5, + "ratio": 1.33, + "by": "Fabio Rose", + "page": "https://unsplash.com/photos/HJSIZsC4te8" + }, + { + "id": 314, + "alt": "Empty two-lane road curving through pale sand dunes", + "tone": "mid", + "colours": [ + "sand beige", + "asphalt grey", + "teal" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.5, + "by": "Fré Sonneveld", + "page": "https://unsplash.com/photos/1rZcfdsjoR4" + }, + { + "id": 525, + "alt": "Orange sand dune with tiny figures on its ridge under blue sky", + "tone": "mid", + "colours": [ + "burnt orange", + "sky blue" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.5, + "by": "Luca Zanon", + "page": "https://unsplash.com/photos/aViOQZzikVs" + }, + { + "id": 563, + "alt": "Straight road with a white centre line leading toward dark conical mountains", + "tone": "mid", + "colours": [ + "charcoal", + "olive green", + "pale grey" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.49, + "by": "Bec Brown", + "page": "https://unsplash.com/photos/7RIm0GqvvkM" + }, + { + "id": 964, + "alt": "Empty road curving through a snow-covered landscape", + "tone": "light", + "colours": [ + "white", + "asphalt grey", + "pale blue" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.43, + "by": "Jon Ottosson", + "page": "https://unsplash.com/photos/YD1uvthZwg4" + }, + { + "id": 46, + "alt": "Rolling golden-brown hills stretching to the horizon under blue sky", + "tone": "mid", + "colours": [ + "golden brown", + "sky blue" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.33, + "by": "Jeffrey Kam", + "page": "https://unsplash.com/photos/Nzw3HHsNHYU" + }, + { + "id": 141, + "alt": "Smooth golden hills curving beneath a clear slate-blue sky", + "tone": "mid", + "colours": [ + "slate blue", + "golden tan" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Greg Shield", + "page": "https://unsplash.com/photos/v9eNihIWh8k" + }, + { + "id": 184, + "alt": "Sand dune ridges catching the last light under a dark sky", + "tone": "dark", + "colours": [ + "deep purple", + "burnt orange" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.51, + "by": "Tim de Groot", + "page": "https://unsplash.com/photos/yNGQ830uFB4" + }, + { + "id": 185, + "alt": "Flat empty desert plain fading into a warm hazy horizon", + "tone": "mid", + "colours": [ + "burnt orange", + "pale gold" + ], + "mono": false, + "calm": "all", + "quality": 4, + "ratio": 1.5, + "by": "Tim de Groot", + "page": "https://unsplash.com/photos/M_eB1UjE0do" + }, + { + "id": 196, + "alt": "Footprints crossing pale sand dunes toward a distant vehicle", + "tone": "light", + "colours": [ + "pale sand", + "warm beige" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.33, + "by": "Dyaa Eldin Moustafa", + "page": "https://unsplash.com/photos/mR_HR8NZwg8" + }, + { + "id": 379, + "alt": "Empty asphalt road running through a brown moorland valley under overcast sky", + "tone": "mid", + "colours": [ + "warm grey", + "brown", + "pale grey" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.51, + "by": "Kamil Lehmann", + "page": "https://unsplash.com/photos/2f5Ktwb8YXk" + }, + { + "id": 551, + "alt": "Car driving along a dusty dirt road into a golden sunset", + "tone": "dark", + "colours": [ + "gold", + "dark brown", + "amber" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Forrest Cavale", + "page": "https://unsplash.com/photos/29SqSdfvN_A" + }, + { + "id": 650, + "alt": "Road curving past dark pine forest into fog", + "tone": "mid", + "colours": [ + "grey", + "dark green", + "white" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Lou Levit", + "page": "https://unsplash.com/photos/_6xC5v5fLpU" + }, + { + "id": 767, + "alt": "Straight empty road running through a tall pine forest", + "tone": "mid", + "colours": [ + "forest green", + "asphalt grey", + "warm brown" + ], + "mono": false, + "calm": "bottom", + "quality": 4, + "ratio": 1.5, + "by": "Sébastien Marchand", + "page": "https://unsplash.com/photos/EeEx8zpOESA" + }, + { + "id": 791, + "alt": "Hot air balloons drifting over a rocky valley at sunrise", + "tone": "mid", + "colours": [ + "golden yellow", + "amber", + "dusky purple" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Daniela Cuevas", + "page": "https://unsplash.com/photos/t7YycgAoVSw" + } + ] + }, + "field-and-farm": { + "title": "Field and farm", + "note": "fields, grassland and rural land", + "sectors": [ + "restaurant", + "nonprofit", + "education", + "health", + "physical-product", + "ecommerce", + "other" + ], + "keywords": [ + "farm", + "field", + "rural", + "harvest", + "grain", + "wheat", + "agric", + "organic", + "countryside", + "vineyard", + "wine" + ], + "photos": [ + { + "id": 808, + "alt": "Ploughed brown soil beside a green field under a pale sky", + "tone": "light", + "colours": [ + "earth brown", + "grass green", + "off-white" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.33, + "by": "elizabeth lies", + "page": "https://unsplash.com/photos/YbgPWfWlvkE" + }, + { + "id": 75, + "alt": "Cluster of dark blue grapes hanging on a vine with leaves", + "tone": "mid", + "colours": [ + "dark blue", + "green", + "cream" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 0.67, + "by": "Jassy Onyae", + "page": "https://unsplash.com/photos/1gBUXhf0PtA" + }, + { + "id": 85, + "alt": "Tractor pulling a trailer of hay bales across a golden field", + "tone": "mid", + "colours": [ + "golden yellow", + "sky blue", + "white" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.65, + "by": "Gozha Net", + "page": "https://unsplash.com/photos/xDrxJCdedcI" + }, + { + "id": 107, + "alt": "Close view of green wheat ears beneath a white sky", + "tone": "mid", + "colours": [ + "fresh green", + "white" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Lukas Schweizer", + "page": "https://unsplash.com/photos/9VWOr22LhVI" + }, + { + "id": 112, + "alt": "Golden grass heads bending before a dark green treeline", + "tone": "mid", + "colours": [ + "golden tan", + "dark green" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Zugr", + "page": "https://unsplash.com/photos/kmF_Aq8gkp0" + }, + { + "id": 187, + "alt": "Frost-covered field with dark hedgerows at first light", + "tone": "mid", + "colours": [ + "frost grey", + "dark green", + "pale gold" + ], + "mono": false, + "calm": "centre", + "quality": 4, + "ratio": 1.5, + "by": "Andre Koch", + "page": "https://unsplash.com/photos/oSf8ePoG9NU" + }, + { + "id": 337, + "alt": "Golden wheat field beneath dark trees and a cloudy sky", + "tone": "mid", + "colours": [ + "golden yellow", + "dark green", + "pale grey" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.33, + "by": "Cornelia Büchse", + "page": "https://unsplash.com/photos/7eu-KaAJwks" + }, + { + "id": 387, + "alt": "Pale track winding through flat fields under a deep blue sky", + "tone": "mid", + "colours": [ + "deep blue", + "tan", + "olive" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Martin Dörsch", + "page": "https://unsplash.com/photos/8ZgJyLGbC7Y" + }, + { + "id": 542, + "alt": "Flat green pasture beneath a heavy grey storm sky", + "tone": "mid", + "colours": [ + "grass green", + "slate grey" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.33, + "by": "Crucifix Jean-Luc", + "page": "https://unsplash.com/photos/19tQv51x4-A" + }, + { + "id": 699, + "alt": "Shepherd with a flock of sheep in rolling green wooded hills", + "tone": "mid", + "colours": [ + "green", + "olive", + "cream" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.78, + "by": "Biegun Wschodni", + "page": "https://unsplash.com/photos/vD3L-rN_qNw" + }, + { + "id": 915, + "alt": "Rows of tea bushes covering a green plantation hillside", + "tone": "mid", + "colours": [ + "tea green", + "dark green" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 2.05, + "by": "McDobbie Hu", + "page": "https://unsplash.com/photos/24tsXm7qGQE" + }, + { + "id": 955, + "alt": "Aerial view of diagonal crop rows in green and gold", + "tone": "mid", + "colours": [ + "olive green", + "straw gold", + "dark green" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.49, + "by": "Matt Benson", + "page": "https://unsplash.com/photos/rHbob_bEsSs" + } + ] + }, + "sky-and-space": { + "title": "Sky and space", + "note": "skies, clouds, stars and night skies", + "sectors": [ + "ai-product", + "saas", + "dev-tool", + "finance", + "event", + "music", + "culture", + "other", + "education" + ], + "keywords": [ + "sky", + "cloud", + "star", + "space", + "night", + "astro", + "weather", + "flight", + "air" + ], + "photos": [ + { + "id": 505, + "alt": "Tiny silhouetted figure on a dark ridge under a blue and orange twilight sky", + "tone": "dark", + "colours": [ + "deep blue", + "orange", + "black" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.5, + "by": "lee Scott", + "page": "https://unsplash.com/photos/_VTgctRg0tA" + }, + { + "id": 38, + "alt": "White cumulus cloud rising against a dark teal sky", + "tone": "mid", + "colours": [ + "dark teal", + "white" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.33, + "by": "Allyson Souza", + "page": "https://unsplash.com/photos/JabLtzJl8bc" + }, + { + "id": 114, + "alt": "Dark storm clouds hanging over a faint mountain ridge", + "tone": "dark", + "colours": [ + "dark teal", + "muted beige" + ], + "mono": false, + "calm": "all", + "quality": 4, + "ratio": 1.33, + "by": "Brian Gonzalez", + "page": "https://unsplash.com/photos/llYg8Ni43fc" + }, + { + "id": 427, + "alt": "Small palm silhouettes along the horizon under a peach dusk sky", + "tone": "mid", + "colours": [ + "peach", + "dusty mauve", + "dark brown" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "James Douglas", + "page": "https://unsplash.com/photos/LJb0yZ7UD7o" + }, + { + "id": 607, + "alt": "Soft streaked clouds in a blue sky above a calm sea", + "tone": "mid", + "colours": [ + "sky blue", + "white", + "teal" + ], + "mono": false, + "calm": "all", + "quality": 4, + "ratio": 0.67, + "by": "Grégoire Hervé-Bazin", + "page": "https://unsplash.com/photos/_LLcIlMoUaE" + }, + { + "id": 654, + "alt": "Starry dusk sky glowing orange above silhouetted trees", + "tone": "dark", + "colours": [ + "deep purple", + "burnt orange", + "black" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Josh Felise", + "page": "https://unsplash.com/photos/trvELSvNZoY" + }, + { + "id": 721, + "alt": "Clear twilight sky fading from deep blue to an orange horizon", + "tone": "dark", + "colours": [ + "navy", + "orange", + "dusty pink" + ], + "mono": false, + "calm": "all", + "quality": 4, + "ratio": 1.5, + "by": "Jeremy Ricketts", + "page": "https://unsplash.com/photos/cGe1PV_yEso" + }, + { + "id": 724, + "alt": "Green and red aurora glowing above silhouetted pine trees", + "tone": "dark", + "colours": [ + "green", + "magenta", + "black" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Nelly Volkovich", + "page": "https://unsplash.com/photos/ZSMgNjYrHRM" + }, + { + "id": 765, + "alt": "Night sky fading to an orange glow along a dark horizon", + "tone": "dark", + "colours": [ + "midnight blue", + "burnt orange", + "black" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.33, + "by": "Grant McIver", + "page": "https://unsplash.com/photos/pmUEwPKL5IE" + }, + { + "id": 833, + "alt": "Tiny aeroplane crossing a wide, softly overcast sky", + "tone": "light", + "colours": [ + "warm grey", + "off-white" + ], + "mono": false, + "calm": "all", + "quality": 4, + "ratio": 0.67, + "by": "Paul Green", + "page": "https://unsplash.com/photos/OIbwHaG9NC8" + }, + { + "id": 847, + "alt": "A few birds flying across a pale blue gradient sky", + "tone": "light", + "colours": [ + "pale blue", + "soft white", + "indigo" + ], + "mono": false, + "calm": "all", + "quality": 4, + "ratio": 1.5, + "by": "Andrej Chudy", + "page": "https://unsplash.com/photos/uivWDK2Ifrg" + }, + { + "id": 869, + "alt": "Starry night sky above a mountain glowing warm at its peak", + "tone": "dark", + "colours": [ + "navy", + "deep blue", + "amber" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Caleb Ralston", + "page": "https://unsplash.com/photos/6hxvm0NzYP8" + }, + { + "id": 901, + "alt": "Green aurora sweeping across the night sky above snowy ground", + "tone": "dark", + "colours": [ + "emerald green", + "dark teal", + "slate" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1, + "by": "Marcelo Quinan", + "page": "https://unsplash.com/photos/R3pUGn5YiTg" + }, + { + "id": 967, + "alt": "Earth's curved horizon with green aurora seen from an orbiting spacecraft", + "tone": "dark", + "colours": [ + "emerald green", + "violet", + "black" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "NASA", + "page": "https://unsplash.com/photos/NuE8Nu3otjo" + }, + { + "id": 974, + "alt": "Person standing beneath the Milky Way with a warm glow on the horizon", + "tone": "dark", + "colours": [ + "deep navy", + "violet", + "amber" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.93, + "by": "Greg Rakozy", + "page": "https://unsplash.com/photos/0LU4vO5iFpM" + } + ] + }, + "architecture": { + "title": "Architecture", + "note": "structure, lines, bridges, facades and building interiors", + "sectors": [ + "architecture", + "real-estate", + "agency", + "studio-portfolio", + "personal-portfolio", + "saas", + "dev-tool", + "ai-product", + "finance", + "culture", + "event", + "education", + "other" + ], + "keywords": [ + "architect", + "building", + "structure", + "bridge", + "tower", + "construction", + "office", + "estate", + "property", + "interior", + "museum", + "gallery", + "engineer", + "infrastructure", + "conference", + "venue", + "silo", + "hall" + ], + "primary": [ + "architecture", + "real-estate" + ], + "photos": [ + { + "id": 508, + "alt": "Tall pointed vaults and pale columns of a church interior", + "tone": "light", + "colours": [ + "cream", + "warm grey", + "soft orange" + ], + "mono": false, + "calm": "none", + "quality": 5, + "ratio": 0.76, + "by": "Jeff Sheldon", + "page": "https://unsplash.com/photos/u3gES0SUsnI" + }, + { + "id": 618, + "alt": "Curving glass and steel lattice roof in black and white", + "tone": "light", + "colours": [ + "white", + "grey", + "black" + ], + "mono": true, + "calm": "none", + "quality": 5, + "ratio": 1.5, + "by": "Mika Ruusunen", + "page": "https://unsplash.com/photos/ypVM8PnygUo" + }, + { + "id": 620, + "alt": "White arched bridge spanning grey water under a pale sky", + "tone": "light", + "colours": [ + "white", + "pale grey", + "charcoal" + ], + "mono": true, + "calm": "bottom", + "quality": 5, + "ratio": 1.5, + "by": "Matthew Wiebe", + "page": "https://unsplash.com/photos/HeVd38MWnw4" + }, + { + "id": 693, + "alt": "Red suspension bridge tower rising from fog above rugged cliffs", + "tone": "mid", + "colours": [ + "rust red", + "grey", + "dark teal" + ], + "mono": false, + "calm": "left", + "quality": 5, + "ratio": 2.15, + "by": "Rob Bye", + "page": "https://unsplash.com/photos/bopC0sTGu-E" + }, + { + "id": 855, + "alt": "Small figure walking past a huge bright yellow wall", + "tone": "light", + "colours": [ + "bright yellow", + "black" + ], + "mono": false, + "calm": "left", + "quality": 5, + "ratio": 1.5, + "by": "Rodion Kutsaev", + "page": "https://unsplash.com/photos/IJ25m7fXqtk" + }, + { + "id": 887, + "alt": "White apartment block facade with repeating balconies and windows", + "tone": "light", + "colours": [ + "white", + "pale grey", + "soft red" + ], + "mono": false, + "calm": "none", + "quality": 5, + "ratio": 1.5, + "by": "Roman Kraft", + "page": "https://unsplash.com/photos/7sMHTVJ0OTA" + }, + { + "id": 942, + "alt": "White angular concrete building against a black sky", + "tone": "dark", + "colours": [ + "black", + "white", + "pale grey" + ], + "mono": true, + "calm": "top", + "quality": 5, + "ratio": 1.5, + "by": "Carl Nenzen Loven", + "page": "https://unsplash.com/photos/busqfOj6i80" + }, + { + "id": 954, + "alt": "Narrow opening in a white wall revealing a white staircase", + "tone": "light", + "colours": [ + "off-white", + "pale beige" + ], + "mono": false, + "calm": "left", + "quality": 5, + "ratio": 1.52, + "by": "Todd Quackenbush", + "page": "https://unsplash.com/photos/JJB_K8aCPU4" + }, + { + "id": 1081, + "alt": "Stepped white modern building corner rising into a pale blue sky", + "tone": "light", + "colours": [ + "white", + "pale blue", + "soft grey" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.49, + "by": "Julien Moreau", + "page": "https://unsplash.com/photos/688Fna1pwOQ" + }, + { + "id": 32, + "alt": "Empty bench against a weathered white wall with a lamp above", + "tone": "light", + "colours": [ + "white", + "light grey", + "charcoal" + ], + "mono": true, + "calm": "centre", + "quality": 4, + "ratio": 1.33, + "by": "Rodrigo Melo", + "page": "https://unsplash.com/photos/eG3k60PrTGY" + }, + { + "id": 76, + "alt": "Green bicycle leaning against a weathered wooden shed with blue door", + "tone": "mid", + "colours": [ + "weathered brown", + "teal blue", + "green" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Alexander Shustov", + "page": "https://unsplash.com/photos/OxzhYtL-00Y" + }, + { + "id": 78, + "alt": "Carved wooden double door set in an aged stone facade", + "tone": "mid", + "colours": [ + "honey brown", + "stone beige" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 0.67, + "by": "Paul Evans", + "page": "https://unsplash.com/photos/CtkDsu4w-Rs" + }, + { + "id": 84, + "alt": "Illuminated suspension bridge seen from below under a stormy night sky", + "tone": "dark", + "colours": [ + "deep blue", + "warm amber" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.51, + "by": "Johnny Lam", + "page": "https://unsplash.com/photos/63qfL0TciY8" + }, + { + "id": 101, + "alt": "Concrete bunker-like building against a pale teal sky", + "tone": "mid", + "colours": [ + "pale teal", + "concrete grey" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Christian Bardenhorst", + "page": "https://unsplash.com/photos/8lMhzUjD1Wk" + }, + { + "id": 134, + "alt": "Steel truss bridge seen from below above brick arches", + "tone": "mid", + "colours": [ + "rust orange", + "teal", + "cream" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.51, + "by": "Charlie Foster", + "page": "https://unsplash.com/photos/Osl4I3IS9Cw" + }, + { + "id": 193, + "alt": "Gothic stone college building facing a striped green lawn", + "tone": "mid", + "colours": [ + "lawn green", + "sandstone", + "sky blue" + ], + "mono": false, + "calm": "bottom", + "quality": 4, + "ratio": 1.46, + "by": "Vadim Sherbakov", + "page": "https://unsplash.com/photos/d6ebY-faOO0" + }, + { + "id": 240, + "alt": "Small figure sitting on wide stone steps beside a white wall", + "tone": "light", + "colours": [ + "white", + "light grey" + ], + "mono": true, + "calm": "top", + "quality": 4, + "ratio": 1.54, + "by": "Elisabetta Foco", + "page": "https://unsplash.com/photos/dFkCXUMB4r4" + }, + { + "id": 276, + "alt": "Wide stone stairway rising into thick fog, black and white", + "tone": "mid", + "colours": [ + "grey", + "charcoal", + "white" + ], + "mono": true, + "calm": "top", + "quality": 4, + "ratio": 1.52, + "by": "davide ragusa", + "page": "https://unsplash.com/photos/sM3lniBo2LY" + }, + { + "id": 315, + "alt": "View straight up a dark building lightwell to bright sky", + "tone": "dark", + "colours": [ + "dark brown", + "white", + "olive" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.4, + "by": "Liam Andrew", + "page": "https://unsplash.com/photos/W7CopGaHkEM" + }, + { + "id": 331, + "alt": "Silhouette of a person standing beneath a steel-framed roof", + "tone": "dark", + "colours": [ + "black", + "white", + "grey" + ], + "mono": true, + "calm": "bottom", + "quality": 4, + "ratio": 1.5, + "by": "Thong Vo", + "page": "https://unsplash.com/photos/g28MgVK85bQ" + }, + { + "id": 354, + "alt": "Suspension bridge walkway with stone tower and converging cables", + "tone": "mid", + "colours": [ + "warm brown", + "pale blue", + "tan" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.33, + "by": "Piotr Kwiatkowski", + "page": "https://unsplash.com/photos/MNyW4STma6g" + }, + { + "id": 378, + "alt": "Silhouetted people at tall windows overlooking a city, black and white", + "tone": "dark", + "colours": [ + "black", + "grey", + "white" + ], + "mono": true, + "calm": "bottom", + "quality": 4, + "ratio": 1.5, + "by": "Charles Forerunner", + "page": "https://unsplash.com/photos/3fPXt37X6UQ" + }, + { + "id": 392, + "alt": "Red suspension bridge spanning a bay beneath a pink sunset sky", + "tone": "mid", + "colours": [ + "dusty pink", + "rust red", + "warm brown" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Chris Brignola", + "page": "https://unsplash.com/photos/n7n-nkadHRM" + }, + { + "id": 396, + "alt": "Long escalator tunnel with a curved lit ceiling and blurred motion", + "tone": "dark", + "colours": [ + "amber", + "black", + "cream" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Sam X", + "page": "https://unsplash.com/photos/ko-wCySsj-I" + }, + { + "id": 500, + "alt": "Glass skyscraper tapering into streaked clouds, seen from below", + "tone": "mid", + "colours": [ + "steel blue", + "pale grey", + "white" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.5, + "by": "Greg Shield", + "page": "https://unsplash.com/photos/JV4Ic7fSZbw" + }, + { + "id": 520, + "alt": "Suspension bridge tower framed between red brick buildings", + "tone": "mid", + "colours": [ + "brick red", + "sky blue", + "steel grey" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 0.67, + "by": "Dorothee Hübner", + "page": "https://unsplash.com/photos/4vPPtrfLRcs" + }, + { + "id": 545, + "alt": "Cobbled bridge with lamp posts and statues at dusk", + "tone": "dark", + "colours": [ + "dusty mauve", + "charcoal", + "warm grey" + ], + "mono": false, + "calm": "bottom", + "quality": 4, + "ratio": 1.5, + "by": "Ryan Lum", + "page": "https://unsplash.com/photos/1ak3Z7ZmtQA" + }, + { + "id": 546, + "alt": "Vaulted stone cloister corridor lit by warm light through arches", + "tone": "dark", + "colours": [ + "burnt orange", + "dark brown", + "amber" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Hartmut Tobies", + "page": "https://unsplash.com/photos/O9TEKuI1Icw" + }, + { + "id": 554, + "alt": "Stone bridge tower and fanned suspension cables seen from below", + "tone": "light", + "colours": [ + "white", + "tan", + "grey" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.51, + "by": "Vita Vilcina", + "page": "https://unsplash.com/photos/0G1r-Cg0zS8" + }, + { + "id": 608, + "alt": "Symmetrical view beneath a pier with wooden pillars and breaking waves", + "tone": "mid", + "colours": [ + "dark brown", + "teal", + "pale blue" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Keith Misner", + "page": "https://unsplash.com/photos/v99lFTVp_ws" + }, + { + "id": 613, + "alt": "Red suspension bridge tower and cables fading into white fog", + "tone": "light", + "colours": [ + "white", + "rust red", + "pale grey" + ], + "mono": false, + "calm": "right", + "quality": 4, + "ratio": 0.66, + "by": "Axel Antas-Bergkvist", + "page": "https://unsplash.com/photos/6asyCyR0K1Q" + }, + { + "id": 623, + "alt": "Underside of a red suspension bridge reaching toward hills in pastel light", + "tone": "light", + "colours": [ + "pale pink", + "rust red", + "soft blue" + ], + "mono": false, + "calm": "right", + "quality": 4, + "ratio": 1.33, + "by": "Michael Hirsch", + "page": "https://unsplash.com/photos/-tXkzUEuheU" + }, + { + "id": 639, + "alt": "White Ferris wheel curving against a clear blue sky", + "tone": "mid", + "colours": [ + "bright blue", + "white" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.33, + "by": "Ilya", + "page": "https://unsplash.com/photos/D62hQefhteg" + }, + { + "id": 663, + "alt": "Suspension bridge tower in fog seen from above, black and white", + "tone": "mid", + "colours": [ + "grey", + "charcoal", + "white" + ], + "mono": true, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Jared Erondu", + "page": "https://unsplash.com/photos/tY1QwoLAJQ4" + }, + { + "id": 677, + "alt": "Upward view of four tower corners framing a cross of bright sky", + "tone": "light", + "colours": [ + "pale blue", + "steel grey", + "white" + ], + "mono": false, + "calm": "centre", + "quality": 4, + "ratio": 1.51, + "by": "davide ragusa", + "page": "https://unsplash.com/photos/slgtMF8EjYE" + }, + { + "id": 679, + "alt": "Spiralling concrete curves around a small round window, black and white", + "tone": "dark", + "colours": [ + "black", + "grey", + "white" + ], + "mono": true, + "calm": "none", + "quality": 4, + "ratio": 1, + "by": "Len dela Cruz", + "page": "https://unsplash.com/photos/ScEKf8u7y-c" + }, + { + "id": 682, + "alt": "Slender tower narrowing into a pale blue-grey sky, seen from below", + "tone": "light", + "colours": [ + "pale grey", + "soft blue" + ], + "mono": false, + "calm": "all", + "quality": 4, + "ratio": 0.67, + "by": "Logan Troxell", + "page": "https://unsplash.com/photos/DsQmBlbywJ8" + }, + { + "id": 692, + "alt": "Grand station concourse with arched windows and a blurred crowd", + "tone": "mid", + "colours": [ + "warm gold", + "cream", + "grey" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Nicolai Berntsen", + "page": "https://unsplash.com/photos/2Qm47LI0W1c" + }, + { + "id": 736, + "alt": "Art deco skyscraper lit at dusk against a plain mauve sky", + "tone": "mid", + "colours": [ + "dusky mauve", + "warm tan", + "grey blue" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 0.67, + "by": "Ben Dumond", + "page": "https://unsplash.com/photos/VedK8_UlmkY" + }, + { + "id": 739, + "alt": "Upper arc of a Ferris wheel against a bright white sky", + "tone": "light", + "colours": [ + "white", + "charcoal", + "pale grey" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.78, + "by": "Siyan Ren", + "page": "https://unsplash.com/photos/jN_VbffJHlI" + }, + { + "id": 743, + "alt": "Narrow wedge-shaped building corner seen from below against a teal sky", + "tone": "mid", + "colours": [ + "teal blue", + "sandstone", + "warm brown" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.5, + "by": "Anthony DELANOIX", + "page": "https://unsplash.com/photos/Aa8_X_YgrO4" + }, + { + "id": 744, + "alt": "Suspension bridge rising above a thick blanket of fog in blue light", + "tone": "mid", + "colours": [ + "sky blue", + "white", + "rust red" + ], + "mono": false, + "calm": "right", + "quality": 4, + "ratio": 1.5, + "by": "Modestas Urbonas", + "page": "https://unsplash.com/photos/vj_9l20fzj0" + }, + { + "id": 781, + "alt": "Dark station platform with a row of bright windows, black and white", + "tone": "dark", + "colours": [ + "black", + "white", + "charcoal" + ], + "mono": true, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Matthew Wiebe", + "page": "https://unsplash.com/photos/azkWKhyr54U" + }, + { + "id": 840, + "alt": "Aerial view of green grass courts with a small car on the road below", + "tone": "mid", + "colours": [ + "grass green", + "white", + "tan" + ], + "mono": false, + "calm": "centre", + "quality": 4, + "ratio": 0.67, + "by": "Noah Kuhn", + "page": "https://unsplash.com/photos/aB7g_LMJhRs" + }, + { + "id": 859, + "alt": "Red brick building with a cream door, red shutters and a parked bicycle", + "tone": "mid", + "colours": [ + "brick red", + "cream" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1, + "by": "Brennan Ehrhardt", + "page": "https://unsplash.com/photos/HALe2SmkWAI" + }, + { + "id": 860, + "alt": "Bridge walkway framed by a web of suspension cables", + "tone": "mid", + "colours": [ + "warm grey", + "pale beige", + "brown" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.33, + "by": "Skyler Smith", + "page": "https://unsplash.com/photos/ISHD1ovpJ-k" + }, + { + "id": 870, + "alt": "White lighthouse with its lamp lit against a deep blue starry sky", + "tone": "mid", + "colours": [ + "deep blue", + "white", + "warm orange" + ], + "mono": false, + "calm": "right", + "quality": 4, + "ratio": 0.67, + "by": "Joshua Hibbert", + "page": "https://unsplash.com/photos/Pn6iimgM-wo" + }, + { + "id": 893, + "alt": "Curved latticed building facade forming sweeping lines, black and white", + "tone": "dark", + "colours": [ + "black", + "white", + "grey" + ], + "mono": true, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Samuel Zeller", + "page": "https://unsplash.com/photos/j0g8taxHZa0" + }, + { + "id": 939, + "alt": "Wedge-shaped historic tower against a white sky, black and white", + "tone": "light", + "colours": [ + "white", + "grey", + "black" + ], + "mono": true, + "calm": "left", + "quality": 4, + "ratio": 1.5, + "by": "Alec Cutter", + "page": "https://unsplash.com/photos/Sfn8f32ZIj0" + }, + { + "id": 946, + "alt": "Yellow brick house front with a dark green door and window", + "tone": "mid", + "colours": [ + "ochre yellow", + "dark green", + "charcoal" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.4, + "by": "Padurariu Alexandru", + "page": "https://unsplash.com/photos/2UE1givDiPM" + }, + { + "id": 947, + "alt": "Whitewashed rooftop terrace with a clay pot and a small domed tower", + "tone": "light", + "colours": [ + "cream white", + "terracotta", + "pale blue" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Anthony DELANOIX", + "page": "https://unsplash.com/photos/vNAZubsDWMg" + }, + { + "id": 948, + "alt": "White latticed tower seen from below against a blue sky", + "tone": "light", + "colours": [ + "white", + "sky blue", + "pale grey" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 0.67, + "by": "Mihail Ribkin", + "page": "https://unsplash.com/photos/VjmlDjePHjE" + }, + { + "id": 949, + "alt": "White spiral atrium with a glass dome skylight, seen from below", + "tone": "light", + "colours": [ + "white", + "pale grey" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 0.66, + "by": "Drew Patrick Miller", + "page": "https://unsplash.com/photos/VLT62-JzddA" + }, + { + "id": 951, + "alt": "Building facade of red, yellow and white rectangular panels", + "tone": "light", + "colours": [ + "red", + "yellow", + "white" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.6, + "by": "Sérgio Rola", + "page": "https://unsplash.com/photos/4aQY2CrXsa8" + }, + { + "id": 972, + "alt": "Glass skyscrapers converging overhead into a white sky", + "tone": "light", + "colours": [ + "white", + "steel grey", + "dark grey" + ], + "mono": false, + "calm": "centre", + "quality": 4, + "ratio": 1.5, + "by": "Matthew Wiebe", + "page": "https://unsplash.com/photos/VviFtDJakYk" + }, + { + "id": 983, + "alt": "Dark angular skyscraper with lit edges, black and white", + "tone": "dark", + "colours": [ + "black", + "white", + "charcoal" + ], + "mono": true, + "calm": "left", + "quality": 4, + "ratio": 1.52, + "by": "Padurariu Alexandru", + "page": "https://unsplash.com/photos/ZKBQmgMyf8s" + }, + { + "id": 1031, + "alt": "Twin glass towers converging upward against a grey sky", + "tone": "mid", + "colours": [ + "steel grey", + "dark blue", + "pale grey" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.78, + "by": "Mike Wilson", + "page": "https://unsplash.com/photos/rM7B4DheQc0" + }, + { + "id": 1033, + "alt": "Symmetrical dark concourse with escalators and teal-lit glass walls", + "tone": "dark", + "colours": [ + "dark teal", + "black", + "amber" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Erez Attias", + "page": "https://unsplash.com/photos/KqVHRmHVwwM" + }, + { + "id": 1054, + "alt": "Weathered grey concrete apartment block with scattered small windows", + "tone": "mid", + "colours": [ + "concrete grey", + "pale blue", + "charcoal" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.78, + "by": "Sérgio Rola", + "page": "https://unsplash.com/photos/B1amIgaNkwA" + } + ] + }, + "city-day": { + "title": "City by day", + "note": "streets and buildings in daylight", + "sectors": [ + "real-estate", + "consumer-app", + "agency", + "event", + "culture", + "fashion", + "education", + "nonprofit", + "other", + "finance" + ], + "keywords": [ + "city", + "street", + "urban", + "town", + "neighbourhood", + "neighborhood", + "local", + "commute", + "downtown" + ], + "photos": [ + { + "id": 49, + "alt": "Whitewashed hillside village with a windmill under hazy blue sky", + "tone": "light", + "colours": [ + "white", + "pale blue" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.62, + "by": "Margaret Barley", + "page": "https://unsplash.com/photos/Qo51KwK1dKg" + }, + { + "id": 57, + "alt": "Narrow city street lined with brick buildings in shadow", + "tone": "mid", + "colours": [ + "brick red", + "teal blue", + "dark grey" + ], + "mono": false, + "calm": "bottom", + "quality": 4, + "ratio": 0.75, + "by": "Nicholas Swanson", + "page": "https://unsplash.com/photos/SyBYM8R6VU4" + }, + { + "id": 188, + "alt": "Snow-dusted rooftops of an old town seen from above", + "tone": "mid", + "colours": [ + "steel blue", + "white", + "dark brown" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Wojtek Witkowski", + "page": "https://unsplash.com/photos/1fpyA_z2woY" + }, + { + "id": 212, + "alt": "Bicycle with a basket parked on a wet city street", + "tone": "mid", + "colours": [ + "warm brown", + "amber", + "grey" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.43, + "by": "Sylwia Bartyzel", + "page": "https://unsplash.com/photos/eDDQRAYKo7k" + }, + { + "id": 238, + "alt": "Dense city skyline of skyscrapers seen from above, black and white", + "tone": "mid", + "colours": [ + "grey", + "white", + "black" + ], + "mono": true, + "calm": "top", + "quality": 4, + "ratio": 1.78, + "by": "Anders Jildén", + "page": "https://unsplash.com/photos/yb0Qs65aZmc" + }, + { + "id": 259, + "alt": "Person on a bench facing a city skyline across snowy waterfront", + "tone": "light", + "colours": [ + "pale grey", + "white", + "soft blue" + ], + "mono": false, + "calm": "bottom", + "quality": 4, + "ratio": 1.33, + "by": "Namphuong Van", + "page": "https://unsplash.com/photos/hfIheOEJp9M" + }, + { + "id": 288, + "alt": "Old town waterfront with pastel buildings and church spires", + "tone": "mid", + "colours": [ + "cream", + "terracotta", + "pale blue" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Stockholm", + "page": "https://unsplash.com/photos/eVBg7A07NGg" + }, + { + "id": 299, + "alt": "City street between tall brick buildings with a glass tower beyond", + "tone": "mid", + "colours": [ + "warm brown", + "pale blue", + "grey" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.52, + "by": "Matthew Wiebe", + "page": "https://unsplash.com/photos/nOhUx3tiaQQ" + }, + { + "id": 308, + "alt": "Narrow street of colourful houses with laundry hung between them", + "tone": "mid", + "colours": [ + "terracotta red", + "pale yellow", + "sky blue" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Charles L.", + "page": "https://unsplash.com/photos/5z8CIELxW1Y" + }, + { + "id": 322, + "alt": "Narrow cobbled alley between worn ochre and terracotta walls", + "tone": "mid", + "colours": [ + "ochre", + "terracotta", + "grey" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Afroz Nawaf", + "page": "https://unsplash.com/photos/dSyWD7oRns8" + }, + { + "id": 344, + "alt": "Hazy golden city skyline reflected in still water", + "tone": "mid", + "colours": [ + "muted gold", + "olive", + "pale yellow" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.48, + "by": "Alex Gindin", + "page": "https://unsplash.com/photos/ifpBOcQlhoY" + }, + { + "id": 430, + "alt": "Distant city skyline across the water under towering white clouds", + "tone": "light", + "colours": [ + "sky blue", + "white", + "slate" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Carli Jean", + "page": "https://unsplash.com/photos/Gk6YgzmrLgM" + }, + { + "id": 439, + "alt": "City skyline low in the frame beneath a vast muted grey sky", + "tone": "mid", + "colours": [ + "warm grey", + "taupe", + "slate" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Matthew Wiebe", + "page": "https://unsplash.com/photos/VQIbwDaqJKc" + }, + { + "id": 826, + "alt": "Boat on a canal between tall brick warehouses in hazy light", + "tone": "dark", + "colours": [ + "dark brown", + "hazy cream", + "dark teal" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.52, + "by": "Nick Scheerbart", + "page": "https://unsplash.com/photos/QmemudqzrXQ" + }, + { + "id": 868, + "alt": "Aerial view of a dense city skyline fading into haze", + "tone": "mid", + "colours": [ + "grey blue", + "slate", + "pale grey" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.11, + "by": "Jeffrey Swanson", + "page": "https://unsplash.com/photos/T72-kQyQxtA" + }, + { + "id": 1029, + "alt": "Aerial view of a large city park surrounded by towers", + "tone": "mid", + "colours": [ + "forest green", + "grey", + "pale haze" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.77, + "by": "freddie marriage", + "page": "https://unsplash.com/photos/utwYoEu9SU8" + }, + { + "id": 1065, + "alt": "Narrow alley between old stone buildings opening onto the sea", + "tone": "mid", + "colours": [ + "stone beige", + "sea blue", + "dark brown" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 0.67, + "by": "Bertrand Zuchuat", + "page": "https://unsplash.com/photos/Uax2bg5EizU" + }, + { + "id": 1067, + "alt": "Aerial view of a city skyline along the water at sunset", + "tone": "mid", + "colours": [ + "warm orange", + "dusky blue", + "dark grey" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Kevin Young", + "page": "https://unsplash.com/photos/-icmOdYWXuQ" + } + ] + }, + "city-night": { + "title": "City at night", + "note": "night streets, lights and long exposures", + "sectors": [ + "music", + "event", + "restaurant", + "consumer-app", + "fashion", + "culture", + "finance", + "other" + ], + "keywords": [ + "night", + "club", + "bar", + "nightlife", + "neon", + "concert", + "festival", + "late", + "evening", + "cocktail" + ], + "primary": [ + "music", + "event" + ], + "photos": [ + { + "id": 43, + "alt": "Suspension bridge and city skyline at night in black and white", + "tone": "dark", + "colours": [ + "black", + "silver grey" + ], + "mono": true, + "calm": "top", + "quality": 4, + "ratio": 1.54, + "by": "Oleg Chursin", + "page": "https://unsplash.com/photos/IoCWq07GaG4" + }, + { + "id": 122, + "alt": "Domed cathedral and city lights reflected in a river at night", + "tone": "dark", + "colours": [ + "dark teal", + "pale gold" + ], + "mono": false, + "calm": "bottom", + "quality": 4, + "ratio": 1.5, + "by": "Vadim Sherbakov", + "page": "https://unsplash.com/photos/xS_RzdD5CFE" + }, + { + "id": 171, + "alt": "Raindrops on a window with blurred traffic lights at night", + "tone": "dark", + "colours": [ + "charcoal", + "dark teal", + "amber" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.33, + "by": "Riley Briggs", + "page": "https://unsplash.com/photos/cSe3oKQ03OQ" + }, + { + "id": 195, + "alt": "Narrow alley lit by strings of hanging lights at night", + "tone": "dark", + "colours": [ + "warm amber", + "dark brown", + "black" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 0.75, + "by": "Matthew Skinner", + "page": "https://unsplash.com/photos/t05kfHeygbE" + }, + { + "id": 220, + "alt": "Tram tracks leading into fog under glowing street lamps at night", + "tone": "dark", + "colours": [ + "muted purple", + "amber" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.6, + "by": "Robin Röcker", + "page": "https://unsplash.com/photos/qUToqliACNA" + }, + { + "id": 232, + "alt": "Twin-globe street lamp glowing in falling snow at night", + "tone": "dark", + "colours": [ + "black", + "warm white" + ], + "mono": false, + "calm": "right", + "quality": 4, + "ratio": 1.51, + "by": "Hide Obara", + "page": "https://unsplash.com/photos/Qh6wsKk1HWg" + }, + { + "id": 496, + "alt": "City skyline silhouette across the water under a deep blue dusk sky", + "tone": "dark", + "colours": [ + "deep blue", + "amber", + "black" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.51, + "by": "davide ragusa", + "page": "https://unsplash.com/photos/mOPCiXScx08" + }, + { + "id": 579, + "alt": "Blurred night street with glowing traffic and building lights", + "tone": "dark", + "colours": [ + "navy", + "amber", + "teal" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Israel Sundseth", + "page": "https://unsplash.com/photos/BYu8ITUWMfc" + }, + { + "id": 797, + "alt": "Red umbrella on a rainy street at night with blurred lights", + "tone": "dark", + "colours": [ + "deep red", + "dark teal", + "black" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Gabriel Santiago", + "page": "https://unsplash.com/photos/1vYkQVDWXl0" + }, + { + "id": 985, + "alt": "City skyline silhouetted at dusk across rippling water", + "tone": "dark", + "colours": [ + "navy", + "deep blue", + "pale orange" + ], + "mono": false, + "calm": "bottom", + "quality": 4, + "ratio": 1.5, + "by": "Hide Obara", + "page": "https://unsplash.com/photos/2p1HOcpi14U" + }, + { + "id": 1078, + "alt": "Grid of lit office windows on a tower at night", + "tone": "dark", + "colours": [ + "dark navy", + "warm yellow", + "black" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Vladimir Kudinov", + "page": "https://unsplash.com/photos/KBX9XHk266s" + } + ] + }, + "interior-and-table": { + "title": "Interior and table", + "note": "rooms, windows, chairs, cups, food and tabletops", + "sectors": [ + "restaurant", + "hospitality", + "real-estate", + "physical-product", + "ecommerce", + "health", + "other" + ], + "keywords": [ + "restaurant", + "cafe", + "coffee", + "kitchen", + "table", + "food", + "dining", + "bakery", + "room", + "home", + "interior", + "furniture", + "tea", + "breakfast", + "hotel", + "ceramic", + "cup", + "pasta", + "wine", + "dinner", + "osteria", + "trattoria", + "bistro", + "menu", + "chef", + "cook", + "dish", + "lunch", + "brunch" + ], + "primary": [ + "restaurant" + ], + "photos": [ + { + "id": 326, + "alt": "Hand holding a white bowl with yellow slices on a pale surface", + "tone": "light", + "colours": [ + "cream", + "pale yellow", + "warm beige" + ], + "mono": false, + "calm": "left", + "quality": 5, + "ratio": 1.51, + "by": "Dominik Martin", + "page": "https://unsplash.com/photos/JYFmYif4n70" + }, + { + "id": 625, + "alt": "Wooden dining table with white moulded chairs beside large windows", + "tone": "light", + "colours": [ + "white", + "warm wood", + "cream" + ], + "mono": false, + "calm": "left", + "quality": 5, + "ratio": 1.5, + "by": "Breather", + "page": "https://unsplash.com/photos/DEdM9Vs6s8w" + }, + { + "id": 1068, + "alt": "Small plant in a vase on a white table against a blue wall", + "tone": "mid", + "colours": [ + "bright blue", + "white", + "green" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.74, + "by": "Padurariu Alexandru", + "page": "https://unsplash.com/photos/iNmouRApXYM" + }, + { + "id": 42, + "alt": "Coffee cup on a long wooden table inside a bright cafe", + "tone": "mid", + "colours": [ + "warm brown", + "white" + ], + "mono": false, + "calm": "bottom", + "quality": 4, + "ratio": 1.5, + "by": "Luke Chesser", + "page": "https://unsplash.com/photos/KR2mdHJ5qMg" + }, + { + "id": 102, + "alt": "Raspberries on a white ledge with warm golden blurred background", + "tone": "light", + "colours": [ + "golden yellow", + "raspberry red", + "white" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.33, + "by": "Ben Moore", + "page": "https://unsplash.com/photos/pJILiyPdrXI" + }, + { + "id": 192, + "alt": "Silhouetted people at cafe tables before large bright windows", + "tone": "mid", + "colours": [ + "white", + "black", + "grey" + ], + "mono": true, + "calm": "top", + "quality": 4, + "ratio": 1, + "by": "Adam Przewoski", + "page": "https://unsplash.com/photos/umchkHwkdyM" + }, + { + "id": 208, + "alt": "Multi-pane window in a dark room looking onto green trees", + "tone": "dark", + "colours": [ + "black", + "leaf green" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.56, + "by": "Martin Wessely", + "page": "https://unsplash.com/photos/NYxxuBSQzp4" + }, + { + "id": 225, + "alt": "Glass teapot of herbal tea beside yellow flowers on a table", + "tone": "mid", + "colours": [ + "amber yellow", + "dark brown", + "white" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.53, + "by": "Vee O", + "page": "https://unsplash.com/photos/hGO27G5tZJ8" + }, + { + "id": 292, + "alt": "Fresh vegetables, red onion and peppercorns on a wooden cutting board", + "tone": "mid", + "colours": [ + "green", + "warm wood", + "purple red" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.51, + "by": "Webvilla", + "page": "https://unsplash.com/photos/hv1MrBzGGNY" + }, + { + "id": 305, + "alt": "Small table with a vase of branches on a railed balcony", + "tone": "light", + "colours": [ + "white", + "soft green", + "grey" + ], + "mono": false, + "calm": "bottom", + "quality": 4, + "ratio": 1.51, + "by": "Dominik Martin", + "page": "https://unsplash.com/photos/B6uUPYt7wz4" + }, + { + "id": 311, + "alt": "Wooden chair by a curtained window at dusk", + "tone": "dark", + "colours": [ + "dark brown", + "dusty blue", + "cream" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.78, + "by": "Logan Adermatt", + "page": "https://unsplash.com/photos/VkF8pVVoFg0" + }, + { + "id": 312, + "alt": "Honey dipper dripping into a white ceramic bowl of dark honey", + "tone": "light", + "colours": [ + "white", + "amber brown" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.5, + "by": "Sonja Langford", + "page": "https://unsplash.com/photos/RQHzRELE2Ss" + }, + { + "id": 429, + "alt": "White cup filled with fresh raspberries on a pale wooden table", + "tone": "light", + "colours": [ + "raspberry red", + "white", + "pale wood" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.78, + "by": "Glen Carrie", + "page": "https://unsplash.com/photos/FjjUVn_KHLU" + }, + { + "id": 488, + "alt": "Bowl of colourful salad on a wooden board, seen from above", + "tone": "light", + "colours": [ + "pale wood", + "white", + "red" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.5, + "by": "Monstruo Estudio", + "page": "https://unsplash.com/photos/lQy6mHZ7fYk" + }, + { + "id": 490, + "alt": "Dark overhead arrangement of a cutting board, pan and kitchen tools", + "tone": "dark", + "colours": [ + "dark brown", + "black", + "tan" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.51, + "by": "Todd Quackenbush", + "page": "https://unsplash.com/photos/x5SRhkFajrA" + }, + { + "id": 635, + "alt": "Enamel mugs and a teapot on a wooden table in warm light", + "tone": "mid", + "colours": [ + "terracotta", + "warm brown", + "white" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "André Freitas", + "page": "https://unsplash.com/photos/uu5PfAzu0s4" + }, + { + "id": 691, + "alt": "Green mug on a bedside table beside rumpled white bedding", + "tone": "light", + "colours": [ + "white", + "teal green", + "warm beige" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.5, + "by": "David Mao", + "page": "https://unsplash.com/photos/m0l5J8Lqnzo" + }, + { + "id": 834, + "alt": "Three framed prints on a pale wall above a dark tufted bench", + "tone": "mid", + "colours": [ + "cream", + "charcoal", + "pale blue" + ], + "mono": false, + "calm": "centre", + "quality": 4, + "ratio": 0.67, + "by": "The Anchor", + "page": "https://unsplash.com/photos/6hgsktgpfIE" + }, + { + "id": 889, + "alt": "Close-up of frosted frozen berries in purple and red", + "tone": "mid", + "colours": [ + "frosted purple", + "berry red", + "pale lilac" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Devin Rajaram", + "page": "https://unsplash.com/photos/X5ChCOu8CQg" + }, + { + "id": 999, + "alt": "Bowls, nuts and a pastry arranged on a dark wooden table from above", + "tone": "dark", + "colours": [ + "charcoal", + "dark brown", + "cream" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Annie Spratt", + "page": "https://unsplash.com/photos/R3LcfTvcGWY" + }, + { + "id": 1080, + "alt": "Fresh red strawberries packed tightly, filling the frame", + "tone": "mid", + "colours": [ + "strawberry red", + "green", + "pink" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "veeterzy", + "page": "https://unsplash.com/photos/OJJIaFZOeX4" + } + ] + }, + "object-still": { + "title": "Objects", + "note": "single objects seen close: instruments, tools, cameras, books", + "sectors": [ + "physical-product", + "ecommerce", + "personal-portfolio", + "culture", + "music", + "education", + "other" + ], + "keywords": [ + "object", + "product", + "camera", + "tool", + "instrument", + "book", + "craft", + "vintage", + "analog", + "record", + "watch" + ], + "photos": [ + { + "id": 63, + "alt": "Cup of coffee seen from above on a bright red surface", + "tone": "mid", + "colours": [ + "bright red", + "white", + "brown" + ], + "mono": false, + "calm": "right", + "quality": 5, + "ratio": 1.78, + "by": "Justin Leibow", + "page": "https://unsplash.com/photos/ZJsseAxEcqM" + }, + { + "id": 23, + "alt": "Close-up of metal fork tines against a dark blurred background", + "tone": "dark", + "colours": [ + "charcoal", + "blue grey", + "silver" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 0.79, + "by": "Alejandro Escamilla", + "page": "https://unsplash.com/photos/8yqds_91OLw" + }, + { + "id": 24, + "alt": "Open book lying on a wooden table in soft light", + "tone": "light", + "colours": [ + "cream", + "warm brown" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 2.69, + "by": "Alejandro Escamilla", + "page": "https://unsplash.com/photos/cZhUxIQjILg" + }, + { + "id": 39, + "alt": "Close-up of a turntable tonearm resting on a vinyl record", + "tone": "light", + "colours": [ + "white", + "black", + "warm grey" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Luke Chesser", + "page": "https://unsplash.com/photos/pFqrYbhIAXs" + }, + { + "id": 80, + "alt": "Pine cones resting on weathered wood in black and white", + "tone": "mid", + "colours": [ + "grey", + "charcoal" + ], + "mono": true, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Sonja Langford", + "page": "https://unsplash.com/photos/Y2PYfopoz-k" + }, + { + "id": 113, + "alt": "Steam rising from a metal mug with blurred blue background", + "tone": "mid", + "colours": [ + "steel blue", + "white", + "grey" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.69, + "by": "Zugr", + "page": "https://unsplash.com/photos/yZf1quatKCA" + }, + { + "id": 175, + "alt": "Close-up of an analogue clock face in black and white", + "tone": "mid", + "colours": [ + "white", + "black", + "grey" + ], + "mono": true, + "calm": "none", + "quality": 4, + "ratio": 1.49, + "by": "petradr", + "page": "https://unsplash.com/photos/8hgm6mKK04U" + }, + { + "id": 486, + "alt": "Black vintage typewriter with blank paper seen from above on white", + "tone": "light", + "colours": [ + "white", + "black" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 0.68, + "by": "Florian Klauer", + "page": "https://unsplash.com/photos/mk7D-4UCfmg" + }, + { + "id": 535, + "alt": "Colourful shirts on wooden hangers along a metal pipe rail", + "tone": "dark", + "colours": [ + "charcoal", + "orange", + "green" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 0.75, + "by": "Jeff Sheldon", + "page": "https://unsplash.com/photos/Lj1S1_KD61k" + }, + { + "id": 687, + "alt": "Coin-operated viewing binoculars facing a pale sea and sky", + "tone": "light", + "colours": [ + "white", + "pale blue", + "silver grey" + ], + "mono": false, + "calm": "right", + "quality": 4, + "ratio": 1.51, + "by": "davide ragusa", + "page": "https://unsplash.com/photos/3WbWLC6QHBg" + } + ] + }, + "hands-and-making": { + "title": "Hands and making", + "note": "hands at work, craft and making", + "sectors": [ + "physical-product", + "restaurant", + "education", + "nonprofit", + "personal-portfolio", + "agency", + "other" + ], + "keywords": [ + "hand", + "craft", + "make", + "maker", + "workshop", + "handmade", + "studio", + "artisan", + "pottery", + "write", + "draw", + "ceramic", + "glaze", + "clay", + "kiln", + "leather", + "knit", + "sew", + "bake", + "brew", + "pour", + "potter" + ], + "primary": [ + "physical-product", + "ecommerce" + ], + "photos": [ + { + "id": 304, + "alt": "Hand adjusting faders on an audio mixing console", + "tone": "mid", + "colours": [ + "warm white", + "navy", + "amber" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Drew Patrick Miller", + "page": "https://unsplash.com/photos/_o6AAx9dl_Y" + }, + { + "id": 319, + "alt": "Hands holding a vintage rangefinder camera against a denim jacket", + "tone": "mid", + "colours": [ + "denim blue", + "mustard", + "silver" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.97, + "by": "Kristian Karlsson", + "page": "https://unsplash.com/photos/3V6ZTpZS-ag" + }, + { + "id": 407, + "alt": "Hands lighting a sparkler that throws bright sparks in the dark", + "tone": "dark", + "colours": [ + "charcoal", + "warm white", + "amber" + ], + "mono": false, + "calm": "right", + "quality": 4, + "ratio": 1.5, + "by": "Kelley Bozarth", + "page": "https://unsplash.com/photos/n6vS3xlnsCc" + }, + { + "id": 491, + "alt": "Axe, hammer, pliers and leather gloves laid out on dark wood", + "tone": "dark", + "colours": [ + "dark brown", + "tan", + "steel grey" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.23, + "by": "Todd Quackenbush", + "page": "https://unsplash.com/photos/IClZBVw5W5A" + }, + { + "id": 674, + "alt": "Cupped hands holding a heap of dark blue grapes", + "tone": "mid", + "colours": [ + "pale blue", + "dark purple", + "tan" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Maja Petric", + "page": "https://unsplash.com/photos/vGQ49l9I4EE" + }, + { + "id": 785, + "alt": "Two cupped hands holding a pile of green spruce tips", + "tone": "mid", + "colours": [ + "fresh green", + "dark green", + "warm skin" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Jean Lakosnyk", + "page": "https://unsplash.com/photos/N9yFjkDc0vA" + }, + { + "id": 1060, + "alt": "Kettle pouring water over a pour-over coffee dripper on a dark counter", + "tone": "dark", + "colours": [ + "dark teal", + "black", + "warm brown" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Karl Fredrickson", + "page": "https://unsplash.com/photos/TYIzeCiZ_60" + } + ] + }, + "people": { + "title": "People", + "note": "figures, silhouettes and portraits, mostly unposed", + "sectors": [ + "nonprofit", + "education", + "health", + "consumer-app", + "fashion", + "music", + "event", + "culture", + "personal-portfolio", + "agency", + "other" + ], + "keywords": [ + "people", + "person", + "community", + "team", + "friend", + "human", + "portrait", + "member", + "student", + "family", + "social" + ], + "primary": [ + "nonprofit", + "education" + ], + "photos": [ + { + "id": 177, + "alt": "Hiker with a backpack looking over a hazy mountain valley", + "tone": "mid", + "colours": [ + "warm tan", + "hazy gold", + "olive" + ], + "mono": false, + "calm": "left", + "quality": 5, + "ratio": 1.37, + "by": "Danka & Peter", + "page": "https://unsplash.com/photos/tvicgTdh7Fg" + }, + { + "id": 338, + "alt": "Person in a hooded coat seen from behind facing a misty sea", + "tone": "mid", + "colours": [ + "slate blue", + "grey", + "charcoal" + ], + "mono": false, + "calm": "left", + "quality": 5, + "ratio": 1.5, + "by": "Patryk Sobczak", + "page": "https://unsplash.com/photos/9VPtNW84vGI" + }, + { + "id": 669, + "alt": "Person in a mustard jacket and grey beanie seen from behind in fog", + "tone": "light", + "colours": [ + "mustard", + "pale grey", + "white" + ], + "mono": false, + "calm": "left", + "quality": 5, + "ratio": 1.41, + "by": "Luke Pamer", + "page": "https://unsplash.com/photos/oUhr-qMTJoc" + }, + { + "id": 685, + "alt": "Man sitting on a rock looking over a sea of clouds", + "tone": "mid", + "colours": [ + "pale gold", + "grey", + "dark brown" + ], + "mono": false, + "calm": "right", + "quality": 5, + "ratio": 1.5, + "by": "Joshua Earle", + "page": "https://unsplash.com/photos/Dwheufds6kQ" + }, + { + "id": 22, + "alt": "Man in a dark suit walking across painted road markings", + "tone": "mid", + "colours": [ + "warm grey", + "charcoal" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.19, + "by": "Alejandro Escamilla", + "page": "https://unsplash.com/photos/du_OrQAA4r0" + }, + { + "id": 91, + "alt": "Person in dark jacket holding a vintage twin-lens camera, monochrome", + "tone": "mid", + "colours": [ + "grey", + "black" + ], + "mono": true, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Jennifer Trovato", + "page": "https://unsplash.com/photos/baRYCsjO6z4" + }, + { + "id": 281, + "alt": "Skateboarder in mid-air at a concrete skatepark with palm trees", + "tone": "mid", + "colours": [ + "warm grey", + "teal", + "tan" + ], + "mono": false, + "calm": "bottom", + "quality": 4, + "ratio": 1.51, + "by": "Victor Erixon", + "page": "https://unsplash.com/photos/_poRbNNfcE8" + }, + { + "id": 334, + "alt": "Man carrying a guitar walking along a foggy beach, monochrome", + "tone": "light", + "colours": [ + "light grey", + "white", + "charcoal" + ], + "mono": true, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Kimberly Richards", + "page": "https://unsplash.com/photos/ERSauUNQ3ag" + }, + { + "id": 349, + "alt": "Man sitting on a sea wall looking toward a hazy skyline", + "tone": "mid", + "colours": [ + "warm grey", + "sepia", + "charcoal" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.5, + "by": "Caleb George", + "page": "https://unsplash.com/photos/FmMivfgHCiM" + }, + { + "id": 375, + "alt": "Person in a hooded jacket sitting among white daisies at dusk", + "tone": "dark", + "colours": [ + "navy", + "dark green", + "white" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Wellington Sanipe", + "page": "https://unsplash.com/photos/3jUTmrmdNVg" + }, + { + "id": 446, + "alt": "Swimmer diving underwater in deep blue water with rising bubbles", + "tone": "dark", + "colours": [ + "deep blue", + "navy" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.78, + "by": "Jacob Walti", + "page": "https://unsplash.com/photos/yxvKH7N8aso" + }, + { + "id": 447, + "alt": "Man standing on a wall facing a blue lake and distant mountains", + "tone": "mid", + "colours": [ + "blue", + "slate", + "white" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.5, + "by": "Joshua Earle", + "page": "https://unsplash.com/photos/YxJ5AfKFgFE" + }, + { + "id": 473, + "alt": "Person in dark clothes standing on a jetty facing misty mountains", + "tone": "mid", + "colours": [ + "slate blue", + "black", + "pale grey" + ], + "mono": false, + "calm": "right", + "quality": 4, + "ratio": 1.5, + "by": "Todd Quackenbush", + "page": "https://unsplash.com/photos/Nk5rSNq13sM" + }, + { + "id": 497, + "alt": "Back of a woman with windblown hair against a plain grey backdrop", + "tone": "mid", + "colours": [ + "pale grey", + "charcoal" + ], + "mono": true, + "calm": "top", + "quality": 4, + "ratio": 1.77, + "by": "Volkan Olmez", + "page": "https://unsplash.com/photos/wESKMSgZJDo" + }, + { + "id": 550, + "alt": "Woman seen from behind looking over a blurred city at dusk", + "tone": "mid", + "colours": [ + "dusty pink", + "warm grey", + "dark brown" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 0.67, + "by": "Christopher Sardegna", + "page": "https://unsplash.com/photos/CMOa3H1SXG0" + }, + { + "id": 660, + "alt": "Woman in a knitted cardigan holding a lit sparkler in front of her", + "tone": "dark", + "colours": [ + "dark teal", + "grey", + "warm white" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.5, + "by": "Morgan Sessions", + "page": "https://unsplash.com/photos/YIN4xUBaqnk" + }, + { + "id": 665, + "alt": "Man sitting on a stone wall overlooking a hazy valley", + "tone": "mid", + "colours": [ + "pale teal", + "cream", + "grey" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.78, + "by": "Joshua Earle", + "page": "https://unsplash.com/photos/CND1MBxLA6M" + }, + { + "id": 726, + "alt": "Person in a red jacket standing in a snowy, misty landscape", + "tone": "light", + "colours": [ + "white", + "pale grey", + "red" + ], + "mono": false, + "calm": "bottom", + "quality": 4, + "ratio": 1.5, + "by": "Caleb George", + "page": "https://unsplash.com/photos/BrXiun04yr4" + }, + { + "id": 768, + "alt": "Person sitting alone on a bench facing sandy dunes", + "tone": "light", + "colours": [ + "sand beige", + "pale blue", + "soft white" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Mikael Kristenson", + "page": "https://unsplash.com/photos/3f4sQIums6k" + }, + { + "id": 821, + "alt": "Woman seen from behind on a platform as a train blurs past", + "tone": "light", + "colours": [ + "white", + "grey", + "black" + ], + "mono": true, + "calm": "left", + "quality": 4, + "ratio": 1.5, + "by": "Eutah Mizushima", + "page": "https://unsplash.com/photos/2TlAsvhqiL0" + }, + { + "id": 832, + "alt": "Woman in a pale blue shirt reading a book in soft window light", + "tone": "dark", + "colours": [ + "dark olive", + "pale blue", + "warm skin" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.5, + "by": "hieu le", + "page": "https://unsplash.com/photos/SrkuyPb3aUk" + }, + { + "id": 841, + "alt": "Swimmer mid-stroke in a dark lake beneath moody mountains", + "tone": "dark", + "colours": [ + "slate grey", + "dark blue", + "charcoal" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.98, + "by": "Todd Quackenbush", + "page": "https://unsplash.com/photos/E9PJO_vL3E8" + }, + { + "id": 1005, + "alt": "Person in a scarf seen from behind, looking at the sea at dusk", + "tone": "mid", + "colours": [ + "warm sand", + "dark brown", + "pale peach" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.5, + "by": "Matthew Wiebe", + "page": "https://unsplash.com/photos/tBtuxtLvAZs" + }, + { + "id": 1006, + "alt": "Person sitting on a rocky overlook above misty forested hills", + "tone": "mid", + "colours": [ + "dusky purple", + "olive green", + "grey" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Vladimir Kudinov", + "page": "https://unsplash.com/photos/-wWRHIUklxM" + }, + { + "id": 1009, + "alt": "Back of a person's head beneath a wide pale blue sky", + "tone": "light", + "colours": [ + "pale blue", + "soft white", + "dark brown" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 0.67, + "by": "Christopher Campbell", + "page": "https://unsplash.com/photos/CMWRIzyMKZk" + }, + { + "id": 1011, + "alt": "Woman paddling a canoe on a turquoise lake edged by forest", + "tone": "mid", + "colours": [ + "turquoise", + "dark green", + "rust red" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Roberto Nickson", + "page": "https://unsplash.com/photos/7BjmDICVloE" + }, + { + "id": 1014, + "alt": "Woman seen from behind facing a misty sea, a ribbon across her head", + "tone": "light", + "colours": [ + "pale teal", + "soft grey", + "black" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.5, + "by": "Oscar Keys", + "page": "https://unsplash.com/photos/AmPRUnRb6N0" + } + ] + }, + "animals": { + "title": "Animals", + "note": "wild and domestic animals", + "sectors": [ + "nonprofit", + "education", + "consumer-app", + "other", + "health" + ], + "keywords": [ + "animal", + "pet", + "dog", + "cat", + "bird", + "wildlife", + "horse", + "zoo", + "vet", + "safari" + ], + "photos": [ + { + "id": 200, + "alt": "Shaggy highland cow standing on a sandy hillside", + "tone": "mid", + "colours": [ + "rust brown", + "sand beige", + "pale grey" + ], + "mono": false, + "calm": "right", + "quality": 5, + "ratio": 1.5, + "by": "Elias Carlsson", + "page": "https://unsplash.com/photos/wSb8d-ke5-4" + }, + { + "id": 219, + "alt": "Leopard walking along a sandy dirt road beside grass", + "tone": "mid", + "colours": [ + "sandy tan", + "olive green" + ], + "mono": false, + "calm": "left", + "quality": 5, + "ratio": 1.5, + "by": "Martyn Seddon", + "page": "https://unsplash.com/photos/7iB4OZDlRok" + }, + { + "id": 237, + "alt": "Black labrador puppy looking up from a wooden floor", + "tone": "mid", + "colours": [ + "black", + "weathered brown" + ], + "mono": false, + "calm": "none", + "quality": 5, + "ratio": 1.67, + "by": "André Spieker", + "page": "https://unsplash.com/photos/8wTPqxlnKM4" + }, + { + "id": 275, + "alt": "Seagull standing on a ledge against a pale blue sea", + "tone": "light", + "colours": [ + "pale blue", + "white" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.51, + "by": "davide ragusa", + "page": "https://unsplash.com/photos/ATutAPqj4zw" + }, + { + "id": 881, + "alt": "Jellyfish drifting in bright blue water beneath rays of light", + "tone": "mid", + "colours": [ + "electric blue", + "cyan", + "deep blue" + ], + "mono": false, + "calm": "bottom", + "quality": 5, + "ratio": 1.5, + "by": "贝莉儿 NG", + "page": "https://unsplash.com/photos/bviex5lwf3s" + }, + { + "id": 943, + "alt": "Deer silhouettes grazing in a golden misty meadow", + "tone": "mid", + "colours": [ + "amber", + "golden yellow", + "dark brown" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 1.5, + "by": "Paul Earle", + "page": "https://unsplash.com/photos/l98YXp1X8dA" + }, + { + "id": 1003, + "alt": "Young spotted fawn looking back in warm, blurred woodland", + "tone": "mid", + "colours": [ + "warm brown", + "olive", + "amber" + ], + "mono": false, + "calm": "top", + "quality": 5, + "ratio": 0.67, + "by": "E+N Photographies", + "page": "https://unsplash.com/photos/GYumuBnTqKc" + }, + { + "id": 1069, + "alt": "Orange jellyfish with trailing tentacles against deep blue water", + "tone": "mid", + "colours": [ + "cobalt blue", + "vivid orange" + ], + "mono": false, + "calm": "right", + "quality": 5, + "ratio": 1.5, + "by": "Marat Gilyadzinov", + "page": "https://unsplash.com/photos/wpTWYBll4_w" + }, + { + "id": 1074, + "alt": "Lioness looking upward against a dark background", + "tone": "dark", + "colours": [ + "tawny brown", + "black", + "gold" + ], + "mono": false, + "calm": "right", + "quality": 5, + "ratio": 1.5, + "by": "Samuel Scrimshaw", + "page": "https://unsplash.com/photos/sseiVD2XsOk" + }, + { + "id": 40, + "alt": "Extreme close-up of a cat's nose, mouth and whiskers", + "tone": "light", + "colours": [ + "soft grey", + "pink", + "white" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.46, + "by": "Ryan Mcguire", + "page": "https://unsplash.com/photos/N-1XGL54pQg" + }, + { + "id": 169, + "alt": "Two brown dachshunds sniffing through bright green grass", + "tone": "mid", + "colours": [ + "grass green", + "chestnut brown" + ], + "mono": false, + "calm": "bottom", + "quality": 4, + "ratio": 1.5, + "by": "Noel Lopez", + "page": "https://unsplash.com/photos/BjelfpszQDw" + }, + { + "id": 244, + "alt": "Pelican perched on a wooden post beside a weathered pier", + "tone": "light", + "colours": [ + "pale blue", + "white", + "grey brown" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.51, + "by": "Yair Hazout", + "page": "https://unsplash.com/photos/Y-eIZ3g8_ko" + }, + { + "id": 258, + "alt": "Flock of birds in flight against a plain teal sky", + "tone": "mid", + "colours": [ + "muted teal", + "black" + ], + "mono": false, + "calm": "all", + "quality": 4, + "ratio": 1.5, + "by": "Fré Sonneveld", + "page": "https://unsplash.com/photos/liiqOto_Dw8" + }, + { + "id": 433, + "alt": "Close portrait of a brown bear looking toward the camera", + "tone": "mid", + "colours": [ + "brown", + "tan", + "pale grey" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Thomas Lefebvre", + "page": "https://unsplash.com/photos/aRXPJnXQ9lU" + }, + { + "id": 577, + "alt": "Antlered deer standing in a shallow river beside green forest", + "tone": "mid", + "colours": [ + "dark green", + "grey", + "brown" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.5, + "by": "Thomas Lefebvre", + "page": "https://unsplash.com/photos/34mvN5nt1ls" + }, + { + "id": 581, + "alt": "Blue jellyfish drifting through bright blue water", + "tone": "mid", + "colours": [ + "bright blue", + "pale blue", + "white" + ], + "mono": false, + "calm": "right", + "quality": 4, + "ratio": 1.5, + "by": "Lance Anderson", + "page": "https://unsplash.com/photos/2Q8zDWkj0Yw" + }, + { + "id": 582, + "alt": "Close view of a coyote lowering its head against a pale background", + "tone": "light", + "colours": [ + "tan", + "cream", + "grey" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Levi Saunders", + "page": "https://unsplash.com/photos/NUMlxTPsznM" + }, + { + "id": 584, + "alt": "Small group of horses in rough grassland under a white sky", + "tone": "light", + "colours": [ + "white", + "olive green", + "brown" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Bethany Legg", + "page": "https://unsplash.com/photos/wJYricpDGM0" + }, + { + "id": 659, + "alt": "Husky in a harness looking to the side against a dark background", + "tone": "dark", + "colours": [ + "charcoal", + "white", + "grey" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.78, + "by": "Alexander Dimitrov", + "page": "https://unsplash.com/photos/KGy1GFeKBu4" + }, + { + "id": 718, + "alt": "Coyote walking across open ground in front of a dark forest", + "tone": "mid", + "colours": [ + "grey", + "tan", + "dark brown" + ], + "mono": false, + "calm": "right", + "quality": 4, + "ratio": 1.58, + "by": "Josh Felise", + "page": "https://unsplash.com/photos/mblYxasm0nk" + }, + { + "id": 783, + "alt": "Close-up of a macaque's red face surrounded by thick grey fur", + "tone": "mid", + "colours": [ + "warm grey", + "rose red" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Damir Kotoric", + "page": "https://unsplash.com/photos/cSQw4uqF_Hc" + }, + { + "id": 790, + "alt": "Deer standing among bare trees in soft golden morning haze", + "tone": "light", + "colours": [ + "pale gold", + "sand", + "soft brown" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "rebecca johnston", + "page": "https://unsplash.com/photos/nuRYwOJryyk" + }, + { + "id": 935, + "alt": "Frog covered in duckweed peeking out of a green pond", + "tone": "mid", + "colours": [ + "lime green", + "moss green" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "delfi de la Rua", + "page": "https://unsplash.com/photos/xorjaMB8W70" + }, + { + "id": 1020, + "alt": "Brown bear on a rocky slope with snowy forest behind", + "tone": "mid", + "colours": [ + "grey brown", + "pale grey", + "white" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.51, + "by": "Adam Willoughby-Knox", + "page": "https://unsplash.com/photos/_snqARKTgoc" + }, + { + "id": 1024, + "alt": "Large bird of prey in flight with wings spread against a grey-blue sky", + "tone": "mid", + "colours": [ + "grey blue", + "brown", + "cream" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.5, + "by": "Niko Virtanen", + "page": "https://nikovirtanen.com" + }, + { + "id": 1062, + "alt": "Pug wrapped in a beige blanket lying on a bed", + "tone": "light", + "colours": [ + "warm beige", + "cream", + "soft brown" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Matthew Wiebe", + "page": "https://unsplash.com/photos/2Ts5HnA67k8" + } + ] + }, + "plants-and-flowers": { + "title": "Plants and flowers", + "note": "botanical close-ups, leaves and flowers", + "sectors": [ + "health", + "restaurant", + "physical-product", + "ecommerce", + "fashion", + "hospitality", + "other" + ], + "keywords": [ + "plant", + "flower", + "botanic", + "garden", + "leaf", + "floral", + "skincare", + "beauty", + "herb", + "natural", + "bloom", + "florist" + ], + "photos": [ + { + "id": 306, + "alt": "White water lily with yellow centre among dark lily pads", + "tone": "dark", + "colours": [ + "white", + "dark green", + "yellow" + ], + "mono": false, + "calm": "none", + "quality": 5, + "ratio": 1.33, + "by": "Schicka", + "page": "https://unsplash.com/photos/6T7kfc3VitU" + }, + { + "id": 738, + "alt": "Single white calla lily against a dark, almost black background", + "tone": "dark", + "colours": [ + "near black", + "cream white", + "soft green" + ], + "mono": false, + "calm": "left", + "quality": 5, + "ratio": 0.67, + "by": "Marta Pawlik", + "page": "https://unsplash.com/photos/yqmlajPxR3Y" + }, + { + "id": 798, + "alt": "White daisy with a yellow and green centre on a white background", + "tone": "light", + "colours": [ + "white", + "yellow", + "green" + ], + "mono": false, + "calm": "left", + "quality": 5, + "ratio": 1.33, + "by": "Aaron Burden", + "page": "https://unsplash.com/photos/UvRMcIeXq9Y" + }, + { + "id": 940, + "alt": "Blue-green succulent rosettes filling the frame from above", + "tone": "mid", + "colours": [ + "teal green", + "dark green", + "dusty purple" + ], + "mono": false, + "calm": "none", + "quality": 5, + "ratio": 0.66, + "by": "Annie Spratt", + "page": "https://unsplash.com/photos/8mqOw4DBBSg" + }, + { + "id": 152, + "alt": "Purple petunia flowers with dark green leaves, close-up", + "tone": "dark", + "colours": [ + "violet", + "dark green" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Steven Spassov", + "page": "https://unsplash.com/photos/tVIqMgGlAG0" + }, + { + "id": 159, + "alt": "Water drop hanging from the tip of a green leaf", + "tone": "mid", + "colours": [ + "leaf green", + "soft green" + ], + "mono": false, + "calm": "right", + "quality": 4, + "ratio": 2.03, + "by": "Shyamanta Baruah", + "page": "https://unsplash.com/photos/kxqvE41_07k" + }, + { + "id": 189, + "alt": "Water droplets on a broad green leaf with fine veins", + "tone": "mid", + "colours": [ + "bright green", + "lime green" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.33, + "by": "Buzo Jesús", + "page": "https://unsplash.com/photos/pHM4a_RZSLE" + }, + { + "id": 239, + "alt": "Hand holding a dandelion seed head against a dark background", + "tone": "dark", + "colours": [ + "black", + "white", + "dark green" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.25, + "by": "Coley Christine", + "page": "https://unsplash.com/photos/GyvMk5pPDXI" + }, + { + "id": 248, + "alt": "Round cactus in a pot seen from above, softly blurred", + "tone": "mid", + "colours": [ + "sage green", + "warm tan", + "soft pink" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.49, + "by": "Oliver Pacas", + "page": "https://unsplash.com/photos/tZrrWkQT9MM" + }, + { + "id": 400, + "alt": "Green plant with tight flower buds against a dark teal background", + "tone": "dark", + "colours": [ + "emerald green", + "dark teal" + ], + "mono": false, + "calm": "right", + "quality": 4, + "ratio": 1.5, + "by": "John French", + "page": "https://unsplash.com/photos/SNW4DWZEy8I" + }, + { + "id": 492, + "alt": "Field of dandelion seed heads backlit beneath a bright sky", + "tone": "mid", + "colours": [ + "pale blue", + "dark green", + "white" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.5, + "by": "Jason Long", + "page": "https://unsplash.com/photos/FOeDIUwYiSw" + }, + { + "id": 517, + "alt": "Orange tree branches heavy with fruit against a clear blue sky", + "tone": "light", + "colours": [ + "sky blue", + "orange", + "green" + ], + "mono": false, + "calm": "right", + "quality": 4, + "ratio": 1.5, + "by": "Brian Jimenez", + "page": "https://unsplash.com/photos/ch-mPpglKjQ" + }, + { + "id": 631, + "alt": "Water droplet resting at the centre of a vivid green leaf", + "tone": "dark", + "colours": [ + "vivid green", + "black" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "贝莉儿 NG", + "page": "https://unsplash.com/photos/C_-DQF-x-N0" + }, + { + "id": 844, + "alt": "Close-up of green bamboo stalks in soft focus", + "tone": "mid", + "colours": [ + "bamboo green", + "sage", + "dark green" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "kazuend", + "page": "https://unsplash.com/photos/LVdiXyu2eTc" + }, + { + "id": 976, + "alt": "Orange tulips blooming in a sunlit woodland", + "tone": "mid", + "colours": [ + "orange", + "leaf green", + "warm yellow" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.72, + "by": "Ales Krivec", + "page": "https://unsplash.com/photos/hLxqYJspAkE" + }, + { + "id": 977, + "alt": "Small mushroom growing in moss with soft golden bokeh", + "tone": "mid", + "colours": [ + "moss green", + "golden yellow", + "cream" + ], + "mono": false, + "calm": "right", + "quality": 4, + "ratio": 1.5, + "by": "Manuel Barroso Parejo", + "page": "https://unsplash.com/photos/M9F8VR0jEPM" + } + ] + }, + "texture": { + "title": "Texture", + "note": "wood, stone, walls and abstract surfaces", + "sectors": [ + "physical-product", + "fashion", + "agency", + "studio-portfolio", + "architecture", + "other" + ], + "keywords": [ + "texture", + "material", + "wood", + "stone", + "surface", + "wall", + "paper", + "fabric", + "concrete", + "glaze", + "ceramic", + "clay" + ], + "photos": [ + { + "id": 41, + "alt": "Water droplets beading on a smooth surface in shallow focus", + "tone": "mid", + "colours": [ + "blue grey", + "warm brown" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.59, + "by": "Nithya Ramanujam", + "page": "https://unsplash.com/photos/fTKetYpEKNQ" + }, + { + "id": 115, + "alt": "Raindrops scattered across a dark wet surface, close-up", + "tone": "dark", + "colours": [ + "charcoal", + "blue grey" + ], + "mono": false, + "calm": "all", + "quality": 4, + "ratio": 1.5, + "by": "Christian Hebell", + "page": "https://unsplash.com/photos/A6S-q3D67Ss" + }, + { + "id": 210, + "alt": "Old red brick wall with weathered mortar", + "tone": "mid", + "colours": [ + "brick red", + "terracotta", + "grey" + ], + "mono": false, + "calm": "all", + "quality": 4, + "ratio": 1.5, + "by": "Martin Wessely", + "page": "https://unsplash.com/photos/sX4lxBWV0-A" + }, + { + "id": 564, + "alt": "Curving orange sandstone walls of a narrow slot canyon", + "tone": "dark", + "colours": [ + "burnt orange", + "rust", + "dark brown" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Sebastian Boguszewicz", + "page": "https://unsplash.com/photos/YG_Fxyqz9xg" + }, + { + "id": 609, + "alt": "Smooth grey pebbles on a beach with a blurred wave behind", + "tone": "mid", + "colours": [ + "grey", + "teal", + "white" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.59, + "by": "Jeremy Cai", + "page": "https://unsplash.com/photos/mnF75FoPBWY" + }, + { + "id": 796, + "alt": "Dark pebbles scattered across smooth, wind-rippled peach sand", + "tone": "light", + "colours": [ + "peach", + "sand", + "charcoal" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.85, + "by": "Colton Brown", + "page": "https://unsplash.com/photos/aQoOdWdYpis" + }, + { + "id": 1002, + "alt": "Satellite view of turquoise water swirling against golden land", + "tone": "mid", + "colours": [ + "turquoise", + "gold", + "deep navy" + ], + "mono": false, + "calm": "right", + "quality": 4, + "ratio": 1.5, + "by": "NASA", + "page": "https://unsplash.com/photos/6-jTZysYY_U" + }, + { + "id": 766, + "alt": "Roasted coffee beans filling the entire frame", + "tone": "dark", + "colours": [ + "dark brown", + "espresso", + "chestnut" + ], + "mono": false, + "calm": "none", + "quality": 3, + "ratio": 1.5, + "by": "Padurariu Alexandru", + "page": "https://unsplash.com/photos/mqyMjCTWJyQ" + } + ] + }, + "transport": { + "title": "Transport", + "note": "trains, boats, bicycles, cars and aircraft", + "sectors": [ + "consumer-app", + "event", + "physical-product", + "other", + "hospitality" + ], + "keywords": [ + "train", + "car", + "bike", + "bicycle", + "boat", + "plane", + "transport", + "mobility", + "ride", + "vehicle", + "motor", + "rail" + ], + "photos": [ + { + "id": 133, + "alt": "Two vintage cars parked before yellow garage doors on white wall", + "tone": "light", + "colours": [ + "bright yellow", + "white", + "silver grey" + ], + "mono": false, + "calm": "none", + "quality": 5, + "ratio": 1.5, + "by": "Dietmar Becker", + "page": "https://unsplash.com/photos/8Zt0xOOK4nI" + }, + { + "id": 88, + "alt": "Overhead view of cars on a multi-lane road in monochrome", + "tone": "mid", + "colours": [ + "grey", + "charcoal" + ], + "mono": true, + "calm": "none", + "quality": 4, + "ratio": 0.75, + "by": "Barcelona", + "page": "https://unsplash.com/photos/muC_6gTMLR4" + }, + { + "id": 328, + "alt": "Cable car gondolas crossing above a misty snowy slope", + "tone": "mid", + "colours": [ + "teal blue", + "white", + "dark navy" + ], + "mono": false, + "calm": "bottom", + "quality": 4, + "ratio": 1.33, + "by": "Nathalie Gouzée", + "page": "https://unsplash.com/photos/hSeq6sn2HeE" + }, + { + "id": 345, + "alt": "Motion-blurred train passing through an underground station", + "tone": "mid", + "colours": [ + "black", + "white", + "warm grey" + ], + "mono": false, + "calm": "bottom", + "quality": 4, + "ratio": 1.5, + "by": "Mario Calvo", + "page": "https://unsplash.com/photos/S_mEIfXRzIk" + }, + { + "id": 401, + "alt": "Hot air balloon seen from below against a bright hazy sky", + "tone": "light", + "colours": [ + "pale blue", + "white", + "orange" + ], + "mono": false, + "calm": "left", + "quality": 4, + "ratio": 1.5, + "by": "Austin Ban", + "page": "https://unsplash.com/photos/0fjGQmYCRW8" + }, + { + "id": 515, + "alt": "Abandoned aircraft fuselage resting on a black sand plain", + "tone": "mid", + "colours": [ + "charcoal", + "pale blue", + "white" + ], + "mono": false, + "calm": "bottom", + "quality": 4, + "ratio": 1.33, + "by": "Jeff Sheldon", + "page": "https://unsplash.com/photos/uWwN03Mg4Wg" + }, + { + "id": 655, + "alt": "Vintage turquoise camper van parked in front of dark trees", + "tone": "mid", + "colours": [ + "turquoise", + "white", + "dark green" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.78, + "by": "Kyle Szegedi", + "page": "https://unsplash.com/photos/tRQfEwP5P_0" + }, + { + "id": 757, + "alt": "View through a vintage car windscreen onto sunlit trees", + "tone": "mid", + "colours": [ + "warm tan", + "leaf green", + "cream" + ], + "mono": false, + "calm": "none", + "quality": 4, + "ratio": 1.71, + "by": "Josh Felise", + "page": "https://unsplash.com/photos/11Q8ApbwkVI" + }, + { + "id": 1072, + "alt": "Rusty vintage truck abandoned in a dry grassy field", + "tone": "mid", + "colours": [ + "rust", + "straw", + "grey" + ], + "mono": false, + "calm": "top", + "quality": 4, + "ratio": 1.49, + "by": "jamie mink", + "page": "https://unsplash.com/photos/5Qwz2KyfIBE" + }, + { + "id": 1077, + "alt": "Cyclists streaked by motion blur, black and white", + "tone": "mid", + "colours": [ + "grey", + "black", + "white" + ], + "mono": true, + "calm": "none", + "quality": 4, + "ratio": 1.5, + "by": "Maico Amorim", + "page": "https://unsplash.com/photos/SJWPKMb9u-k" + } + ] + } + } +} \ No newline at end of file diff --git a/.agents/skills/design-taste-frontend/library/sections.json b/.agents/skills/design-taste-frontend/library/sections.json new file mode 100644 index 0000000..042b8ab --- /dev/null +++ b/.agents/skills/design-taste-frontend/library/sections.json @@ -0,0 +1,4429 @@ +[ + { + "id": "features-capabilities-at-poster-scale", + "role": "features", + "name": "Capabilities at poster scale", + "shape": "list", + "tags": [ + "type-led", + "poster" + ], + "directions": [ + "type-only-statement", + "hero-object", + "loud-flat-poster", + "borrowed-category", + "colour-chapters" + ], + "needs": [], + "blueprint": "No images. The heading, two to four words, is the first line of the list itself, set at the same size as the items but in the soft ink, so no separate title sits above. Five to eight capability names follow, one per line, at clamp(40px, 5.2vw, 84px), medium to heavy weight, leading 1.0, tight tracking, flush left on the page margin across columns 1–8 of 12. Each name's one-sentence description is set at 16–18px in columns 9–12, its first baseline aligned with the name's baseline (CSS grid, align-items: first baseline). Rows are separated by 0.35em of space and nothing else. On hover one row keeps full ink while the others fall to 35% opacity. Leave 18–22vh of empty ground above and below; nothing else shares the section.", + "mobile": "Names drop to 11vw and stay one per line; a name that will not fit breaks onto a second line with a hanging indent. Each description sits directly under its name at 16px, indented one margin width, with 28px before the next name. The soft-ink heading line stays as the first row. All rows at full ink.", + "seenIn": [ + "aww-cominvi", + "aww-cerebrium", + "opl-specia1ne" + ] + }, + { + "id": "features-pinned-heading-passing-rows", + "role": "features", + "name": "Pinned heading, passing rows", + "shape": "pinned", + "tags": [ + "colour-field", + "type-led" + ], + "directions": [ + "pinned-poster", + "loud-flat-poster", + "colour-chapters", + "split-stage", + "editorial-report" + ], + "needs": [], + "blueprint": "One flat saturated field, full-bleed, as tall as its content. Columns 1–5: the heading, two or three words, at clamp(56px, 6.6vw, 104px) in the heaviest weight, position: sticky; top: 32px, so it holds while the right side travels. Columns 7–12: four to six capability blocks stacked with 120px between them. Each block is a title at 28px bold, then a two-part row: a portrait photograph at 3:4, 180–220px wide with square corners, and beside it, top-aligned, a plain list of four to six short lines at 18px with 14px between lines. Photographs alternate between the left and the right of their list, so the column does not read as a ladder. One ink colour, chosen for contrast on the field. The heading releases when the bottom of the last block reaches it.", + "mobile": "The heading becomes a sticky bar at the top of the section: one line at 9vw on the field colour with 12px padding, holding while blocks pass under it. Each block stacks its title, a full-width 4:3 photograph, then the list at 17px. 72px between blocks.", + "seenIn": [ + "opl-protip-marketing", + "aww-cerebrium", + "aww-sharplink" + ] + }, + { + "id": "features-one-scene-stepping-statements", + "role": "features", + "name": "One scene, stepping statements", + "shape": "full-bleed", + "tags": [ + "photo-led" + ], + "directions": [ + "place-carries-it", + "pinned-poster", + "dark-room", + "hero-object", + "uneven-photographs" + ], + "needs": [], + "blueprint": "A wrapper 350–450vh tall holds a sticky full-bleed photograph (100vw by 100svh) with a calm, symmetrical subject and a clear upper third; a neutral dark scrim covers only that upper third. At top centre, five or six short statements of two to five words are stacked at 18–20px with 10px between them; the first of them is the section's heading. One statement is at full white and the rest at 45% opacity; the active line steps down the stack as the reader scrolls (IntersectionObserver on invisible 70vh markers). For each statement, two small photographs with square corners, 160–240px wide and of different ratios, fade in left and right of the centre line at different heights, then leave when the next pair arrives. No other text. A low-key image on a deep ground works equally well.", + "mobile": "The photograph stays sticky at 100svh, cropped to its centre. The statement stack moves to the bottom third over a scrim, at 17px, left-aligned on the margin. Each statement brings one small photograph only, 44vw wide, placed in the top-right corner with a 16px margin.", + "seenIn": [ + "aww-seasats", + "opl-eagles-nest" + ] + }, + { + "id": "features-stacking-colour-sheets", + "role": "features", + "name": "Stacking colour sheets", + "shape": "stack", + "tags": [ + "colour-field", + "poster" + ], + "directions": [ + "colour-chapters", + "page-is-the-object", + "pinned-poster", + "loud-flat-poster", + "borrowed-category" + ], + "needs": [], + "blueprint": "Three to five capabilities, each a full-width flat colour sheet about 86svh tall with only its top corners rounded at 28px. Every sheet is position: sticky, with top offsets rising by 72px from one sheet to the next, so each new sheet slides up over the last and leaves the previous sheet's title band showing, like tabbed folders in a drawer. Inside a sheet: the capability name top-left at clamp(28px, 3vw, 44px), sitting within that 72px band; a paragraph of up to 40ch at 18px bottom-left; and in columns 7–12 one photograph filling the sheet from below the band to the bottom edge, square corners, no inset. Sheet colours follow the palette in a fixed order, with ink chosen per sheet. The heading, two to four words at clamp(40px, 5vw, 80px), sits on the ground above the stack with 48px beneath and scrolls away normally.", + "mobile": "Sheets stay sticky but the offset shrinks to 52px and the name drops to 22px so it fits the visible band. Inside each sheet the photograph comes first at 4:3 and full width, then the paragraph at 17px with 20px padding. Sheets are as tall as their content, 70svh at least.", + "seenIn": [ + "aww-hilden-kaira", + "opl-nia-creative", + "opl-april-leihuanani-evangelista", + "aww-mosbys-files" + ] + }, + { + "id": "features-mosaic-of-unlike-tiles", + "role": "features", + "name": "Mosaic of unlike tiles", + "shape": "mosaic", + "tags": [ + "dense", + "colour-field" + ], + "directions": [ + "dense-tiles", + "editorial-report", + "colour-chapters", + "specimen-catalogue", + "loud-flat-poster" + ], + "needs": [], + "blueprint": "A 12-column grid with 8px gaps and rows of 96px, filled with no empty cells and no outlines. Six to eight filled tiles in four sizes only: 6×5, 6×3, 3×3 and 3×2 (columns × rows). The rule that keeps it from being a card grid: no two neighbouring tiles hold the same kind of thing. One tile is the heading alone, two to four words at 4vw, top-left. One is a photograph covering its tile. One is a single figure at 6vw with a caption. One is a short list of four lines at 20px. The others are a single sentence each at 28–32px. Text sits top-left with 24px padding; tiles holding one sentence leave their lower half empty. Tile fills: the ground one tone darker, two palette colours, and photographs. One corner radius everywhere, either 0 or 8px.", + "mobile": "Two columns with 6px gaps. The heading tile and the photograph tile span both columns; sentence tiles span both at their natural height; the figure and list tiles sit side by side as a pair of squares. Order: heading, photograph, pair, sentence, sentence.", + "seenIn": [ + "opl-sand-studio", + "opl-builders-table", + "aww-cominvi", + "opl-uglycash" + ] + }, + { + "id": "features-statement-cell-dark-rows", + "role": "features", + "name": "Statement cell, dark rows", + "shape": "split", + "tags": [ + "type-led", + "dense" + ], + "directions": [ + "dense-tiles", + "editorial-report", + "type-only-statement", + "borrowed-category" + ], + "needs": [], + "blueprint": "Two halves butted together, each 50vw wide and at least 90svh tall, with no gap. Left half, in a pale tone: the heading in three short lines at clamp(36px, 4.2vw, 68px), its middle line pushed flush right while the first and third stay flush left (text-align set per line), so the block zigzags inside the cell. A two-sentence paragraph of 30ch sits at the bottom-left and the single action at the bottom-right on the same baseline. Right half, in the darkest tone: four or five rows of equal height filling it, told apart by alternating two near-black tones, not by lines. Each row is a three-part grid: a title at 28px (5 parts), a short paragraph at 16px (4 parts) and a plain list of three terms at 15px (3 parts), all top-aligned with 28px padding. No images anywhere in the section.", + "mobile": "The halves stack. The light cell comes first at 70svh with the zigzag heading at 10vw and the paragraph at its foot. The dark rows follow at full width; each row stacks its title and paragraph, and its three terms run inline as one sentence separated by commas. Rows keep the alternating tones.", + "seenIn": [ + "aww-aspen-search" + ] + }, + { + "id": "features-staggered-fragment-cells", + "role": "features", + "name": "Staggered fragment cells", + "shape": "grid", + "tags": [ + "ui-led", + "dense" + ], + "directions": [ + "product-performs", + "dense-tiles", + "quiet-instrument" + ], + "needs": [ + "product-ui" + ], + "blueprint": "A three-column grid of six filled cells with 8px gaps, each cell 420–460px tall and filled one tone off the ground, no outlines. Every cell has two parts: a text part (a title at 17px medium and three lines at 15px in the soft ink, 24px padding) and a real fragment of the interface at true size (a control, a menu, a table slice, a swatch strip) docked flush against the opposite edge of the cell and cropped by it. The stagger is the idea: across the first row cells run text-top, fragment-top, text-top; the second row runs the reverse, so fragments form a checkerboard. Fragments differ in shape and size on purpose. The heading, two to four words at 32–40px, sits left-aligned above the grid with 56px beneath it and no supporting line.", + "mobile": "One column of cells at their natural height with 6px gaps. Every cell runs text first, fragment second, but fragments alternate between docking to the left edge and the right edge, and they are allowed to run off the side of the cell at true size instead of shrinking.", + "seenIn": [ + "opl-dabbit", + "opl-woblo" + ] + }, + { + "id": "features-small-proof-beside-text", + "role": "features", + "name": "Small proof beside text", + "shape": "list", + "tags": [ + "quiet", + "ui-led" + ], + "directions": [ + "quiet-instrument", + "product-performs", + "split-stage", + "name-as-monument", + "contact-sheet" + ], + "needs": [], + "blueprint": "One narrow module repeated four to six times down the page, never alternating sides. Each module is 640px wide at most and starts on the page's text margin (at about 22% of the viewport on an understated page). Left part: a flat panel 360px wide and 120 to 200px tall, one tone off the ground, radius 8px, holding one small exact demonstration: a cropped interface fragment at true size, or a tightly cropped photograph covering the panel. Right part, 20px away and top-aligned: a heading of one or two lines at 18px medium and two short paragraphs at 15px in the soft ink, in a column 250px wide. Panel heights vary with their content; text always hangs from the panel's top edge. 96–120px of empty ground between modules. The section heading is 24–28px, on the same left edge, 64px above the first module. In a column under 600px the text moves beneath its panel.", + "mobile": "Each module stacks: the panel at full width and natural height, then heading and paragraphs 16px below on the same left edge, at 17px and 15px. 64px between modules. Panels keep their true-size contents and crop from the right instead of scaling down.", + "seenIn": [ + "opl-rows" + ] + }, + { + "id": "features-comparison-set-as-text", + "role": "features", + "name": "Comparison set as text", + "shape": "table", + "tags": [ + "type-led", + "quiet" + ], + "directions": [ + "type-only-statement", + "editorial-report", + "product-performs", + "quiet-instrument", + "borrowed-category" + ], + "needs": [], + "blueprint": "A comparison table with no lines and no tick marks. A CSS grid: capability names in columns 1–5 of 12 at 22–24px medium, then three answer columns of equal width (plans, methods, or this against the usual way). Every cell answers in words at 17px: 'Yes, unlimited', 'Up to five', 'Not yet', never a symbol. Seven to ten rows, each 64–72px tall, with every other row on a ground one tone darker so the eye tracks across; rows touch. The column that matters is one filled block in the accent or ink colour running the full height of the table behind its cells and rising 24px above the first row, with its text reversed. Column names sit in the top row at 17px bold. The heading, two to four words at 40–48px, hangs top-left above column 1 with 48px beneath.", + "mobile": "The table turns on its side: one block per capability. The name at 20px bold, then three lines beneath, each giving a column name and its answer at 16px; the featured column's line is set on the filled colour at full width. Blocks alternate the two ground tones.", + "seenIn": [ + "aww-pp-neue-montreal" + ] + }, + { + "id": "features-one-size-name-columns", + "role": "features", + "name": "One-size name columns", + "shape": "index", + "tags": [ + "quiet", + "type-led", + "dense" + ], + "directions": [ + "contact-sheet", + "quiet-instrument", + "name-as-monument", + "dark-room", + "uneven-photographs" + ], + "needs": [], + "blueprint": "Pure text at one size. Three columns start on columns 1, 4 and 7 of the 12-column grid, leaving columns 10–12 empty on purpose. Each column opens with a group name in full ink and continues with a tight stack of six to ten capability names in the soft ink, all at 16–17px, regular weight, line-height 1.25, no bullets and no symbols; one blank line separates group name from stack. Hovering a name brings it to full ink and shows a one-line description in a fixed spot: the top of the empty columns 10–12, at the same size. The heading is no larger than 28px; two or three words, alone on column 1, 96px above the columns. Give the section 20vh of empty ground above and below, so the smallness reads as decided. Works on light or deep grounds.", + "mobile": "Columns stack with 40px between groups; text rises to 18px with line-height 1.4 for touch. Group names stay in full ink. Hover descriptions are dropped; each group ends instead with one sentence in the soft ink that sums it up. The heading is 24px, 48px above.", + "seenIn": [ + "aww-revelatio-studio", + "aww-pp-neue-montreal", + "aww-lama-lama-2" + ] + }, + { + "id": "features-specimens-on-colour-tiles", + "role": "features", + "name": "Specimens on colour tiles", + "shape": "grid", + "tags": [ + "object-led", + "colour-field" + ], + "directions": [ + "specimen-catalogue", + "hero-object", + "one-motif", + "colour-chapters", + "borrowed-category" + ], + "needs": [], + "blueprint": "Each capability is represented by one object photographed alone and shown on a flat colour tile. Columns 1–3 hold the heading (two to four words at 40–52px), top-aligned, with a 30ch sentence beneath and nothing else down the rest of that column. Columns 4–12 hold a grid of five or six tiles in two rows with 10px gaps: tiles are 4:5 except one, which is double width at 8:5 and placed second in the first row. Tile colours rotate through three palette fields. Each photograph is centred at about 70% of its tile's height; on light tiles use mix-blend-mode: multiply so a white studio background disappears. Under each tile, outside it and aligned to its left edge: the capability name at 20px medium and one fact at 16px in the soft ink. No text on the tiles and no hover lift.", + "mobile": "The heading and its sentence sit on top at full width. Tiles become a two-column grid with 8px gaps; the double tile spans both columns at 8:5 and comes first. Names shrink to 17px and facts to 15px, still under each tile.", + "seenIn": [ + "aww-noho", + "aww-coffeetech-r", + "opl-when-you-wish-upon-a-starboy" + ] + }, + { + "id": "features-statements-on-colour-fields", + "role": "features", + "name": "Statements on colour fields", + "shape": "statement", + "tags": [ + "colour-field", + "poster", + "type-led" + ], + "directions": [ + "colour-chapters", + "loud-flat-poster", + "type-only-statement", + "sentence-as-layout", + "borrowed-category" + ], + "needs": [], + "blueprint": "Three or four full-bleed flat colour fields, each 72–80svh tall, butted together with no gap. Each field holds one benefit and is almost empty. The benefit is a phrase of two to four words at clamp(56px, 9vw, 150px), heavy, leading 0.9, on two lines at most, hugging the bottom-left corner with 28px margins. Its explanation is three lines at 17–18px, 30ch wide, placed near the top at column 8, so the eye travels the diagonal from small text to big phrase. On alternate fields the arrangement mirrors: phrase bottom-right and right-aligned, paragraph top-left at column 2. Text on each field is ink or paper, whichever contrasts more. There is no separate section heading: the first field's phrase is the heading. Nothing else appears on the fields: no images, shapes or buttons.", + "mobile": "Fields are 64svh tall. The paragraph sits top-left at 16px across 80% of the width; the phrase sits bottom-left at 13vw on two lines. Mirroring is dropped; alternate fields right-align the paragraph only, keeping the phrase on the left margin.", + "seenIn": [ + "opl-anidachi", + "aww-px-push" + ] + }, + { + "id": "features-rows-with-margin-photographs", + "role": "features", + "name": "Rows with margin photographs", + "shape": "list", + "tags": [ + "type-led", + "photo-led" + ], + "directions": [ + "editorial-report", + "uneven-photographs", + "place-carries-it", + "sentence-as-layout", + "colour-chapters" + ], + "needs": [], + "blueprint": "Everything hangs from one vertical axis at column 5, about 35% of the width. First the heading: a statement of up to five words at clamp(40px, 5vw, 80px) starting on the axis, vertically centred in an otherwise empty 70svh of ground. Then four or five benefit rows, each starting on the same axis: a title at clamp(28px, 3vw, 48px) and under it a paragraph of 34ch at 17px. Columns 1–4 stay empty. At the right margin each row carries one photograph, top-aligned with its title and deliberately unequal: 240px wide at 4:5 in one row, 320px at 3:2 in the next, 180px square after that. Rows are separated by 96–120px of space, not lines. On a saturated field, set all type in one pale ink and leave the photographs ungraded.", + "mobile": "The axis collapses to the left margin. The statement sits at 9vw in 50svh of empty ground. Each row stacks its title at 26px, the paragraph, then its photograph at alternating widths: 100%, 70% flush right, 55% flush left. 64px between rows.", + "seenIn": [ + "aww-px-push" + ] + }, + { + "id": "features-paragraph-with-picture-words", + "role": "features", + "name": "Paragraph with picture words", + "shape": "statement", + "tags": [ + "type-led", + "poster" + ], + "directions": [ + "sentence-as-layout", + "one-motif", + "product-performs", + "editorial-report", + "borrowed-category" + ], + "needs": [], + "blueprint": "One paragraph does the work of a feature grid. Three or four sentences, 35–50 words in total, set at clamp(30px, 3.6vw, 60px), leading 1.18, medium weight, across columns 1–11, left-aligned. Each sentence names one capability, and directly after that capability's key noun sits an inline slot: an inline-block frame 1em tall and 1.9em wide, radius 0.18em, dropped 0.12em below the baseline, holding a tight photograph crop (object-fit: cover) or a real interface control at readable size. Four slots at most, never two on one line. The nouns keep the weight and colour of the rest; the slots are the only emphasis. Mark it up as a paragraph and give the section a visually hidden heading of two or three words; nothing visible sits above. 72px lower, starting at column 7, one supporting sentence at 18px and the action.", + "mobile": "The paragraph drops to 7vw with leading 1.22 and fills the width. Slots stay inline at 1em tall but narrow to 1.5em wide. If a slot lands alone at the start of a line, let it; do not shrink the type. The supporting sentence and the action follow at full width.", + "seenIn": [ + "aww-monolog", + "opl-uncle-rudy", + "aww-cominvi", + "opl-midnight-2" + ] + }, + { + "id": "features-capabilities-as-a-menu", + "role": "features", + "name": "Capabilities as a menu", + "shape": "table", + "tags": [ + "object-led", + "type-led" + ], + "directions": [ + "page-is-the-object", + "split-stage", + "borrowed-category", + "type-only-statement", + "quiet-instrument" + ], + "needs": [], + "blueprint": "The capabilities are set as a printed menu or price list. One paper-coloured sheet, 520–600px wide and taller than it is wide, sits on a contrasting flat ground, centred or starting at column 2; its top and bottom edges are cut into shallow scallops or a zigzag with clip-path, its sides straight. On it, centred at the top, the heading: two or three words at 44–56px, then 40px of space. Below, items in two or three groups; each group opens with its name at 20px bold. Each item is a row: the name at 19px on the left, a short value on the right (a price, a time, a quantity, 'included'), and between them a leader of round 4px dots (border-bottom: 4px dotted, sitting on the baseline). A description at 15px in the soft ink sits under the name, at most 34ch. 18px between items, 44px between groups.", + "mobile": "The sheet fills the width minus 12px margins and keeps its cut top and bottom edges. Names stay left and values right on one line with the dot leader between; descriptions wrap beneath at 15px. Group names drop to 18px. Padding inside the sheet is 20px.", + "seenIn": [ + "opl-the-content-architecture", + "aww-pensatori-irrazionali" + ] + }, + { + "id": "features-shape-marked-small-points", + "role": "features", + "name": "Shape-marked small points", + "shape": "split", + "tags": [ + "object-led", + "quiet" + ], + "directions": [ + "one-motif", + "hero-object", + "product-performs", + "borrowed-category" + ], + "needs": [], + "blueprint": "For the many minor points that do not deserve a row each. Columns 1–5: one photograph inside a single large shape taken from the subject's own geometry (a circle, an arch, a chamfered block), made with clip-path or border-radius, about 78svh tall and pushed 12% past the section's left edge so the viewport crops it. Columns 7–12: the heading, two to four words at 40–48px, then 56px lower a grid of eight to twelve points in three columns with 40px column gaps and 44px row gaps, no cells and no fills. Each point is a title at 17px medium preceded by the same shape drawn at cap height (0.7em, flat fill, inline SVG or a styled span), then two lines at 15px in the soft ink. The small shapes take a different palette colour per column, which is the only colour on the right side.", + "mobile": "The shaped photograph comes first, 82vw wide, cropped by the left edge and no taller than 60svh. The heading follows at 30px. Points become one column with 28px between them; the small shape hangs in the margin to the left of each title, so titles and text share one edge.", + "seenIn": [ + "opl-dabbit", + "aww-sstr-friction-reduction" + ] + }, + { + "id": "showcase-two-giant-words-compared", + "role": "showcase", + "name": "Two giant words compared", + "shape": "statement", + "tags": [ + "type-led", + "poster" + ], + "directions": [ + "type-only-statement", + "editorial-report", + "loud-flat-poster", + "borrowed-category" + ], + "needs": [], + "blueprint": "No photographs: the thing shown is a pair of words, characters or figures that make the point by comparison (before and after, input and output, ours and the usual). At the top of the section, on one row: the heading, two to four words at 28–36px, at the left margin, and a paragraph of up to 60 words at 17px starting at column 7. Then 12vh of space. Below, two specimens side by side, one starting on column 1 and one on column 7, each set at clamp(180px, 34vw, 520px) with leading 0.8, so each fills about half the viewport's width. The section has a fixed height and overflow: hidden, so its bottom edge cuts both specimens at roughly 60% of their height. One short caption at 16px sits above the top-left of each specimen, naming it. Both specimens share one ink; the difference is in the letterforms or values, not in colour.", + "mobile": "Heading first, then the paragraph, at full width. The two specimens stack, each at 62vw type size in its own 38svh box with overflow hidden so the lower part is cut. Captions sit above each box at 15px. The second box takes the inverse colours of the first.", + "seenIn": [ + "aww-pp-neue-montreal" + ] + }, + { + "id": "showcase-two-objects-two-fields", + "role": "showcase", + "name": "Two objects, two fields", + "shape": "split", + "tags": [ + "object-led", + "colour-field" + ], + "directions": [ + "specimen-catalogue", + "hero-object", + "colour-chapters", + "borrowed-category" + ], + "needs": [], + "blueprint": "Two panels side by side, each 50vw wide and 92svh tall, in two different flat tones from the palette, meeting on a clean vertical edge with no gap. Each panel is dominated by one cut-out object photograph scaled to 130–150% of the panel's width and positioned so the panel's top edge crops it: the reader sees the lower two-thirds of the object, very close. On light panels use mix-blend-mode: multiply to lose a white studio background. Along the bottom of each panel, 28px in from the edges, one row: the name at 20px medium and a price or fact at 17px on the left; on the right, two small rectangular actions, one filled with ink and one with paper. Nothing sits in the middle of a panel. The heading, two to four words at 32–40px, is set at the top-left of the first panel only, in the empty corner beside the object.", + "mobile": "Panels stack, each 78svh tall, the object scaled to 150% of the width and cut by the top and right edges. The bottom row becomes two lines: name and fact, then the two actions side by side at full width. The heading sits top-left on the first panel at 26px.", + "seenIn": [ + "aww-noho" + ] + }, + { + "id": "showcase-object-in-front-of-type", + "role": "showcase", + "name": "Object in front of type", + "shape": "statement", + "tags": [ + "object-led", + "poster" + ], + "directions": [ + "hero-object", + "borrowed-category", + "loud-flat-poster", + "sentence-as-layout" + ], + "needs": [], + "blueprint": "Type and object share one space instead of sitting side by side. Three or four lines of display type, one or two words each, are stacked flush left at clamp(72px, 9vw, 150px) with leading 0.88, starting on the left margin and allowed to leave the right edge (white-space: nowrap; overflow: hidden on the section). The lines step through tones of one ink: one at 45%, one at full strength, the rest at 18%. The object photograph, a cut-out or a studio shot blended with multiply, is absolutely positioned over the upper right of the stack at 40–46vw wide, rotated no more than 6 degrees and above the type in the stacking order, so it hides parts of three or four letters. Under the stack, in columns 8–12, a two-paragraph block at 20px gives the facts. The full-strength line is the heading; nothing sits above it.", + "mobile": "Type drops to 15vw and still runs off the right edge. The object sits at 78vw wide, overlapping the last two lines from below instead of from the right, and is cropped by the right edge. The facts block follows at full width and 17px.", + "seenIn": [ + "aww-the-watch", + "opl-aevion", + "aww-coffeetech-r" + ] + }, + { + "id": "showcase-band-of-unequal-panels", + "role": "showcase", + "name": "Band of unequal panels", + "shape": "strip", + "tags": [ + "photo-led" + ], + "directions": [ + "place-carries-it", + "uneven-photographs", + "name-as-monument", + "editorial-report", + "dark-room" + ], + "needs": [], + "blueprint": "A modest heading, then one wide band of pictures. The heading, two to four words at 36–44px, starts at column 3, left of centre, with 64px beneath it. The band spans the full viewport width edge to edge and is 68svh tall: four photographs standing side by side with no gaps and deliberately unequal widths, a flex row with flex-grow values of 5, 2, 3 and 2. Each panel is cropped with object-fit: cover to a tall slice, so the band reads as one folded view. The first panel carries a two-line title at 28px in paper colour at its top-left, 24px in, over a neutral scrim that covers only that corner. Hovering a panel raises its flex-grow to 6 over 500ms while the others give way; without hover the widths simply stay. One caption line at 16px sits under the band at the left margin.", + "mobile": "The heading sits on the margin at 28px. The band becomes a two-by-two block with no gaps, 84svh tall in total: the first row split 64/36 and the second 36/64, so the slices stay unequal. The title stays on the first panel. No hover behaviour.", + "seenIn": [ + "aww-white-desert", + "aww-tengile-malamala-collection" + ] + }, + { + "id": "showcase-close-up-with-column-card", + "role": "showcase", + "name": "Close-up with column card", + "shape": "full-bleed", + "tags": [ + "photo-led", + "object-led" + ], + "directions": [ + "hero-object", + "place-carries-it", + "dark-room", + "borrowed-category", + "pinned-poster" + ], + "needs": [], + "blueprint": "A full-bleed close-up photograph, 100vw by 100svh, with nothing over most of it. A four-column grid lies on top. One solid card in the ink colour, exactly one grid column wide (about 22vw) and 52svh tall, sits in the second column, vertically centred. Inside it, centred: the item's name at 30–36px, a variant line at 17px, the price or key fact at 17px, a small 3:2 photograph of the whole object (the card shows the whole, the background shows the detail), and at the foot a square-cornered action filling the card's width. The card is opaque, radius 0–6px, with no blur. When the section presents two or three items, each gets its own full-bleed frame and its card moves one column to the right each time, so position carries the sequence. The first card's name is the section heading.", + "mobile": "The photograph fills 100svh, cropped to its most detailed area. The card becomes a full-width block docked to the bottom, 46svh tall, left-aligned inside with 20px padding; the small whole-object photograph sits to the right of the name at 96px wide.", + "seenIn": [ + "aww-longbow" + ] + }, + { + "id": "showcase-live-demo-with-controls", + "role": "showcase", + "name": "Live demo with controls", + "shape": "split", + "tags": [ + "ui-led", + "quiet" + ], + "directions": [ + "product-performs", + "quiet-instrument", + "dense-tiles" + ], + "needs": [ + "product-ui" + ], + "blueprint": "One filled panel, 680–760px wide and about 640px tall, radius 12px, in a tone clearly darker or lighter than the ground, placed on the text column's left edge or centred, with at least 15vh of empty ground above and below. The panel is split 62/38 into two flat areas that differ by one tone. Left area: the product doing its job on real content at true size. Right area: a narrow column of working controls, six to nine stacked rows 44px tall, each with a name at 14px on the left and a slider, toggle or value on the right; changing one changes the demonstration at once. A text link sits in the panel's bottom-left corner. The heading, two to four words at 24–32px, sits above the panel on its left edge with one sentence at 16px; under the panel, one line of start instruction.", + "mobile": "The panel fills the width. The demonstration takes the top at 4:3; the controls follow beneath as full-width rows 52px tall, only the four most telling ones, with a text link that reveals the rest. Heading and sentence sit above at 24px and 16px.", + "seenIn": [ + "opl-dialkit", + "opl-textmode-overlay" + ] + }, + { + "id": "showcase-one-frame-three-distances", + "role": "showcase", + "name": "One frame, three distances", + "shape": "pinned", + "tags": [ + "photo-led", + "poster" + ], + "directions": [ + "pinned-poster", + "hero-object", + "dark-room", + "sentence-as-layout", + "place-carries-it" + ], + "needs": [], + "blueprint": "A wrapper 300vh tall holds a sticky stage of 100svh. On the stage one frame is centred: 30vw wide at 4:5, square corners, overflow hidden. Inside it the same photograph is shown at three distances as the reader scrolls: the whole subject, then scaled to 180% toward one detail, then to 320% on a second detail (transform: scale with a transform-origin per stage, 700ms ease, switched by IntersectionObserver on three invisible markers). The sentence is delivered in halves: its first two or three words sit above the frame at clamp(56px, 8vw, 130px), centred; the last words arrive below the frame at the second stage, overlapping the frame's bottom edge by 0.3em. At the third stage one caption of 28ch at 17px appears to the right of the frame, top-aligned. The two halves together are the heading and stay within two lines.", + "mobile": "The frame grows to 70vw at 4:5 and stays sticky at centre. The first half of the sentence sits above it at 13vw, the second half below it at the same size. The third-stage caption appears under the sentence at 16px, centred.", + "seenIn": [ + "aww-vero-new-york", + "aww-illoca", + "opl-screentune" + ] + }, + { + "id": "showcase-one-image-across-tiles", + "role": "showcase", + "name": "One image across tiles", + "shape": "mosaic", + "tags": [ + "photo-led", + "dense" + ], + "directions": [ + "dense-tiles", + "contact-sheet", + "editorial-report", + "colour-chapters" + ], + "needs": [], + "blueprint": "One photograph is cut across a board of tiles. A grid of six columns and four rows with 8px gaps spans the full width between 12px margins; every tile is square (aspect-ratio: 1). Each tile shows its own piece of the same image: set the photograph as every tile's background at background-size: 600% 400% and step background-position by column and row, so the picture reads whole through the gaps. Five of the twenty-four tiles are swapped for flat colour tiles from the palette, never two adjacent: one holds the heading (two to four words at 2.6vw, top-left, 16px padding), three hold one fact each at 18px, one holds the action. On hover a tile's piece scales to 108% inside its own clip. Choose a photograph with one clear subject, so the board is legible at a glance.", + "mobile": "Three columns by six rows with 6px gaps, the photograph re-cut at background-size 300% 600% from a portrait crop. Four colour tiles only; the heading tile spans two columns in the top row with the heading at 6vw. Facts drop to 15px.", + "seenIn": [ + "aww-produx-design", + "aww-ai-in-design-report-2026" + ] + }, + { + "id": "showcase-frame-run-one-lifted", + "role": "showcase", + "name": "Frame run, one lifted", + "shape": "strip", + "tags": [ + "photo-led", + "quiet" + ], + "directions": [ + "contact-sheet", + "uneven-photographs", + "specimen-catalogue", + "quiet-instrument" + ], + "needs": [], + "blueprint": "Columns 1–3 are a nearly empty column: the heading (two to four words at 24–28px) at the top, a link under it, and one or two short notes at 15px much further down, each level with the frame it describes. Columns 4–12 hold a run of six to eight frames of the same subject at one fixed height of 30vh, with natural widths and 6px gaps: the whole view, a tight crop of the same thing, a detail, the reverse side. The run is allowed to leave the right edge. One frame is lifted out of the row: shown at 2.2 times the row height with its bottom aligned to the row's bottom (flex row, align-items: end), so it stands above the others. Under each frame, at 15px: a name on the left and a single fact on the right. Square corners, no captions on the images.", + "mobile": "The heading and link sit on top. The lifted frame comes first at full width. The rest of the run scrolls sideways beneath it at a fixed height of 34vw with 4px gaps and scroll-snap, bleeding off the right edge. Notes are listed under the run at 15px.", + "seenIn": [ + "aww-serotoninn", + "aww-butter", + "aww-no-art" + ] + }, + { + "id": "showcase-output-slips-along-the-edge", + "role": "showcase", + "name": "Output slips along the edge", + "shape": "full-bleed", + "tags": [ + "photo-led", + "object-led" + ], + "directions": [ + "page-is-the-object", + "borrowed-category", + "place-carries-it", + "loud-flat-poster" + ], + "needs": [], + "blueprint": "For subjects whose result is a piece of text or paper: a receipt, a note, a ticket, a written line. A full-bleed photograph, 100vw by 96svh, sets the scene. In the upper centre, left-aligned in a column starting at 18% of the width, two short paragraphs in paper colour at 28–32px, the first opening with the heading's two to four words; a neutral scrim sits behind that column only. Along the bottom, six paper-coloured slips stand side by side across the full width with 12px gaps, each a filled rectangle of a different height (between 26 and 44svh), their lower ends cut off by the section's bottom edge. Two or three of the slips, not all, are tilted by 1–2 degrees. Each slip carries a sample of real output in the text face at 15px: a bold first line, a divider made of typed characters, then four to eight lines.", + "mobile": "The photograph is 100svh. The paragraphs sit in the top third at 22px. Only three slips show, each 30vw wide, standing along the bottom at different heights, and the row scrolls sideways to reveal the rest. Slip text stays at 14px; do not scale it down.", + "seenIn": [ + "opl-poetry-camera" + ] + }, + { + "id": "showcase-object-on-a-disc", + "role": "showcase", + "name": "Object on a disc", + "shape": "index", + "tags": [ + "object-led", + "colour-field" + ], + "directions": [ + "one-motif", + "specimen-catalogue", + "hero-object", + "colour-chapters" + ], + "needs": [], + "blueprint": "One section about a viewport tall on a plain ground. A flat filled disc 64vh across, in one palette colour, sits with its centre at 58% of the width; swap the disc for the subject's own shape if it has one. A cut-out object photograph stands in front of it, centred on it, about 78% of the disc's height and breaking the disc's outline at the top. Bottom-left, starting on the margin and ending level with the disc's lower edge: a vertical list of four to six item names at clamp(28px, 2.9vw, 44px), leading 1.15. The selected name is in full ink and the rest at 25%; choosing a name swaps the object (300ms crossfade) and the disc's colour. The heading, two to four words at the same size as the names but in the soft ink, is the first line of that list. One fact about the selected item sits at the disc's right edge at 17px.", + "mobile": "The disc comes first, 86vw across and centred, with the object in front. The names follow as a single sideways-scrolling line at 26px with 24px gaps, the selected one in full ink. The fact sits under the names at 16px.", + "seenIn": [ + "aww-cominvi", + "opl-tara" + ] + }, + { + "id": "showcase-square-plate-spare-text", + "role": "showcase", + "name": "Square plate, spare text", + "shape": "split", + "tags": [ + "colour-field", + "photo-led" + ], + "directions": [ + "split-stage", + "page-is-the-object", + "colour-chapters", + "editorial-report", + "one-motif", + "name-as-monument" + ], + "needs": [], + "blueprint": "One flat field split 50/50, at least 88svh tall. Left half: a single square photograph filling the half's width minus 40px margins, vertically centred, square corners. A large simple shape may be laid over it to turn the photograph into the object it stands for: a ring 86% of its width with a 6px stroke and a small solid dot at the centre makes a record; a notch cut by clip-path makes a ticket stub. Right half, a flex column with space-between: at the top a row of three plain text tabs at 18px (editions, years, variants), the active one in full ink and the others at 40%; in the middle the title, two to four words at 32–40px bold, with a 34ch description 48px below; along the bottom two filled rectangular cells side by side, each half the column wide and 72px tall, acting as the two actions, one in ink and one a tone off the field.", + "mobile": "The square photograph comes first at full width with 16px margins. The tabs sit under it as one row at 17px. Then the title at 28px, the description, and the two action cells stacked, each full width and 60px tall.", + "seenIn": [ + "aww-paul-kalkbrenner" + ] + }, + { + "id": "how-it-works-lines-that-step-across", + "role": "how-it-works", + "name": "Lines that step across", + "shape": "statement", + "tags": [ + "type-led", + "poster" + ], + "directions": [ + "type-only-statement", + "sentence-as-layout", + "loud-flat-poster", + "editorial-report", + "borrowed-category" + ], + "needs": [], + "blueprint": "The sequence is written, not counted. Four lines of display type, one stage per line, each a complete short clause that begins with its order word: 'First you send it.' 'Then we take it apart.' 'You choose one.' 'It ships on Friday.' Set at clamp(36px, 4.6vw, 76px), leading 1.0, one line each. The first line starts on column 1 and each following line starts two columns further right (grid-column-start 1, 3, 5, 7), so the block descends as a staircase and the eye follows the diagonal. Under each line, on that line's own left edge and 12px below, a sentence of up to 34ch at 17px in the soft ink. 56px between stages. The last line may take the accent colour as the single emphasis. The first line serves as the heading; there is no title above. Leave the columns to the left of the final stage empty.", + "mobile": "Lines drop to 8.4vw and may wrap onto a second line. The staircase becomes a smaller indent of 6vw per stage, so the fourth line starts 18vw in. Each sentence sits under its line at 16px on the same indent. 40px between stages.", + "seenIn": [ + "opl-rendez-vous-franceclat" + ] + }, + { + "id": "how-it-works-photographs-down-a-diagonal", + "role": "how-it-works", + "name": "Photographs down a diagonal", + "shape": "stack", + "tags": [ + "photo-led", + "quiet" + ], + "directions": [ + "uneven-photographs", + "place-carries-it", + "dark-room" + ], + "needs": [], + "blueprint": "Three stages, three photographs of different sizes placed along a falling diagonal on the 12-column grid. Stage one: a 3:4 portrait in columns 1–4. Stage two: a 1:1 square in columns 6–8, its top edge 220px lower than the first photograph's top. Stage three: a 16:10 landscape in columns 8–12, starting 180px below the bottom of the second. Each stage's text sits in the gap the stagger leaves: a paragraph of up to 36ch at 17px, top-aligned with its photograph and placed in the columns to its right (to its left for the third). Each paragraph opens with a bold run-in phrase that carries the order: 'On the first day', 'A week later', 'By the end'. Square corners; no arrows or connecting marks. The heading, two to four words at clamp(36px, 4vw, 64px) in a light weight, sits alone in columns 7–12 at the very top, level with the first photograph's top edge.", + "mobile": "The diagonal becomes alternating widths: the first photograph at 100%, the second at 62% flush right, the third at 78% flush left. Each paragraph follows its photograph on that photograph's left edge at 16px. 56px between stages. The heading sits above at 30px.", + "seenIn": [ + "opl-fynza", + "opl-the-queue" + ] + }, + { + "id": "how-it-works-drag-row-of-moments", + "role": "how-it-works", + "name": "Drag row of moments", + "shape": "carousel", + "tags": [ + "photo-led" + ], + "directions": [ + "contact-sheet", + "place-carries-it", + "uneven-photographs", + "page-is-the-object", + "dark-room" + ], + "needs": [], + "blueprint": "A story told left to right. Top row: the heading, two to four words at 28–36px, at the left margin; at the right margin two solid square buttons, 48px each, for back and forward. Directly beneath, a solid bar 6px tall spans the full width in a soft tone, with a full-ink segment showing how far the row has been scrolled. Then the row itself: six to nine columns, each 280px wide with 32px gaps, in a horizontally scrolling flex container with scroll-snap that bleeds off both viewport edges. Every column reads top to bottom: a one-line caption at 18px bold that carries the order in words ('We met', 'Two winters on', 'The move'), three lines at 15px in the soft ink, then 80–140px of empty space that varies per column, then a 4:5 portrait photograph. Because the spaces vary, the photographs' top edges rise and fall along the row.", + "mobile": "Columns are 72vw wide with 16px gaps, so the next one always shows at the right edge. The buttons are dropped; the 6px progress bar stays under the heading. The empty space inside columns shrinks to 32–64px but still varies from column to column.", + "seenIn": [ + "opl-sarah-matt-wedding", + "aww-no-art" + ] + }, + { + "id": "how-it-works-pinned-fragment-changing-state", + "role": "how-it-works", + "name": "Pinned fragment, changing state", + "shape": "pinned", + "tags": [ + "ui-led", + "quiet" + ], + "directions": [ + "product-performs", + "quiet-instrument", + "split-stage", + "pinned-poster" + ], + "needs": [ + "product-ui" + ], + "blueprint": "Two columns. Right, columns 7–12: a stage that is position: sticky; top: 14vh, holding one fragment of the real interface at true size on a single flat stage colour, about 520px square. Left, columns 1–5: three statements, each in its own block 80vh tall, so one is in view at a time. A statement is a two-line sentence at 28–32px that begins with its order word ('Paste a link.', 'Then pick the parts you want.', 'Share it when it looks right.') plus one supporting line at 16px. The statement nearest the viewport's centre is in full ink; the others sit at 30%. As each statement becomes active the fragment changes to the matching state: an empty field, a filled list with two rows selected, a finished result with its confirmation. Build the states in HTML and switch a class; do not swap screenshots. The heading, two to four words at 24–28px, sits above the first statement.", + "mobile": "The stage is sticky at the top, 46svh tall, the fragment fitted by cropping to its active region, not by shrinking its text. Statements scroll beneath it in blocks 60svh tall at 22px. The stage releases after the third statement.", + "seenIn": [ + "opl-juggle", + "aww-cerebrium", + "opl-vessa" + ] + }, + { + "id": "how-it-works-itinerary-on-a-slip", + "role": "how-it-works", + "name": "Itinerary on a slip", + "shape": "table", + "tags": [ + "object-led", + "type-led" + ], + "directions": [ + "page-is-the-object", + "type-only-statement", + "split-stage", + "quiet-instrument", + "borrowed-category" + ], + "needs": [], + "blueprint": "The process is printed as an itinerary or receipt. One paper-coloured slip 420–480px wide stands on a contrasting flat ground at columns 7–11; its bottom edge is a zigzag cut with clip-path and its top edge is straight. The heading, two to four words at clamp(40px, 4.4vw, 68px), sits in columns 1–5 with a 30ch paragraph, top-aligned with the slip. On the slip, in the text face at 16px with tabular figures: stages grouped under time headings that carry the order ('Monday', 'Midweek', 'Friday'), each heading in bold with 28px above it. Under a heading, two to four rows; each row has what happens on the left, a duration or time on the right, and a leader of round 4px dots between. The final row is inverted, paper-coloured text on a full-width ink bar 44px tall, and states the result: what the reader holds at the end and the total time.", + "mobile": "The heading and paragraph come first. The slip follows at full width minus 16px margins, keeping its zigzag bottom edge. Rows keep left text, dots and right value on one line; long descriptions wrap under the left text. The inverted final row stays full width.", + "seenIn": [ + "opl-the-content-architecture", + "opl-lennys-newsletter-product-pass" + ] + }, + { + "id": "how-it-works-accordion-of-tinted-panels", + "role": "how-it-works", + "name": "Accordion of tinted panels", + "shape": "strip", + "tags": [ + "colour-field", + "poster" + ], + "directions": [ + "colour-chapters", + "one-motif", + "loud-flat-poster", + "dense-tiles", + "borrowed-category" + ], + "needs": [], + "blueprint": "A two-column introduction, then one horizontal accordion. Introduction: the heading, two to four words at clamp(36px, 4vw, 60px), in columns 1–5; one paragraph at 18px in columns 7–11. 64px below, a flex row across columns 1–12, 520px tall, of four to six panels with no gaps. The open stage is a panel taking about 58% of the width; the rest are vertical slivers sharing what remains. Order is carried by colour: the first stage is the darkest tone of one hue and each later stage is a lighter flat tint of it, so the row reads dark to light from left to right. A sliver shows only its stage name, rotated 90 degrees and reading upward, at 20px bold, anchored to its bottom-left. The open panel shows the name at 40px top-left, a 36ch paragraph at 18px bottom-left and, optionally, one photograph in its right half. Clicking a sliver opens it (flex-basis transition, 450ms).", + "mobile": "The accordion turns vertical: stages stack at full width as bars 64px tall in the same dark-to-light order, names set horizontally at 18px. The open stage expands to its content height with the paragraph at 17px. The first stage is open by default.", + "seenIn": [ + "aww-white-desert" + ] + }, + { + "id": "how-it-works-tiles-that-grow", + "role": "how-it-works", + "name": "Tiles that grow", + "shape": "grid", + "tags": [ + "object-led", + "colour-field" + ], + "directions": [ + "specimen-catalogue", + "hero-object", + "colour-chapters", + "one-motif", + "dense-tiles" + ], + "needs": [], + "blueprint": "Order is carried by size. Three flat colour tiles stand in one row, bottom-aligned (align-items: end) with 10px gaps, each larger than the one before: columns 1–3 at 30vh tall, columns 4–7 at 44vh, columns 8–12 at 60vh. Each tile holds one photograph of the subject at that stage (raw, in progress, finished), centred and scaled so the object grows from tile to tile; on light tiles mix-blend-mode: multiply removes a white studio background. One palette colour per tile. Text sits under the tiles, outside them, aligned to each tile's left edge: a stage name at 20px medium whose wording carries the order ('Picked', 'Pressed', 'Poured') and two lines at 16px in the soft ink. The heading, two to four words at 40–52px, occupies the empty ground above the two smaller tiles, top-aligned with the tallest tile. A fourth stage is possible with spans of 2, 3, 3 and 4 columns.", + "mobile": "Tiles stack in order and grow in height instead: 34vw, 46vw and 62vw tall, each at full width. The name and text sit under each tile at 18px and 16px. The heading comes first at 30px. 28px between stages.", + "seenIn": [ + "aww-aspen-search", + "aww-noho" + ] + }, + { + "id": "how-it-works-run-in-column", + "role": "how-it-works", + "name": "Run-in column", + "shape": "list", + "tags": [ + "quiet", + "type-led" + ], + "directions": [ + "quiet-instrument", + "name-as-monument", + "editorial-report", + "contact-sheet", + "split-stage", + "product-performs" + ], + "needs": [], + "blueprint": "The quietest sequence: one reading column and good typography. A single column 520–600px wide starts at about 30% of the viewport width (or sits on the page's text axis). The heading is a two-to-five-word question or statement at 28–32px, 48px above the first paragraph. Three to five paragraphs follow at 17–18px with line-height 1.6. Each opens with a bold run-in phrase in full ink that names its moment ('To begin,', 'Within a day,', 'After that,', 'From then on,') while the rest of the paragraph runs in the soft ink; there are no subheads, bullets or markers. After each paragraph, 20px lower, comes one small piece of evidence exactly as wide as the column: a cropped interface fragment, a photograph at 16:9, or a row of three small frames 96px tall. 72px separates stages. Nothing in the section is wider than the column, and the space to its left stays empty.", + "mobile": "The column fills the width between 20px margins. Type stays at 17px. Evidence pieces keep the column width; the row of three frames becomes a single sideways-scrolling row 88px tall. 56px between stages. The heading drops to 24px.", + "seenIn": [ + "opl-the-queue", + "opl-rows", + "opl-dialkit" + ] + }, + { + "id": "how-it-works-many-into-one", + "role": "how-it-works", + "name": "Many into one", + "shape": "band", + "tags": [ + "colour-field", + "dense" + ], + "directions": [ + "one-motif", + "dense-tiles", + "editorial-report", + "borrowed-category" + ], + "needs": [], + "blueprint": "A diagram drawn with one repeated shape instead of arrows. The heading (two to four words on two lines at clamp(36px, 4vw, 60px)) and a short paragraph at 17px sit in columns 1–4. Beneath, a wide inline SVG spans columns 1–12 at about 4.5:1. It is built from 120–160 small filled squares (or the page's own motif), each 10–14px. In the left third they are scattered loosely in two pale tones. In the middle third they are pulled into a tight horizontal ribbon three squares high. In the right third they fan out again into neat, evenly spaced rows in the accent colour. The eye reads disorder, compression, order, from left to right. Under the diagram, three text columns aligned to its thirds: a bold one-word name at 20px and two lines at 16px each; the words carry the sequence ('Gather', 'Reduce', 'Release'). No connecting marks.", + "mobile": "The diagram turns to run top to bottom: a 3:4 SVG with the scatter at the top, the ribbon as a vertical band in the middle and the ordered rows at the bottom. The three names and their text sit to its right in a 38vw column, each level with its zone.", + "seenIn": [ + "opl-wild-as", + "opl-shelf" + ] + }, + { + "id": "how-it-works-one-verb-at-a-time", + "role": "how-it-works", + "name": "One verb at a time", + "shape": "full-bleed", + "tags": [ + "photo-led", + "poster" + ], + "directions": [ + "pinned-poster", + "loud-flat-poster", + "dark-room", + "hero-object", + "sentence-as-layout", + "place-carries-it" + ], + "needs": [], + "blueprint": "Three to five full-bleed panels, each 100svh tall, stacked with no gap; each is one stage and holds one photograph covering it. In every panel a single word, the verb for that stage ('Cut', 'Fold', 'Stitch', 'Press'), is set at clamp(96px, 17vw, 300px), heavy and centred, inside a wrapper that is position: sticky; top: 50% and shifted up by half its own height. Because each word is sticky only within its own panel, it holds the centre of the screen while its photograph passes behind it, and is then pushed out by the next panel's verb. Use mix-blend-mode: difference in white, or one solid colour tested on every image. One sentence at 18px sits in the bottom-left corner of each panel over a neutral scrim limited to that corner. There is no separate heading: the verbs, read in order, are both the heading and the sequence.", + "mobile": "Panels stay 100svh, each photograph cropped to a vertical slice. The verb is 24vw, still sticky at the centre. The sentence sits along the bottom over a scrim at 16px, full width with 16px margins.", + "seenIn": [ + "opl-eagles-nest", + "aww-seasats", + "aww-vero-new-york" + ] + }, + { + "id": "stats-one-figure-owns-the-screen", + "role": "stats", + "name": "One figure owns the screen", + "shape": "statement", + "tags": [ + "type-led", + "poster" + ], + "directions": [ + "type-only-statement", + "editorial-report", + "colour-chapters", + "loud-flat-poster", + "borrowed-category", + "pinned-poster" + ], + "needs": [], + "blueprint": "One number, one screen. A flat field at least 90svh tall. At the top-left, starting on the page's main axis, a one-line claim of two to five words at 36–44px: this is the heading. Then a long gap of 22–28vh. At the bottom-left on the same edge, a single figure at clamp(180px, 23vw, 380px), leading 0.8, tight tracking, with its unit (a percent sign, 'x', 'hrs') set as a superscript one third of the figure's size and aligned to the figure's cap height. Directly beneath, flush with the figure's left edge, a caption of three lines at 16–17px, 32ch wide, saying exactly what was measured and when. The right half of the field stays empty; resist filling it. The figure is static text in lining numerals and does not animate. A source line, if needed, sits at the bottom-right at 15px.", + "mobile": "The claim sits at the top at 28px. The figure is 46vw, flush left, with its superscript unit; if it has four characters or more, drop it to 34vw so it stays on one line. The caption follows at 16px across 80% of the width. Minimum height 80svh.", + "seenIn": [ + "opl-the-state-of-software-delivery-in-health", + "opl-the-content-architecture" + ] + }, + { + "id": "stats-figures-inside-a-sentence", + "role": "stats", + "name": "Figures inside a sentence", + "shape": "statement", + "tags": [ + "type-led", + "quiet" + ], + "directions": [ + "sentence-as-layout", + "type-only-statement", + "dark-room", + "editorial-report" + ], + "needs": [], + "blueprint": "The numbers are written into prose and the prose is set at display size. One paragraph of two or three sentences, 22–34 words, containing three or four true figures, in the pattern 'Since 2014 we have rebuilt 340 roofs in 9 towns, and 312 of them have never leaked.' Set at clamp(32px, 4.4vw, 72px), leading 1.12, in columns 2–11, left-aligned and vertically centred in a section of 80–90svh with nothing else in it. Words are in the soft ink at regular weight; the figures alone are in full ink (or the accent) at the same size, in lining numerals, with non-breaking spaces binding each figure to its unit. No boxes, underlines or colour chips behind the figures. A visually hidden two-word heading names the section for structure; to the eye the paragraph stands alone. On a deep ground use a light weight and a soft light ink, with the figures in the brightest ink.", + "mobile": "The paragraph is 7.4vw with leading 1.2, at full width between 20px margins, vertically centred in 70svh. Keep each figure and its unit together on one line with non-breaking spaces. Nothing else appears in the section.", + "seenIn": [ + "aww-made-with-gsap-1", + "aww-united-carriers" + ] + }, + { + "id": "stats-column-aligned-on-the-decimal", + "role": "stats", + "name": "Column aligned on the decimal", + "shape": "table", + "tags": [ + "type-led", + "dense" + ], + "directions": [ + "editorial-report", + "type-only-statement", + "page-is-the-object", + "contact-sheet", + "product-performs", + "sentence-as-layout" + ], + "needs": [], + "blueprint": "A tall column of figures set like a ledger. Left, columns 1–5: the heading as a statement of up to five words on two lines at clamp(32px, 3.2vw, 52px), its first line in the soft ink and its second in full ink, placed at mid-height. Right, columns 7–12: four to six figures stacked, each at clamp(64px, 7vw, 112px), leading 1.0, in tabular lining numerals. They align on the decimal point: each row is a three-part grid in which the whole-number part is right-aligned in the first track, the point and decimals are left-aligned in the second, and a caption of one or two lines at 16px sits in the third, on the figure's baseline. Whole numbers simply leave the second track empty. Rows are separated by 20px of space only. Units are written in the captions, not attached to the figures, so the numerals form one clean vertical shape.", + "mobile": "The heading comes first at 28px. Figures drop to 15vw and keep the decimal alignment, with the split at 52% of the width. Each caption moves under its figure at 15px, starting from the left margin. 28px between rows.", + "seenIn": [ + "aww-united-carriers", + "aww-moto-finance" + ] + }, + { + "id": "stats-photograph-with-figure-tiles", + "role": "stats", + "name": "Photograph with figure tiles", + "shape": "mosaic", + "tags": [ + "colour-field", + "photo-led" + ], + "directions": [ + "editorial-report", + "colour-chapters", + "dense-tiles", + "split-stage", + "specimen-catalogue" + ], + "needs": [], + "blueprint": "A mosaic without gutters spanning the full width, about 66vw tall in total. A single photograph fills the left two-thirds at roughly 1:1 with object-fit: cover and square corners. The right third is split into two stacked flat colour tiles of equal height, in two palette colours that differ clearly in lightness as well as hue. Each tile carries one figure at clamp(56px, 5.6vw, 96px) in its top-left corner, 28px in from the edges, with a two-line caption at 17px directly beneath it; the rest of the tile is empty colour, which is the point. Photograph and tiles touch, with no gaps and no rounding. The heading, two to four words at 32–40px, sits above the mosaic's left edge with 40px beneath, or is left out when the section follows a text page whose title already introduces it. Never add a third tile; with three figures choose another layout.", + "mobile": "The photograph comes first, full-bleed at 4:3. The two colour tiles follow side by side as squares, each 50vw, with the figure at 13vw top-left and the caption at 15px beneath. No gaps between any of the three pieces.", + "seenIn": [ + "aww-ai-in-design-report-2026" + ] + }, + { + "id": "stats-stepped-figure-tiles", + "role": "stats", + "name": "Stepped figure tiles", + "shape": "grid", + "tags": [ + "colour-field", + "dense" + ], + "directions": [ + "dense-tiles", + "one-motif", + "loud-flat-poster", + "colour-chapters", + "specimen-catalogue", + "borrowed-category" + ], + "needs": [], + "blueprint": "Three figures on three tiles that refuse to line up. A tall tile in the accent colour fills columns 1–6 and is 70vh high; it holds one figure at clamp(56px, 5.4vw, 92px) in its top-left corner, 28px in, and its caption at 17px in its bottom-left corner, with empty colour between. On the right, an ink-coloured tile in columns 7–9 starts 14vh lower and is 44vh high: a paper-coloured figure top-left, a caption along its bottom edge. A third tile in a mid tone takes columns 10–12, starts 26vh down and is 34vh high, with the same internal layout. Gaps are 8px. The unequal heights leave notches of bare ground above and below the right-hand tiles; the heading, two to four words at 28–36px, sits in the upper notch on column 7. If the page has a motif, cut one corner of each tile to its geometry with clip-path.", + "mobile": "The tall tile comes first, at full width and 56vw high, with its figure at 15vw. The two smaller tiles follow side by side with a 6px gap, the right one starting 32px lower than the left, each with its figure at 11vw and its caption at the bottom. The heading sits above at 26px.", + "seenIn": [ + "aww-aspen-search" + ] + }, + { + "id": "stats-total-and-its-receipt", + "role": "stats", + "name": "Total and its receipt", + "shape": "split", + "tags": [ + "object-led", + "type-led" + ], + "directions": [ + "page-is-the-object", + "product-performs", + "borrowed-category", + "type-only-statement" + ], + "needs": [], + "blueprint": "A total at giant size, and beside it the slip that adds up to it. Left, columns 1–6: at the top the heading, two to five words at 40–44px, with a two-line note at 16px; at the bottom-left, anchored to the section's lower edge, the total at clamp(160px, 18vw, 300px) with leading 0.8, and one caption line at 17px under it. The space between heading and total is left empty. Right, columns 8–11: a paper-coloured slip 380–440px wide on the section's contrasting ground, top-aligned with the heading, its bottom edge a zigzag made with clip-path. The slip lists eight to fourteen rows in the text face at 15–16px with tabular numerals, grouped under bold group names; each row has a description on the left, a right-aligned value, and a leader of round 4px dots between. The last row is inverted on a solid ink bar and repeats the total. The slip's values must truly sum to the figure.", + "mobile": "Heading and note come first. The total follows at 40vw, flush left, with its caption. The slip comes last at full width minus 16px margins with its zigzag edge, rows at 15px, and the inverted total row closing it.", + "seenIn": [ + "opl-the-content-architecture" + ] + }, + { + "id": "stats-figure-on-the-photographs-edge", + "role": "stats", + "name": "Figure on the photograph's edge", + "shape": "full-bleed", + "tags": [ + "photo-led", + "poster" + ], + "directions": [ + "place-carries-it", + "dark-room", + "hero-object", + "pinned-poster" + ], + "needs": [], + "blueprint": "One full-bleed photograph, 100vw by 88svh, and one figure set on it the way a film title sits on a frame. The figure, with its unit, is at clamp(120px, 17vw, 280px), leading 0.8, in paper colour, hugging the bottom-left corner with 24px margins, its baseline nearly on the photograph's lower edge. A neutral dark scrim covers only the bottom 35% of the image for legibility. On the same baseline at the right margin, right-aligned, a sentence of up to 26ch at 18px explains the figure. At the top-left, small at 20–24px, sits the heading of two to four words; the middle of the photograph stays clear. Two smaller supporting figures may follow below the photograph, on the ground: each at 40px with a one-line caption beside it, starting at columns 1 and 7, 40px under the image. Choose a figure that belongs to the picture: a height, a distance, a temperature, a year.", + "mobile": "The photograph is 80svh, cropped to its subject. The figure sits bottom-left at 30vw; the sentence moves above it at 16px, left-aligned. Supporting figures stack under the photograph at 32px, each with its caption on the line beneath.", + "seenIn": [ + "aww-the-state-of-the-gallery" + ] + }, + { + "id": "stats-quiet-figure-lines", + "role": "stats", + "name": "Quiet figure lines", + "shape": "list", + "tags": [ + "quiet", + "type-led" + ], + "directions": [ + "quiet-instrument", + "uneven-photographs", + "split-stage", + "contact-sheet", + "name-as-monument", + "dark-room" + ], + "needs": [], + "blueprint": "Numbers stated without raising the voice. In columns 2–7, a definition-list layout: three to five rows, each a two-track grid. The first track is 132px wide and holds the figure, right-aligned, at 28–32px in medium weight and full ink with tabular numerals. The second track, after a 24px gap, holds one sentence at 16–17px in the soft ink, at most 40ch, whose first baseline matches the figure's baseline. Sentences share one left edge and figures one right edge, so a clean channel of space runs down between them. 28px between rows. The heading, two to four words at 24–28px, sits 56px above on the sentences' left edge, not the figures'. Optionally, a single small square photograph occupies columns 9–11, its top 80px lower than the first row, with no caption. Leave at least 18vh of empty ground above and below the block.", + "mobile": "The grid stays two-track, with the figure track narrowed to 88px and figures at 24px; sentences at 16px wrap beside them. If the photograph is used it comes after the rows at 56% width, flush right. The heading is 22px on the sentences' left edge.", + "seenIn": [ + "aww-cominvi" + ] + }, + { + "id": "testimonial-name-block-quote-block", + "role": "testimonial", + "name": "Name block, quote block", + "shape": "split", + "tags": [ + "colour-field", + "type-led" + ], + "directions": [ + "editorial-report", + "colour-chapters", + "dense-tiles", + "loud-flat-poster", + "type-only-statement" + ], + "needs": [], + "blueprint": "Two flat blocks butt together across the full width with no gap, about 70svh tall, built as a two-column grid (5fr 7fr) whose cells stretch to equal height. The left block, columns 1–5, is in the page's ink colour and holds only the speaker: name at 20px medium and role at 16px in a softer tone, pinned to the bottom-left corner with 32px padding; the rest of the block is empty. The right block, columns 6–12, is in one palette colour and carries the quotation at clamp(28px, 3vw, 44px), leading 1.15, top-left with 48px padding and a measure of about 24ch, so the lower third of the colour stays empty. Curly quotation marks are part of the text, with the opening mark hung outside the left edge by a negative `text-indent`. There is no heading; the quotation does that job.", + "mobile": "The blocks stack with the colour block first: the quotation at 26px with 24px padding and a clear band of empty colour beneath it. The dark block follows directly, only about 96px tall, with name and role on one line each at the bottom-left. No gap between the two.", + "seenIn": [ + "aww-ai-in-design-report-2026" + ] + }, + { + "id": "testimonial-lead-quote-corner-quotes", + "role": "testimonial", + "name": "Lead quote, corner quotes", + "shape": "statement", + "tags": [ + "type-led", + "quiet" + ], + "directions": [ + "dark-room", + "name-as-monument", + "borrowed-category", + "type-only-statement" + ], + "needs": [], + "blueprint": "A single field one viewport tall (min-height 100svh), usually the darkest tone of the palette. The lead quotation sits in the upper third: two lines at about 4vw in a light weight, centred, no wider than 60% of the viewport, with nothing near it. Two further short quotations are pushed into the bottom-left and bottom-right corners, each a block three columns wide set at 16px with leading 1.5, left-aligned, with the speaker's name and role on the two lines beneath in the softer ink. The bottom centre, about six columns wide, is deliberately empty. Use a three-row grid (auto 1fr auto) so the corner blocks hold a bottom margin of 32px while the lead quotation keeps its place at any height. There is no heading and there are no portraits; the contrast between one large voice and two small ones is the composition.", + "mobile": "The lead quotation moves to the top at 8vw over three or four lines, left-aligned, with 96px of empty field under it. The two small quotations then stack at 16px, the first full width, the second indented by a quarter of the screen so they do not read as a list.", + "seenIn": [ + "aww-hilden-kaira" + ] + }, + { + "id": "testimonial-paper-slips", + "role": "testimonial", + "name": "Quotes on paper slips", + "shape": "strip", + "tags": [ + "object-led" + ], + "directions": [ + "page-is-the-object", + "specimen-catalogue", + "borrowed-category", + "loud-flat-poster" + ], + "needs": [], + "blueprint": "A heading of two to four words at about 3vw sits top-left in columns 1–6. Beneath it three paper slips fan across columns 2–11 on a contrasting flat ground: each is a filled paper-coloured panel about 300px wide, of three different lengths (440, 520 and 600px), rotated −4, 2 and 5 degrees and overlapping its neighbour by roughly 40px. The top and bottom edges of each slip are zigzag tears cut with `clip-path: polygon()`. On a slip, from the top: the speaker's name centred at 18px bold, the role on one line, a square greyscale photograph of the speaker 120px wide, then the quotation at 16px in the text face, left-aligned with 24px padding. The longest slip runs past the bottom of the section, which clips it with `overflow: hidden`, so the slips look freshly printed rather than laid out as cards.", + "mobile": "One slip per row, each 78% of the screen wide and kept rotated by two or three degrees in alternating directions, the first hugging the left margin, the second the right, each overlapping the one above by 32px. The heading sits above at 8vw on two lines.", + "seenIn": [ + "opl-poetry-camera" + ] + }, + { + "id": "testimonial-quote-over-photograph", + "role": "testimonial", + "name": "Quotation over a photograph", + "shape": "full-bleed", + "tags": [ + "photo-led" + ], + "directions": [ + "place-carries-it", + "dark-room", + "hero-object", + "uneven-photographs" + ], + "needs": [], + "blueprint": "One photograph fills the section edge to edge at 100vw by 90svh with `object-fit: cover`; choose a frame with a calm lower half. The quotation is set directly on it in the paper colour: two or three lines at clamp(36px, 5vw, 80px), leading 1.0, flush left in columns 1–9, its last baseline 64px above the bottom edge. The speaker's name and role sit at 16px on that same baseline, right-aligned in columns 10–12. For legibility, darken the whole image evenly with `filter: brightness(0.7)` instead of placing a panel behind the words; the photograph must still read as a photograph. There is no heading, no frame and no oversized quotation-mark ornament, only plain curly quotes in the text. The section butts directly against its neighbours with no margin, so the image edge is the section edge.", + "mobile": "The photograph becomes 100vw by 80svh, cropped to its strongest vertical slice. The quotation sits in the lower half at 9vw over four lines at most, flush left with 20px margins; the name and role follow under it on one line at 15px.", + "seenIn": [ + "opl-berd" + ] + }, + { + "id": "testimonial-gutter-quotes-pinned", + "role": "testimonial", + "name": "Quotes in the gutters", + "shape": "pinned", + "tags": [ + "photo-led", + "poster" + ], + "directions": [ + "pinned-poster", + "hero-object", + "colour-chapters", + "loud-flat-poster" + ], + "needs": [], + "blueprint": "A sticky stage (`position: sticky; top: 0; height: 100svh`) inside a wrapper three or four viewports tall. The section's title, two or three words at 10–12vw, stays pinned across the top of the stage. In the centre a portrait photograph, 4:5 and about 30vw wide, changes at each scroll step. Each step also brings one quotation, placed in an outer gutter in a column 280px wide and at a different height each time: right gutter in the upper third, then left gutter at mid-height, then right gutter in the lower third. Quotations are bold at 22px with tight leading; the speaker's name follows at 15px in the softer ink. Only one quotation shows at a time. Each step may switch the stage to its own flat ground colour. Drive the steps with an IntersectionObserver on spacer blocks; never hijack the scroll.", + "mobile": "No pinning. The title sits once at 16vw. Each speaker then gets a block: the portrait at 72% width, flush left and flush right in turn, the quotation at 20px beneath it on the same edge, and the name under that. Leave 72px between blocks.", + "seenIn": [ + "opl-city-of-angels" + ] + }, + { + "id": "testimonial-portrait-offset-quote", + "role": "testimonial", + "name": "Portrait and offset quotation", + "shape": "split", + "tags": [ + "photo-led", + "quiet" + ], + "directions": [ + "split-stage", + "uneven-photographs", + "place-carries-it", + "one-motif", + "editorial-report", + "hero-object" + ], + "needs": [], + "blueprint": "A 12-column row on the page ground with wide margins. A portrait of the speaker, 3:4, fills columns 2–5 and is tall, about 70svh; it takes whatever mask the page gives its photographs (square corners, or the page's one motif shape). The quotation occupies columns 7–12 and starts 120px lower than the top of the portrait: four to six lines at clamp(26px, 2.6vw, 40px) in a light or regular weight, leading 1.2, measure about 26ch. The name and role sit 32px beneath the quotation at 16px, on its left edge. A second, small photograph (1:1, columns 10–11) hangs 96px below the attribution and shows the place or the thing the speaker is talking about. There is no heading. Nothing is centred; every edge lands on a column line, and the two vertical offsets are the design.", + "mobile": "The portrait runs at 72% width from the left margin, 3:4. The quotation follows at 24px, full width, starting 32px beneath. Name and role sit under it. The small second photograph sits at 44% width against the right margin, 48px lower, overlapping nothing.", + "seenIn": [] + }, + { + "id": "testimonial-words-spread-wide", + "role": "testimonial", + "name": "Quotation spread edge to edge", + "shape": "band", + "tags": [ + "type-led", + "poster" + ], + "directions": [ + "sentence-as-layout", + "type-only-statement", + "name-as-monument", + "loud-flat-poster", + "colour-chapters" + ], + "needs": [], + "blueprint": "A full-width field with no image. One short quotation, six to ten words, is set at about 9vw in the display face and broken by hand into two or three lines. Each line is a flex row with `justify-content: space-between`, so its first word sits hard against the left margin, its last word hard against the right, and any middle word floats between them. Lines are 0.6em apart, far looser than a headline, which lets the gaps read as pauses. The attribution is spaced the same way on a final row at 18px: name at the left margin, role centred, organisation at the right. Opening and closing quotation marks belong to the first and last words. There is no separate heading. Leave at least 140px of empty field above and below, and give the field its own flat colour when the palette allows.", + "mobile": "Lines break after every two words and keep the spread: one word at each margin, at 13vw. A single-word line alternates between the left and right margins. The attribution stacks as three short lines at 15px, aligned left, centre and right in turn.", + "seenIn": [ + "opl-poetry-camera", + "opl-rsquad" + ] + }, + { + "id": "testimonial-letter-reading-column", + "role": "testimonial", + "name": "One long letter", + "shape": "stack", + "tags": [ + "quiet", + "type-led" + ], + "directions": [ + "quiet-instrument", + "product-performs", + "split-stage", + "editorial-report", + "type-only-statement", + "page-is-the-object" + ], + "needs": [], + "blueprint": "A single testimonial given room to be read, set like a letter. One column 34–38ch wide begins at column 5 of 12, or shares the page's own reading column. The first sentence of the quotation is pulled up as the opening line at 28–32px in medium weight, two lines at most. The rest follows as two or three ordinary paragraphs at 18–19px with leading 1.55 and 20px between paragraphs, in the full ink, not grey. It closes the way a letter does: 40px of space, then the name on one line and the role on the next at 16px. In columns 1–3, top-aligned with the first line, sits either nothing or one small square photograph of the writer, 120px wide. There are no quotation marks at all; the letter form makes them unnecessary. Space above and below is 140px.", + "mobile": "The column takes the full width with 20px margins. If there is a photograph it goes first at 96px square, left-aligned. Opening sentence at 24px, body at 17px, sign-off beneath. Nothing else changes; this section is already a phone composition.", + "seenIn": [] + }, + { + "id": "testimonial-shallow-portrait-bands", + "role": "testimonial", + "name": "Shallow portraits, small quotes", + "shape": "grid", + "tags": [ + "dense", + "photo-led" + ], + "directions": [ + "contact-sheet", + "dense-tiles", + "quiet-instrument", + "product-performs" + ], + "needs": [], + "blueprint": "Speakers are shown as wide, shallow crops rather than headshots. A two-word heading at 15px sits in columns 1–2, top-aligned with the frames, not above them. In columns 3–12 three frames sit side by side with 8px gaps at unequal widths (4, 3 and 3 columns), all exactly 110px tall: each is a photograph of the person cropped with `object-fit: cover` to a band across the eyes and shoulders. Directly under each frame, on its left edge, come the name in the brighter ink and the role in the softer ink on one line at 15px, then the quotation at the same 15px over three to five lines, no wider than its frame. Everything shares one type size; hierarchy comes from ink alone. If interview clips exist, each frame can be the poster of its clip, but the section must work with stills.", + "mobile": "Frames go full width one after another, each 84px tall, with its name, role and quotation at 15px beneath and 40px before the next. The heading leads as a plain line at the same size, in the brighter ink, 24px above the first frame.", + "seenIn": [ + "aww-oimachi" + ] + }, + { + "id": "proof-names-run-on-sentence", + "role": "proof", + "name": "Names as one sentence", + "shape": "statement", + "tags": [ + "type-led", + "poster" + ], + "directions": [ + "type-only-statement", + "sentence-as-layout", + "name-as-monument", + "dark-room", + "loud-flat-poster" + ], + "needs": [], + "blueprint": "Client, press or partner names are written out as one run-on sentence and set large: clamp(40px, 5vw, 76px), leading 1.0, flush left across all twelve columns, wrapping naturally over five to seven lines. Names are separated by commas and the list ends with a full stop. All names are set in a dimmed ink (still at least 3:1 against the ground), so the block reads as texture; one name at a time is lit in the full ink, and the lit name moves through the list every two seconds (a class toggled by a short script, with a 400ms colour transition). The sentence opens with two or three plain words in the full ink that act as the heading: the phrase that introduces the names. Nothing else is in the section: no logos, no columns, and 120px of space above and below.", + "mobile": "The same sentence at 9vw, wrapping over ten to fourteen lines; cut the list to the twelve strongest names so it stays within one and a half screens. The lit name still cycles. Margins are 20px and there are no other elements.", + "seenIn": [ + "aww-revelatio-studio" + ] + }, + { + "id": "proof-plain-columns", + "role": "proof", + "name": "Plain names in columns", + "shape": "list", + "tags": [ + "quiet", + "type-led" + ], + "directions": [ + "quiet-instrument", + "contact-sheet", + "editorial-report", + "split-stage", + "uneven-photographs", + "place-carries-it" + ], + "needs": [], + "blueprint": "A typographic list with no logos. The heading, two or three words at 28–32px, sits in columns 1–3 and stays top-aligned with the first row of names. Columns 5–12 hold the names in three or four text columns (`columns: 4; column-gap: 32px`), each name on its own line at 20–22px with leading 1.5, sentence case, in the full ink. Where names fall into kinds (clients, press, partners), each kind starts a new column and its first line names the kind in the softer ink at the same size, so no small labels are needed. Columns are of unequal length and are not balanced; ragged bottoms are intended. Twelve to thirty names work best. There are no boxes, bullets or separators: the column edges and the shared baseline do the organising. Leave 120px above and below.", + "mobile": "The heading leads at 26px. Names follow in two columns at 17px with a 20px gap; each kind begins after a 32px break with its name in the softer ink on the first line. Long names wrap inside their column rather than shrinking.", + "seenIn": [ + "opl-ayush-halder-portfolio" + ] + }, + { + "id": "proof-single-logo-row", + "role": "proof", + "name": "One quiet logo row", + "shape": "strip", + "tags": [ + "quiet" + ], + "directions": [ + "product-performs", + "quiet-instrument", + "hero-object", + "dark-room", + "place-carries-it", + "split-stage", + "uneven-photographs" + ], + "needs": [], + "blueprint": "Only for real logos supplied by the project; if none are supplied, set the names in the text face at 22px in the same row and never draw stand-ins. The row reads as a sentence: it opens at the left margin with two to four plain words at 18px (the phrase that introduces the names), vertically centred on the logos, and five to seven logos follow on the same line, spread to the right margin with `justify-content: space-between`. Every logo is normalised to one optical height (28–32px for wordmarks, 36px for compact marks) and one colour, the page ink, using single-colour SVGs with `fill: currentColor`. The band is tall and almost empty: 120–150px of ground above and below the row, no box, no background change and no separate heading. Logos stay still; nothing scrolls or fades at the edges.", + "mobile": "The opening words sit alone on the first line at 17px. Logos follow in a grid of two per row, each 26px tall and left-aligned in its cell, with 36px between rows. Show six at most; there is no sideways scrolling.", + "seenIn": [ + "aww-ai-in-design-report-2026", + "aww-lama-lama-2", + "opl-mammut-studios" + ] + }, + { + "id": "proof-recognition-table", + "role": "proof", + "name": "Recognition as a table", + "shape": "table", + "tags": [ + "type-led", + "dense" + ], + "directions": [ + "editorial-report", + "type-only-statement", + "contact-sheet", + "borrowed-category", + "name-as-monument", + "quiet-instrument" + ], + "needs": [], + "blueprint": "Awards, press mentions or credits set as a four-column table with no lines. The heading is two or three words at about 5vw, stepped over two lines with the second line indented by two columns, and occupies columns 1–7. The table begins 72px below and spans columns 1–12 on a fixed grid: year in columns 1–2, project or title in 3–6, awarding body or publication in 7–10, the award itself in 11–12, right-aligned. Rows are set at 16–17px with 14px of padding above and below; every second row carries a background tone one step from the ground, running the full table width, which replaces rules. Year groups are separated by one blank row, and the year is printed only on the first row of its group. Use a real `` with `border-collapse: collapse` and no borders.", + "mobile": "The heading drops to 11vw. Each table row becomes a two-line block: title on the first line in the full ink, then body and award on the second in the softer ink. The year stands once as a 22px figure above its group. Alternate blocks keep the background tone.", + "seenIn": [ + "aww-bleibtgleich26" + ] + }, + { + "id": "proof-large-marks-on-tiles", + "role": "proof", + "name": "Large marks on tiles", + "shape": "grid", + "tags": [ + "dense", + "colour-field" + ], + "directions": [ + "dense-tiles", + "specimen-catalogue", + "colour-chapters", + "one-motif", + "product-performs", + "loud-flat-poster" + ], + "needs": [], + "blueprint": "A board of filled tiles, four across and two or three rows deep, with 8px gaps, spanning the full content width. Each tile is about 3:2, one step lighter or darker than the page ground, with no border. A tile holds one supplied logo, shown far larger than a usual logo strip: about 72px tall, centred, in the page ink as a single-colour SVG. When no logo files exist, the tile holds the name instead, set at 28–32px bold, top-left with 24px padding; never draw a mark. One tile, twice the width of the others and placed first, is in the accent colour and carries the heading: two to four words at about 3vw, top-left. Tile corners follow the page's one radius, or the page's motif shape if it has one. Tiles sit still; there is no hover lift.", + "mobile": "Two tiles per row with 6px gaps, logos at 44px tall. The heading tile runs full width first, about 120px tall. Show eight tiles at most so the board stays under one and a half screens. Names set in type drop to 20px.", + "seenIn": [ + "aww-monolog" + ] + }, + { + "id": "proof-printed-guest-list", + "role": "proof", + "name": "The printed guest list", + "shape": "stack", + "tags": [ + "object-led", + "type-led" + ], + "directions": [ + "page-is-the-object", + "borrowed-category", + "specimen-catalogue", + "place-carries-it", + "loud-flat-poster" + ], + "needs": [], + "blueprint": "Names are printed on a card, the way a programme lists its patrons or an invitation its hosts. On a contrasting flat ground, a paper-coloured panel about 56% of the viewport wide with 5:7 proportions sits centred and rotated by one or two degrees; the section is shorter than the card and clips it with `overflow: hidden`, so the card is cut by the bottom edge rather than framed whole. Inside, 56px padding. At the top, a centred heading of two to four words at 28px. Below it the names run as centred lines at 20–22px with leading 1.7, several names to a line, separated by middots with a non-breaking space either side. One photograph may be tipped in between the heading and the names: 16:9, the full inner width, square corners. The card is a plain filled shape with no outline.", + "mobile": "The card becomes 92% of the screen wide, keeps a one-degree tilt and is still cut off by the section's bottom edge. Heading at 22px, names at 17px with two names to a line. Padding drops to 28px, and the tipped-in photograph keeps the full inner width.", + "seenIn": [ + "opl-hebbia" + ] + }, + { + "id": "proof-names-off-both-edges", + "role": "proof", + "name": "Names running off the edges", + "shape": "band", + "tags": [ + "type-led", + "poster" + ], + "directions": [ + "pinned-poster", + "loud-flat-poster", + "name-as-monument", + "borrowed-category", + "hero-object", + "colour-chapters" + ], + "needs": [], + "blueprint": "A full-bleed band in a flat colour, about 34vh tall, holding a single line of names that is cropped by both viewport edges. The names are set at 8vw in the display weight, `white-space: nowrap`, separated by a solid round dot one third of the cap height, and the line moves slowly to the left (a CSS `translateX` animation over 40 seconds on a duplicated track, paused under `prefers-reduced-motion`). The band has no heading. Its meaning comes from one sentence at 18px set directly below the band at the left margin on the page ground, stating plainly who these names are. Supplied logos may replace names if all are available as single-colour SVGs at 0.8em height; do not mix logos and set names in one line. The band butts against the sections above and below with no gap.", + "mobile": "The band is 22vh tall with names at 15vw, still cropped at both edges and still moving. The explaining sentence sits under it at 16px with 20px margins. Do not add a second line running the opposite way; one line is the idea.", + "seenIn": [ + "aww-made-with-gsap-1" + ] + }, + { + "id": "pricing-price-as-display-figure", + "role": "pricing", + "name": "The price, very large", + "shape": "split", + "tags": [ + "type-led", + "object-led" + ], + "directions": [ + "product-performs", + "hero-object", + "name-as-monument", + "one-motif", + "dark-room", + "type-only-statement" + ], + "needs": [], + "blueprint": "One plan, no card. Columns 1–4 hold a heading of two to four words at 28–36px and one paragraph at 17px, top-aligned. Columns 6–12 hold the price as a display figure: numerals at clamp(120px, 16vw, 240px), tight tracking, leading 0.85, with the currency sign at half that size raised to the cap line and the period (per month, once) at 18px beside the last numeral on the baseline. One thing from the page overlaps the numerals by 10–15% of their height: the product photograph, the interface fragment or the motif shape, placed over the top-right of the figure. Beneath the figure, on its left edge, four plain lines at 18px state what is included, one per line, without ticks or bullets, then a single rectangular button. The section is at least 80svh tall with the figure vertically centred.", + "mobile": "The heading and paragraph come first, full width. The figure follows at 34vw, flush left, with the overlapping object tucked at its top-right corner at a third of the screen wide. Included lines at 17px and a full-width button close the block.", + "seenIn": [ + "opl-dabbit" + ] + }, + { + "id": "pricing-large-typographic-table", + "role": "pricing", + "name": "Plans as a large table", + "shape": "table", + "tags": [ + "type-led", + "dense" + ], + "directions": [ + "type-only-statement", + "editorial-report", + "dense-tiles", + "product-performs", + "contact-sheet" + ], + "needs": [], + "blueprint": "Two to four plans compared in a table whose type is far larger than a table usually gets. The first column (columns 1–4) lists what is compared, in words, at 22px. Each plan takes an equal share of columns 5–12. The header row gives each plan's name at about 3vw bold, left-aligned, with its price directly beneath at the same size in the regular weight and the period at 16px. Body rows are 22px with 20px padding; cells answer in words or numbers (“Unlimited”, “3 seats”, “Not included”), never with ticks. Every second row has a background tone one step from the ground, spanning all columns. The recommended plan is marked only by its whole column sitting on the accent tone from header to last row. The final row holds one rectangular button per plan. A two-to-four-word heading sits in the top-left cell.", + "mobile": "Plans stack as separate blocks. Each opens with the plan name and price at 9vw, then its rows as pairs: the compared item in the softer ink, the answer beneath in the full ink, both at 17px. The recommended plan's block sits on the accent tone. A full-width button ends each block.", + "seenIn": [] + }, + { + "id": "pricing-one-sentence-price", + "role": "pricing", + "name": "One plan as a sentence", + "shape": "statement", + "tags": [ + "type-led", + "poster" + ], + "directions": [ + "sentence-as-layout", + "type-only-statement", + "loud-flat-poster", + "name-as-monument", + "colour-chapters" + ], + "needs": [], + "blueprint": "The whole offer is one sentence of five to seven short words that contains the price, set at 8–9vw across the full width on two lines, leading 0.95, flush left; it replaces any heading. The price is not styled as a different word. Instead it sits on a filled block of the accent colour exactly one line-height tall with 0.15em of padding at each side, so the figure reads as an object in the line. Below, on one shared baseline 64px under the sentence: a supporting sentence at 20px in columns 1–6 saying what the price includes, and one rectangular button right-aligned in columns 10–12. If a second option exists (annual, team), it is a plain text link under the button, not a second panel. The section is one flat colour field at least 80svh tall.", + "mobile": "The sentence is set at 11vw on two lines, with the price block on a line of its own between them, as wide as its figure. The supporting sentence follows at 17px, then a full-width button, then the text link for the second option.", + "seenIn": [] + }, + { + "id": "pricing-two-plans-two-fields", + "role": "pricing", + "name": "Two plans, two fields", + "shape": "split", + "tags": [ + "colour-field", + "poster" + ], + "directions": [ + "colour-chapters", + "loud-flat-poster", + "borrowed-category", + "one-motif", + "editorial-report", + "split-stage" + ], + "needs": [], + "blueprint": "Two plans stand side by side as two full-height colour fields that meet at a hard vertical edge with no gap: the left field spans columns 1–5, the right 6–12, both 90svh tall and bleeding to the viewport edges. Each field has its own flat colour and its assigned text colour. Inside each, on a shared grid: the plan name at about 5vw top-left with 40px padding; one sentence at 20px beneath it, no wider than 26ch, saying who the plan is for; then, anchored to the bottom-left, the price at about 10vw with the period at 18px beside it; and a rectangular button anchored bottom-right on the price's baseline. What is included is written as a short paragraph, not a tick list. The unequal widths say which plan matters more without any badge. No heading spans the two fields.", + "mobile": "The fields stack, each 70svh tall, the more important plan first. Name at 12vw top-left, sentence beneath, price at 24vw at the bottom-left, and the button full width along the bottom edge inside 20px padding. The hard colour edge between the two is kept.", + "seenIn": [] + }, + { + "id": "pricing-menu-list", + "role": "pricing", + "name": "Prices like a menu", + "shape": "list", + "tags": [ + "quiet", + "type-led" + ], + "directions": [ + "page-is-the-object", + "place-carries-it", + "split-stage", + "uneven-photographs", + "quiet-instrument", + "specimen-catalogue", + "dark-room" + ], + "needs": [], + "blueprint": "Prices set the way a good menu sets them. A heading of two to three words at 32–40px sits in columns 1–3. Columns 5–12 hold the list in two text columns with a 64px gap. Items are grouped under plain group names at 24px in medium weight with 48px above each group. Each item is a row: the name at 19px on the left, the price at the same size on the right on the same baseline, with tabular figures and the currency sign shown only once per group; beneath the name, one line of description at 16px in the softer ink, no wider than 36ch. Rows are 22px apart. Name and price are joined only by empty space (flex with `justify-content: space-between`), with no dot leaders and no lines. One small photograph (4:5, three columns wide) may sit under the heading in the left zone.", + "mobile": "One column. The heading at 28px, then the photograph at 60% width if used. Each item keeps name left and price right on one line at 17px, with its description beneath in the softer ink. Group names at 20px with 40px above.", + "seenIn": [] + }, + { + "id": "pricing-ticket-with-stub", + "role": "pricing", + "name": "The ticket", + "shape": "strip", + "tags": [ + "object-led", + "colour-field" + ], + "directions": [ + "page-is-the-object", + "borrowed-category", + "loud-flat-poster", + "pinned-poster", + "colour-chapters" + ], + "needs": [], + "blueprint": "The price is printed on a ticket. On a flat contrasting ground, one filled panel about 64vw wide with 2.3:1 proportions sits centred and straight, built as a two-part grid (7fr 3fr). A half-round notch 28px across is bitten out of the top and bottom edges where the two parts meet (two absolutely positioned circles in the ground colour), and a column of round dots 6px across in the ground colour runs between the notches as the perforation. The main part holds, top-left with 40px padding, what is being bought in two to four words at about 4vw, and along its bottom three or four short lines at 17px (dates, what is included, terms) in two tidy columns. The stub holds the price at about 6vw, centred, and under it the action as a solid bar the full width of the stub, 56px tall.", + "mobile": "The ticket turns upright: full width less 20px margins, main part on top, stub beneath, the notches now on the left and right edges and the dot perforation running across. Title at 9vw, price at 16vw, the action bar full width inside the stub.", + "seenIn": [] + }, + { + "id": "pricing-itemised-receipt", + "role": "pricing", + "name": "The itemised receipt", + "shape": "stack", + "tags": [ + "object-led", + "quiet" + ], + "directions": [ + "page-is-the-object", + "hero-object", + "specimen-catalogue", + "borrowed-category", + "quiet-instrument" + ], + "needs": [], + "blueprint": "For offers made of parts: a base price plus options, a kit, a bundle. A tall paper-coloured slip 380px wide sits in columns 8–11 on a contrasting ground, its bottom edge cut into a zigzag with `clip-path: polygon()`, its top edge running off the top of the section. On the slip, with 28px padding: the name centred at 20px bold, then each item as a row with the description left and the amount right at 16px with tabular figures, 14px between rows; a thick 4px bar in the ink colour; then the total as the largest thing on the slip at 44px, right-aligned. Columns 1–6 carry the heading (two to four words at about 4vw), one paragraph at 18px and the button, starting 96px from the top. If options are selectable, ticking one in the left column adds its row to the slip and updates the total.", + "mobile": "Heading, paragraph and any options come first. The slip follows at 86% width, centred, keeping its zigzag foot, with rows at 16px and the total at 36px. The button sits under the slip at full width, 52px tall.", + "seenIn": [ + "opl-poetry-camera" + ] + }, + { + "id": "pricing-plan-index-live-figure", + "role": "pricing", + "name": "Plan names, one live figure", + "shape": "index", + "tags": [ + "type-led", + "ui-led" + ], + "directions": [ + "pinned-poster", + "product-performs", + "contact-sheet", + "name-as-monument", + "one-motif" + ], + "needs": [], + "blueprint": "Plans are a list of names; the price shown belongs to whichever name is selected. Columns 1–6 hold the plan names stacked at about 5vw, leading 1.1, each a `Braun/Rams Minimal Nav Logo
    Active Route GuidanceSEC-STACK // EXEC
    person
    + +
    +
    + +
    + +
    + + + + +
    +
    +
    +NEXT MANEUVER // T-01 + +
    +250 M +

    + TURN RIGHT ONTO BISMARCKSTRASSE +

    +
    +
    + +
    +LANES +
    +straight +turn_right +turn_right +
    +
    +
    +
    + +
    +
    + + INCIDENT + +

    + CONGESTION IN 1.4 KM — SLOWDOWN (+3 MIN) +

    +
    +CH-08 +
    + +
    + +
    + +
    +
    +GRID: 52.516° N / 13.308° E +RADAR: CALIBRATED +
    + +
    + + + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +HDG +318° NW +
    + +
    +
    +100 M +
    +
    +
    +
    + +
    + +
    +VELOCITY +54 +KM/H +
    + +
    +REGULATORY +
    +
    +60 +
    +
    +
    +
    + +
    + +
    +METRIC // ETA +
    +18:42 +ON SCHEDULE +
    +
    + +
    +REMAINING +
    +7.8 +KILOMETERS +
    +
    + +
    +TIME LEFT +
    +14 +MINUTES +
    +
    +
    + +
    + + + +
    + + +
    +
    +
    +
    \ No newline at end of file diff --git a/stitch_minimalist_route_navigator/active_route_guidance/screen.png b/stitch_minimalist_route_navigator/active_route_guidance/screen.png new file mode 100644 index 0000000000000000000000000000000000000000..b95cd01ba63ba49309d417dc48574cd5273acf8a GIT binary patch literal 82030 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
    #7MV&CjjWpU>N$0$esZVsVyI`4se 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

    )A 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 literal 0 HcmV?d00001 diff --git a/stitch_minimalist_route_navigator/community_incident_reporter/code.html b/stitch_minimalist_route_navigator/community_incident_reporter/code.html new file mode 100644 index 0000000..4e32986 --- /dev/null +++ b/stitch_minimalist_route_navigator/community_incident_reporter/code.html @@ -0,0 +1,275 @@ + + + +

    Braun/Rams Minimal Nav Logo
    TELEMETRY
    Community Report
    person
    + +
    +
    +
    + +SYS.COMM // LINK-TX +
    +OSM-LIVE +
    +
    +

    BROADCAST INCIDENT TO TELEGRAM & OSM FLEET

    +

    52.5200° N, 13.4050° E • BERLIN MITTE

    +
    +
    + +
    +
    +MATRIX REGISTRY (SELECT ONE) +AWAITING INPUT +
    +
    + + + + + + + + + + + + +
    +
    + +
    + +
    +
    +TRAFFIC ORIENTATION +VECTOR 180° +
    +
    + + +
    +
    + +
    +
    +IMPACT SEVERITY LEVEL +LVL-3 CRITICAL +
    +
    + + + +
    +
    +
    + +
    +
    +PAYLOAD STRING GENERATOR + +
    +
    + /report incident="ACCIDENT" severity=3 dir=forward lat=52.5200 lon=13.4050 +
    +
    + +
    + + +
    + +
    +verified +
    ++15 TELEMETRY REPUTATION POINTS +Points credited automatically when peer nodes or OSM validation confirms road status. +
    +
    +
    +
    \ No newline at end of file diff --git a/stitch_minimalist_route_navigator/community_incident_reporter/screen.png b/stitch_minimalist_route_navigator/community_incident_reporter/screen.png new file mode 100644 index 0000000000000000000000000000000000000000..5709f7cc53631322cb705fbabb414ef181f3cc41 GIT binary patch literal 190735 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

    +kLhJ7zWMfR9r7+4f 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 O5O})!xvX + + +

    +
    \ No newline at end of file diff --git a/stitch_minimalist_route_navigator/navigate_map_overview/screen.png b/stitch_minimalist_route_navigator/navigate_map_overview/screen.png new file mode 100644 index 0000000000000000000000000000000000000000..6d3641a2012c1823ecda8d2ef7ea07472abd81a5 GIT binary patch literal 227278 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

    Im+J<`_8L5Sndiq)d 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 d^sGR*=(+qp2jsLVgvAPC=&ceeh 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 W(RSc~3pMqEKC+TZ5;bB*!T$q`i0hdE literal 0 HcmV?d00001 diff --git a/stitch_minimalist_route_navigator/telegram_live_traffic_feed/code.html b/stitch_minimalist_route_navigator/telegram_live_traffic_feed/code.html new file mode 100644 index 0000000..f715fa0 --- /dev/null +++ b/stitch_minimalist_route_navigator/telegram_live_traffic_feed/code.html @@ -0,0 +1,303 @@ + + + +

    + +
    + +
    +
    + + + CONNECTED: @TelemetryBerlin_Bot + +
    +
    +SYNCED 4s AGO +• +1,428 ACTIVE +
    +
    + +
    + + + + +
    +
    + +
    + +
    + +
    + +
    +
    + + ACCIDENT + +TX-8042 // A100 +
    +
    +schedule +2m ago +
    +
    + +
    +

    + [ACCIDENT] A100 SOUTHBOUND KM 14.2 +

    +

    + Reported via /accident by @klaus_b. Two vehicles involved, middle lane blocked. Verified by 4 drivers. +

    + +
    +
    +trending_up +IMPACT CALCULATION +
    +
    + OSRM +12 MIN +
    +
    +
    + +
    +
    + +verified + +HIGH CONFIDENCE (98.4%) +
    +
    + +
    +
    +
    + +
    +
    +
    +
    + + CONGESTION + +DISPATCH #6610 +
    +
    +schedule +7m ago +
    +
    +
    +

    + [TRAFFIC] FRIEDRICHSTRASSE CLOSURE +

    +

    + Unexpected road closure between Unter den Linden and Leipziger Str. Alternate via Wilhelmstrasse. +

    +
    +
    +turn_sharp_right +DETOUR AUTO-COMPUTED +
    ++350M // +2.1 MIN +
    +
    +
    +DISPATCHED VIA @TELEMETRYBERLIN_BOT + +
    +
    + +
    +
    +
    +
    + + CLEARED + +REPORT #4491 +
    +
    +schedule +14m ago +
    +
    +
    +

    + [RESOLVED] HAZARD CLEARED ON B1 +

    +

    + Debris removed by municipal crews. Normal traffic flow restored. Speed limit reset to default 50 km/h vector. +

    +
    +
    +STATUS: SECTOR FREE & NOMINAL +VALIDATORS: 12 +
    +
    + +
    +
    +
    +
    + + NETWORK STAT + +SYS-BER-GRID +
    +
    +schedule +22m ago +
    +
    +
    +

    + [COMMUNITY MILESTONE] 10,000 VALIDATED OSM REPORTS +

    +

    + Leaderboard updated. Top contributor this week: @dieter_driver (+450 pts). OpenStreetMap Berlin sync routine initiated. +

    + +
    +
    +military_tech +CIVIC ACCURACY INDEX +
    +99.1% +
    +
    +
    +NODE: BERLIN-CENTRAL-CLUSTER + +
    +
    +
    + +
    + +
    + + + + + +
    + +
    +
    +
    +> +
    + +
    + + + +
    +TELEGRAM GATEWAY: TLS 1.3 ENCRYPTED +LATENCY: 42MS +
    +
    +
    +
    \ No newline at end of file diff --git a/stitch_minimalist_route_navigator/telegram_live_traffic_feed/screen.png b/stitch_minimalist_route_navigator/telegram_live_traffic_feed/screen.png new file mode 100644 index 0000000000000000000000000000000000000000..55e0e1724608238213c864b0fa72909768af4c84 GIT binary patch literal 271679 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
  1. |dieBr;qHxmI7WQr1eF5UevZ9Ry{azPy{>bPv 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]FrJQl^kPq7X;FP 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ω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 CsGj!# literal 0 HcmV?d00001 diff --git a/stitch_minimalist_route_navigator/telemetry_rams/DESIGN.md b/stitch_minimalist_route_navigator/telemetry_rams/DESIGN.md new file mode 100644 index 0000000..ef8e880 --- /dev/null +++ b/stitch_minimalist_route_navigator/telemetry_rams/DESIGN.md @@ -0,0 +1,242 @@ +--- +name: Telemetry Rams +colors: + surface: '#fff8f0' + surface-dim: '#e0d9cd' + surface-bright: '#fff8f0' + surface-container-lowest: '#ffffff' + surface-container-low: '#faf3e6' + surface-container: '#f5ede0' + surface-container-high: '#efe7db' + surface-container-highest: '#e9e2d5' + on-surface: '#1e1b14' + on-surface-variant: '#564335' + inverse-surface: '#333028' + inverse-on-surface: '#f7f0e3' + outline: '#897363' + outline-variant: '#dcc1af' + surface-tint: '#914c00' + primary: '#914c00' + on-primary: '#ffffff' + primary-container: '#eb8008' + on-primary-container: '#522900' + inverse-primary: '#ffb77f' + secondary: '#5f5e5e' + on-secondary: '#ffffff' + secondary-container: '#e2dfde' + on-secondary-container: '#636262' + tertiary: '#676013' + on-tertiary: '#ffffff' + tertiary-container: '#b7ad59' + on-tertiary-container: '#464000' + error: '#ba1a1a' + on-error: '#ffffff' + error-container: '#ffdad6' + on-error-container: '#93000a' + primary-fixed: '#ffdcc3' + primary-fixed-dim: '#ffb77f' + on-primary-fixed: '#2f1500' + on-primary-fixed-variant: '#6e3900' + secondary-fixed: '#e5e2e1' + secondary-fixed-dim: '#c8c6c5' + on-secondary-fixed: '#1c1b1b' + on-secondary-fixed-variant: '#474746' + tertiary-fixed: '#f0e58a' + tertiary-fixed-dim: '#d3c972' + on-tertiary-fixed: '#1f1c00' + on-tertiary-fixed-variant: '#4e4800' + background: '#fff8f0' + on-background: '#1e1b14' + surface-variant: '#e9e2d5' + signal-orange: '#EB8008' + matte-black: '#1A1A1A' + soft-beige: '#D9D2C6' + functional-red: '#ED3F1C' + olive-green: '#736B1E' + chassis-subtle: '#CCC4B5' + surface-dark: '#121212' + pure-white: '#FFFFFF' +typography: + display-lg: + fontFamily: Space Grotesk + fontSize: 48px + fontWeight: '700' + lineHeight: 52px + letterSpacing: -0.04em + display-lg-mobile: + fontFamily: Space Grotesk + fontSize: 36px + fontWeight: '700' + lineHeight: 40px + letterSpacing: -0.03em + headline-lg: + fontFamily: Space Grotesk + fontSize: 32px + fontWeight: '700' + lineHeight: 38px + letterSpacing: -0.03em + headline-lg-mobile: + fontFamily: Space Grotesk + fontSize: 24px + fontWeight: '700' + lineHeight: 30px + letterSpacing: -0.02em + headline-md: + fontFamily: Space Grotesk + fontSize: 20px + fontWeight: '600' + lineHeight: 26px + letterSpacing: -0.02em + headline-sm: + fontFamily: Space Grotesk + fontSize: 16px + fontWeight: '600' + lineHeight: 22px + letterSpacing: -0.01em + body-lg: + fontFamily: Geist + fontSize: 16px + fontWeight: '400' + lineHeight: 24px + letterSpacing: -0.01em + body-md: + fontFamily: Geist + fontSize: 14px + fontWeight: '400' + lineHeight: 20px + letterSpacing: 0em + body-sm: + fontFamily: Geist + fontSize: 12px + fontWeight: '400' + lineHeight: 16px + letterSpacing: 0.01em + label-lg: + fontFamily: Space Grotesk + fontSize: 14px + fontWeight: '700' + lineHeight: 18px + letterSpacing: 0.06em + label-md: + fontFamily: Geist + fontSize: 12px + fontWeight: '600' + lineHeight: 16px + letterSpacing: 0.04em + label-sm: + fontFamily: Geist + fontSize: 10px + fontWeight: '700' + lineHeight: 12px + letterSpacing: 0.08em + telemetry-num: + fontFamily: Space Grotesk + fontSize: 28px + fontWeight: '700' + lineHeight: 32px + letterSpacing: -0.03em +spacing: + gutter: 1rem + gutter-desktop: 1.5rem + margin: 1rem + margin-desktop: 2rem + space-xs: 0.25rem + space-sm: 0.5rem + space-md: 1rem + space-lg: 1.5rem + space-xl: 2rem + space-2xl: 3rem +--- + +## Brand & Style + +This design system synthesizes avant-garde telematics with Dieter Rams' ten principles of good design—centered rigorously around the tenet of "Weniger, aber besser" (Less, but better). It bridges the functional precision of Braun audio and measuring hardware with the high-velocity demands of tactical urban navigation. + +The aesthetic strips away gratuitous skeuomorphism, gamified gloss, and distracting animations in favor of an uncompromising, matte-finished Bauhaus instrument panel. Every interface surface behaves like machined anodized housing or etched composite casing: stark, orthogonal, and devoid of rounded ornament. Visual emphasis relies exclusively on geometric hierarchy, stark black-and-white tonal contrast, and intentional, high-visibility signal accents calibrated for instantaneous glanceability at speed. + +The target user values austere functional clarity, mechanical reliability, and cognitive calm in chaotic environments. The emotional posture is calculated, objective, unhurried, and authoritative. + +## Colors + +The chromatic structure embodies physical calibration controls found on precision industrial equipment. + +- **Primary (`#EB8008` / Signal Orange):** The primary kinetic indicator. Reserved for active navigation vectors, primary interactive triggers, current vehicle telemetry, and dynamic route recalculations. It commands immediate optical priority against neutral surfaces. +- **Secondary (`#1A1A1A` / Matte Black):** The anchoring structure. Used for fundamental borders, primary typographic weights, technical readouts, and inverted industrial heads-up displays (HUDs). +- **Tertiary (`#736B1E` / Olive Green):** Utilitarian confirmation. Applied to verified route segments, clear operational conditions, speed verification zones, and system telemetry equilibrium. +- **Neutral (`#D9D2C6` / Soft Beige):** The foundational substrate. Evokes tactile unbleached matte instrument housings. It reduces retinal strain compared to harsh stark whites while preserving maximum contrast against pure black graphic marks. + +### Functional Application Rules +- **Functional Red (`#ED3F1C`):** Strict warning state. Used exclusively for hazards, critical telemetry alerts, road obstructions, and terminal errors. +- **Grayscale Map Grounding:** Cartographic vectors and tile layers render in calibrated, low-saturation monochrome grays (`#D9D2C6` to `#1A1A1A`) so that route guidance (`#EB8008`) and hazard events (`#ED3F1C`) remain hyper-legible without visual competition. + +## Typography + +Typography functions as structural architecture rather than superficial styling. + +- **Headline Font (`Space Grotesk`):** Chosen for its technical constructivist origins, rigid metric proportion, and deliberate mechanical joints. Headings and telemetry counters use tight tracking to emphasize solid form. +- **Body & Functional Font (`Geist`):** Engineered for ultra-clean digital rendering, neutral density, and absolute legibility. It handles dense navigational directives, distance metrics, status feeds, and command-line structures with zero friction. +- **Case System:** Labels, metrics, status states, and command triggers employ uppercase typesetting with expanded letter spacing (`0.04em` to `0.08em`) to mimic stamped DIN hardware labels and industrial control markings. + +## Layout & Spacing + +The layout is governed by an unyielding 8px geometric grid system derived from Dieter Rams' strict modular audio systems: +- All dimensions, element paddings, margins, and layout offsets must evaluate to multiples of `4px` or `8px`. +- Interfaces adopt a modular instrument panel structure. On handheld screens and chat-based panels, viewports partition into clear horizontal register bands: + - **Top Register:** Navigation horizon, compass bearing, status telemetry. + - **Center Register:** High-contrast graphic map tile or maneuver direction block. + - **Lower Register:** Modular interaction dock, metric cards, action controls. + +### Grid & Breakpoints +- **Compact Viewport (< 640px):** Single-column structural grid with `margin: 1rem` (16px) and `gutter: 1rem` (16px). Cards and modules stack vertically with flush-edge precision. +- **Medium Viewport (640px – 1024px):** 6-column fluid structure. Modular sidecar displays navigation data while maps claim equal structural weight. +- **Expanded Desktop / In-Dashboard Display (> 1024px):** 12-column rigid grid with `margin-desktop: 2rem` (32px) and `gutter-desktop: 1.5rem` (24px). Control consoles pin to a fixed 380px instrument column, leaving the remaining surface area for continuous telemetry. + +## Elevation & Depth + +True to the Dieter Rams philosophy, this design system rejects faux 3D dimensionality, dropped blurs, fuzzy shadows, and translucent frosted glass. + +### Depth Mechanics +- **Physical Planarity:** Hierarchy is expressed strictly through structural boundaries, edge weights, and matte value zoning. Surfaces are completely opaque. +- **Machined Inset Lines:** Structural separation uses crisp `1px` or `2px` solid rules (`#1A1A1A` over `#D9D2C6` or `#CCC4B5`). +- **Surface Nesting:** Secondary panels and telemetry modules sit flush inside the primary chassis, differentiated solely through background shifting (e.g., `#D9D2C6` transitioning into `#CCC4B5` or dark panel inversions using `#1A1A1A`). +- **Tactile Active Depressions:** Interactive items do not rise into floating space. When pressed or activated, elements invert colors (e.g., `#D9D2C6` background with `#1A1A1A` text switches instantly to `#1A1A1A` background with `#EB8008` text) or display a solid offset line (1px hard shadow at 0-degree blur), simulating a mechanical microswitch settling into its housing. + +## Shapes + +The design system operates with **absolute zero roundedness** (`0px` corner radius). + +Every card, button, modal box, notification banner, status badge, and graphic container terminates in strict, sharp 90-degree right angles. This geometry reinforces the physical metaphor of precision aluminum casings, high-tensile switchgear, and architectural schematics. + +Dividers, lines, and focus brackets are drawn with unyielding straight paths. Glyphs, direction arrows, and iconography are constructed using uniform stroke weights (2px standard) on pure orthogonal and 45-degree angled baselines. + +## Components + +### Buttons & Trigger Controls +- **Primary Action (e.g., "COMMENCE ROUTE", "CONFIRM HAZARD"):** Background `#EB8008`, label `#1A1A1A` in `label-lg` uppercase, border `2px solid #1A1A1A`, 0px radius. Hover/focus: background `#1A1A1A`, text `#EB8008`. +- **Secondary Action (e.g., "ALTERNATIVES", "CALIBRATE"):** Background `#D9D2C6`, label `#1A1A1A`, border `2px solid #1A1A1A`. Hover/focus: background `#CCC4B5`. +- **Command State / Bot Quick Buttons:** Monospaced-inspired Geist labels encased in a 1px solid `#1A1A1A` frame, padding `0.5rem 1rem`. + +### Telemetry Cards & Module Panels +- **Structure:** Crisp `1px solid #1A1A1A` perimeter border, `#D9D2C6` matte background, sharp corners. +- **Header Plate:** Separated by a horizontal `1px solid #1A1A1A` divider. Contains category in `label-sm` uppercase and an alphanumeric reference badge (e.g., `SEC-04 // SPEED`). +- **Content Block:** High-contrast data point in `telemetry-num` typography paired with adjacent directional indicator glyphs. + +### Chips & Event Tags +- **Configuration:** Monolithic rectangular blocks, no rounding. +- **Traffic State:** Background `#EB8008`, text `#1A1A1A`, `label-sm`. +- **Hazard / Incident:** Background `#ED3F1C`, text `#FFFFFF`, `label-sm`. +- **Operational / Safe:** Background `#736B1E`, text `#FFFFFF`, `label-sm`. + +### Input Fields & Search Bars +- **Frame:** `#D9D2C6` background with continuous `2px solid #1A1A1A` perimeter, 0px radius. +- **Typography:** `body-md` in `Geist`, dark matte text. +- **Focus Indicator:** 3px thick border in `#EB8008`, zero glow, zero blur. Input caret is a non-blinking solid block rectangle. + +### Checkboxes & Toggle Switches +- **Checkboxes:** Exact 18x18px squares with a `2px solid #1A1A1A` border. Checked state renders a solid centered 8x8px square in `#EB8008` (no checkmark glyph; pure geometric state). +- **Physical Two-Way Toggles:** Horizontal dual-box module (`[ OFF | ON ]`). Active side fills solidly with `#1A1A1A` and inverted text; inactive side displays muted background `#CCC4B5`. + +### Navigation Heads-Up Display (Maneuver Strip) +- **Chassis:** Inverted `#1A1A1A` container spanning full width across the upper viewport. +- **Graphic Vector:** 32x32px sharp directional turn arrow in `#EB8008` with `3px` stroke width. +- **Maneuver Typography:** `headline-md` in `#D9D2C6` describing street designation, accompanied by remaining distance set in `Space Grotesk` bold. \ No newline at end of file