freecodego 0.1.7-alpha.2.2 → 0.1.7-rc.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.i18n.yaml +45 -5
- package/README.md +11 -11
- package/README.zh.md +11 -11
- package/cordis.patch.yml +230 -126
- package/dist/assets/design/craft/FUTURE_SECTIONS.md +9 -0
- package/dist/assets/design/craft/LICENSE +201 -0
- package/dist/assets/design/craft/PROVENANCE.md +77 -0
- package/dist/assets/design/craft/README.md +106 -0
- package/dist/assets/design/craft/accessibility-baseline.md +201 -0
- package/dist/assets/design/craft/animation-discipline.md +154 -0
- package/dist/assets/design/craft/anti-ai-slop.md +84 -0
- package/dist/assets/design/craft/color.md +88 -0
- package/dist/assets/design/craft/form-validation.md +221 -0
- package/dist/assets/design/craft/laws-of-ux.md +296 -0
- package/dist/assets/design/craft/rtl-and-bidi.md +186 -0
- package/dist/assets/design/craft/state-coverage.md +134 -0
- package/dist/assets/design/craft/typography-hierarchy-editorial.md +182 -0
- package/dist/assets/design/craft/typography-hierarchy.md +165 -0
- package/dist/assets/design/craft/typography.md +122 -0
- package/dist/assets/design/react-bits/SKILL.md +130 -0
- package/dist/assets/design/skills/embedded-captions/CATALOG.md +91 -0
- package/dist/assets/design/skills/embedded-captions/SKILL.md +260 -0
- package/dist/assets/design/skills/embedded-captions/assets/fonts/char-widths.json +2211 -0
- package/dist/assets/design/skills/embedded-captions/assets/strokefonts/HersheyScript1.svg +242 -0
- package/dist/assets/design/skills/embedded-captions/assets/strokefonts/HersheyScriptMed.svg +242 -0
- package/dist/assets/design/skills/embedded-captions/dna/README.md +148 -0
- package/dist/assets/design/skills/embedded-captions/dna/chrome.json +68 -0
- package/dist/assets/design/skills/embedded-captions/dna/cream.json +69 -0
- package/dist/assets/design/skills/embedded-captions/dna/documentary.json +62 -0
- package/dist/assets/design/skills/embedded-captions/dna/editorial.json +70 -0
- package/dist/assets/design/skills/embedded-captions/dna/glitch.json +82 -0
- package/dist/assets/design/skills/embedded-captions/dna/ink.json +65 -0
- package/dist/assets/design/skills/embedded-captions/dna/keynote.json +62 -0
- package/dist/assets/design/skills/embedded-captions/dna/loud.json +75 -0
- package/dist/assets/design/skills/embedded-captions/dna/neon.json +58 -0
- package/dist/assets/design/skills/embedded-captions/dna/velocity.json +89 -0
- package/dist/assets/design/skills/embedded-captions/modes/cinematic/README.md +48 -0
- package/dist/assets/design/skills/embedded-captions/modes/cinematic/_archive/champion/spec.md +98 -0
- package/dist/assets/design/skills/embedded-captions/modes/cinematic/_archive/champion/template.html +188 -0
- package/dist/assets/design/skills/embedded-captions/modes/cinematic/_archive/memory-wall/spec.md +134 -0
- package/dist/assets/design/skills/embedded-captions/modes/cinematic/_archive/memory-wall/template.html +179 -0
- package/dist/assets/design/skills/embedded-captions/modes/cinematic/_archive/portrait-header/spec.md +81 -0
- package/dist/assets/design/skills/embedded-captions/modes/cinematic/_archive/portrait-header/template.html +170 -0
- package/dist/assets/design/skills/embedded-captions/modes/cinematic/cinematic-cream/spec.md +16 -0
- package/dist/assets/design/skills/embedded-captions/modes/cinematic/cinematic-cream/template.html +226 -0
- package/dist/assets/design/skills/embedded-captions/modes/cinematic/engine.html +355 -0
- package/dist/assets/design/skills/embedded-captions/modes/standard/_anatomy.md +232 -0
- package/dist/assets/design/skills/embedded-captions/modes/standard/_motion.md +192 -0
- package/dist/assets/design/skills/embedded-captions/references/aesthetic-principles.md +167 -0
- package/dist/assets/design/skills/embedded-captions/references/anti-patterns.md +188 -0
- package/dist/assets/design/skills/embedded-captions/references/bespoke-vs-presets.md +178 -0
- package/dist/assets/design/skills/embedded-captions/references/caption-grouping.md +130 -0
- package/dist/assets/design/skills/embedded-captions/references/composition-craft.md +522 -0
- package/dist/assets/design/skills/embedded-captions/references/direction-catalog.md +138 -0
- package/dist/assets/design/skills/embedded-captions/references/example-renders/champion.html +371 -0
- package/dist/assets/design/skills/embedded-captions/references/example-renders/memory-wall.html +334 -0
- package/dist/assets/design/skills/embedded-captions/references/failure-modes.md +145 -0
- package/dist/assets/design/skills/embedded-captions/references/layout-heuristics.md +238 -0
- package/dist/assets/design/skills/embedded-captions/references/motion-vocabulary.md +148 -0
- package/dist/assets/design/skills/embedded-captions/references/rail.md +68 -0
- package/dist/assets/design/skills/embedded-captions/references/reference-bar.md +47 -0
- package/dist/assets/design/skills/embedded-captions/references/scene-types.md +94 -0
- package/dist/assets/design/skills/embedded-captions/references/typographic-moves.md +266 -0
- package/dist/assets/design/skills/embedded-captions/references/typography-presets.md +63 -0
- package/dist/assets/design/skills/embedded-captions/scripts/fixtures/heroless/theme.json +11 -0
- package/dist/assets/design/skills/embedded-captions/scripts/fixtures/heroless/transcript.json +10 -0
- package/dist/assets/design/skills/embedded-captions/themes/README.md +243 -0
- package/dist/assets/design/skills/embedded-captions/themes/anchor.json +27 -0
- package/dist/assets/design/skills/embedded-captions/themes/arcade.json +51 -0
- package/dist/assets/design/skills/embedded-captions/themes/aurora.json +41 -0
- package/dist/assets/design/skills/embedded-captions/themes/biolume.json +35 -0
- package/dist/assets/design/skills/embedded-captions/themes/brush.json +74 -0
- package/dist/assets/design/skills/embedded-captions/themes/chalkboard.json +52 -0
- package/dist/assets/design/skills/embedded-captions/themes/dossier.json +56 -0
- package/dist/assets/design/skills/embedded-captions/themes/graffiti.json +62 -0
- package/dist/assets/design/skills/embedded-captions/themes/hologram.json +41 -0
- package/dist/assets/design/skills/embedded-captions/themes/inkwater.json +43 -0
- package/dist/assets/design/skills/embedded-captions/themes/laser.json +46 -0
- package/dist/assets/design/skills/embedded-captions/themes/lastpage.json +33 -0
- package/dist/assets/design/skills/embedded-captions/themes/neonsign.json +53 -0
- package/dist/assets/design/skills/embedded-captions/themes/ordnance.json +54 -0
- package/dist/assets/design/skills/embedded-captions/themes/papercut.json +37 -0
- package/dist/assets/design/skills/embedded-captions/themes/popup.json +46 -0
- package/dist/assets/design/skills/embedded-captions/themes/ransom.json +62 -0
- package/dist/assets/design/skills/embedded-captions/themes/scoreboard.json +54 -0
- package/dist/assets/design/skills/embedded-captions/themes/spectrum.json +46 -0
- package/dist/assets/design/skills/embedded-captions/themes/stardust.json +29 -0
- package/dist/assets/design/skills/embedded-captions/themes/stomp.json +43 -0
- package/dist/assets/design/skills/embedded-captions/themes/terminal.json +49 -0
- package/dist/assets/design/skills/embedded-captions/themes/thunder.json +44 -0
- package/dist/assets/design/skills/embedded-captions/themes/transit.json +44 -0
- package/dist/assets/design/skills/embedded-captions/themes/vhs.json +47 -0
- package/dist/assets/design/skills/faceless-explainer/SKILL.md +235 -0
- package/dist/assets/design/skills/faceless-explainer/references/cut-catalog.md +215 -0
- package/dist/assets/design/skills/faceless-explainer/references/motion-language.md +156 -0
- package/dist/assets/design/skills/faceless-explainer/references/story-design.md +255 -0
- package/dist/assets/design/skills/faceless-explainer/references/visual-design.md +146 -0
- package/dist/assets/design/skills/faceless-explainer/sub-agents/frame-worker.md +12 -0
- package/dist/assets/design/skills/general-video/SKILL.md +164 -0
- package/dist/assets/design/skills/general-video/sub-agents/frame-worker.md +34 -0
- package/dist/assets/design/skills/hyperframes/SKILL.md +134 -0
- package/dist/assets/design/skills/hyperframes/references/brief-contract.md +108 -0
- package/dist/assets/design/skills/hyperframes/references/brief-format.md +72 -0
- package/dist/assets/design/skills/hyperframes/references/capability-menu.md +47 -0
- package/dist/assets/design/skills/hyperframes/references/frame-worker-core.md +80 -0
- package/dist/assets/design/skills/hyperframes/references/intent-interview.md +71 -0
- package/dist/assets/design/skills/hyperframes/references/pitch-round.md +40 -0
- package/dist/assets/design/skills/hyperframes/references/production-loop.md +26 -0
- package/dist/assets/design/skills/hyperframes/references/review-loop.md +37 -0
- package/dist/assets/design/skills/hyperframes/references/route-briefs.md +11 -0
- package/dist/assets/design/skills/hyperframes/references/routes/embedded-captions.md +11 -0
- package/dist/assets/design/skills/hyperframes/references/routes/faceless-explainer.md +12 -0
- package/dist/assets/design/skills/hyperframes/references/routes/general-video.md +12 -0
- package/dist/assets/design/skills/hyperframes/references/routes/motion-graphics.md +11 -0
- package/dist/assets/design/skills/hyperframes/references/routes/music-to-video.md +12 -0
- package/dist/assets/design/skills/hyperframes/references/routes/pr-to-video.md +28 -0
- package/dist/assets/design/skills/hyperframes/references/routes/product-launch-video.md +13 -0
- package/dist/assets/design/skills/hyperframes/references/routes/remotion-to-hyperframes.md +9 -0
- package/dist/assets/design/skills/hyperframes/references/routes/slideshow.md +11 -0
- package/dist/assets/design/skills/hyperframes/references/routes/talking-head-recut.md +11 -0
- package/dist/assets/design/skills/hyperframes/references/script-format.md +52 -0
- package/dist/assets/design/skills/hyperframes/references/skill-lifecycle.md +30 -0
- package/dist/assets/design/skills/hyperframes/references/storyboard-format.md +99 -0
- package/dist/assets/design/skills/hyperframes/references/subagent-dispatch.md +35 -0
- package/dist/assets/design/skills/hyperframes/references/workflow-catalog.md +10 -0
- package/dist/assets/design/skills/hyperframes-animation/SKILL.md +86 -0
- package/dist/assets/design/skills/hyperframes-animation/adapters/animate-text.md +64 -0
- package/dist/assets/design/skills/hyperframes-animation/adapters/animejs.md +130 -0
- package/dist/assets/design/skills/hyperframes-animation/adapters/css-animations.md +143 -0
- package/dist/assets/design/skills/hyperframes-animation/adapters/gsap-easing-and-stagger.md +199 -0
- package/dist/assets/design/skills/hyperframes-animation/adapters/gsap-timeline-and-labels.md +96 -0
- package/dist/assets/design/skills/hyperframes-animation/adapters/gsap-transforms-and-perf.md +129 -0
- package/dist/assets/design/skills/hyperframes-animation/adapters/gsap.md +105 -0
- package/dist/assets/design/skills/hyperframes-animation/adapters/html-in-canvas-patterns.md +507 -0
- package/dist/assets/design/skills/hyperframes-animation/adapters/lottie.md +130 -0
- package/dist/assets/design/skills/hyperframes-animation/adapters/three.md +145 -0
- package/dist/assets/design/skills/hyperframes-animation/adapters/typegpu.md +182 -0
- package/dist/assets/design/skills/hyperframes-animation/adapters/waapi.md +101 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/agent-progress-theater.md +76 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/camera-journey.md +61 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/comparison-split.md +27 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/constellation-hub.md +63 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/cta-morph-press.md +63 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/cursor-ui-demo.md +89 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/dataviz-countup.md +59 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/device-surface-showcase.md +68 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/fixed-anchor-cycle.md +46 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/grid-card-assemble.md +81 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/kinetic-type-beats.md +133 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/logo-assemble-lockup.md +121 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/overwhelm-surround.md +58 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/panel-edit-live-sync.md +73 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/prompt-type-submit-generate.md +85 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/spatial-pan-stations.md +37 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/ticker-takeover.md +29 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/titlecard-reveal.md +80 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/transcript-scroll-artifact-reveal.md +45 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/typewriter-reveal.md +51 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/video-text-pivot.md +30 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints/zoom-out-workspace-reveal.md +68 -0
- package/dist/assets/design/skills/hyperframes-animation/blueprints-index.md +202 -0
- package/dist/assets/design/skills/hyperframes-animation/examples/brand-reveal-assemble-zoom.html +382 -0
- package/dist/assets/design/skills/hyperframes-animation/examples/comparison-split-cards.html +649 -0
- package/dist/assets/design/skills/hyperframes-animation/examples/concept-demo-decode-pan.html +520 -0
- package/dist/assets/design/skills/hyperframes-animation/examples/cta-morph-press.html +468 -0
- package/dist/assets/design/skills/hyperframes-animation/examples/cta-orbit-collapse.html +1298 -0
- package/dist/assets/design/skills/hyperframes-animation/examples/demo-page-scroll-spotlight.html +759 -0
- package/dist/assets/design/skills/hyperframes-animation/examples/hook-counter-burst.html +729 -0
- package/dist/assets/design/skills/hyperframes-animation/examples/messaging-multi-phrase.html +352 -0
- package/dist/assets/design/skills/hyperframes-animation/examples/metric-video-text-pivot.html +779 -0
- package/dist/assets/design/skills/hyperframes-animation/examples/problem-mockup-overwhelm.html +1374 -0
- package/dist/assets/design/skills/hyperframes-animation/examples/proof-logo-chain.html +861 -0
- package/dist/assets/design/skills/hyperframes-animation/examples/takeover-ticker-displace.html +347 -0
- package/dist/assets/design/skills/hyperframes-animation/examples/workflow-approve-press.html +606 -0
- package/dist/assets/design/skills/hyperframes-animation/references/motion-blur.md +133 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/3d-camera-flight.md +180 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/3d-page-scroll.md +135 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/3d-text-depth-layers.md +128 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/ai-tracking-box.md +139 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/ambient-glow-bloom.md +133 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/anchored-layout-expand.md +148 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/asr-keyword-glow.md +128 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/avatar-cloud-network.md +145 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/camera-cursor-tracking.md +133 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/card-morph-anchor.md +134 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/center-outward-expansion.md +88 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/chart-scrub-readout.md +151 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/chromatic-glitch.md +150 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/context-sensitive-cursor.md +140 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/control-target-sync.md +131 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/coordinate-target-zoom.md +138 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/counting-dynamic-scale.md +115 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/css-marker-patterns.md +208 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/cursor-click-ripple.md +104 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/cursor-drag.md +141 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/depth-of-field-blur.md +112 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/depth-scatter-assemble.md +139 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/discrete-text-sequence.md +146 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/dynamic-content-sequencing.md +149 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/gradient-text-sweep.md +136 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/gsap-effects.md +196 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/hacker-flip-3d.md +123 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/kinetic-beat-slam.md +137 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/motion-blur-streak.md +130 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/multi-cursor-choreography.md +133 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/multi-phase-camera.md +129 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/nudge-curve.md +47 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/orbit-3d-entry.md +148 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/particle-burst.md +149 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/physics-press-reaction.md +101 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/press-release-spring.md +108 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/reactive-displacement.md +92 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/scale-swap-transition.md +88 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/sine-wave-loop.md +85 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/split-tilt-cards.md +123 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/spring-pop-entrance.md +107 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/stat-bars-and-fills.md +145 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/svg-icon-enrichment.md +141 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/svg-path-draw.md +122 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/theme-crossfade-morph.md +126 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/vertical-spring-ticker.md +104 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/viewport-change.md +148 -0
- package/dist/assets/design/skills/hyperframes-animation/rules/waterfall-entry.md +81 -0
- package/dist/assets/design/skills/hyperframes-animation/rules-index.md +113 -0
- package/dist/assets/design/skills/hyperframes-animation/techniques.md +507 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/TRANSITION-REGISTRY.md +168 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/catalog.md +127 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/css-3d.md +12 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/css-blur.md +51 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/css-cover.md +43 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/css-destruction.md +95 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/css-dissolve.md +66 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/css-distortion.md +45 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/css-grid.md +10 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/css-light.md +49 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/css-mechanical.md +30 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/css-other.md +25 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/css-push.md +41 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/css-radial.md +37 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/css-scale.md +24 -0
- package/dist/assets/design/skills/hyperframes-animation/transitions/overview.md +153 -0
- package/dist/assets/design/skills/hyperframes-audio/SKILL.md +476 -0
- package/dist/assets/design/skills/hyperframes-audio/references/attributes.md +138 -0
- package/dist/assets/design/skills/hyperframes-audio/references/diagnosis.md +274 -0
- package/dist/assets/design/skills/hyperframes-audio/references/fx-registry.md +84 -0
- package/dist/assets/design/skills/hyperframes-audio/references/presets.md +216 -0
- package/dist/assets/design/skills/hyperframes-core/SKILL.md +97 -0
- package/dist/assets/design/skills/hyperframes-core/references/composition-patterns.md +224 -0
- package/dist/assets/design/skills/hyperframes-core/references/creator-editing-recipes.md +491 -0
- package/dist/assets/design/skills/hyperframes-core/references/data-attributes.md +78 -0
- package/dist/assets/design/skills/hyperframes-core/references/determinism-rules.md +53 -0
- package/dist/assets/design/skills/hyperframes-core/references/full-screen-motion.md +67 -0
- package/dist/assets/design/skills/hyperframes-core/references/minimal-composition.md +69 -0
- package/dist/assets/design/skills/hyperframes-core/references/sub-compositions.md +176 -0
- package/dist/assets/design/skills/hyperframes-core/references/tailwind.md +104 -0
- package/dist/assets/design/skills/hyperframes-core/references/tracks-and-clips.md +87 -0
- package/dist/assets/design/skills/hyperframes-core/references/variables-and-media.md +107 -0
- package/dist/assets/design/skills/hyperframes-creative/SKILL.md +71 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/biennale-yellow/FRAME.md +289 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/biennale-yellow/caption-skin.html +221 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/biennale-yellow/frame-showcase.html +1214 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/blockframe/FRAME.md +275 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/blockframe/caption-skin.html +224 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/blockframe/frame-showcase.html +1347 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/blue-professional/FRAME.md +307 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/blue-professional/caption-skin.html +223 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/blue-professional/frame-showcase.html +1372 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/bold-poster/FRAME.md +275 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/bold-poster/caption-skin.html +230 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/bold-poster/frame-showcase.html +1140 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/broadside/FRAME.md +284 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/broadside/caption-skin.html +225 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/broadside/frame-showcase.html +1166 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/capsule/FRAME.md +284 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/capsule/caption-skin.html +224 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/capsule/frame-showcase.html +1465 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/cartesian/FRAME.md +278 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/cartesian/caption-skin.html +222 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/cartesian/frame-showcase.html +1263 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/cobalt-grid/FRAME.md +265 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/cobalt-grid/caption-skin.html +238 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/cobalt-grid/frame-showcase.html +1468 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/code-editorial/FRAME.md +277 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/code-editorial/caption-skin.html +224 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/code-editorial/fonts/OFL-eb-garamond.txt +93 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/code-editorial/fonts/OFL-inter.txt +93 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/code-editorial/fonts/OFL-jetbrains-mono.txt +93 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/code-editorial/frame-showcase.html +1438 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/coral/FRAME.md +314 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/coral/caption-skin.html +226 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/coral/frame-showcase.html +1268 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/creative-mode/FRAME.md +333 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/creative-mode/caption-skin.html +227 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/creative-mode/frame-showcase.html +1330 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/daisy-days/FRAME.md +274 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/daisy-days/caption-skin.html +230 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/daisy-days/frame-showcase.html +1444 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/editorial-forest/FRAME.md +265 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/editorial-forest/caption-skin.html +223 -0
- package/dist/assets/design/skills/hyperframes-creative/frame-presets/editorial-forest/frame-showcase.html +1273 -0
- package/dist/assets/design/skills/hyperframes-creative/palettes/bold-energetic.md +14 -0
- package/dist/assets/design/skills/hyperframes-creative/palettes/clean-corporate.md +14 -0
- package/dist/assets/design/skills/hyperframes-creative/palettes/dark-premium.md +14 -0
- package/dist/assets/design/skills/hyperframes-creative/palettes/jewel-rich.md +14 -0
- package/dist/assets/design/skills/hyperframes-creative/palettes/monochrome.md +14 -0
- package/dist/assets/design/skills/hyperframes-creative/palettes/nature-earth.md +14 -0
- package/dist/assets/design/skills/hyperframes-creative/palettes/neon-electric.md +14 -0
- package/dist/assets/design/skills/hyperframes-creative/palettes/pastel-soft.md +14 -0
- package/dist/assets/design/skills/hyperframes-creative/palettes/warm-editorial.md +14 -0
- package/dist/assets/design/skills/hyperframes-creative/references/audio-reactive.md +76 -0
- package/dist/assets/design/skills/hyperframes-creative/references/beat-direction.md +164 -0
- package/dist/assets/design/skills/hyperframes-creative/references/composition-patterns.md +199 -0
- package/dist/assets/design/skills/hyperframes-creative/references/data-in-motion.md +19 -0
- package/dist/assets/design/skills/hyperframes-creative/references/design-adherence.md +19 -0
- package/dist/assets/design/skills/hyperframes-creative/references/design-picker.md +123 -0
- package/dist/assets/design/skills/hyperframes-creative/references/design-spec.md +55 -0
- package/dist/assets/design/skills/hyperframes-creative/references/house-style.md +73 -0
- package/dist/assets/design/skills/hyperframes-creative/references/motion-principles.md +151 -0
- package/dist/assets/design/skills/hyperframes-creative/references/narration.md +92 -0
- package/dist/assets/design/skills/hyperframes-creative/references/prompt-expansion.md +68 -0
- package/dist/assets/design/skills/hyperframes-creative/references/story-spine.md +45 -0
- package/dist/assets/design/skills/hyperframes-creative/references/storyboard-recipe.md +57 -0
- package/dist/assets/design/skills/hyperframes-creative/references/typography.md +218 -0
- package/dist/assets/design/skills/hyperframes-creative/references/video-composition.md +63 -0
- package/dist/assets/design/skills/hyperframes-creative/references/visual-styles.md +457 -0
- package/dist/assets/design/skills/hyperframes-creative/templates/design-picker.html +1432 -0
- package/dist/assets/design/skills/hyperframes-keyframes/SKILL.md +262 -0
- package/dist/assets/design/skills/hyperframes-keyframes/agents/openai.yaml +4 -0
- package/dist/assets/design/skills/hyperframes-keyframes/references/keyframe-patterns.md +108 -0
- package/dist/assets/design/skills/hyperframes-studio/SKILL.md +75 -0
- package/dist/assets/design/skills/motion-graphics/SKILL.md +175 -0
- package/dist/assets/design/skills/motion-graphics/agents/builder.md +41 -0
- package/dist/assets/design/skills/motion-graphics/agents/director.md +54 -0
- package/dist/assets/design/skills/motion-graphics/agents/finalize.md +17 -0
- package/dist/assets/design/skills/motion-graphics/catalog-map.md +52 -0
- package/dist/assets/design/skills/motion-graphics/categories/asset-fusion/module.md +37 -0
- package/dist/assets/design/skills/motion-graphics/categories/charts/module.md +22 -0
- package/dist/assets/design/skills/motion-graphics/categories/kinetic-type/module.md +19 -0
- package/dist/assets/design/skills/motion-graphics/categories/logo-reveal/module.md +17 -0
- package/dist/assets/design/skills/motion-graphics/categories/lower-thirds/module.md +20 -0
- package/dist/assets/design/skills/motion-graphics/categories/maps/module.md +61 -0
- package/dist/assets/design/skills/motion-graphics/categories/news/module.md +56 -0
- package/dist/assets/design/skills/motion-graphics/categories/stat/module.md +21 -0
- package/dist/assets/design/skills/motion-graphics/categories/tweet/module.md +16 -0
- package/dist/assets/design/skills/motion-graphics/categories/webpage/module.md +30 -0
- package/dist/assets/design/skills/motion-graphics/grounding/PROTOCOL.md +64 -0
- package/dist/assets/design/skills/motion-graphics/phases/source/guide.md +21 -0
- package/dist/assets/design/skills/motion-graphics/references/builder-contract.md +38 -0
- package/dist/assets/design/skills/motion-graphics/references/motion-vocabulary.md +47 -0
- package/dist/assets/design/skills/motion-graphics/references/shot-plan-ir.md +54 -0
- package/dist/assets/design/skills/motion-graphics/samples/asset-fusion/_ref-circle-highlight.html +306 -0
- package/dist/assets/design/skills/music-to-video/SKILL.md +207 -0
- package/dist/assets/design/skills/music-to-video/references/frame-skeleton.md +100 -0
- package/dist/assets/design/skills/music-to-video/references/montage.md +55 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitive-catalog.md +75 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/3d-card-flip/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/3d-card-flip/scene.html +119 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/bg-flow-field/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/bg-flow-field/scene.html +294 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/binary-decrypt/index.html +54 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/binary-decrypt/scene.html +85 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/blur-resolve/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/blur-resolve/scene.html +60 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/braam-punch/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/braam-punch/scene.html +100 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/chromatic-split/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/chromatic-split/scene.html +111 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/chrome-sweep/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/chrome-sweep/scene.html +68 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/counting-punch/index.html +54 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/counting-punch/scene.html +119 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/crash-zoom-in/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/crash-zoom-in/scene.html +120 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/datamosh-smear/index.html +55 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/datamosh-smear/scene.html +131 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/directional-fill/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/directional-fill/scene.html +103 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/dolly-zoom/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/dolly-zoom/scene.html +102 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/electric-arc/index.html +54 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/electric-arc/scene.html +105 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/flash-cut/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/flash-cut/scene.html +97 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/gooey-metaball/index.html +54 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/gooey-metaball/scene.html +206 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/hard-cut/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/hard-cut/scene.html +82 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/hypercut-whip/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/hypercut-whip/scene.html +44 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/iris-open/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/iris-open/scene.html +69 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/kinetic-letter-in/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/kinetic-letter-in/scene.html +64 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/liquid-morph/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/liquid-morph/scene.html +96 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/mask-reveal/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/mask-reveal/scene.html +74 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/mosaic-pack/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/mosaic-pack/scene.html +89 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/neon-flicker/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/neon-flicker/scene.html +73 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/outline-to-fill/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/outline-to-fill/scene.html +82 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/palette-flip/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/palette-flip/scene.html +97 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/particle-burst/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/particle-burst/scene.html +106 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/pixel-dissolve/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/pixel-dissolve/scene.html +86 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/radial-burst-lines/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/radial-burst-lines/scene.html +130 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/screen-shake/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/screen-shake/scene.html +78 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/slot-machine-reveal/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/slot-machine-reveal/scene.html +100 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/spotlight-sweep/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/spotlight-sweep/scene.html +102 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/staggered-exit/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/staggered-exit/scene.html +82 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/text-spectral-rays/USAGE.md +42 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/text-spectral-rays/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/text-spectral-rays/scene.html +280 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/text-wave-distort/index.html +54 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/text-wave-distort/scene.html +106 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/tile-mosaic/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/tile-mosaic/scene.html +109 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/typewriter-reveal/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/typewriter-reveal/scene.html +91 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/word-grid-burst/index.html +53 -0
- package/dist/assets/design/skills/music-to-video/references/motion-primitives/word-grid-burst/scene.html +96 -0
- package/dist/assets/design/skills/music-to-video/references/planning.md +104 -0
- package/dist/assets/design/skills/music-to-video/references/storyboard-format.md +94 -0
- package/dist/assets/design/skills/music-to-video/references/template-catalog.md +106 -0
- package/dist/assets/design/skills/music-to-video/references/templates/card-flyby/index.html +527 -0
- package/dist/assets/design/skills/music-to-video/references/templates/card-flyby/program.json +13 -0
- package/dist/assets/design/skills/music-to-video/references/templates/held-message-living-field/index.html +485 -0
- package/dist/assets/design/skills/music-to-video/references/templates/held-text-strobe-burst/index.html +302 -0
- package/dist/assets/design/skills/music-to-video/references/templates/intro-kinetic-cascade/index.html +610 -0
- package/dist/assets/design/skills/music-to-video/references/templates/intro-kinetic-cascade/program.json +41 -0
- package/dist/assets/design/skills/music-to-video/references/templates/logo-split-lockup-pulse/index.html +596 -0
- package/dist/assets/design/skills/music-to-video/references/templates/poster-tile-mosaic/index.html +589 -0
- package/dist/assets/design/skills/music-to-video/references/templates/poster-tile-mosaic/program.json +25 -0
- package/dist/assets/design/skills/music-to-video/references/templates/roll-flipbook-word-cycle/index.html +267 -0
- package/dist/assets/design/skills/music-to-video/references/templates/split-anchor-word-slot/index.html +594 -0
- package/dist/assets/design/skills/music-to-video/references/templates/split-anchor-word-slot/program.json +39 -0
- package/dist/assets/design/skills/music-to-video/references/templates/typewriter-phrase-keyword-shuffle/index.html +238 -0
- package/dist/assets/design/skills/music-to-video/sub-agents/frame-worker.md +49 -0
- package/dist/assets/design/skills/pr-to-video/SKILL.md +271 -0
- package/dist/assets/design/skills/pr-to-video/references/code-vocabulary.md +112 -0
- package/dist/assets/design/skills/pr-to-video/references/cut-catalog.md +215 -0
- package/dist/assets/design/skills/pr-to-video/references/motion-language.md +156 -0
- package/dist/assets/design/skills/pr-to-video/references/story-design.md +230 -0
- package/dist/assets/design/skills/pr-to-video/references/visual-design.md +164 -0
- package/dist/assets/design/skills/pr-to-video/sub-agents/frame-worker.md +38 -0
- package/dist/assets/design/skills/product-launch-video/SKILL.md +262 -0
- package/dist/assets/design/skills/product-launch-video/references/cut-catalog.md +220 -0
- package/dist/assets/design/skills/product-launch-video/references/motion-language.md +156 -0
- package/dist/assets/design/skills/product-launch-video/references/story-design.md +508 -0
- package/dist/assets/design/skills/product-launch-video/references/visual-design.md +126 -0
- package/dist/assets/design/skills/product-launch-video/sub-agents/frame-worker.md +21 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/SKILL.md +130 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/README.md +41 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/expected.json +26 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/hf-src/compositions/title.html +31 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/hf-src/index.html +46 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/package.json +14 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-1-title-card/remotion-src/tsconfig.json +15 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/README.md +54 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/expected.json +29 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/hf-src/compositions/scene-1.html +35 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/hf-src/compositions/scene-2.html +35 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/hf-src/compositions/scene-3.html +36 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/hf-src/index.html +75 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/package.json +14 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-2-multi-scene/remotion-src/tsconfig.json +15 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/README.md +85 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/expected.json +41 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/compositions/scene-1.html +52 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/compositions/scene-2.html +99 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/compositions/scene-3.html +55 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/hf-src/index.html +70 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/package.json +15 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-3-data-driven/remotion-src/tsconfig.json +15 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/README.md +51 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/assets/test-corpus/tier-4-escape-hatch/expected.json +85 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/references/api-map.md +142 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/references/escape-hatch.md +115 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/references/eval.md +140 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/references/fonts.md +112 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/references/limitations.md +136 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/references/lottie.md +119 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/references/media.md +149 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/references/parameters.md +172 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/references/sequencing.md +251 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/references/timing.md +165 -0
- package/dist/assets/design/skills/remotion-to-hyperframes/references/transitions.md +113 -0
- package/dist/assets/design/skills/slideshow/SKILL.md +530 -0
- package/dist/assets/design/skills/slideshow/references/standalone-harness.md +1017 -0
- package/dist/assets/design/skills/talking-head-recut/NOTICE.md +39 -0
- package/dist/assets/design/skills/talking-head-recut/SKILL.md +1007 -0
- package/dist/assets/design/skills/talking-head-recut/references/DESIGN_INDEX.md +145 -0
- package/dist/assets/design/skills/talking-head-recut/references/confirm-visual-direction-with-user-do-this-first.md +211 -0
- package/dist/assets/design/skills/talking-head-recut/references/frames/clean.html +92 -0
- package/dist/assets/design/skills/talking-head-recut/references/frames/hairline.html +171 -0
- package/dist/assets/design/skills/talking-head-recut/references/frames/polaroid.html +131 -0
- package/dist/assets/design/skills/talking-head-recut/references/layouts/overlay.html +164 -0
- package/dist/assets/design/skills/talking-head-recut/references/layouts/pip.html +143 -0
- package/dist/assets/design/skills/talking-head-recut/references/layouts/split.html +121 -0
- package/dist/assets/design/skills/talking-head-recut/references/layouts/stack.html +109 -0
- package/dist/assets/design/skills/talking-head-recut/references/styles/academic.html +172 -0
- package/dist/assets/design/skills/talking-head-recut/references/styles/audit.html +170 -0
- package/dist/assets/design/skills/talking-head-recut/references/styles/editorial.html +189 -0
- package/dist/assets/design/skills/talking-head-recut/references/styles/geom.html +181 -0
- package/dist/assets/design/skills/talking-head-recut/references/styles/minimal.html +130 -0
- package/dist/assets/design/skills/talking-head-recut/references/styles/spotlight.html +142 -0
- package/dist/assets/design/skills/talking-head-recut/references/styles/swiss.html +188 -0
- package/dist/assets/design/skills/talking-head-recut/references/styles/terminal.html +196 -0
- package/dist/assets/design/skills/talking-head-recut/references/styles/whiteboard.html +170 -0
- package/dist/assets/design/skills/talking-head-recut/references/styles/xhs.html +206 -0
- package/dist/assets/design/taste/LICENSE +21 -0
- package/dist/assets/design/taste/PROVENANCE.md +70 -0
- package/dist/assets/design/taste/brandkit/SKILL.md +798 -0
- package/dist/assets/design/taste/brutalist-skill/SKILL.md +92 -0
- package/dist/assets/design/taste/gpt-tasteskill/SKILL.md +74 -0
- package/dist/assets/design/taste/image-to-code-skill/SKILL.md +1228 -0
- package/dist/assets/design/taste/imagegen-frontend-mobile/SKILL.md +1465 -0
- package/dist/assets/design/taste/imagegen-frontend-web/SKILL.md +987 -0
- package/dist/assets/design/taste/minimalist-skill/SKILL.md +85 -0
- package/dist/assets/design/taste/output-skill/SKILL.md +49 -0
- package/dist/assets/design/taste/redesign-skill/SKILL.md +178 -0
- package/dist/assets/design/taste/soft-skill/SKILL.md +98 -0
- package/dist/assets/design/taste/stitch-skill/DESIGN.md +121 -0
- package/dist/assets/design/taste/stitch-skill/SKILL.md +184 -0
- package/dist/assets/design/taste/taste-skill/SKILL.md +1043 -0
- package/dist/assets/design/taste/taste-skill/references/4-2-color-calibration.md +24 -0
- package/dist/assets/design/taste/taste-skill/references/4-7-layout-discipline-hard-rules-failing-any-of-.md +27 -0
- package/dist/assets/design/taste/taste-skill/references/4-8-image-visual-asset-strategy.md +35 -0
- package/dist/assets/design/taste/taste-skill/references/4-9-content-density.md +34 -0
- package/dist/assets/design/taste/taste-skill/references/9-f-production-test-tells-banned-outright.md +54 -0
- package/dist/assets/design/taste/taste-skill-v1/SKILL.md +226 -0
- package/dist/assets/engineering/skills-starter/engineering-ui-design/SKILL.md +84 -0
- package/dist/assets/engineering/skills-superpowers/subagent-driven-development/SKILL.md +68 -459
- package/dist/assets/engineering/skills-superpowers/subagent-driven-development/dispatch-and-review-rules.md +74 -0
- package/dist/assets/engineering/skills-superpowers/subagent-driven-development/example-workflow.md +70 -0
- package/dist/assets/engineering/skills-superpowers/subagent-driven-development/model-selection.md +40 -0
- package/dist/assets/engineering/skills-superpowers/subagent-driven-development/process-diagrams.md +92 -0
- package/dist/assets/engineering/skills-superpowers/subagent-driven-development/setup-and-ledger.md +75 -0
- package/dist/assets/uiux/LICENSE +21 -0
- package/dist/assets/uiux/PROVENANCE.md +110 -0
- package/dist/assets/uiux/data/app-interface.csv +33 -0
- package/dist/assets/uiux/data/charts.csv +26 -0
- package/dist/assets/uiux/data/colors.csv +193 -0
- package/dist/assets/uiux/data/icons.csv +106 -0
- package/dist/assets/uiux/data/landing.csv +35 -0
- package/dist/assets/uiux/data/motion.csv +18 -0
- package/dist/assets/uiux/data/products.csv +193 -0
- package/dist/assets/uiux/data/react-performance.csv +45 -0
- package/dist/assets/uiux/data/stacks/angular.csv +51 -0
- package/dist/assets/uiux/data/stacks/astro.csv +54 -0
- package/dist/assets/uiux/data/stacks/avalonia.csv +57 -0
- package/dist/assets/uiux/data/stacks/flutter.csv +53 -0
- package/dist/assets/uiux/data/stacks/html-tailwind.csv +60 -0
- package/dist/assets/uiux/data/stacks/javafx.csv +76 -0
- package/dist/assets/uiux/data/stacks/jetpack-compose.csv +53 -0
- package/dist/assets/uiux/data/stacks/laravel.csv +51 -0
- package/dist/assets/uiux/data/stacks/nextjs.csv +62 -0
- package/dist/assets/uiux/data/stacks/nuxt-ui.csv +77 -0
- package/dist/assets/uiux/data/stacks/nuxtjs.csv +68 -0
- package/dist/assets/uiux/data/stacks/react-native.csv +52 -0
- package/dist/assets/uiux/data/stacks/react.csv +67 -0
- package/dist/assets/uiux/data/stacks/shadcn.csv +69 -0
- package/dist/assets/uiux/data/stacks/svelte.csv +56 -0
- package/dist/assets/uiux/data/stacks/swiftui.csv +51 -0
- package/dist/assets/uiux/data/stacks/threejs.csv +54 -0
- package/dist/assets/uiux/data/stacks/uno.csv +60 -0
- package/dist/assets/uiux/data/stacks/uwp.csv +56 -0
- package/dist/assets/uiux/data/stacks/vue.csv +50 -0
- package/dist/assets/uiux/data/stacks/winui.csv +60 -0
- package/dist/assets/uiux/data/stacks/wpf.csv +57 -0
- package/dist/assets/uiux/data/styles.csv +89 -0
- package/dist/assets/uiux/data/typography.csv +75 -0
- package/dist/assets/uiux/data/ui-reasoning.csv +193 -0
- package/dist/assets/uiux/data/ux-guidelines.csv +120 -0
- package/dist/auto-review.js +38 -4
- package/dist/bootstrap.js +64299 -55761
- package/dist/client.cjs +5227 -3462
- package/dist/subagent-claude-code.js +493 -0
- package/dist/subagent-codex.js +1068 -0
- package/dist/tool-session-query.js +993 -0
- package/package.json +81 -74
- package/dist/agent-team.js +0 -16235
- package/dist/schedule.js +0 -15898
- package/dist/tool-agent-team.js +0 -16766
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
# Laws of UX craft rules
|
|
2
|
+
|
|
3
|
+
Universal cognitive, perceptual, and behavioral heuristics that decide
|
|
4
|
+
what a UI composes — how many pricing tiers fit on a screen, where a
|
|
5
|
+
primary action anchors in scanning order, when a progress indicator
|
|
6
|
+
earns its place, why a settings list needs grouping. The active
|
|
7
|
+
`DESIGN.md` decides brand visual language; the existing craft files
|
|
8
|
+
decide rendering rules (color, typography, motion, states, ARIA, RTL,
|
|
9
|
+
forms); this file decides composition rules grounded in named research.
|
|
10
|
+
|
|
11
|
+
> Distilled from primary sources: Hick (1952) + Hyman (1953), Miller
|
|
12
|
+
> (1956) for chunking / `7±2` channel capacity, Cowan (2001) for the
|
|
13
|
+
> modern ~4 working-memory bound, Fitts (1954), Wertheimer (1923) for
|
|
14
|
+
> proximity / similarity / Prägnanz, Palmer (1992) for Common Region,
|
|
15
|
+
> Palmer & Rock (1994) for Uniform Connectedness, Kahneman /
|
|
16
|
+
> Fredrickson / Schreiber / Redelmeier (1993) for Peak-End, Zeigarnik
|
|
17
|
+
> (1927), Csíkszentmihályi (1975), Hull (1932), von Restorff (1933),
|
|
18
|
+
> Broadbent (1958), Sweller (1988), Postel (RFC 760, 1980), Carroll &
|
|
19
|
+
> Rosson (1987), Tversky & Kahneman (1974) for Anchoring, Kurosu &
|
|
20
|
+
> Kashimura (1995), Iyengar & Lepper (2000), Toffler (1970), Pareto
|
|
21
|
+
> (c.1906) / Juran (*Quality Control Handbook*, 1951), Ebbinghaus
|
|
22
|
+
> (1885), Ockham (14th c.), Tesler at Apple (1980s), Nielsen (2000),
|
|
23
|
+
> Norman *POET* (1988), Parkinson (1955).
|
|
24
|
+
|
|
25
|
+
## Prior art and scope
|
|
26
|
+
|
|
27
|
+
Existing public catalogs of UX heuristics (Yablonski's lawsofux.com,
|
|
28
|
+
NN/g's 10 usability heuristics, Material 3 motion + interaction
|
|
29
|
+
guidance, Apple HIG, Baymard Institute checkout research) inventory the
|
|
30
|
+
laws but rarely tie each one to a concrete code-gen directive. This
|
|
31
|
+
file does the translation: every entry ends with one actionable move
|
|
32
|
+
for an HTML / Tailwind / React-emitting agent. Sibling craft files
|
|
33
|
+
(`accessibility-baseline.md`, `state-coverage.md`, `typography.md`,
|
|
34
|
+
`anti-ai-slop.md`, `color.md`, `animation-discipline.md`,
|
|
35
|
+
`form-validation.md`) own the auto-checked rules; this file names the
|
|
36
|
+
underlying law and surfaces the folklore. Out of scope: Weber-Fechner
|
|
37
|
+
psychophysics and Signal Detection Theory — both apply to UI but the
|
|
38
|
+
prompt-emission directives are too narrow to earn a slot here. Add
|
|
39
|
+
later if a skill needs them.
|
|
40
|
+
|
|
41
|
+
The rules below are guidance, not auto-checked. Reviewers and the agent
|
|
42
|
+
apply them; the linter does not. Where a law has a sibling rule already
|
|
43
|
+
auto-checked elsewhere — touch-target floor in
|
|
44
|
+
`accessibility-baseline.md`, the 300 ms / 2 s / 10 s / 30 s / 60 s
|
|
45
|
+
loading thresholds in `state-coverage.md`, ALL CAPS letter-spacing in
|
|
46
|
+
`typography.md`, the indigo / gradient / emoji-icon list in
|
|
47
|
+
`anti-ai-slop.md` — the entry below cross-references rather than
|
|
48
|
+
duplicates.
|
|
49
|
+
|
|
50
|
+
## Perception and visual grouping
|
|
51
|
+
|
|
52
|
+
Five Gestalt laws plus three attention-and-recognition laws govern how
|
|
53
|
+
the eye groups elements before the brain reads them.
|
|
54
|
+
|
|
55
|
+
- **Law of Proximity** (Wertheimer, 1923). Objects near each other read
|
|
56
|
+
as a group. Cheapest grouping signal — cheaper than borders or shared
|
|
57
|
+
color. Apply variable vertical rhythm: 8–12 px within a group,
|
|
58
|
+
32–48 px between groups. Uniform spacing reads as nothing being
|
|
59
|
+
grouped.
|
|
60
|
+
- **Law of Similarity** (Wertheimer, 1923). Visually similar elements
|
|
61
|
+
read as a group. Equivalent affordances must share treatment — every
|
|
62
|
+
list row identical class set, every secondary button identical, every
|
|
63
|
+
destructive action identical. Visible deviation is reserved for the
|
|
64
|
+
one item meant to draw attention (the recommended pricing tier, the
|
|
65
|
+
selected nav item).
|
|
66
|
+
- **Law of Common Region** (Palmer, 1992). A shared bounded area binds
|
|
67
|
+
enclosed elements. Use enclosure when proximity is not enough — and
|
|
68
|
+
reserve it. Concrete numbers: padding ≥16 px inside the region,
|
|
69
|
+
distinct surface (border + tinted background, or card chrome at
|
|
70
|
+
≥1 px hairline). A page where every section is bordered destroys the
|
|
71
|
+
signal.
|
|
72
|
+
- **Law of Prägnanz / Good Figure** (Wertheimer, 1923). The eye
|
|
73
|
+
resolves complex layouts into the simplest underlying form. Designs
|
|
74
|
+
that align with a clear underlying grid (12-column, F-pattern,
|
|
75
|
+
4-quadrant) feel inevitable; ornate breaks that add nothing semantic
|
|
76
|
+
feel arbitrary.
|
|
77
|
+
- **Law of Uniform Connectedness** (Palmer & Rock, 1994). The
|
|
78
|
+
strongest grouping signal in the Gestalt hierarchy: connected lines,
|
|
79
|
+
shared toolbars, or bracketing containers tie items together more
|
|
80
|
+
strongly than proximity or similarity. Use for wizard steps,
|
|
81
|
+
comparison sets, and explicit navigation flows.
|
|
82
|
+
- **Selective Attention** (Broadbent, *Perception and Communication*,
|
|
83
|
+
1958). Cognitive bandwidth is finite. Users filter aggressively and
|
|
84
|
+
ignore anything that looks irrelevant to their goal — banner blindness
|
|
85
|
+
comes from this. Reserve the strongest visual contrast for the single
|
|
86
|
+
goal-relevant action; let supporting content recede in weight.
|
|
87
|
+
- **Von Restorff Effect** (von Restorff, 1933). The item that differs
|
|
88
|
+
from a uniform field is the one most likely to be remembered. Make
|
|
89
|
+
the recommended pricing tier, the active nav item, the warning state
|
|
90
|
+
visually distinct. Pair contrast with a non-color signal (icon, text
|
|
91
|
+
label, position) — `accessibility-baseline.md` rules out color-alone
|
|
92
|
+
signaling.
|
|
93
|
+
- **Aesthetic-Usability Effect** (Kurosu & Kashimura, Hitachi Design
|
|
94
|
+
Center, 1995). Visual polish biases perceived usability. Refined
|
|
95
|
+
typography, generous whitespace, and a calm palette earn the benefit
|
|
96
|
+
of the doubt for minor friction. Never substitutes for measurable
|
|
97
|
+
usability or for `state-coverage.md`'s required-states rule.
|
|
98
|
+
|
|
99
|
+
## Decision-making
|
|
100
|
+
|
|
101
|
+
Six laws govern how fast and how well users decide when an interface
|
|
102
|
+
offers a choice.
|
|
103
|
+
|
|
104
|
+
- **Hick's Law** (Hick, 1952; Hyman, 1953 replication). Decision time
|
|
105
|
+
grows roughly log(n+1) with the number of equivalent options. Cap any
|
|
106
|
+
single decision-screen to 3–5 visible primary options; collapse the
|
|
107
|
+
rest behind a "More" / progressive disclosure pattern; visually
|
|
108
|
+
distinguish the recommended choice. Aggressive truncation that hides
|
|
109
|
+
the path forward is the opposite failure mode — surface the full
|
|
110
|
+
option set, just don't render every option at the same visual weight.
|
|
111
|
+
- **Choice Overload** (Iyengar & Lepper, *Journal of Personality and
|
|
112
|
+
Social Psychology*, 2000; framing dates to Toffler, *Future Shock*,
|
|
113
|
+
1970). Too many roughly-equivalent options stall or abandon the
|
|
114
|
+
decision. Pricing pages: 3–4 tiers, exactly one marked recommended.
|
|
115
|
+
Product grids: 6–9 hero cards above the fold. Settings panels: ≤5
|
|
116
|
+
named groups. Never emit a flat wall of equivalents.
|
|
117
|
+
- **Anchoring** (Tversky & Kahneman, *Science* 185:1124–1131, 1974).
|
|
118
|
+
The first number a user sees re-weights every subsequent number.
|
|
119
|
+
Place the recommended pricing tier where it anchors the comparison;
|
|
120
|
+
render yearly-billing savings as concrete dollar deltas, not just
|
|
121
|
+
percentage badges; pre-select the safer default in radio groups.
|
|
122
|
+
Visual weight matches intended decision weight.
|
|
123
|
+
- **Pareto Principle / 80-20** (Pareto, c.1906; Juran, *Quality Control
|
|
124
|
+
Handbook*, 1951 — popularized the management-application framing). A
|
|
125
|
+
small share of features drives most of the value. Identify the 2–3 actions
|
|
126
|
+
that drive the dominant journey for the target persona; emphasize
|
|
127
|
+
those visually; demote the long tail to overflow menus, footer
|
|
128
|
+
surfaces, or settings.
|
|
129
|
+
- **Tesler's Law / Conservation of Complexity** (Tesler, Apple, 1980s).
|
|
130
|
+
Every product has an irreducible amount of complexity. The design
|
|
131
|
+
choice is *where* it lives — engineering team, interface, user — not
|
|
132
|
+
whether to eliminate it. When complexity reaches the user, surface
|
|
133
|
+
contextual guidance (tooltips, smart defaults, inline empty-state
|
|
134
|
+
coaching, progressive disclosure) at the exact step where it
|
|
135
|
+
surfaces. Hiding it is not the same as removing it.
|
|
136
|
+
- **Occam's Razor** (Ockham, 14th c.). Among options that explain the
|
|
137
|
+
data equally well, prefer the one with the fewest assumptions. Specify
|
|
138
|
+
a minimal element inventory; forbid decorative chrome that doesn't
|
|
139
|
+
serve a stated user task. The law constrains assumptions, not feature
|
|
140
|
+
count — a "minimum viable" framing misreads it.
|
|
141
|
+
|
|
142
|
+
## Memory and learning
|
|
143
|
+
|
|
144
|
+
Five laws cover how working memory handles information density and
|
|
145
|
+
what the user retains afterward.
|
|
146
|
+
|
|
147
|
+
- **Miller's Law and Chunking** (Miller, *The Magical Number Seven,
|
|
148
|
+
Plus or Minus Two*, *Psychological Review*, 1956 — channel capacity /
|
|
149
|
+
`7±2` and chunking; Cowan, *Behavioral and Brain Sciences* 24:1, 2001
|
|
150
|
+
for the modern ~4-item working-memory bound). Working memory holds
|
|
151
|
+
about four items reliably and up to seven for short-term recall. Each
|
|
152
|
+
slot can hold a *larger familiar unit*, constrained by the user's
|
|
153
|
+
domain knowledge — chunking does not let you pack arbitrary content
|
|
154
|
+
into a single slot. Often misread as a rule about menu length;
|
|
155
|
+
Miller's paper is about chunks. Group related fields with clear
|
|
156
|
+
section headings, dividers, or card containers. A settings page with
|
|
157
|
+
sections "Account / Notifications / Privacy / Billing / Danger zone"
|
|
158
|
+
beats one flat list of 30 toggles.
|
|
159
|
+
- **Working Memory** (Baddeley & Hitch, 1974; lineage to Atkinson &
|
|
160
|
+
Shiffrin, 1968). Items decay in seconds without rehearsal. Recognition
|
|
161
|
+
beats recall: persisting prior context across screens, marking visited
|
|
162
|
+
elements, and surfacing comparison views beats forcing the user to
|
|
163
|
+
memorize. On dashboards specifically: sticky filter chips, last-N
|
|
164
|
+
selections persisted, breadcrumbs that include applied filters.
|
|
165
|
+
- **Serial Position Effect** (Ebbinghaus, *Über das Gedächtnis*, 1885).
|
|
166
|
+
Recall favors the extremes — primacy at the start, recency at the
|
|
167
|
+
end — while middle items fade. Anchor the most important nav items at
|
|
168
|
+
the leftmost and rightmost positions of a horizontal menu; cluster
|
|
169
|
+
utilities in the middle.
|
|
170
|
+
- **Peak-End Rule** (Kahneman, Fredrickson, Schreiber, Redelmeier,
|
|
171
|
+
*Psychological Science*, 1993). Memory of an experience is dominated
|
|
172
|
+
by the emotional peak and the ending, not the average. Stage a
|
|
173
|
+
high-effort celebratory success state; let intermediate steps stay
|
|
174
|
+
calm. Mediocre middles matter less than a strong close. The peak
|
|
175
|
+
belongs at the *end* of a flow, not as arbitrary mid-flow motion —
|
|
176
|
+
`animation-discipline.md` rejects motion that performs (rather than
|
|
177
|
+
confirms) a state change.
|
|
178
|
+
- **Zeigarnik Effect** (Zeigarnik, *Über das Behalten erledigter und
|
|
179
|
+
unerledigter Handlungen*, 1927). Uncompleted tasks create cognitive
|
|
180
|
+
tension that pulls the user back. Visible progress ("3 of 5 steps",
|
|
181
|
+
greyed-out next sections) converts that tension into completion
|
|
182
|
+
pressure. Reserve for genuinely beneficial flows like onboarding;
|
|
183
|
+
applying the same lever to streaks, daily-quest counters, or notification-
|
|
184
|
+
reduction nags is a dark pattern.
|
|
185
|
+
|
|
186
|
+
## Interaction and motor
|
|
187
|
+
|
|
188
|
+
Five laws cover how fast and how accurately users can act on the UI.
|
|
189
|
+
|
|
190
|
+
- **Fitts's Law** (Fitts, *Journal of Experimental Psychology*, 1954).
|
|
191
|
+
Time to acquire a target depends on its distance and size — bigger
|
|
192
|
+
and closer is faster. Spacing between adjacent hit zones matters as
|
|
193
|
+
much as size. Pair with `accessibility-baseline.md`'s 24 × 24 CSS px
|
|
194
|
+
AA touch-target floor; on mobile, place high-frequency controls in
|
|
195
|
+
the natural thumb arc.
|
|
196
|
+
- **Doherty Threshold** (Doherty & Thadani, *IBM Systems Journal*,
|
|
197
|
+
1982). Sub-second feedback keeps users in flow; latency above ~1 s
|
|
198
|
+
breaks attention. The implementable directive lives in
|
|
199
|
+
`state-coverage.md`'s loading-threshold table (no indicator under
|
|
200
|
+
300 ms; skeleton 300 ms – 2 s; labelled spinner 2 – 10 s; determinate
|
|
201
|
+
bar with cancel 10 – 60 s; stop and offer error/retry past 60 s).
|
|
202
|
+
This entry exists to name the underlying law and flag its folklore
|
|
203
|
+
(the 400 ms number doesn't appear in the 1982 paper — see
|
|
204
|
+
`animation-discipline.md` for the 400 ms folklore trace).
|
|
205
|
+
- **Flow** (Csíkszentmihályi, *Beyond Boredom and Anxiety*, 1975). Flow
|
|
206
|
+
sits in the balance between challenge and skill — too hard breeds
|
|
207
|
+
frustration, too easy breeds boredom. Continuous feedback and a clear
|
|
208
|
+
sense of control keep the user inside the state. System friction and
|
|
209
|
+
latency are the fastest ways to break it.
|
|
210
|
+
- **Goal-Gradient Effect** (Hull, *Psychological Review*, 1932; Kivetz,
|
|
211
|
+
Urminsky, Zheng, 2006 for the punch-card replication). Motivation to
|
|
212
|
+
finish rises as the goal gets closer. Multi-step flows render with a
|
|
213
|
+
prominent progress indicator that reflects *real* endowed progress —
|
|
214
|
+
show completed prerequisites when they truly exist (saved profile,
|
|
215
|
+
imported team, prior survey answer). When no real prerequisite
|
|
216
|
+
exists, render the current step honestly as `1 of N` with the
|
|
217
|
+
empty/current-step state clearly marked. Hull's hypothesis is
|
|
218
|
+
descriptive; treating it as license for fabricated progress, streak
|
|
219
|
+
dark patterns, or loyalty-program quota inflation is a misread.
|
|
220
|
+
- **Postel's Law / Robustness Principle** (Postel, RFC 760, 1980). "Be
|
|
221
|
+
liberal in what you accept, conservative in what you send." Take
|
|
222
|
+
input in whatever shape users naturally give it (phone numbers with
|
|
223
|
+
or without dashes, dates in mixed formats, percentages with or
|
|
224
|
+
without `%`); normalize internally to a canonical form; emit one
|
|
225
|
+
consistent format on output. The error-timing and ARIA-wiring half
|
|
226
|
+
lives in `form-validation.md`; the input-tolerance half is the
|
|
227
|
+
directive above. RFC 9413 (Thomson, IAB, 2023; built on the earlier
|
|
228
|
+
`draft-iab-protocol-maintenance`) retracts the maxim for protocol
|
|
229
|
+
design citing security surface; the UX-input application stands.
|
|
230
|
+
|
|
231
|
+
## Behavior and expectation
|
|
232
|
+
|
|
233
|
+
Five laws cover what users predict and how that prediction interacts
|
|
234
|
+
with the rendered surface.
|
|
235
|
+
|
|
236
|
+
- **Jakob's Law** (Nielsen, Nielsen Norman Group, 2000). Users spend
|
|
237
|
+
most of their time on other sites and expect yours to work the same.
|
|
238
|
+
Reuse category convention — nav placement, cart icon, settings gear,
|
|
239
|
+
primary CTA in the upper right of a SaaS landing — so the user spends
|
|
240
|
+
zero cycles relearning interaction grammar. Novelty must earn its
|
|
241
|
+
keep against the convention's ROI; "innovate everywhere" is the
|
|
242
|
+
opposite failure mode.
|
|
243
|
+
- **Mental Model** (Craik, *The Nature of Explanation*, 1943; Norman,
|
|
244
|
+
*POET / The Psychology of Everyday Things*, 1988). Every user
|
|
245
|
+
arrives with a prior built from competitor products and the physical
|
|
246
|
+
world. When the prediction holds, the product feels intuitive; when
|
|
247
|
+
it breaks, friction shows up as confusion, not curiosity. When the
|
|
248
|
+
brief names a reference product, anchor explicitly — capture the
|
|
249
|
+
reference in the prompt and the agent inherits a transferable
|
|
250
|
+
interaction grammar.
|
|
251
|
+
- **Paradox of the Active User** (Carroll & Rosson, in *Interfacing
|
|
252
|
+
Thought: Cognitive Aspects of Human-Computer Interaction*, MIT Press,
|
|
253
|
+
1987, pp. 80–111). Users skip the manual and start using the
|
|
254
|
+
software immediately, even when reading it would speed them up. Bake
|
|
255
|
+
guidance into the surface itself — empty-state coaching, inline
|
|
256
|
+
tooltips, contextual hints — at the action point.
|
|
257
|
+
- **Parkinson's Law** (Parkinson, *The Economist*, 1955). Work expands
|
|
258
|
+
to fill the time allotted to it. Loose interfaces let users dawdle;
|
|
259
|
+
cut friction and pre-fill what you can — autofill, smart defaults,
|
|
260
|
+
saved state — so a checkout finishes faster than the user expected.
|
|
261
|
+
Beating anticipated duration becomes the felt win.
|
|
262
|
+
- **Cognitive Load** (Sweller, *Cognitive Science*, 1988). Total
|
|
263
|
+
mental effort splits into intrinsic (the task's inherent difficulty)
|
|
264
|
+
and extraneous (poor layout, jargon, inconsistent patterns, visual
|
|
265
|
+
noise). Designers can't reduce intrinsic load; they own extraneous
|
|
266
|
+
fully. The visual-restraint directives (single accent in `color.md`,
|
|
267
|
+
three-weight typography rhythm in `typography.md`, P0 anti-default
|
|
268
|
+
list in `anti-ai-slop.md`) already constrain extraneous load; this
|
|
269
|
+
entry exists to name the cognitive cost the sibling rules reduce.
|
|
270
|
+
|
|
271
|
+
## Common mistakes (lint these)
|
|
272
|
+
|
|
273
|
+
Folklore corrections that don't survive a primary-source check, in the
|
|
274
|
+
same vein as the busts already documented in `animation-discipline.md`
|
|
275
|
+
and `accessibility-baseline.md`. The first three are attribution
|
|
276
|
+
corrections (year / venue / institution) the body entries already
|
|
277
|
+
applied — restated here so a reviewer reading just this section sees
|
|
278
|
+
them. The remainder are folklore not addressed in the body.
|
|
279
|
+
|
|
280
|
+
- "Anchoring effect = Tversky & Kahneman 1972." Wrong year. The
|
|
281
|
+
*Science* paper introducing the anchoring framing is 1974; the 1972
|
|
282
|
+
paper is "Subjective probability: A judgment of representativeness"
|
|
283
|
+
(different work).
|
|
284
|
+
- "Tesler's Law was developed at Xerox PARC." Tesler left PARC for
|
|
285
|
+
Apple in 1980; the Conservation-of-Complexity formulation traces to
|
|
286
|
+
his Apple years.
|
|
287
|
+
- "Paradox of the Active User was a CACM article." It's a chapter in
|
|
288
|
+
Carroll's *Interfacing Thought* (MIT Press, 1987), not CACM.
|
|
289
|
+
- "Selective Attention = solved by red dots and badges." Repeated
|
|
290
|
+
attention-grabbers train banner blindness. Reserve the strongest
|
|
291
|
+
contrast for one goal-relevant action per surface.
|
|
292
|
+
- "Fitts's Law alone is enough for touch targets." Fitts gives the
|
|
293
|
+
speed-accuracy tradeoff. WCAG 2.2 SC 2.5.8 sets the AA floor at
|
|
294
|
+
24 × 24 CSS px (`accessibility-baseline.md`); iOS HIG suggests
|
|
295
|
+
44 × 44 pt; Material 3 suggests 48 × 48 dp. Fitts plus the
|
|
296
|
+
platform floor — never just Fitts.
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
# RTL and bidirectional craft rules
|
|
2
|
+
|
|
3
|
+
Universal rules for right-to-left layout and bidirectional text. The
|
|
4
|
+
active `DESIGN.md` decides brand visual language; this file decides
|
|
5
|
+
how that language behaves when the script reads from the right or
|
|
6
|
+
mixes direction within a line.
|
|
7
|
+
|
|
8
|
+
> Grounded in primary sources: Unicode UAX #9 revision 51 (Sept 2025)
|
|
9
|
+
> + Unicode 17.0, CSS Logical Properties Level 1, HTML Living Standard
|
|
10
|
+
> (`dir`, `<bdi>`), Tailwind v4.0/v4.2 changelogs, W3C alreq,
|
|
11
|
+
> Material 3 RTL guidance, Apple HIG internationalization.
|
|
12
|
+
|
|
13
|
+
## Base direction and language
|
|
14
|
+
|
|
15
|
+
Every full-page RTL artifact needs `<html dir="rtl" lang="ar">` (or
|
|
16
|
+
the matching `lang` for Hebrew, Persian, Urdu). The `lang` attribute
|
|
17
|
+
drives font-stack selection, hyphenation, locale-aware speech
|
|
18
|
+
synthesis, and search-engine indexing — `dir` alone isn't enough.
|
|
19
|
+
Three patterns cover the common cases:
|
|
20
|
+
|
|
21
|
+
- **Full-page RTL.** `<html dir="rtl" lang="ar">`. Everything inside inherits.
|
|
22
|
+
- **Mixed-language subtree.** Nest `<section dir="ltr" lang="en">…</section>` (or vice versa) when an embedded block uses a different script. Code samples, English citations, foreign brand names.
|
|
23
|
+
- **User-generated content of unknown direction.** `dir="auto"` on the paragraph. The browser resolves direction from the first strong directional character in the run.
|
|
24
|
+
|
|
25
|
+
Setting `lang` without `dir` is fine **at the document root in a
|
|
26
|
+
default-LTR page** — English doesn't need `dir="ltr"` there because
|
|
27
|
+
the bidi base direction is already LTR. Inside any opposite-direction
|
|
28
|
+
ancestor, `lang` does not reset the inherited base direction, so set
|
|
29
|
+
both `lang` and `dir` on the subtree (`<section dir="ltr" lang="en">`).
|
|
30
|
+
Setting `dir` without `lang` is rarely correct — at minimum drop the
|
|
31
|
+
appropriate ISO-639 tag in.
|
|
32
|
+
|
|
33
|
+
## Logical properties first
|
|
34
|
+
|
|
35
|
+
Hardcoded `left` / `right` is a bug for any layout that might render
|
|
36
|
+
RTL. Use logical properties on the inline axis. Use them on the block
|
|
37
|
+
axis when the writing-mode varies; physical otherwise.
|
|
38
|
+
|
|
39
|
+
| Logical | LTR resolves to | RTL resolves to |
|
|
40
|
+
|---|---|---|
|
|
41
|
+
| `margin-inline-start` / `padding-inline-start` / `inset-inline-start` | left | right |
|
|
42
|
+
| `margin-inline-end` / `padding-inline-end` / `inset-inline-end` | right | left |
|
|
43
|
+
| `border-inline-start` | border-left | border-right |
|
|
44
|
+
| `border-start-start-radius` | border-top-left-radius | border-top-right-radius |
|
|
45
|
+
| `text-align: start` / `text-align: end` | left / right | right / left |
|
|
46
|
+
| `inline-size` / `block-size` | width / height | width / height |
|
|
47
|
+
|
|
48
|
+
Browser support: core inline-axis logical properties are Baseline
|
|
49
|
+
Widely Available (Chrome 87, Safari 14.1, Firefox 66; ≥95% global as
|
|
50
|
+
of 2026-05).
|
|
51
|
+
|
|
52
|
+
**Tailwind v4 changes the answer for new projects.** v4.0 (2025-01-22)
|
|
53
|
+
folded inline-axis logical utilities into core (`ms-*`, `me-*`, `ps-*`,
|
|
54
|
+
`pe-*`, `start-*`, `end-*`). v4.2 (2026-02-18) added the block-axis
|
|
55
|
+
set (`mbs-*`, `mbe-*`, `pbs-*`, `pbe-*`) and renamed the inset
|
|
56
|
+
utilities: `start-*` / `end-*` are deprecated (still work) in favor
|
|
57
|
+
of `inset-s-*` / `inset-e-*`. The `tailwindcss-rtl` plugin is obsolete.
|
|
58
|
+
Don't write `[dir="rtl"]:` overrides for spacing on Tailwind v4.
|
|
59
|
+
|
|
60
|
+
## Bidirectional text
|
|
61
|
+
|
|
62
|
+
UAX #9 rev 51 (Sept 2025) is a version stamp for Unicode 17.0. No
|
|
63
|
+
algorithm change; `max_depth = 125` is permanently locked forward.
|
|
64
|
+
|
|
65
|
+
UAX #9 defines two distinct families of bidi formatting characters
|
|
66
|
+
that solve different problems:
|
|
67
|
+
|
|
68
|
+
- **Isolate controls** (modern, prefer these): U+2066 LRI, U+2067 RLI, U+2068 FSI — opened with these, all closed with U+2069 PDI. An isolated run does not affect, and is not affected by, the surrounding paragraph's bidi resolution. Use FSI when the embedded run's direction is unknown ahead of time.
|
|
69
|
+
- **Embedding / override controls** (legacy): U+202A LRE, U+202B RLE, U+202D LRO, U+202E RLO — all closed with U+202C PDF. These nest within the surrounding paragraph rather than isolating from it; LRO/RLO additionally force a direction onto neutral characters. Newer code should use isolates; touch embeddings only when interoperating with text from systems that emit them.
|
|
70
|
+
|
|
71
|
+
**Use `<bdi>` in HTML; in plain text, pick the isolate that matches
|
|
72
|
+
what you know about the run.** UAX #9 §2.7: *"where available, markup
|
|
73
|
+
should be used instead of the explicit formatting characters."*
|
|
74
|
+
`<bdi>` has been Baseline Widely Available since January 2020.
|
|
75
|
+
Reach for control characters only in plain-text contexts (logs,
|
|
76
|
+
plain-text emails, terminal output). When you do:
|
|
77
|
+
|
|
78
|
+
- **LRI U+2066 + PDI U+2069** for known-LTR runs (English name in an Arabic paragraph, code-style identifiers, phone numbers).
|
|
79
|
+
- **RLI U+2067 + PDI U+2069** for known-RTL runs (Arabic name in an English paragraph).
|
|
80
|
+
- **FSI U+2068 + PDI U+2069** for unknown direction (UGC where the author and language can vary).
|
|
81
|
+
|
|
82
|
+
Don't reach for FSI as the default — it auto-detects from the first
|
|
83
|
+
strong character, which is the wrong choice when you already know
|
|
84
|
+
what direction the run should be.
|
|
85
|
+
|
|
86
|
+
`dir="auto"` on a paragraph or `<bdi>` lets the browser detect
|
|
87
|
+
direction from the first strong directional character. Best for
|
|
88
|
+
user-generated content where direction isn't known at author time.
|
|
89
|
+
|
|
90
|
+
## What mirrors and what doesn't
|
|
91
|
+
|
|
92
|
+
Mirroring isn't universal. The rules below are unanimous across
|
|
93
|
+
Material 3 RTL guidance and Apple HIG internationalization.
|
|
94
|
+
|
|
95
|
+
**Must mirror:**
|
|
96
|
+
|
|
97
|
+
- Directional arrows (back / forward / next / previous), navigation rail position, tab order, calendar-grid weekday order.
|
|
98
|
+
- Slider fill direction and **non-media** progress-bar fill (a download progress bar, a form-completion bar, an upload status). Media scrubbers stay LTR — see the Media row below.
|
|
99
|
+
- Checkbox-and-label position. Label sits to the right in LTR, to the left in RTL.
|
|
100
|
+
- Phone-number and IBAN affordances when the surrounding paragraph is RTL but the value itself is LTR — wrap the value in `<bdi dir="ltr">` (or `<span dir="ltr">`) so the digits don't reflow. Bare `<bdi>` is not enough: phone numbers and account numbers contain mostly weak / neutral characters, so first-strong direction detection is unreliable. Force LTR explicitly.
|
|
101
|
+
|
|
102
|
+
**Must not mirror:**
|
|
103
|
+
|
|
104
|
+
- Clock faces. Clockwise is universal.
|
|
105
|
+
- Circular refresh / sync / reload icons. Same reason.
|
|
106
|
+
- Media playback controls (play / pause / fast-forward / rewind) **and the media scrubber / progress timeline**. They represent tape direction, not reading direction.
|
|
107
|
+
- Charts and graphs. X-axis stays mathematical, not linguistic.
|
|
108
|
+
- Photographs, brand logos, physical-object icons (camera, keyboard, headphones). Identity over direction.
|
|
109
|
+
|
|
110
|
+
**Numerals are not a mirroring decision.** They follow locale, not
|
|
111
|
+
paragraph direction. Arabic-Indic digits carry bidi class **AN**, not
|
|
112
|
+
EN — affects how they sit inside mixed-direction lines but does not
|
|
113
|
+
flip them.
|
|
114
|
+
|
|
115
|
+
**Single live conflict between platforms:** the search icon. SF Symbols
|
|
116
|
+
ships an RTL `magnifyingglass` variant (Apple flips it). Material 3
|
|
117
|
+
says don't flip the magnifying glass (handle stays bottom-right).
|
|
118
|
+
Decide per-platform; don't synthesize a single rule.
|
|
119
|
+
|
|
120
|
+
## Typography rules anchored here
|
|
121
|
+
|
|
122
|
+
Two RTL-coupled typography rules sit in this file because they cause
|
|
123
|
+
breakage at the layout level. The full Arabic / Hebrew typography
|
|
124
|
+
guide (font picks, harakat line-height, OpenType shaping, mixed-script
|
|
125
|
+
fallback chains) belongs in a future `craft/arabic-hebrew-typography.md`.
|
|
126
|
+
|
|
127
|
+
- **Never apply CSS `letter-spacing` to Arabic runs.** alreq treats
|
|
128
|
+
letter-spacing as a boundary concept, not a uniform tracking value.
|
|
129
|
+
Applying tracking breaks the cursive joining the script depends on.
|
|
130
|
+
- **Body type for Arabic runs ~14-18 px with line-height 1.5-1.75** to
|
|
131
|
+
give harakat (diacritics) clearance. Latin defaults are too tight.
|
|
132
|
+
|
|
133
|
+
## Native mobile RTL parity
|
|
134
|
+
|
|
135
|
+
Web RTL handling does not auto-translate to mobile. Each platform has
|
|
136
|
+
its own direction primitive. Skills that emit web-only artifacts can
|
|
137
|
+
skim this section; it's the entry point for skills that ship to
|
|
138
|
+
mobile (mobile-onboarding, mobile-app, etc.).
|
|
139
|
+
|
|
140
|
+
| Platform | Direction primitive | Spacing |
|
|
141
|
+
|---|---|---|
|
|
142
|
+
| iOS UIKit | `semanticContentAttribute = .forceRightToLeft` | `NSDirectionalEdgeInsets` |
|
|
143
|
+
| iOS SwiftUI | `.environment(\.layoutDirection, .rightToLeft)` | `EdgeInsets` with `leading` / `trailing` |
|
|
144
|
+
| Android Compose | `CompositionLocalProvider(LocalLayoutDirection provides LayoutDirection.Rtl)` | `PaddingValues` accepts start / end |
|
|
145
|
+
| Flutter | `Directionality(textDirection: TextDirection.rtl)` | `EdgeInsetsDirectional.fromSTEB(...)` |
|
|
146
|
+
| React Native | `I18nManager.forceRTL(true)` (requires native reload; no `forceLTR` parity, no `react-native-web` support) | `marginStart` / `marginEnd` |
|
|
147
|
+
|
|
148
|
+
The rule across all platforms: prefer the directional primitive over
|
|
149
|
+
the absolute one. `EdgeInsets.left/right` in Flutter, `paddingLeft` /
|
|
150
|
+
`paddingRight` in Android, leading-vs-trailing in iOS — these are bugs
|
|
151
|
+
waiting for an Arabic deployment.
|
|
152
|
+
|
|
153
|
+
## Forms in RTL
|
|
154
|
+
|
|
155
|
+
Form fields commonly mix scripts. Three rules cover most of it.
|
|
156
|
+
|
|
157
|
+
- **`<input dir="auto">`** for any field whose value's direction is uncertain (search boxes, comment fields, free-text inputs). The browser detects from the first strong directional character.
|
|
158
|
+
- **Force LTR on intrinsically-LTR fields** even inside an RTL paragraph: email, URL, phone, IBAN, credit-card. `<input type="email" dir="ltr">`.
|
|
159
|
+
- **Wrap rendered values in `<bdi>`** when displaying mixed-script content (a username inside a paragraph, a model number inside a description). Stops the surrounding direction from rearranging the embedded value. For values whose direction is fixed and weak-character-heavy (phone, IBAN, card number), use `<bdi dir="ltr">` rather than bare `<bdi>` so first-strong detection doesn't misclassify.
|
|
160
|
+
|
|
161
|
+
## Common mistakes (lint these)
|
|
162
|
+
|
|
163
|
+
Mechanically lintable items can be flagged from CSS / source alone.
|
|
164
|
+
Script-aware items need to detect Arabic / Hebrew runs in the
|
|
165
|
+
rendered text and have legitimate exceptions (chart axes, physical
|
|
166
|
+
icons, platform-specific placement).
|
|
167
|
+
|
|
168
|
+
**Mechanically lintable:**
|
|
169
|
+
|
|
170
|
+
- Hardcoded `left` / `right` / `text-align: left` in new CSS — bug for any layout that may render RTL. Exceptions: chart x-axes, physical-object icons, platform-pinned UI like a status-bar clock. Lint with an allow-list rather than blanket banning.
|
|
171
|
+
- "Tailwind v4.2 logical-utility rename is `inline-s-*` / `inline-e-*`" — wrong family. Those are size utilities. The inset rename is `inset-s-*` / `inset-e-*`.
|
|
172
|
+
- "WebKit doesn't support U+2066-U+2069" — wrong, they're interoperable across modern browsers. The "still missing" claim traces to a stale 2015 W3C test snapshot.
|
|
173
|
+
- Setting `dir="rtl"` without `lang="ar"` (or matching). Lint together; `dir` alone misses the font-stack and locale path.
|
|
174
|
+
- Flutter `EdgeInsets.left/right` in code that needs to render RTL. Use `EdgeInsetsDirectional.start/end`.
|
|
175
|
+
|
|
176
|
+
**Needs script detection (will false-positive without it):**
|
|
177
|
+
|
|
178
|
+
- "Use `text-justify: kashida` for Arabic" — no browser implements it. CSS `text-align: justify` adds inter-word spacing and looks unnatural in Arabic; kashida elongation is the correct form, but it isn't shippable on the web today.
|
|
179
|
+
- Italics on Arabic or Hebrew text. Neither script has an italic tradition.
|
|
180
|
+
- CSS `letter-spacing` applied to Arabic. Breaks cursive joining (alreq treats it as a boundary concept, not a uniform tracking value).
|
|
181
|
+
- Lorem Ipsum used for RTL prototyping. Arabic word lengths, connection behaviors, and vertical extents differ; use real Arabic / Hebrew text.
|
|
182
|
+
|
|
183
|
+
**HTML semantics:**
|
|
184
|
+
|
|
185
|
+
- Reaching for CSS bidi controls (`unicode-bidi: isolate` / `plaintext` / `embed`) for inline runs when `<bdi>` or a `dir`-bearing element does the job. Prefer semantic isolation in HTML for inline content; `unicode-bidi: plaintext` operates on a different surface (it changes how base direction is determined for each plaintext paragraph in a block) and should only be used when that block-level paragraph behavior is explicitly required and tested. The two are not drop-in equivalents — don't lint one as a replacement for the other.
|
|
186
|
+
- Bare `<bdi>` around phone / IBAN / card numbers in an RTL paragraph. First-strong detection on weak/neutral characters is unreliable; force `dir="ltr"` explicitly.
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# State coverage craft rules
|
|
2
|
+
|
|
3
|
+
Universal rules for what every interactive surface must render. The active
|
|
4
|
+
`DESIGN.md` decides how each state looks; this file decides which states must
|
|
5
|
+
exist and what they must contain. The single most reliable AI-design failure
|
|
6
|
+
is shipping only the populated state.
|
|
7
|
+
|
|
8
|
+
> Distilled from WCAG 2.2, NN/g, Material Design 3, Apple HIG, and Baymard
|
|
9
|
+
> Institute checkout research.
|
|
10
|
+
|
|
11
|
+
## The five required states
|
|
12
|
+
|
|
13
|
+
Every surface that fetches, transforms, or accepts data must render all five.
|
|
14
|
+
|
|
15
|
+
| State | Triggered when | Must contain |
|
|
16
|
+
|---|---|---|
|
|
17
|
+
| **Loading** | Data is in flight | Skeleton, spinner, or shell — plus a 15 s "taking longer than expected" fallback |
|
|
18
|
+
| **Empty** | No records yet, or query returned nothing | Headline, plain explanation, primary CTA |
|
|
19
|
+
| **Error** | Fetch failed, server failure, validation rejection | Plain-language cause, recovery action, preserved user input |
|
|
20
|
+
| **Populated** | Data present, primary case | The state the design was actually drawn for |
|
|
21
|
+
| **Edge** | Extreme volume, long strings, missing optional fields, RTL or long-word content, partial network | Layout that does not break |
|
|
22
|
+
|
|
23
|
+
Render-and-screenshot test: every list, table, card, form, and panel in the
|
|
24
|
+
artifact has all five. Missing states are the most common silent failure of
|
|
25
|
+
AI-generated UI.
|
|
26
|
+
|
|
27
|
+
**Test matrix.** Concrete edge scenarios the surface must survive:
|
|
28
|
+
|
|
29
|
+
| Skill type | Edge scenario |
|
|
30
|
+
|---|---|
|
|
31
|
+
| Dashboard / table | 10,000+ rows, all numeric columns, sort + filter applied |
|
|
32
|
+
| Mobile card / list | 200-char title, missing avatar, missing secondary CTA |
|
|
33
|
+
| Form | All optional fields empty, all required fields at max length |
|
|
34
|
+
| Search results | Single-character query, query with only special chars, 1,000+ result count |
|
|
35
|
+
| Detail view | Missing all optional metadata, RTL primary content with LTR embeds |
|
|
36
|
+
|
|
37
|
+
## Form-specific states
|
|
38
|
+
|
|
39
|
+
Forms add three states on top of the five.
|
|
40
|
+
|
|
41
|
+
| State | Triggered when | Behavior |
|
|
42
|
+
|---|---|---|
|
|
43
|
+
| **Untouched** | Field has not yet had focus | Default styling; no validation messages |
|
|
44
|
+
| **Dirty (valid)** | User typed and field passes validation | Persistent helper text remains; no success-coloring |
|
|
45
|
+
| **Submitted-pending** | Submit clicked, awaiting server | Submit button enters loading state; fields lock against re-submission |
|
|
46
|
+
|
|
47
|
+
Validation timing: validate **on blur**, not on first keystroke. For password
|
|
48
|
+
and similar live fields, validate on each keystroke *only after the first
|
|
49
|
+
blur*. Remove the error message the instant input becomes valid.
|
|
50
|
+
|
|
51
|
+
## Empty state composition
|
|
52
|
+
|
|
53
|
+
Empty is not the absence of state. It is its own state with a job.
|
|
54
|
+
|
|
55
|
+
- **First-use empty** — illustration + headline + value sentence + primary CTA. The empty is the onboarding moment.
|
|
56
|
+
- **No-results empty** — echo the query, suggest alternatives, never leave a true blank.
|
|
57
|
+
- **Cleared empty** — celebratory phrasing, optional next-action.
|
|
58
|
+
- **Error-as-empty** — never. An error is its own state with recovery information; do not collapse error into empty.
|
|
59
|
+
|
|
60
|
+
**Server-driven vs client-driven.** When a search or query API can return fallback content in the empty payload (suggestions, related categories, popular results), prefer that over a client-side echo. Algolia, Elastic, and most modern search backends support this — the server has more context for what "no results, but maybe try X" should mean.
|
|
61
|
+
|
|
62
|
+
## Error state composition
|
|
63
|
+
|
|
64
|
+
Every error must answer three questions, in this order:
|
|
65
|
+
|
|
66
|
+
1. **What happened.** "Your card was declined." Not "Something went wrong."
|
|
67
|
+
2. **Why, if knowable.** "Insufficient funds." Or "Network unreachable — check your connection."
|
|
68
|
+
3. **What the user can do.** A retry button, an alternative path, or a support link.
|
|
69
|
+
|
|
70
|
+
Preserve user input across the error. The form must not clear on submit
|
|
71
|
+
failure.
|
|
72
|
+
|
|
73
|
+
Severity tiers:
|
|
74
|
+
|
|
75
|
+
- **Field-level** — red border, inline message, focus moves to the field.
|
|
76
|
+
- **Form-level** — error summary banner at top + per-field markers.
|
|
77
|
+
- **Section-level** — inline panel with retry, surrounding sections still functional.
|
|
78
|
+
- **Page-level** — full error state with illustration and recovery CTA.
|
|
79
|
+
- **App-level** — persistent banner or modal for critical loss-of-functionality.
|
|
80
|
+
|
|
81
|
+
Match severity to surface scope. A field validation failure does not warrant
|
|
82
|
+
a page-level error.
|
|
83
|
+
|
|
84
|
+
**Retry discipline.** A retry surface is not a button alone. It has timing rules:
|
|
85
|
+
|
|
86
|
+
- First retry fires immediately on user click.
|
|
87
|
+
- Second and third retries use exponential backoff: 2 s, 4 s, 8 s max.
|
|
88
|
+
- After 3 failed retries, replace "Retry" with "Contact support" plus a copyable error ID. The user has done their job; the system now needs a human.
|
|
89
|
+
- Show "Last attempted: Xs ago" on the error surface after the first retry, so the user knows how stale the failure is.
|
|
90
|
+
|
|
91
|
+
## Loading state thresholds
|
|
92
|
+
|
|
93
|
+
Pick the indicator by expected duration, not by what's available in the
|
|
94
|
+
component library.
|
|
95
|
+
|
|
96
|
+
| Duration | Indicator |
|
|
97
|
+
|---|---|
|
|
98
|
+
| 0–300 ms | None. Render synchronously; users perceive no delay. |
|
|
99
|
+
| 300 ms – 2 s | Subtle spinner or skeleton. |
|
|
100
|
+
| 2 – 10 s | Skeleton matched to expected layout, or labelled spinner ("Loading payments…"). |
|
|
101
|
+
| 10 – 30 s | Determinate progress bar with cancel option. |
|
|
102
|
+
| 30 – 60 s | Progress bar with explicit cancel affordance. The "taking longer than expected" notice already appeared at 15 s; do not repeat it. |
|
|
103
|
+
| 60 s+ | Stop animation. Show error with retry, cancel, or continue. |
|
|
104
|
+
|
|
105
|
+
Never leave a spinner running indefinitely. Start a timeout on every request.
|
|
106
|
+
|
|
107
|
+
## ARIA and focus rules
|
|
108
|
+
|
|
109
|
+
State changes must be announced and focused correctly.
|
|
110
|
+
|
|
111
|
+
| Change | ARIA | Focus action |
|
|
112
|
+
|---|---|---|
|
|
113
|
+
| Inline error on submit | `role="alert"` on the message | Move focus to first error field |
|
|
114
|
+
| Toast / non-urgent confirmation | `role="status"` (polite live region) | Do not move focus |
|
|
115
|
+
| Critical error or destructive confirmation | `role="alertdialog"` (assertive) | Move focus to dialog |
|
|
116
|
+
| Loading begins | `role="status"` announcement ("Loading…") | Do not move focus to spinner |
|
|
117
|
+
| Loading ends, content appears | — | Move focus to loaded content if action was user-initiated |
|
|
118
|
+
|
|
119
|
+
Live region containers must exist in the DOM before content is injected.
|
|
120
|
+
Adding `aria-live` simultaneously with content does not trigger an
|
|
121
|
+
announcement.
|
|
122
|
+
|
|
123
|
+
## Common mistakes (lint these)
|
|
124
|
+
|
|
125
|
+
- Surface renders only the populated state; loading, empty, error, and edge are absent.
|
|
126
|
+
- Empty state is a literal blank or "No data" text with no headline, explanation, or action.
|
|
127
|
+
- Error message reads "Something went wrong" with no cause or recovery.
|
|
128
|
+
- Spinner with no timeout; runs indefinitely on slow or failed requests.
|
|
129
|
+
- Submit clears form fields on validation failure, forcing re-entry.
|
|
130
|
+
- Inline validation fires on first keystroke instead of on blur.
|
|
131
|
+
- Full-page loading replaces the chrome when only one section is fetching.
|
|
132
|
+
- Toast appears at a different screen position than previous toasts in the same artifact.
|
|
133
|
+
- Color alone conveys error state — no icon, no text label.
|
|
134
|
+
- Auto-dismissing toast cannot be paused on hover or focus (WCAG SC 2.2.1).
|