frontend-atlas
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseFrontend Atlas
Frontend Atlas
The implementation layer for premium front ends. Sibling skills judge whether and what
( anti-slop rules, critique/audit/polish, , ,
). This skill knows how: verified, copy-pasteable recipes for the motion, scroll,
type, hover, transition, background, shader and component effects that ship on the best sites in
2026, plus the judgment to pick the right one and tune it until it feels inevitable.
taste-skillimpeccablesoft-skillminimalist-skillbrutalist-skillVerified 2026-09-27 against: gsap 3.15 (every plugin free, new SplitText), @gsap/react 2.1,
motion 13.4 (), lenis 1.3 (), three r186, @react-three/fiber 9.8,
drei 10.7, animejs 4.5, tailwindcss 4.3, next 16.3, react 19.3. All TS/TSX recipes type-check
against those packages; the signature recipes were run in Chromium and audited with the scripts below.
Project rules beat this file (a project that is "GSAP only" stays GSAP only).
motion/reactlenis/react优质前端的实现层。配套 skill 负责判断是否应该做以及做什么
( 反粗制滥造规则、 评审/审计/打磨、、、
)。本 skill 知道如何实现:提供经过验证、可直接复制粘贴的配方,涵盖 2026 年最优秀网站所采用的
动效、滚动、字体、悬停、过渡、背景、shader 和组件效果,同时具备判断应选用哪种效果并持续调优,
直到最终效果显得自然且水到渠成。
taste-skillimpeccablesoft-skillminimalist-skillbrutalist-skill已于 2026-09-27 针对以下版本完成验证:gsap 3.15(所有插件均已免费,新版 SplitText)、@gsap/react 2.1、
motion 13.4()、lenis 1.3()、three r186、@react-three/fiber 9.8、
drei 10.7、animejs 4.5、tailwindcss 4.3、next 16.3、react 19.3。所有 TS/TSX 配方均已针对上述包通过类型检查;
代表性配方已在 Chromium 中运行,并使用下方脚本完成审计。
项目规则优先于本文件(采用“仅 GSAP”的项目就始终只使用 GSAP)。
motion/reactlenis/reactHow to use
使用方法
- Write the Design Read (below) before any code. Five lines, no more.
- Find the effect: the shortlist below, or search (every recipe with its anchor).
references/INDEX.md - Open ONLY the section you need. Reference files are long (700-3000 lines); never load them whole unless you are choosing between many options (then read that file's Decision guide table first).
- Copy the recipe, then tune the values under Tune to the chosen motion personality.
- Verify in a real browser with (see Verification). Not watched = not done.
scripts/motion-audit.mjs
- 编写任何代码前,先撰写 Design Read(设计解读,见下文)。最多五行。
- 查找所需效果:使用下方短列表,或搜索 (其中包含每个配方及其锚点)。
references/INDEX.md - 只打开所需章节。参考文件很长(700-3000 行);除非需要在多个选项之间做选择,否则切勿整体加载 (需要选择时,先阅读该文件的 Decision guide 表格)。
- 复制配方,然后根据所选动效人格调整 Tune 下的参数。
- 使用 在真实浏览器中验证(参见“验证协议”)。未实际观看就等于未完成。
scripts/motion-audit.mjs
Reference map
参考文件索引
| File | Open when |
|---|---|
| Looking up any effect by name (474 entries, grouped by file). |
| Easings, durations, springs, stagger, choreography, 7 motion personality presets. Read before any animation-heavy build. |
| Lenis smooth scroll, ScrollTrigger reveals, pinning, scrub, horizontal galleries, stacked cards, SplitText on scroll, image sequences, video scrub, Flip, Observer slides, refresh discipline. |
| Zero-JS scroll effects: |
| |
| Split-text reveals, scramble, typewriter, rotating words, text roll, variable-font play, marquees, counters, gradient/shimmer text, text on path, fitted wordmarks, kinetic intros. |
| Type scale, fluid type, tracking/leading, OpenType, 27 font pairings with sources and licences, loading without CLS, editorial type layouts. |
| Custom cursor, magnetic, hover reveals, image trail, button/link hovers, tilt, spotlight cards, tabs indicator, accordion, popovers, toasts, drawers, dock, drag, micro-feedback, feel-tuning table. |
| View Transitions (same-doc, cross-doc), React |
| Mesh/aurora/grain/grid backgrounds, conic borders, SVG draw/morph/goo/displacement, canvas particles/dot grids/flow fields, Lottie vs Rive. |
| WebGL loading shell, shader library (GLSL), image distortion, DOM-to-WebGL galleries, fluid cursor, particles, R3F glass hero, globes, post-processing, Paper Shaders, WebGPU/TSL. |
| 67 named components (21st.dev, Aceternity, Magic UI, React Bits, Motion Primitives, Cult UI...): install commands, self-owned code, overuse scores, section combos. |
| OKLCH ramps, semantic tokens, contrast (WCAG/APCA), dark mode, gradients, glass and liquid glass, shadows, borders, radius, image treatment. |
| Breakout grid, 12-col/subgrid, fluid space, 10 hero skeletons, bento, section patterns, sticky/overlap layouts, navigation, responsive strategy. |
| Choosing or executing one of 30 visual directions, each with tokens, fonts, motion signature, real reference sites, AI-slop tells. |
| Choosing/setting up any of 37 libraries: size, install, SSR caveats, status, recommended stacks per project type. |
| Before shipping anything animated: property cost, jank debugging, pausing offscreen work, CLS from pins, reduced motion done right, WCAG motion criteria, QA checklist. |
| Finding references, components, fonts, icons, assets, tools; reverse-engineering an effect seen on a live site. |
| 文件 | 何时打开 |
|---|---|
| 按名称查找任何效果(474 个条目,按文件分组)。 |
| 缓动、时长、弹簧、stagger、编排以及 7 种动效人格预设。进行任何动画密集型构建前应先阅读。 |
| Lenis 平滑滚动、ScrollTrigger 显现、pinning、scrub、横向画廊、堆叠卡片、随滚动 SplitText、图像序列、视频 scrub、Flip、Observer 幻灯片、refresh 纪律。 |
| 纯 JS 滚动效果: |
| |
| 文字拆分显现、打乱、打字机、轮换词语、文字滚动、可变字体玩法、marquee、计数器、渐变/微光文字、路径文字、自适应字标、动态标题。 |
| 字号体系、流式字体、字距/行距、OpenType、27 组字体搭配及其来源和许可、无 CLS 加载、编辑型排版布局。 |
| 自定义光标、磁吸、悬停显现、图像拖尾、按钮/链接悬停、倾斜、聚光卡片、标签指示器、手风琴、popover、toast、抽屉、dock、拖拽、微反馈、质感调优表。 |
| View Transitions(同文档、跨文档)、Next 16 中的 React |
| 网格/极光/颗粒背景、锥形边框、SVG 描边/变形/ goo /位移、canvas 粒子/点阵/流场、Lottie 与 Rive 对比。 |
| WebGL 加载外壳、shader 库(GLSL)、图像扭曲、DOM 到 WebGL 画廊、流体光标、粒子、R3F 玻璃首屏、地球、后处理、Paper Shaders、WebGPU/TSL。 |
| 67 个具名组件(21st.dev、Aceternity、Magic UI、React Bits、Motion Primitives、Cult UI……):安装命令、自主维护代码、过度使用评分、区块组合。 |
| OKLCH 色阶、语义 token、对比度(WCAG/APCA)、暗色模式、渐变、玻璃与液态玻璃、阴影、边框、圆角、图像处理。 |
| 突破式网格、12 栏/subgrid、流式间距、10 种首屏骨架、Bento、区块模式、粘性/重叠布局、导航、响应式策略。 |
| 选择或执行 30 种视觉方向之一,每种均包含 token、字体、动效特征、真实参考站点和 AI 粗制滥造特征。 |
| 选择/设置 37 个库:体积、安装、SSR 注意事项、维护状态以及按项目类型推荐的组合。 |
| 发布任何动画前:属性开销、卡顿调试、暂停离屏工作、pin 引起的 CLS、正确处理 reduced motion、WCAG 动效标准、QA 清单。 |
| 查找参考、组件、字体、图标、素材和工具;逆向分析在线站点中看到的某种效果。 |
Effect shortlist (most requested)
常用效果短列表
| Effect | Where |
|---|---|
| Smooth scroll (Lenis on the GSAP ticker) | |
| Reveal on scroll, zero JS | |
| Staggered card reveal | |
| Headline line-mask reveal | |
| Kinetic hero intro timeline | |
| Pinned hero zoom / clip expand | |
| Pinned multi-step story | |
| Horizontal scroll gallery | |
| Stacked cards | |
| Sticky split scrollytelling | |
| Parallax | |
| Words light up as you scroll | |
| Scroll-velocity skew / marquee | |
| Apple image sequence / video scrub | |
| Full-screen slide sections | |
| Reading progress, sticky header shrink | |
| Scramble / decrypt text | |
| Rotating words, text roll on hover | |
| Cursor-proximity variable type | |
| Giant fitted footer wordmark | |
| Marquee (CSS / velocity) | |
| Number counters | |
| Font pairing | |
| Custom cursor, magnetic buttons | |
| Hover image reveal list, image trail | |
| Button hover/press system | |
| Spotlight glow card grid | |
| Tabs sliding indicator | |
| Micro kit (hold, copy, like, switch) | |
| Route transitions in Next 16 (native) | |
| Shared element list -> detail | |
| Curtain / overlay route transition | |
| Theme toggle circle reveal | |
| Preloader + gated hero intro | |
| Fullscreen menu, hide-on-scroll nav | |
| Dialog / popover enter-exit in CSS | |
| Mesh gradient, aurora, grain | |
| Border beam / rotating conic border | |
| SVG line drawing, morphing | |
| Interactive dot grid, constellation | |
| Shader gradient background | |
| WebGL image hover / gallery | |
| Fluid cursor, particle morph | |
| 3D glass hero (R3F) | |
| Globe | |
| Bento grid | |
| Proven section combos | |
| Hero layouts | |
| Palette from one brand color | |
| Dark mode, no theme flash | |
| Glass / liquid glass | |
| Choosing a visual direction | |
| 效果 | 位置 |
|---|---|
| 平滑滚动(Lenis 接入 GSAP ticker) | |
| 滚动显现,零 JS | |
| 卡片错峰显现 | |
| 标题逐行遮罩显现 | |
| 动态首屏标题时间线 | |
| 固定首屏缩放/裁剪扩展 | |
| 固定式多步骤叙事 | |
| 横向滚动画廊 | |
| 堆叠卡片 | |
| 粘性分栏滚动叙事 | |
| 视差 | |
| 文字随滚动逐词点亮 | |
| 滚动速度倾斜 / marquee | |
| Apple 风格图像序列/视频 scrub | |
| 全屏幻灯片区块 | |
| 阅读进度、粘性页头收缩 | |
| 文字打乱/解密 | |
| 轮换词语、悬停文字滚动 | |
| 随光标距离变化的可变字体 | |
| 超大宽度自适应页脚字标 | |
| Marquee(CSS/速度响应式) | |
| 数字计数器 | |
| 字体搭配 | |
| 自定义光标、磁吸按钮 | |
| 悬停图像显现列表、图像拖尾 | |
| 按钮悬停/按压系统 | |
| 聚光发光卡片网格 | |
| 标签滑动指示器 | |
| 微交互套件(长按、复制、点赞、切换) | |
| Next 16 原生路由过渡 | |
| 共享元素列表 -> 详情 | |
| 幕布/遮罩路由过渡 | |
| 主题切换圆形显现 | |
| 预加载器 + 首屏门控 | |
| 全屏菜单、滚动隐藏导航 | |
| CSS dialog/popover 进入与退出 | |
| 网格渐变、极光、颗粒 | |
| 边缘光束/旋转锥形边框 | |
| SVG 线条绘制、变形 | |
| 交互式点阵、星座网络 | |
| Shader 渐变背景 | |
| WebGL 图像悬停/画廊 | |
| 流体光标、粒子变形 | |
| 3D 玻璃首屏(R3F) | |
| 地球 | |
| Bento 网格 | |
| 经过验证的区块组合 | |
| 首屏布局 | |
| 从单一品牌色生成调色板 | |
| 暗色模式、无主题闪烁 | |
| 玻璃/液态玻璃 | |
| 选择视觉方向 | |
Design Read (always first)
Design Read(始终先做)
Direction: <one entry from aesthetic-directions.md, or a named blend of two>
Motion personality: <preset from motion-principles.md#21-motion-personality-presets>
Signature moment: <the ONE effect a visitor will remember, and where it lives>
Supporting layer: <one reveal system + hover/press/focus feedback + transitions>
Stack: <CSS-native | Motion | GSAP+Lenis | +OGL/R3F> because <reason>If the brief is vague ("make it premium"), infer from the product, audience and existing brand,
state the read, and proceed. Ask only when two very different directions are equally plausible.
Direction: <one entry from aesthetic-directions.md, or a named blend of two>
Motion personality: <preset from motion-principles.md#21-motion-personality-presets>
Signature moment: <the ONE effect a visitor will remember, and where it lives>
Supporting layer: <one reveal system + hover/press/focus feedback + transitions>
Stack: <CSS-native | Motion | GSAP+Lenis | +OGL/R3F> because <reason>如果需求描述较为模糊(例如“让它更有高级感”),应根据产品、受众和现有品牌进行推断,
陈述 Design Read 后继续执行。只有当两种截然不同的方向具有同等合理性时,才需要提问。
Choosing the stack
选择技术栈
Pick the lightest tool that can express the effect:
- CSS only: hover/press/focus, popover/dialog enter-exit (), accordions, reveal-on-enter and progress bars (scroll-driven animations, with a fallback), marquees, gradient/conic animations (
@starting-style). Zero JS, off the main thread.@property - Motion (): React app UI. Layout animations,
motion/reactshared elements, presence/exit, gestures and drag, springs, reorderable lists.layoutId - GSAP + ScrollTrigger + Lenis: scroll storytelling and timelines. Pinning, scrubbed multi-step sequences, horizontal sections, SplitText, Flip, DrawSVG/MorphSVG, intro sequences.
- WebGL (OGL for 2D shader effects, R3F for scenes): only when the concept needs it. Always ship a static poster fallback through the loading shell (webgl recipe 1).
Motion and GSAP can live in one project for different jobs, never on the same element.
One smooth-scroll instance, one RAF loop (drive Lenis from when GSAP is present).
gsap.ticker选择能够表达所需效果的最轻量工具:
- 仅 CSS:悬停/按压/聚焦、popover/dialog 进入与退出()、手风琴、 进入时显现和进度条(滚动驱动动画,并提供回退方案)、marquee、 渐变/锥形动画(
@starting-style)。零 JS,不占用主线程。@property - Motion():React 应用 UI。布局动画、
motion/react共享元素、 存在/退出、手势与拖拽、弹簧、可重排列表。layoutId - GSAP + ScrollTrigger + Lenis:滚动叙事和时间线。Pinning、scrub 多步骤序列、 横向区块、SplitText、Flip、DrawSVG/MorphSVG、首次展示序列。
- WebGL(2D shader 使用 OGL,场景使用 R3F):仅在概念确实需要时使用。 始终通过加载外壳提供静态海报回退方案(见 WebGL 配方 1)。
Motion 和 GSAP 可以用于同一项目中的不同任务,但绝不能作用于同一元素。
只能存在一个平滑滚动实例和一个 RAF 循环(存在 GSAP 时,通过 驱动 Lenis)。
gsap.tickerPlatform facts that change the code (verified 2026-09-27)
会影响代码的平台事实(已于 2026-09-27 验证)
- CSS scroll-driven animations: Chrome 115+, Safari 26+, Firefox only from 159 (scheduled
2026-10-27). Not Baseline: always + a fallback.
@supports (animation-timeline: view()) - View Transitions: same-document in all engines (Firefox 144+), cross-document not in Firefox.
React 19.3 stable exports /
<ViewTransition>; Next 16.3 needs no flag.addTransitionType - Default GSAP causes CLS: measured 0.75 at pin + 1.0 at unpin per 100vh section in Chromium (scroll is not an excluding input). CSS
pin: true+ scrub andposition: stickyboth measured 0. Prefer sticky tracks where the layout allows.pinType: "transform" - ScrollTriggers created out of page order (lazy sections, a value in useGSAP
useLenis()) fire early by the pin length. Higherdependenciesrefreshes first, and anyrefreshPriorityenables auto-sorting by page position. (The official gsap-scrolltrigger skill states this backwards; the source is authoritative.)refreshPriority - Chromium-only today: ,
interpolate-size, CSS carousels (corner-shape),::scroll-markerqueries,scroll-state(),if(). Use them as progressive enhancement only.@function - API changes that break older snippets: cobe 2 has no (drive
onRenderfrom your own rAF); drei 10globe.update()takesPresentationControls, notdamping;configis deprecated (r183+); Next 16THREE.ClockusesImageinstead ofpreload; Motion'spriorityimports fromAnimateView; tsParticles v4 usesmotion/react-animate-view.ParticlesProvider - Inline on a wrapper overrides a caller's
style={{ position: ... }}class and collapses it to 0 px: keep positioning in classes for any component that acceptsabsolute inset-0.className
- CSS 滚动驱动动画:Chrome 115+、Safari 26+、Firefox 仅从 159 开始支持(计划于
2026-10-27 发布)。尚未达到 Baseline:始终应使用 并提供回退方案。
@supports (animation-timeline: view()) - View Transitions:同文档转换在所有引擎中均受支持(Firefox 144+),跨文档转换尚不支持 Firefox。
React 19.3 稳定版导出 /
<ViewTransition>;Next 16.3 无需开启 flag。addTransitionType - GSAP 默认的 会导致 CLS:在 Chromium 中实测,每个 100vh 区块在 pin 时为 0.75, unpin 时为 1.0(滚动不属于可排除的输入)。CSS
pin: true配合 scrub,以及position: sticky,两者实测均为 0。布局允许时,应优先采用 sticky 轨道。pinType: "transform" - 脱离页面顺序创建的 ScrollTrigger(懒加载区块、useGSAP 中变化的
dependencies值) 会根据 pin 长度提前触发。较高的useLenis()会优先刷新;设置任意refreshPriority都会启用 按页面位置自动排序。(官方 gsap-scrolltrigger skill 的描述与此相反;应以源码为准。)refreshPriority - 目前仅 Chromium 支持:、
interpolate-size、CSS 轮播(corner-shape)、::scroll-marker查询、scroll-state()、if()。仅应将其作为渐进增强功能使用。@function - 会破坏旧代码片段的 API 变更:cobe 2 不再提供 (应通过自己的 rAF 驱动
onRender); drei 10 的globe.update()接受PresentationControls,而不是damping;config已弃用 (r183+);Next 16 的THREE.Clock使用Image,而不是preload;Motion 的priority从AnimateView导入;tsParticles v4 使用motion/react-animate-view。ParticlesProvider - 包装元素上的内联 会覆盖调用方传入的
style={{ position: ... }}class, 并将其高度压缩为 0 px:对于接受absolute inset-0的组件,应始终使用 class 管理定位。className
Page choreography blueprint
页面编排蓝图
| Layer | Budget | Typical recipe |
|---|---|---|
| Arrival | hero readable in under 1.2 s | optional preloader only for a real brand moment or heavy assets, then a hero timeline: headline line-mask reveal, media scale/clip-in, nav fade last |
| Signature | exactly one per page | pinned scrub sequence, horizontal gallery, stacked cards, WebGL hero, or kinetic headline |
| Rhythm | one system for every section | same ease, distance (24-48 px), stagger (40-80 ms) for all reveals; no per-section novelty |
| Feedback | every interactive element | hover/press/focus at 120-250 ms; magnetic or cursor effects only on pointer:fine |
| Transitions | route and state changes | view transitions or a curtain matching the direction |
| Finale | footer | giant fitted wordmark, marquee, or a quiet sign-off; not another spectacle |
- One hero effect per viewport. Two competing motions cancel each other.
- Motion follows the spatial model: things enter from where they logically come from and leave toward where they go. Keep direction consistent across the page.
- Lead with the largest element, follow with detail. Text last when media carries the moment, text first when the headline is the moment.
- Exits are faster than entrances (about 0.75x). High-frequency actions get little or no motion.
- Reveal once. Re-animating content every time it re-enters the viewport is noise.
- Scroll-linked motion must feel attached to the finger: scrub with slight smoothing
(to
scrub: 0.5), never time-based animations that fight the scroll.1 - Never hijack scroll speed or direction on content pages. Pin, do not trap.
| 层级 | 预算 | 典型配方 |
|---|---|---|
| 到达 | 首屏应在 1.2 秒内可读 | 仅在确有品牌时刻或资源较重时使用可选预加载器,随后执行首屏时间线:标题逐行遮罩显现、媒体缩放/裁剪进入、导航最后淡入 |
| 标志性效果 | 每页恰好一个 | pinned scrub 序列、横向画廊、堆叠卡片、WebGL 首屏或动态标题 |
| 节奏 | 每个区块使用同一套系统 | 所有显现采用相同的缓动、距离(24-48 px)和 stagger(40-80 ms);不要每个区块都标新立异 |
| 反馈 | 每个可交互元素 | hover/press/focus 控制在 120-250 ms;磁吸或光标效果仅适用于 |
| 过渡 | 路由和状态变化 | View Transitions 或与移动方向一致的幕布过渡 |
| 收尾 | 页脚 | 超大宽度自适应字标、marquee 或安静的结束语;不要再加入另一场视觉奇观 |
- 每个视口只保留一个首屏效果。两个相互竞争的动效会彼此抵消。
- 动效应遵循空间模型:元素应从逻辑上的来源方向进入,并向其目标方向离开。 整个页面的方向应保持一致。
- 先呈现最大元素,再补充细节。当媒体是重点时,文字最后出现;当标题是重点时,文字最先出现。
- 退场应快于入场(约为 0.75 倍)。高频操作应使用很少的动效或完全不使用动效。
- 只显现一次。内容每次重新进入视口时都重复播放动画,只会制造噪声。
- 滚动关联动效必须让人感觉与手指相连:scrub 应带少量平滑处理
(到
scrub: 0.5),切勿使用与滚动相互对抗的基于时间的动画。1 - 在内容页面上,绝不要劫持滚动速度或方向。可以 pin,但不要困住用户。
Non-negotiables
不可妥协的原则
- : replace movement with opacity or the static end state; stop parallax, auto-play, marquees and scroll-jacking; keep all content visible (
prefers-reduced-motion).performance-a11y.md#15-reduced-motion-reduce-dont-remove - Auto-moving content longer than 5 s (marquees, carousels, video backgrounds) needs a pause control or pause on hover/focus (WCAG 2.2.2).
- Animate and
transformby default.opacity,filter,backdrop-filterandclip-pathare fine on small or short-lived elements; never scrub them on full-viewport surfaces.mask - Pointer effects (custom cursor, magnetic, tilt, hover reveals) only under
, with a touch-friendly equivalent. Hide-until-hover states must be gated the same way (a landscape tablet is
(hover: hover) and (pointer: fine)wide and cannot hover).lg - The LCP element is never hidden behind a long preloader. Server-render content; animate from a
visible or quickly revealed state. Loaders and intro curtains are opt-in: hidden unless a head
script sets , so no-JS visitors and failed bundles never see a blank screen.
html[data-intro="run"] - Split text keeps an accessible label (on the parent, split pieces
aria-label).aria-hidden - Clean up everything: scope, ScrollTriggers, Lenis, RAF loops, observers, WebGL contexts. No
useGSAPat module scope (SSR).window - Tokens, not magic numbers: durations, easings, distances and staggers live in CSS custom properties or one TS constants module.
- Test in both themes (if the site has two), at 375 px and 1440 px, and with CPU throttled 4x.
- :用透明度变化或静态结束状态替代运动;停止视差、自动播放、marquee 和滚动劫持;确保所有内容均可见(
prefers-reduced-motion)。performance-a11y.md#15-reduced-motion-reduce-dont-remove - 自动运动且持续超过 5 秒的内容(marquee、轮播、视频背景)需要暂停控件, 或在 hover/聚焦时暂停(WCAG 2.2.2)。
- 默认只动画化 和
transform。opacity、filter、backdrop-filter和clip-path可用于较小或短生命周期的元素;绝不要在覆盖整个视口的表面上对它们使用 scrub。mask - 指针效果(自定义光标、磁吸、倾斜、悬停显现)只能在
下使用,并提供适合触控设备的等效方案。悬停前隐藏的状态 也必须采用相同限制(横向平板虽然宽度达到
(hover: hover) and (pointer: fine),但无法 hover)。lg - LCP 元素绝不能被长时间预加载器遮挡。应在服务端渲染内容;从可见或快速显现的状态开始动画。
加载器和首次展示幕布必须由用户主动选择启用:除非 head script 设置 ,否则一律隐藏, 确保禁用 JS 的访问者和加载失败的 bundle 永远不会看到空白页面。
html[data-intro="run"] - 拆分文字必须保留可访问标签(父元素使用 ,拆分片段使用
aria-label)。aria-hidden - 清理所有资源:scope、ScrollTrigger、Lenis、RAF 循环、观察器和 WebGL 上下文。 模块作用域中不得使用
useGSAP(SSR)。window - 使用 token,而不是魔法数字:时长、缓动、距离和 stagger 应存放在 CSS 自定义属性 或一个 TS 常量模块中。
- 在两种主题(如网站支持双主题)、375 px 和 1440 px 宽度下进行测试,并将 CPU 限制为 4 倍后复测。
Verification protocol
验证协议
Scripts live in this skill's folder and need (or ) in the
project plus an installed Chrome/Edge (or set ). below is this skill's
base directory (shown when the skill loads; for a manual install).
scripts/playwright-coreplaywrightAUDIT_BROWSER<skill-dir>~/.claude/skills/frontend-atlas- Start the dev server, then run
. It scrolls with real wheel input (so Lenis/ScrollTrigger react), screenshots intro frames and every scroll step, and runs again with
node <skill-dir>/scripts/motion-audit.mjs http://localhost:3000 --out motion-audit --widths 1440,390 --steps 16. It reports console errors, horizontal overflow with the culprit element, content that entered the viewport but was never visible (reveals that never fired), CLS with the shifting nodes, frame pacing and long animation frames. Headless numbers are for before/after comparison, not field data.prefers-reduced-motion: reduce - builds one image of the whole scroll: read it to check choreography, pins and crossfades.
node <skill-dir>/scripts/contact-sheet.mjs motion-audit --match motion-1440-scroll - When a scroll effect fires early or late, compare with each trigger's
ScrollTrigger.getAll().map(t => [t.trigger, t.start])(creation-order bug, see facts above).getBoundingClientRect().top + scrollY - Keyboard pass: tab through menus, dialogs and transitions; focus stays visible and trapped
where it should be. Then run the skill over the changed files.
web-design-guidelines
Maintaining this skill: after editing any reference, run
(regenerates ) and from the
skill folder. Re-verify changed recipes in a browser before trusting them.
node scripts/maintenance/build-index.mjsreferences/INDEX.mdnode scripts/maintenance/check-links.mjs --links脚本位于本 skill 的 目录,需要项目安装 (或 ),
并安装 Chrome/Edge(或设置 )。下方的 表示本 skill 的基础目录
(加载 skill 时会显示;手动安装时为 )。
scripts/playwright-coreplaywrightAUDIT_BROWSER<skill-dir>~/.claude/skills/frontend-atlas- 启动开发服务器,然后运行
。 它会使用真实滚轮输入进行滚动(使 Lenis/ScrollTrigger 正常响应),截取初始画面和每个滚动步骤的画面, 并在
node <skill-dir>/scripts/motion-audit.mjs http://localhost:3000 --out motion-audit --widths 1440,390 --steps 16下再次运行。它会报告控制台错误、带有问题元素的水平溢出、 已进入视口却从未显示的内容(未触发的显现)、包含发生位移节点的 CLS、 帧节奏以及耗时过长的动画帧。无头模式下的数值用于前后对比,不代表真实环境数据。prefers-reduced-motion: reduce - 会将整个滚动过程合成为一张图片:读取该图片,检查编排、pin 和交叉淡入淡出。
node <skill-dir>/scripts/contact-sheet.mjs motion-audit --match motion-1440-scroll - 当滚动效果过早或过晚触发时,将 的结果与每个触发器的
ScrollTrigger.getAll().map(t => [t.trigger, t.start])进行比较 (创建顺序问题参见上方事实)。getBoundingClientRect().top + scrollY - 键盘检查:通过 Tab 键依次访问菜单、dialog 和过渡;焦点必须始终可见,并在适当位置受到约束。
然后对变更过的文件运行 skill。
web-design-guidelines
维护本 skill:编辑任何参考文件后,运行
(重新生成 ),并从 skill 目录运行 。
在信任变更后的配方前,应重新在浏览器中完成验证。
node scripts/maintenance/build-index.mjsreferences/INDEX.mdnode scripts/maintenance/check-links.mjs --linksCompanion skills
配套 skills
Recommended alongside this skill (install commands in the repository README); when installed, use
them as deep API references once the stack is chosen:
- ,
gsap-core,gsap-timeline,gsap-scrolltrigger,gsap-plugins,gsap-react,gsap-utils,gsap-performance: official GreenSock skills (gsap-frameworks). Wheregreensock/gsap-skillsdescribesgsap-scrolltriggerordering, trust the platform fact above.refreshPriority - : deep patterns for React
vercel-react-view-transitionsin Next.<ViewTransition> - : Vercel's Web Interface Guidelines as a final review pass.
web-design-guidelines - : React/Next performance rules (all three from
vercel-react-best-practices).vercel-labs/agent-skills - Taste and critique: ,
taste-skill,redesign-skill(soft-skill) andLeonxlnx/taste-skill(impeccable).pbakaus/impeccable
Precedence: project rules > this skill's stack decision > a companion's default ("recommend
GSAP" in the GSAP skills does not override choosing CSS or Motion when they are lighter).
建议与本 skill 搭配使用(安装命令见仓库 README);技术栈确定后,可将其作为深入 API 参考:
- 、
gsap-core、gsap-timeline、gsap-scrolltrigger、gsap-plugins、gsap-react、gsap-utils、gsap-performance:官方 GreenSock skills(gsap-frameworks)。 如果greensock/gsap-skills对gsap-scrolltrigger顺序的描述与此不同,请以上方平台事实为准。refreshPriority - :React
vercel-react-view-transitions在 Next 中的深入模式。<ViewTransition> - :将 Vercel Web Interface Guidelines 作为最终审查环节。
web-design-guidelines - :React/Next 性能规则(三项均来自
vercel-react-best-practices)。vercel-labs/agent-skills - 审美与评审:、
taste-skill、redesign-skill(soft-skill) 和Leonxlnx/taste-skill(impeccable)。pbakaus/impeccable
优先级:项目规则 > 本 skill 的技术栈决策 > 配套 skill 的默认设置
(GSAP skills 中“推荐 GSAP”的建议,不会覆盖在更轻量方案可完成时应选择 CSS 或 Motion 的原则)。
Motion slop to refuse (quick list)
必须拒绝的低质动效(快速清单)
- Fade-up on every section with identical timing, the default AI reveal. Use one crafted reveal system and let some sections simply be there.
- Bounce or elastic easing on UI, scale-from-zero, spinning or wobbling decorations.
- Purple-to-blue aurora + grid + beams + shimmer button + bento as a stack of defaults
().
aesthetic-directions.md#global-ai-slop-tells-evidence-ranked - Tilt, glow and magnetic effects on everything at once.
- Custom cursor on a content or product site with no reason for it.
- Parallax on text blocks, parallax ratios above about 0.3 on content, horizontal scroll for plain text content.
- Preloaders that exist only to show a counter.
- Typewriter headlines, gradient text on every heading, glitch effects outside a clear concept.
When a request would land in this list, pick the tasteful variant from the relevant reference file
and say briefly why.
- 每个区块都以相同时序淡入上移,即默认的 AI 显现方式。应设计一套精心打造的显现系统, 并允许部分区块直接保持可见。
- UI 使用弹跳或弹性缓动,从零开始缩放,或让装饰元素持续旋转、晃动。
- 将紫蓝极光、网格、光束、微光按钮和 Bento 机械地堆叠在一起
()。
aesthetic-directions.md#global-ai-slop-tells-evidence-ranked - 对所有元素同时使用倾斜、发光和磁吸效果。
- 在没有合理目的的内容站或产品站上使用自定义光标。
- 对文字区块使用视差;内容上的视差比例超过约 0.3;为纯文本内容使用横向滚动。
- 预加载器仅仅用于展示一个计数器。
- 使用打字机标题、给每个标题添加渐变文字,或在概念不明确时使用故障效果。
如果某项需求会落入上述清单,应从相关参考文件中选择更有品味的变体,并简要说明原因。