Derive a full UI palette from one or two brand colours — state variants, brand-tinted greys, semantic colours. Use when building or expanding a colour system.
日本語の概要は準備中です。原文の説明を表示しています。
Semantic HTML5, SEO basics, alt text, progressive enhancement and SPA concerns. Use when building web UI, reviewing markup or optimising for search.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Good HTML is not just markup — it is the contract between your content, search engines, assistive technologies, and the browser. Semantic HTML, correct metadata, and progressive enhancement make UI resilient, findable, and accessible by default.
Use the element that describes the content's meaning, not just its appearance.
<header> <!-- site header, logo, primary nav -->
<nav> <!-- navigation links -->
<main> <!-- primary page content, one per page -->
<article> <!-- self-contained content: blog post, product card, news item -->
<section> <!-- thematic grouping with a heading -->
<aside> <!-- tangentially related content: sidebar, callout -->
<footer> <!-- site footer, secondary links, copyright -->
One <h1> per page — the primary topic. Headings form an outline: do not skip levels (h1 → h3 without h2).
<h1>Product name</h1>
<h2>Features</h2>
<h3>Feature detail</h3>
<h2>Pricing</h2>
<button> <!-- clickable action, submits or triggers JS -->
<a href> <!-- navigation to a URL -->
<input> <!-- user data entry -->
<select> <!-- option selection -->
<details> / <summary> <!-- native disclosure/accordion -->
Never use <div> or <span> as interactive elements without full ARIA annotation — and even then, prefer the native element.
Every <img> needs an alt attribute. What goes in it depends on context.
| Image type | Alt text |
|---|---|
| Informative (product photo, chart) | Describe content: alt="Red leather sofa, three-seater" |
| Functional (icon button, logo link) | Describe function: alt="Go to homepage" |
| Decorative | Empty: alt="" — screen readers skip it |
| Complex (chart, diagram) | Short alt + longer description nearby or in <figcaption> |
<!-- Informative -->
<img src="sofa.jpg" alt="Red leather sofa, three-seater">
<!-- Decorative -->
<img src="divider.svg" alt="">
<!-- With caption -->
<figure>
<img src="chart.png" alt="Bar chart showing revenue growth Q1–Q4 2025">
<figcaption>Revenue grew 42% year-on-year in Q4 2025.</figcaption>
</figure>
<title>Product Name — Short descriptor | Brand</title>
<meta name="description" content="One or two sentences. What this page is, who it is for, what they will find.">
<link rel="canonical" href="https://example.com/the-definitive-url">
Prevents duplicate content penalties when the same page is accessible via multiple URLs.
<meta property="og:title" content="Page title">
<meta property="og:description" content="Page description">
<meta property="og:image" content="https://example.com/og-image.jpg">
<meta property="og:url" content="https://example.com/page">
<meta property="og:type" content="website">
<!-- Twitter/X -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Page title">
<meta name="twitter:image" content="https://example.com/og-image.jpg">
OG image: 1200×630px. Appears when the URL is shared on Slack, LinkedIn, Twitter, iMessage.
The card's headline is the reader's phrase, not the article's insight. A feed supplies no context, so a line that needs the article to make sense reads as nonsense to a scrolling stranger. Put the plain promise they are already looking for on the card, in the vocabulary of the platform they are on, and keep the clever line for the page.
Adapt a card to a platform by mode, not by shade. Against a light feed a dark card reads as an ad banner; the fix is a light card on that platform's own ground, not a warmer navy or a softer blue. A hue nudge is invisible next to the platform's chrome and costs a round trip for nothing. Tone tweaks come after the mode is right.
Machine-readable content enables rich search results.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Product Name",
"description": "Product description",
"image": "https://example.com/product.jpg",
"offers": {
"@type": "Offer",
"price": "49.00",
"priceCurrency": "EUR"
}
}
</script>
Common types: Product, Article, BreadcrumbList, FAQPage, Organization, SiteLinksSearchBox.
Build in layers. The core content and function must work without JavaScript. Enhance with CSS. Enhance further with JS.
Layer 1: HTML — content is readable, links work, forms submit
Layer 2: CSS — layout, typography, visual design
Layer 3: JS — interactivity, animations, dynamic content
In practice:
<form action> without JS — JS can intercept and enhance with fetch<a href> — JS can add transitionssrc — JS can add lazy loading via loading="lazy" (now native)Single-page applications break browser defaults that SEO and accessibility depend on. Fix them explicitly.
Client-rendered HTML is not reliably indexed by search engines. Use SSR (Next.js, Nuxt, SvelteKit) or static generation for any content that needs to be found.
Update document.title and meta tags on every route change. Use the framework's <Head> component or equivalent.
On route change, move focus to the new page's <h1> or <main> — screen readers do not detect SPA navigation automatically.
// After route change
document.querySelector('h1')?.focus();
Restore scroll position to top on navigation, or to the saved position on back navigation. Browser default scroll restoration is disabled in SPAs.
Use pushState / replaceState so back/forward navigation and bookmarking work correctly.
Design and code should adapt to what the device and user can actually do.
localStorage, sessionStorage, and other browser capabilities (cookies, IndexedDB, media/permission queries) are legitimate tools for tailoring the experience — last view mode, chosen locale, a dismissed banner, an in-progress draft, a returning user's context.
Guardrails:
sessionStorage for one session, localStorage across sessions; never store anything sensitive client-side; honour consent.@media (hover: hover) {
/* hover states — mouse or trackpad */
.btn:hover { background: var(--color-primary-hover); }
}
@media (hover: none) {
/* touch device — no hover, larger targets */
.btn { min-height: 44px; }
}
@media (pointer: coarse) {
/* fat-finger touch — increase target sizes */
.interactive { min-height: 44px; min-width: 44px; }
}
@media (pointer: fine) {
/* mouse — precise, can use smaller targets */
}
Pointer precision can select a default behaviour, not only target size. Read the same query from JavaScript with matchMedia('(pointer: fine)'), but use each event's pointerType when the interaction model differs: a click that toggles and a pointer that pans on a mouse, pinch and double tap on touch. Never infer input type from viewport width; hybrid devices break the guess. See [[modal-and-overlay-patterns]] for the image-zoom case.
<!-- Lazy load images below the fold -->
<img src="product.jpg" loading="lazy" alt="...">
<!-- Serve modern formats with fallback -->
<picture>
<source srcset="image.avif" type="image/avif">
<source srcset="image.webp" type="image/webp">
<img src="image.jpg" alt="...">
</picture>
@media (prefers-reduced-motion: reduce) { /* disable animations */ }
@media (prefers-color-scheme: dark) { /* dark mode tokens */ }
@media (prefers-contrast: more) { /* increase contrast */ }
@media (forced-colors: active) { /* Windows high contrast mode */ }
<h1> per page, headings form a logical outline<main>, <nav>, <header>, <footer>, <article>, <section><img> has a meaningful alt or alt="" for decorative images<title> is unique per page, 50–60 characters, keyword-first<meta name="description"> present and 120–160 characters<link rel="canonical"> on pages accessible via multiple URLsdocument.title and meta tags on route change@media (hover: hover)@media (pointer: coarse)loading="lazy" below the foldprefers-reduced-motion respectedまだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Derive a full UI palette from one or two brand colours — state variants, brand-tinted greys, semantic colours. Use when building or expanding a colour system.
日本語の概要は準備中です。原文の説明を表示しています。
Top bar, app launcher, tenant and environment cue, status bar. Use when designing the persistent shell or navigation between apps behind one login.
日本語の概要は準備中です。原文の説明を表示しています。
Product visuals must show the real product with real data. Use when building landing pages, hero sections, screenshots or demo panels.
日本語の概要は準備中です。原文の説明を表示しています。
Shape language across type, radius and icons carries brand personality. Use when starting a design system, picking icons or radius tokens, or reviewing visual consistency.
日本語の概要は準備中です。原文の説明を表示しています。
Rest, hover, active, focus, disabled and loading states, derived from the base colour. Use when designing buttons, links, inputs or any clickable component.
日本語の概要は準備中です。原文の説明を表示しています。
Rebuild a live web page 1:1 from measurement into Figma, Penpot or code, then verify it. Use when reproducing a page or checking a rebuild against the original.
日本語の概要は準備中です。原文の説明を表示しています。