web-design — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited web-design (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Before doing anything in this skill, read `./brain/brand-guide/brand-guide.md`.
That file is authoritative for colors, typography, gradients, buttons, tags, cards, spacing, shadows, and dark-theme rules. This skill does not redefine any of those. If you find yourself about to write a hex code, type scale, or button variant into a page, stop — reference brand-guide instead.
Production source of truth for component patterns: [your-site-repo-path]/src/.
In scope:
[your-site-repo-path]hubspot-landing-page for template mechanics)Out of scope — use the right skill instead:
brand-designhubspot-emailhubspot-landing-pagehubspot-ctaimage-gencopywriting / copy-editingLoad the reference file for the problem you are solving. Do not load all of them.
When the user asks for review, polish, or critique, pick the workflow that matches. Don't announce the workflow — just do it.
Used when asked to "audit," "check," or "review" a page for correctness.
accessibility.md, responsive.md, interaction.md.agent-browser and snapshot it. Mandatory for any shipped page — don't audit from source alone, class names drift.Used when asked "what's wrong with this" or "does this feel right."
anti-patterns.md and component-composition.md.Used before a page ships or when asked to "polish" / "tighten" / "finalize."
anti-patterns.md, motion.md, interaction.md.all 0.3s (or the production value in use).Used when asked to fix fonts, hierarchy, or "the text feels wrong."
background-clip: text.Used when asked to fix spacing, alignment, or "rhythm feels off."
999px pills unless the brand guide defines them.Every design change to a shipped page must be verified with `agent-browser` before declaring it done. Class names in source != class names in the live DOM (dynamically-loaded CSS, form renderers, and CMS wrappers all rewrite markup at runtime). Snapshot the live page, confirm the change rendered, confirm nothing else regressed.
Universal rules, plus wherever the brand guide defines a value, that value wins. If you see any of these in a page, fix them:
background-clip: text. Never apply a text-only gradient to lines, borders, or backgrounds.references/anti-patterns.md and brand-guide as they accumulate — this list stays universal.An image (or any element) that hides mostly behind a card, peeks out with a subtle bounce to tease interaction, then slides fully into view on hover. On mobile (no hover), show the element statically.
Key implementation detail: CSS animations override transitions on the same property. If the bounce and hover both animate transform on the same element, the first hover jumps instead of transitioning. Fix: use a tiny JS snippet that adds a class on first mouseenter to kill the animation, letting the CSS transition take over cleanly. This keeps the bounce on the actual container (the whole frame moves, not just content inside it).
.peek-container {
transform: translateY(14px); /* mostly hidden behind the card below */
transition: transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);
margin-bottom: -100px; /* overlap with card */
overflow: hidden;
border-radius: 20px 20px 0 0;
animation: peekBounce 3s ease-in-out 1.5s infinite;
}
.peek-container.peek-hovered {
animation: none; /* JS adds this on first hover */
}
@keyframes peekBounce {
0%, 100% { transform: translateY(14px); }
50% { transform: translateY(6px); }
}
.parent:hover .peek-container {
transform: translateY(-86px); /* fully revealed */
}
.card { position: relative; z-index: 1; }
/* Mobile: static, no tricks */
@media (max-width: 960px) {
.peek-container { transform: none; margin-bottom: 16px; animation: none; }
.parent:hover .peek-container { transform: none; }
}// Kill bounce animation on first hover so CSS transition takes over
document.addEventListener('DOMContentLoaded', function() {
var parent = document.querySelector('.parent');
var peek = document.querySelector('.peek-container');
if (parent && peek) {
parent.addEventListener('mouseenter', function() {
peek.classList.add('peek-hovered');
}, { once: true });
}
});Tune the translateY values per image height and desired peek amount. The 1.5s animation delay prevents the bounce from firing during page load animations.
[your-site-repo-path]/src/components/. Copy its patterns — don't invent parallel ones.agent-browser if it's shipping.Built pages go wherever the framework dictates (e.g., src/ for Next.js). Supporting docs (specs, audit notes) go to marketing/pages/[page-slug]/ — confirm the project slug with the user before creating files.
<!-- Updated by /reflect in your instance. Promote stable patterns to the main skill body. Ships empty. -->
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.